{"_id":"@a11y-oracle/core-engine","_rev":"10-0e06a04db5e0ccdcfff473e8edaf8c28","name":"@a11y-oracle/core-engine","dist-tags":{"latest":"1.3.2"},"versions":{"1.0.0":{"name":"@a11y-oracle/core-engine","version":"1.0.0","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.0.0","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"040b7f663a47b715ee89f00c361675ccc9912151","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.0.0.tgz","fileCount":20,"integrity":"sha512-1rIDyBvh+9GrxTzBlVntKZybrf3NW77b6yqDnuts7tS2DJcGuOUlAjMBBUXd87vo3oFk2w5zPsRhmKAmccP7qw==","signatures":[{"sig":"MEQCIDh9mW6hzwOuJ43qcYNKAAXPjy3q//BnizDRhFwkhudKAiAvOSxU1QO4jeR3OOEYsRZ3TP5pl7TXm/8CvXo6XQzQBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"04ad8c1a2a9a6335892d5c992fcfa209e6a7bb6f","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.0.0","@a11y-oracle/focus-analyzer":"1.0.0","@a11y-oracle/keyboard-engine":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.0.0_1772652306919_0.18392690042593207","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@a11y-oracle/core-engine","version":"1.1.0","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.1.0","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"18b5b11e3add031a4705983ac7b839a1c4eb57bd","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.1.0.tgz","fileCount":20,"integrity":"sha512-HA9FDh/9rFn9B7k2JWj4CZ5bkI2+jEPXZPlE2S72NPZ9yFnEuXYJgA5xtKq0LlBt9j3tgdsxCxJdIC0FxLr6lw==","signatures":[{"sig":"MEQCICZM9WqfcKFRxZpxzIyse1rLWlcv97hGHpPaAFoPH9X4AiAjTkkgQ4s/Ftso9eVuUwEe7NhiiNlqHEGTjkl//TF4vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"47a95777878b177bbe3fc88cb760a2b295296555","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.1.0","@a11y-oracle/focus-analyzer":"1.1.0","@a11y-oracle/keyboard-engine":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.1.0_1772686077351_0.8623970932457121","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@a11y-oracle/core-engine","version":"1.1.1","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.1.1","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"10b5b6b8e8f337fc20032e9c66f23362250743fe","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.1.1.tgz","fileCount":20,"integrity":"sha512-Af5ht8wbC0AJlcI+Wzz05uriAJBb6oHExFOAlllM0WT1JTcv7Y2GH1+Ha4r+QFzPv2HEG0RULDi1XbW7FhwLWg==","signatures":[{"sig":"MEUCIQDo46t2n8LrVNuO6lNOqD1pECEhvpDqb8pi5OCbZOEncgIgeK+xPWpni1wU5XHsfsXeC0Qy2DREIUu62qMnU8VboXM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"555a54f42e89930cf78efd3b4d47055f8a9ca62e","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.1.1","@a11y-oracle/focus-analyzer":"1.1.1","@a11y-oracle/keyboard-engine":"1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.1.1_1772690061692_0.6695834031181915","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@a11y-oracle/core-engine","version":"1.1.2","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.1.2","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"e6b673c59fb8bc35e842262b2e9ff423164df0df","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.1.2.tgz","fileCount":20,"integrity":"sha512-yLYmkiiKwW4rVYE/ESh7uzAkebW8BF0Z63j33/7Vx2hbQ7E9FWqeQwW/tbjpuBFditEPpG/Mxquy6FnLi2G+sg==","signatures":[{"sig":"MEUCIQCk2fnj2xFvAmrVG+l3pYT5PyMJovLmy09SYY/IJjn/zwIgP7RQokd1UeRyl11ENK4bQafGZDc8wr0bdCOCot6bPl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0e3e6b7fb933fe4ec494e85abe5c056eff06eaef","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.1.2","@a11y-oracle/focus-analyzer":"1.1.2","@a11y-oracle/keyboard-engine":"1.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.1.2_1772725935162_0.8725213499694293","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@a11y-oracle/core-engine","version":"1.1.3","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.1.3","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"d6dff54d7aec7a7aa6d855748b7f6ef4d33c5d8b","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.1.3.tgz","fileCount":20,"integrity":"sha512-YJXI0AT9UY8UL4L4S0fakJnhMmAxDwfLub1ykB8tnBHDrAVaeARv+jNKpaM8ColIACqhR/VBNtzkggP4GV67zg==","signatures":[{"sig":"MEUCIQDtfBLFbQ3OyodgrwMuuKCQ3ho/vquuz47r2vSsYJjk3AIgbgMvSTaqcstdFB4/m9NoH5XAmyannyBJgFxZYsXtsig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"3fb17cb54b310cb99259d6b25de170f2a09c22f9","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.1.3","@a11y-oracle/focus-analyzer":"1.1.3","@a11y-oracle/keyboard-engine":"1.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.1.3_1772729083568_0.44452622467314895","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@a11y-oracle/core-engine","version":"1.1.4","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.1.4","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"fdde87f1cf38b5591daac6d653a2cf83a139a8b9","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.1.4.tgz","fileCount":20,"integrity":"sha512-MmSJ5gn/63s4XmtzWQixmmcmjV7SNyiYtpGMTZZ/4D0ciC14947WhkQQHfT6qgUVS6PfqL4JN13QHV1jPjVvRQ==","signatures":[{"sig":"MEQCIAaMSJCpwfI04wnVYO34CkvfpAvnOZE84UBMv45NVMFKAiB1G44nSotGFZ3HgeW+phlx/t6USvimiGsQGNofw8ZtCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2e2f62c8fd8a54c1bb0f9b709647ff4fe8557c27","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.1.4","@a11y-oracle/focus-analyzer":"1.1.4","@a11y-oracle/keyboard-engine":"1.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.1.4_1772745609846_0.28205861598645865","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@a11y-oracle/core-engine","version":"1.2.0","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.2.0","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"9f1a785dea6d82487b3f21795abaca7f2e20bfae","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.2.0.tgz","fileCount":20,"integrity":"sha512-KddJva+7mmunhEQGXOM4Tzv94AGmVDi64qLJ6yD4VnUPTAYp5bPJzYk9iZBnWBX/sjvtHwFl1G+jIK0EIchH4A==","signatures":[{"sig":"MEUCIQCTfZmZT0iCEkQc3/VPyNjoi4Tv3grz2D3zqnojVQJlNAIgJ0rdYapYCN8GrPPX8oslM3hmeK0mcc2NpebDF6k5db0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"43adb7fc2be7245cbb136e07b24200d68cba1744","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.2.0","@a11y-oracle/focus-analyzer":"1.2.0","@a11y-oracle/keyboard-engine":"1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.2.0_1772753722265_0.2866761133962423","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@a11y-oracle/core-engine","version":"1.3.0","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.3.0","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"6c63c84d7ba07ebba0e21fccb3e39fd98e747ce9","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.3.0.tgz","fileCount":20,"integrity":"sha512-n6LPZ3sEyBmplvVyMjTaZEoJiSuPHwuOtNtIX7JONrUPjTj9fn/DWKdw9QH/tI/soXe/haRTuhDT+wGd1cQo7w==","signatures":[{"sig":"MEQCIE+ajYc3vHYDIZ8G0RNulvONxzIGpfPWRVh7csfzJr84AiAqrp4J6IwlhP88tX0wgNS1rzeCWje22hVmnFzBpfUfdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"4295fc44cee8a657989d667355836590231cf754","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.3.0","@a11y-oracle/focus-analyzer":"1.3.0","@a11y-oracle/keyboard-engine":"1.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.3.0_1772769825220_0.15737305980283178","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@a11y-oracle/core-engine","version":"1.3.1","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"author":{"name":"a11y-oracle"},"license":"MIT","_id":"@a11y-oracle/core-engine@1.3.1","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"dist":{"shasum":"72ead7b89a7376e9566b1a37997919d81077f934","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.3.1.tgz","fileCount":20,"integrity":"sha512-vmHK1aSrTVkVL1Q1YAnuEqPX56G6efuUTpWndwfxIu2xNqpkfe2WGNz65OT22JjdNmGMj0egW//d7RnrYcs3RQ==","signatures":[{"sig":"MEYCIQD3GFejTt3YqiOG83W9YavHoYtE3vBhiMBJ+uz0YjmNnQIhAP9iLL4hQZTT0FiRVw6oEH1oFnua6ZIVWsL+HbkxjkuR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1cdf8cb41af6392ea299d37eed4bf536788a802f","_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"repository":{"url":"git+https://github.com/a11y-oracle/a11y-oracle.git","type":"git","directory":"libs/core-engine"},"_npmVersion":"11.6.0","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","directories":{},"_nodeVersion":"24.10.0","dependencies":{"tslib":"^2.3.0","devtools-protocol":"^0.0.1591961","@a11y-oracle/cdp-types":"1.3.1","@a11y-oracle/focus-analyzer":"1.3.1","@a11y-oracle/keyboard-engine":"1.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core-engine_1.3.1_1773187238422_0.926255750427809","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@a11y-oracle/core-engine","version":"1.3.2","description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","license":"MIT","author":{"name":"a11y-oracle"},"repository":{"type":"git","url":"git+https://github.com/a11y-oracle/a11y-oracle.git","directory":"libs/core-engine"},"bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"publishConfig":{"access":"public"},"type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{"./package.json":"./package.json",".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"dependencies":{"@a11y-oracle/cdp-types":"1.3.2","@a11y-oracle/keyboard-engine":"1.3.2","@a11y-oracle/focus-analyzer":"1.3.2","devtools-protocol":"^0.0.1591961","tslib":"^2.3.0"},"_id":"@a11y-oracle/core-engine@1.3.2","gitHead":"58b2a6611a5150328c96c3d8695e0b14bc5d2d27","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-KQtu4rBjWu26Z693W21UwiFRa+eYZIN+c9RX8jj8cahoKbPR8TThFjd7aKZfslNn9jxuk5Py7tSKMx7lOuhBTA==","shasum":"5bc33891160ecfae65a6eba0d1aa85b40ff4e8e9","tarball":"https://registry.npmjs.org/@a11y-oracle/core-engine/-/core-engine-1.3.2.tgz","fileCount":20,"unpackedSize":64124,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC5/bWx4eBh7t3roGyJG19A2OrSyOigHVZAtubAA/fEcAiEAgiqn/yztj92N7rhrICrmKNr1Pk5Gbg1IhteBX8fYMPs="}]},"_npmUser":{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"},"directories":{},"maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core-engine_1.3.2_1773294439761_0.3938294470613346"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-04T19:25:06.806Z","modified":"2026-03-12T05:47:20.047Z","1.0.0":"2026-03-04T19:25:07.061Z","1.1.0":"2026-03-05T04:47:57.509Z","1.1.1":"2026-03-05T05:54:21.830Z","1.1.2":"2026-03-05T15:52:15.310Z","1.1.3":"2026-03-05T16:44:43.712Z","1.1.4":"2026-03-05T21:20:10.041Z","1.2.0":"2026-03-05T23:35:22.408Z","1.3.0":"2026-03-06T04:03:45.365Z","1.3.1":"2026-03-11T00:00:38.562Z","1.3.2":"2026-03-12T05:47:19.906Z"},"bugs":{"url":"https://github.com/a11y-oracle/a11y-oracle/issues"},"author":{"name":"a11y-oracle"},"license":"MIT","homepage":"https://github.com/a11y-oracle/a11y-oracle/tree/main/libs/core-engine","keywords":["accessibility","a11y","screen-reader","speech","wcag","aria","cdp","testing"],"repository":{"type":"git","url":"git+https://github.com/a11y-oracle/a11y-oracle.git","directory":"libs/core-engine"},"description":"Framework-agnostic accessibility speech engine and unified A11yOrchestrator via Chrome DevTools Protocol","maintainers":[{"name":"pjlamb12","email":"preston.j.lamb@gmail.com"}],"readme":"# @a11y-oracle/core-engine\n\nFramework-agnostic accessibility engine for A11y-Oracle. Provides two main APIs:\n\n1. **`SpeechEngine`** — Reads the browser's Accessibility Tree via CDP and generates standardized speech output.\n2. **`A11yOrchestrator`** — Unified orchestrator that combines speech, keyboard dispatch, and focus indicator analysis into a single `pressKey()` call.\n\nThis package is the foundation that the Playwright and Cypress plugins build on. You can also use it directly with any CDP-compatible client.\n\n## Installation\n\n```bash\nnpm install @a11y-oracle/core-engine\n```\n\n## Usage\n\n### SpeechEngine (Speech Only)\n\nThe speech engine operates through a `CDPSessionLike` interface, which any CDP client can satisfy:\n\n```typescript\nimport { SpeechEngine } from '@a11y-oracle/core-engine';\n\n// Works with Playwright's CDPSession\nconst cdpSession = await page.context().newCDPSession(page);\nconst engine = new SpeechEngine(cdpSession);\nawait engine.enable();\n\n// Get speech for the currently focused element\nconst result = await engine.getSpeech();\nconsole.log(result?.speech); // \"Products, button, collapsed\"\n\n// Get speech for every visible element\nconst all = await engine.getFullTreeSpeech();\nconst nav = all.find(r => r.speech.includes('navigation landmark'));\n\n// Clean up\nawait engine.disable();\n```\n\n### A11yOrchestrator (Unified State)\n\nThe orchestrator coordinates the speech engine, keyboard engine, and focus analyzer:\n\n```typescript\nimport { A11yOrchestrator } from '@a11y-oracle/core-engine';\n\nconst cdpSession = await page.context().newCDPSession(page);\nconst orchestrator = new A11yOrchestrator(cdpSession);\nawait orchestrator.enable();\n\n// Press a key and get unified state\nconst state = await orchestrator.pressKey('Tab');\nconsole.log(state.speech);                       // \"Products, button, collapsed\"\nconsole.log(state.focusedElement?.tag);           // \"BUTTON\"\nconsole.log(state.focusIndicator.meetsWCAG_AA);  // true\n\n// Get state without pressing a key\nconst current = await orchestrator.getState();\n\n// Tab order extraction\nconst report = await orchestrator.traverseTabOrder();\nconsole.log(report.totalCount);  // 12\n\n// Keyboard trap detection (WCAG 2.1.2)\nconst result = await orchestrator.traverseSubTree('#modal', 20);\nconsole.log(result.isTrapped);  // false\n\nawait orchestrator.disable();\n```\n\n### Configuration Options\n\n```typescript\nconst engine = new SpeechEngine(cdpSession, {\n  // Include \"landmark\" suffix on landmark roles (default: true)\n  // true:  \"Main, navigation landmark\"\n  // false: \"Main, navigation\"\n  includeLandmarks: true,\n\n  // Include accessible descriptions in output (default: false)\n  // true:  \"Submit, button, Submits the form\"\n  // false: \"Submit, button\"\n  includeDescription: false,\n});\n\nconst orchestrator = new A11yOrchestrator(cdpSession, {\n  // All SpeechEngine options, plus:\n\n  // Milliseconds to wait after key press for focus/CSS to settle (default: 50)\n  focusSettleMs: 50,\n});\n```\n\n## API Reference\n\n### `SpeechEngine`\n\nThe speech engine. All methods are async and operate through the CDP session.\n\n#### `constructor(cdp: CDPSessionLike, options?: SpeechEngineOptions)`\n\nCreate a new engine instance.\n\n- `cdp` — Any object implementing the `CDPSessionLike` interface.\n- `options.includeLandmarks` — Append \"landmark\" to landmark roles. Default `true`.\n- `options.includeDescription` — Include `aria-describedby` text. Default `false`.\n\n#### `enable(): Promise<void>`\n\nEnable the CDP Accessibility domain. Must be called before any other method.\n\n#### `disable(): Promise<void>`\n\nDisable the CDP Accessibility domain. Call when done to free browser resources.\n\n#### `getSpeech(): Promise<SpeechResult | null>`\n\nGet the speech output for the currently focused element.\n\nReturns `null` if no element has focus or the focused element is ignored (e.g., `role=\"presentation\"`).\n\n```typescript\nconst result = await engine.getSpeech();\nif (result) {\n  console.log(result.speech);  // \"Products, button, collapsed\"\n  console.log(result.name);    // \"Products\"\n  console.log(result.role);    // \"button\"\n  console.log(result.states);  // [\"collapsed\"]\n  console.log(result.rawNode); // Full CDP AXNode object\n}\n```\n\n#### `getFullTreeSpeech(): Promise<SpeechResult[]>`\n\nGet speech for all non-ignored, non-silent nodes in the accessibility tree. Useful for asserting on landmarks, headings, or structural elements that don't have focus.\n\n```typescript\nconst all = await engine.getFullTreeSpeech();\nconst headings = all.filter(r => r.role.includes('heading'));\nconst landmarks = all.filter(r => r.role.includes('landmark'));\n```\n\n#### `computeSpeech(node: AXNode): SpeechResult | null`\n\nCompute speech for a single AXNode. Returns `null` for ignored or silent nodes.\n\n#### `findFocusedNode(nodes: AXNode[]): AXNode | null`\n\nFind the most specific focused node in the flat AXTree array. When multiple nodes report `focused: true` (e.g., `RootWebArea` and a `menuitem`), the deepest node is returned.\n\n### `A11yOrchestrator`\n\nUnified orchestrator coordinating three sub-engines:\n\n| Engine | Responsibility |\n|--------|---------------|\n| `SpeechEngine` | AXTree to speech string |\n| `KeyboardEngine` | CDP key dispatch + `document.activeElement` |\n| `FocusAnalyzer` | CSS focus indicator + tab order + trap detection |\n\n#### `constructor(cdp: CDPSessionLike, options?: A11yOrchestratorOptions)`\n\nCreate a new orchestrator.\n\n- `cdp` — Any CDP-compatible session.\n- `options.includeLandmarks` — Append \"landmark\" to landmark roles. Default `true`.\n- `options.includeDescription` — Include description text. Default `false`.\n- `options.focusSettleMs` — Delay after key press for focus/CSS to settle. Default `50`.\n\n#### `enable(): Promise<void>`\n\nEnable the CDP Accessibility domain. Must be called before other methods.\n\n#### `disable(): Promise<void>`\n\nDisable the CDP Accessibility domain.\n\n#### `pressKey(key: string, modifiers?: ModifierKeys): Promise<A11yState>`\n\nDispatch a key press and return the unified accessibility state.\n\n1. Sends `keyDown` + `keyUp` via CDP `Input.dispatchKeyEvent`\n2. Waits `focusSettleMs` for CSS transitions and focus events\n3. Collects speech, focused element, and focus indicator in parallel\n\n```typescript\nconst state = await orchestrator.pressKey('Tab');\n// state.speech           → \"Products, button, collapsed\"\n// state.focusedElement   → { tag: 'BUTTON', id: 'products-btn', ... }\n// state.focusIndicator   → { isVisible: true, contrastRatio: 12.5, meetsWCAG_AA: true }\n\n// With modifier keys\nconst prev = await orchestrator.pressKey('Tab', { shift: true });\n```\n\n#### `getState(): Promise<A11yState>`\n\nGet the current unified state without pressing a key. Useful after programmatic focus changes.\n\n```typescript\nawait page.focus('#my-button');\nconst state = await orchestrator.getState();\n```\n\n#### `traverseTabOrder(): Promise<TabOrderReport>`\n\nExtract all tabbable elements in DOM tab order.\n\n```typescript\nconst report = await orchestrator.traverseTabOrder();\nconsole.log(report.totalCount);     // 12\nconsole.log(report.entries[0].tag); // \"A\"\nconsole.log(report.entries[0].id);  // \"home-link\"\n```\n\n#### `traverseSubTree(selector: string, maxTabs?: number): Promise<TraversalResult>`\n\nDetect whether a container traps keyboard focus (WCAG 2.1.2).\n\nFocuses the first tabbable element in the container, presses Tab up to `maxTabs` times (default 50), and checks whether focus ever escapes.\n\n```typescript\nconst result = await orchestrator.traverseSubTree('#modal-container', 20);\nif (result.isTrapped) {\n  console.log('Keyboard trap detected!');\n  console.log(`Focus visited ${result.visitedElements.length} elements`);\n} else {\n  console.log(`Focus escaped to: ${result.escapeElement?.tag}`);\n}\n```\n\n### Types\n\n#### `CDPSessionLike`\n\nThe abstraction boundary between the engine and test frameworks:\n\n```typescript\ninterface CDPSessionLike {\n  send(method: 'Accessibility.enable'): Promise<void>;\n  send(method: 'Accessibility.disable'): Promise<void>;\n  send(\n    method: 'Accessibility.getFullAXTree',\n    params?: { depth?: number; frameId?: string }\n  ): Promise<{ nodes: AXNode[] }>;\n  send(method: string, params?: Record<string, unknown>): Promise<unknown>;\n}\n```\n\nBoth Playwright's `CDPSession` and `chrome-remote-interface` clients satisfy this interface without adapters.\n\n#### `SpeechResult`\n\nReturned by `getSpeech()` and `getFullTreeSpeech()`:\n\n```typescript\ninterface SpeechResult {\n  speech: string;              // \"Products, button, collapsed\"\n  name: string;                // \"Products\"\n  role: string;                // \"button\"\n  states: string[];            // [\"collapsed\"]\n  rawNode: Protocol.Accessibility.AXNode;\n}\n```\n\n#### `A11yState`\n\nReturned by `pressKey()` and `getState()`:\n\n```typescript\ninterface A11yState {\n  speech: string;                          // \"Products, button, collapsed\"\n  speechResult: SpeechResult | null;       // Full speech result with raw AXNode\n  focusedElement: A11yFocusedElement | null; // DOM info\n  focusIndicator: A11yFocusIndicator;      // CSS analysis\n}\n```\n\n#### `A11yFocusedElement`\n\n```typescript\ninterface A11yFocusedElement {\n  tag: string;        // \"BUTTON\"\n  id: string;         // \"submit-btn\"\n  className: string;  // \"btn primary\"\n  textContent: string; // \"Submit\"\n  role: string;       // \"button\"\n  ariaLabel: string;  // \"Submit form\"\n  tabIndex: number;   // 0\n  rect: { x: number; y: number; width: number; height: number };\n}\n```\n\n#### `A11yFocusIndicator`\n\n```typescript\ninterface A11yFocusIndicator {\n  isVisible: boolean;           // true if outline or box-shadow detected\n  contrastRatio: number | null; // null if colors unparseable\n  meetsWCAG_AA: boolean;        // true if visible and contrast >= 3.0\n}\n```\n\n#### `ModifierKeys`\n\n```typescript\ninterface ModifierKeys {\n  shift?: boolean;\n  ctrl?: boolean;\n  alt?: boolean;\n  meta?: boolean;\n}\n```\n\n#### `TabOrderReport`\n\n```typescript\ninterface TabOrderReport {\n  entries: TabOrderEntry[];\n  totalCount: number;\n}\n```\n\n#### `TabOrderEntry`\n\n```typescript\ninterface TabOrderEntry {\n  index: number;     // Position in tab order (0-based)\n  tag: string;       // \"BUTTON\"\n  id: string;        // \"submit-btn\"\n  textContent: string;\n  tabIndex: number;\n  role: string;\n  rect: { x: number; y: number; width: number; height: number };\n}\n```\n\n#### `TraversalResult`\n\n```typescript\ninterface TraversalResult {\n  isTrapped: boolean;                  // true if focus never escaped\n  tabCount: number;                    // Total Tab presses attempted\n  visitedElements: TabOrderEntry[];    // Elements that received focus\n  escapeElement: TabOrderEntry | null; // First element outside container\n}\n```\n\n## Role Mappings\n\nThe `ROLE_TO_SPEECH` record maps 50+ CDP role values to speech strings. Roles are grouped into four categories:\n\n### Interactive Roles\n\n| CDP Role | Speech |\n|----------|--------|\n| `button` | `button` |\n| `link` | `link` |\n| `checkbox` | `checkbox` |\n| `radio` | `radio button` |\n| `textbox` | `edit text` |\n| `combobox` | `combo box` |\n| `slider` | `slider` |\n| `switch` | `switch` |\n| `tab` | `tab` |\n| `menuitem` | `menu item` |\n| `menuitemcheckbox` | `menu item checkbox` |\n| `menuitemradio` | `menu item radio` |\n| `option` | `option` |\n| `searchbox` | `search text` |\n| `spinbutton` | `spin button` |\n\n### Landmark Roles\n\nLandmarks automatically append \"landmark\" when `includeLandmarks` is `true`:\n\n| CDP Role | Speech |\n|----------|--------|\n| `navigation` | `navigation landmark` |\n| `main` | `main landmark` |\n| `banner` | `banner landmark` |\n| `contentinfo` | `content info landmark` |\n| `complementary` | `complementary landmark` |\n| `search` | `search landmark` |\n| `region` | `region landmark` |\n| `form` | `form landmark` |\n\n### Structure Roles\n\n| CDP Role | Speech |\n|----------|--------|\n| `heading` | `heading` |\n| `list` | `list` |\n| `listitem` | `list item` |\n| `img` | `image` |\n| `table` | `table` |\n| `row` | `row` |\n| `cell` | `cell` |\n| `dialog` | `dialog` |\n| `alert` | `alert` |\n| `menu` | `menu` |\n| `menubar` | `menu bar` |\n| `toolbar` | `toolbar` |\n| `tree` | `tree` |\n| `treeitem` | `tree item` |\n| `tablist` | `tab list` |\n| `tabpanel` | `tab panel` |\n| `progressbar` | `progress bar` |\n| `tooltip` | `tooltip` |\n\n### Silent Roles\n\nThese roles produce no speech output:\n\n`generic`, `none`, `presentation`, `StaticText`, `InlineTextBox`, `LineBreak`, `RootWebArea`, `WebArea`, `paragraph`, `DescriptionListDetail`, `DescriptionListTerm`, `DescriptionList`\n\nUnknown roles pass through as-is for forward compatibility with new ARIA roles.\n\n## State Mappings\n\nThe `STATE_MAPPINGS` array defines how boolean ARIA properties translate to spoken strings. States appear in the output in the order listed below:\n\n| CDP Property | `true` | `false` |\n|-------------|--------|---------|\n| `expanded` | `expanded` | `collapsed` |\n| `checked` | `checked` | `not checked` |\n| `selected` | `selected` | *(silent)* |\n| `pressed` | `pressed` | `not pressed` |\n| `disabled` | `dimmed` | *(silent)* |\n| `required` | `required` | *(silent)* |\n| `invalid` | `invalid` | *(silent)* |\n| `readonly` | `read only` | *(silent)* |\n| `multiselectable` | `multi selectable` | *(silent)* |\n\nHeading levels are a special case: `level` property produces `level N` (e.g., `level 2`).\n\nWhen multiple states are present, they are joined in the fixed order above:\n\n```\n\"Submit, button, expanded, required\"\n\"Email, edit text, invalid, required\"\n```\n\n## Exports\n\n```typescript\n// Main classes\nexport { SpeechEngine } from '@a11y-oracle/core-engine';\nexport { A11yOrchestrator } from '@a11y-oracle/core-engine';\n\n// Core types\nexport type {\n  CDPSessionLike,\n  SpeechResult,\n  SpeechEngineOptions,\n  A11yState,\n  A11yFocusedElement,\n  A11yFocusIndicator,\n  A11yOrchestratorOptions,\n} from '@a11y-oracle/core-engine';\n\n// Data (for advanced customization)\nexport { ROLE_TO_SPEECH, LANDMARK_ROLES } from '@a11y-oracle/core-engine';\nexport { STATE_MAPPINGS, extractStates } from '@a11y-oracle/core-engine';\nexport type { StateMapping, AXNodeProperty } from '@a11y-oracle/core-engine';\n\n// Re-exports from sub-engines\nexport type { ModifierKeys, FocusedElementInfo, KeyDefinition } from '@a11y-oracle/core-engine';\nexport { KEY_DEFINITIONS } from '@a11y-oracle/core-engine';\nexport type { FocusIndicator, TabOrderEntry, TabOrderReport, TraversalResult } from '@a11y-oracle/core-engine';\n```\n","readmeFilename":"README.md"}