{"_id":"@bun-win32/uia","_rev":"15-b1928b21961a6fdd7c45bc5c9dd39dff","name":"@bun-win32/uia","dist-tags":{"latest":"1.9.1"},"versions":{"1.0.0":{"name":"@bun-win32/uia","version":"1.0.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.0.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"dist":{"shasum":"1cba628d64f53bb33a6a7a5356016e43a6270996","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.0.0.tgz","fileCount":18,"integrity":"sha512-0WCrlwHOeGLJ3oxC0ZjIOS2T3KHU6QAJusnqkA0WrR/KYMXeQmk4WVCFkdf/xr05zRoO9QsNdgd2nikbNfXhAA==","signatures":[{"sig":"MEUCIBnjLkBCby3JbqBPH9y6HgMk4+oq9LMXyahsxYsJI4zdAiEAhHsOhbHXC3X92kwbQEjx60GHV4z7SFksF2TFzEAEawU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98121},"main":"./index.ts","type":"module","module":"index.ts","shasum":"1cba628d64f53bb33a6a7a5356016e43a6270996","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts"},"private":false,"scripts":{"example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:uia-report":"bun ./example/uia-report.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:automate-calculator":"bun ./example/automate-calculator.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-0WCrlwHOeGLJ3oxC0ZjIOS2T3KHU6QAJusnqkA0WrR/KYMXeQmk4WVCFkdf/xr05zRoO9QsNdgd2nikbNfXhAA==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for Windows desktop apps — query the UI Automation accessibility tree, invoke controls by name, type, and assert, from Bun. Zero native dependencies, no node-gyp, no server.","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.0.0_1781375317489_0.6188232590332334","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bun-win32/uia","version":"1.1.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.1.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"fba9fb34ad3f937b894cd681aa3cabdd4bb3fb3e","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.1.0.tgz","fileCount":30,"integrity":"sha512-NYaVyA8yzeNZvcY8XUhKvWL65q05XD78rAayztShBaCjTQIc6s7Qijo6Pv5wNOskBgm3+hm6Wxv1tGpZLq0lUA==","signatures":[{"sig":"MEUCIH5ZKHb3+hQ89h4uEnS+vAc03xgZX71K2z1jVMDR2RVwAiEA7BBY3+SEcI0FbtIxPQg40LOg3i19AyVLnp3e0BOnLjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179751},"main":"./index.ts","type":"module","module":"index.ts","shasum":"fba9fb34ad3f937b894cd681aa3cabdd4bb3fb3e","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:computer-use":"bun ./example/computer-use.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:automate-calculator":"bun ./example/automate-calculator.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-NYaVyA8yzeNZvcY8XUhKvWL65q05XD78rAayztShBaCjTQIc6s7Qijo6Pv5wNOskBgm3+hm6Wxv1tGpZLq0lUA==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.1.0_1781448813155_0.12060416225577208","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bun-win32/uia","version":"1.2.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.2.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"73798fea598cc7a0c859d1dd673c04e0c4af0cd4","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.2.0.tgz","fileCount":30,"integrity":"sha512-J5iNHVkUDZMlVglQwQgMGdXICZEZI/8pwwBOYVrNwurecmlh1J8WJQtrwvxt5gaGvwhYy8dcN0VMFev6xmm2ig==","signatures":[{"sig":"MEUCIAPDOnO2p2CoV2SCNyn2naqQtFOU3NhFUZhiVKIyiOrEAiEA2bNnLt0t4iX5ZnzkR2q8ifOWgrVlU0SS1g0PtQLnLLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193864},"main":"./index.ts","type":"module","module":"index.ts","shasum":"73798fea598cc7a0c859d1dd673c04e0c4af0cd4","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:computer-use":"bun ./example/computer-use.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:automate-calculator":"bun ./example/automate-calculator.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-J5iNHVkUDZMlVglQwQgMGdXICZEZI/8pwwBOYVrNwurecmlh1J8WJQtrwvxt5gaGvwhYy8dcN0VMFev6xmm2ig==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.2.0_1781459027614_0.23070602609155633","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bun-win32/uia","version":"1.3.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.3.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"d14565cd81743bbf4b751fb9f0714b8f09b5004d","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.3.0.tgz","fileCount":31,"integrity":"sha512-KZQ5DZDO2cfwkDd1NX0Yhm2BFPxqg/H4vzqq1+b3ZCmAjgW0JuX3R0bZjDbBdYjmk50gPHeHzZGgvXpn804hDA==","signatures":[{"sig":"MEYCIQDLQqbA7px2KrJrJhiiXjQYkCcRwndVtoBBqJvFn70B8gIhAOGLFcC6J6fE95zK0FT9nmeg+Wf3KzcHxAgEiaMHMAi5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246908},"main":"./index.ts","type":"module","module":"index.ts","shasum":"d14565cd81743bbf4b751fb9f0714b8f09b5004d","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:computer-use":"bun ./example/computer-use.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:automate-calculator":"bun ./example/automate-calculator.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-KZQ5DZDO2cfwkDd1NX0Yhm2BFPxqg/H4vzqq1+b3ZCmAjgW0JuX3R0bZjDbBdYjmk50gPHeHzZGgvXpn804hDA==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.3.0_1781485342003_0.9969469924574526","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bun-win32/uia","version":"1.4.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.4.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"b195f457923dd01b618f82177dffc3826763398d","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.4.0.tgz","fileCount":33,"integrity":"sha512-uGLFMqREtkDFOPdbXC/4sVvDvlSnTMtOPIuzMRn1CK+ijkmuoGoyea/6XdtCfe8NPIgp/WarlnC74Fpr0bPi8A==","signatures":[{"sig":"MEQCIAFF5/Rs3Fu2rkBbVT/IfgrlS51ViSuGGbUD8TGaKRiRAiBBmXcX5kqaICCAJCGwKGnHuHcJrVf1SpImSxxbU8jpUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335293},"main":"./index.ts","type":"module","module":"index.ts","shasum":"b195f457923dd01b618f82177dffc3826763398d","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-uGLFMqREtkDFOPdbXC/4sVvDvlSnTMtOPIuzMRn1CK+ijkmuoGoyea/6XdtCfe8NPIgp/WarlnC74Fpr0bPi8A==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.4.0_1781524912730_0.08605317182585637","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bun-win32/uia","version":"1.5.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.5.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"311813389b6d17e0788f3b9352e6cf2a99679dc8","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.5.0.tgz","fileCount":33,"integrity":"sha512-yzO338IBlMGXgDVR8TaSbEUdbyBKy5kL8yoyQWoHS+9oEvhN17OIT+weU2vfsvrAyAsw+I+psGNRYceh9mPujQ==","signatures":[{"sig":"MEQCIBDXSol6TnA7TgFZmr1abgrRqk9Yx86M3jmNdZSm6x+1AiA+CIend0u1NuhdYRDE4Zrtd3jI70VaYdSzFgk+wVW48g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388943},"main":"./index.ts","type":"module","module":"index.ts","shasum":"311813389b6d17e0788f3b9352e6cf2a99679dc8","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-yzO338IBlMGXgDVR8TaSbEUdbyBKy5kL8yoyQWoHS+9oEvhN17OIT+weU2vfsvrAyAsw+I+psGNRYceh9mPujQ==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.5.0_1781553474579_0.4208811483380106","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bun-win32/uia","version":"1.6.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.6.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"8024a58d0817a3499778c65706707cbb1ee9e3d6","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.6.0.tgz","fileCount":33,"integrity":"sha512-sDvtYWyuCCjdbJAVBqI4E1+DdR6bTDStPoK6KfeF8CTUo/1NmDSfMUTGs0nzJKKXfnwpuoo+aTj21MUf89jEHw==","signatures":[{"sig":"MEYCIQCRTdEPA4+C8j22NmTS5Hm4OU48MLw0dgUz3qQP/6FJkQIhAOX/amwzpyxuCs5LhjBgXITO4/8diff/photWcBDJUSg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510966},"main":"./index.ts","type":"module","module":"index.ts","shasum":"8024a58d0817a3499778c65706707cbb1ee9e3d6","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-sDvtYWyuCCjdbJAVBqI4E1+DdR6bTDStPoK6KfeF8CTUo/1NmDSfMUTGs0nzJKKXfnwpuoo+aTj21MUf89jEHw==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.6.0_1781628162280_0.4939456467073289","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@bun-win32/uia","version":"1.6.1","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.6.1","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"5d8e41f7da8fcaebd92eb325770e41947ff140c5","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.6.1.tgz","fileCount":33,"integrity":"sha512-Ksi0Lb6AtvHNT2DZlGhUzav4Bqwe915deFAQxnQoqt8mWuZUc1CYq1/GD1IczMi+nYiH4fbyY76a2nLjaAVfGg==","signatures":[{"sig":"MEUCIGkMdn7eveMv7ltBevQgOgtUrED4t49IspO7NhGHlkbVAiEAoDhYtGiyYpUKOEc1A62dKmolFbopfgMUsnMe25TccxU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":511039},"main":"./index.ts","type":"module","module":"index.ts","shasum":"5d8e41f7da8fcaebd92eb325770e41947ff140c5","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-Ksi0Lb6AtvHNT2DZlGhUzav4Bqwe915deFAQxnQoqt8mWuZUc1CYq1/GD1IczMi+nYiH4fbyY76a2nLjaAVfGg==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.6.1_1781630973579_0.9512154927057999","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@bun-win32/uia","version":"1.6.2","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.6.2","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"49697494d68a4726d5fa025a8fe874bd637b5b3f","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.6.2.tgz","fileCount":33,"integrity":"sha512-G+GOiJn6Y27VeUii0w89TDf55Hul8mjicGRLFWoYZT1hdVwJTbsZX1249Npexf/aUbbaP/9hgoOHaRWJ2dqXtQ==","signatures":[{"sig":"MEUCIHLuY3cCLFndimrOGjol9iMiFjq/KdkDT6MB/SnBlX/7AiEAnEi8zYxBuDUtHQ5D7d5Hgs6EkamTLa9eQiJaLhM5H80=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519768},"main":"./index.ts","type":"module","module":"index.ts","shasum":"49697494d68a4726d5fa025a8fe874bd637b5b3f","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-G+GOiJn6Y27VeUii0w89TDf55Hul8mjicGRLFWoYZT1hdVwJTbsZX1249Npexf/aUbbaP/9hgoOHaRWJ2dqXtQ==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.6.2_1781646506484_0.4605725591786738","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@bun-win32/uia","version":"1.6.3","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.6.3","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"927b1fde49333874388df61eacbfc1e44ebefec4","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.6.3.tgz","fileCount":33,"integrity":"sha512-kc5Qs4EMRAJ7aykSwceBvI/b3GD1ysYul+cwX+rDR3ISZ7Znrdw9t54kU1uwN0+c1Y7pV9p/VnRc54cyYGHGgA==","signatures":[{"sig":"MEYCIQDdFy5HmnGbU7Wcjj/3LxXwTWtFLd6hdZImzWJgJkiliwIhAIYwL4/At9oQpxtO/jqhWbhg28Uh2I6FzLEqiWjRUO5P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":525997},"main":"./index.ts","type":"module","module":"index.ts","shasum":"927b1fde49333874388df61eacbfc1e44ebefec4","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-kc5Qs4EMRAJ7aykSwceBvI/b3GD1ysYul+cwX+rDR3ISZ7Znrdw9t54kU1uwN0+c1Y7pV9p/VnRc54cyYGHGgA==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.6.3_1781661033971_0.5600620137597685","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@bun-win32/uia","version":"1.6.4","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.6.4","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"452e99d4316910e88197f9c1e1bff22c6fca83e5","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.6.4.tgz","fileCount":33,"integrity":"sha512-C8kca9JunNmFSKZvii1XNQyhZhCRxzPkOMy4Rap5G5tMNsqMN/C+rYAMNsvC8VXnygoTnbD3ktjy4i1ayBSamg==","signatures":[{"sig":"MEYCIQCMoepC6Ln/7UbHWyxTKVo1Tp+Bwi0G5A2V5bsvP/23+gIhAJx3qv/qOREMT4weudjGLjRpZKOTw+SGAATXGSjf2uID","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":533022},"main":"./index.ts","type":"module","module":"index.ts","shasum":"452e99d4316910e88197f9c1e1bff22c6fca83e5","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-C8kca9JunNmFSKZvii1XNQyhZhCRxzPkOMy4Rap5G5tMNsqMN/C+rYAMNsvC8VXnygoTnbD3ktjy4i1ayBSamg==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/dwmapi":"1.0.5","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.6.4_1781671936488_0.6777076334401941","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@bun-win32/uia","version":"1.7.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.7.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"40cf9bacb37e3a9f7a156dca25d645e1a9097f6a","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.7.0.tgz","fileCount":35,"integrity":"sha512-725J21dymgwaTRUHAIemOiIoR5NCiWUhsNzrdU5vwYj1pWvG7JQGTvzcBOo6glDvvi2axrrVEg91AH1ROLpuog==","signatures":[{"sig":"MEQCIAKPcKhHFA6FbMJDa6heDYlK/vIOERmny6+E3UmE46z5AiB85JAfB0O6kjq2pPJMYOvj7WsH6K8v25biMUhcxtaN1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":579205},"main":"./index.ts","type":"module","module":"index.ts","shasum":"40cf9bacb37e3a9f7a156dca25d645e1a9097f6a","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:jab-java-act":"bun ./example/jab-java-act.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:jab-java-tree":"bun ./example/jab-java-tree.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:chromium-scroll":"bun ./example/chromium-scroll.integration.test.ts","example:clipboard-image":"bun ./example/clipboard-image.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:virtual-desktop":"bun ./example/virtual-desktop.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-725J21dymgwaTRUHAIemOiIoR5NCiWUhsNzrdU5vwYj1pWvG7JQGTvzcBOo6glDvvi2axrrVEg91AH1ROLpuog==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/dwmapi":"1.0.5","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.7.0_1781710859544_0.6132387613786836","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@bun-win32/uia","version":"1.8.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.8.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"4eefe778f79f6d5ab5caa28e1409f6881c8320af","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.8.0.tgz","fileCount":35,"integrity":"sha512-oBLYnA9FeFUTNtZoj3rqTu9d8FOWTk1hZwC7GaxSGx6ZO9l7UWlVCvRoe14lfcm0KQ1jQ8fQnorXKeRlal8UNw==","signatures":[{"sig":"MEUCIQD6dyYGjYzSdiMfnesGRCkjmaC5TIPmv4UEnYdssN/1uQIgbNU3AI02zb3HuJGREGaG1rngXed4I8/240y618mI3GU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":627971},"main":"./index.ts","type":"module","module":"index.ts","shasum":"4eefe778f79f6d5ab5caa28e1409f6881c8320af","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:perf-gate":"bun ./example/perf-gate.integration.test.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:ocr-window":"bun ./example/ocr-window.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:jab-java-act":"bun ./example/jab-java-act.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:wgc-occluded":"bun ./example/wgc-occluded.integration.test.ts","example:jab-java-tree":"bun ./example/jab-java-tree.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:cold-tree-note":"bun ./example/cold-tree-note.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:wait-for-state":"bun ./example/wait-for-state.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:chromium-scroll":"bun ./example/chromium-scroll.integration.test.ts","example:clipboard-image":"bun ./example/clipboard-image.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:type-cursorfree":"bun ./example/type-cursorfree.integration.test.ts","example:virtual-desktop":"bun ./example/virtual-desktop.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:locate-all-images":"bun ./example/locate-all-images.integration.test.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:filter-has-hastext":"bun ./example/filter-has-hastext.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:terminal-scrollback":"bun ./example/terminal-scrollback.integration.test.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts","example:wpf-hwndwrapper-input":"bun ./example/wpf-hwndwrapper-input.integration.test.ts","example:click-no-raise-waitstate":"bun ./example/click-no-raise-waitstate.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-oBLYnA9FeFUTNtZoj3rqTu9d8FOWTk1hZwC7GaxSGx6ZO9l7UWlVCvRoe14lfcm0KQ1jQ8fQnorXKeRlal8UNw==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/dwmapi":"1.0.5","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.8.0_1781726669536_0.27431193366833706","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@bun-win32/uia","version":"1.9.0","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/uia@1.9.0","maintainers":[{"name":"obscuritysrl","email":"stev@bell.net"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"bin":{"bun-uia-mcp":"mcp.ts"},"dist":{"shasum":"d3d93e9ac3de67b121343480cdb1193f7cf37879","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.9.0.tgz","fileCount":35,"integrity":"sha512-8Q8Carwf3v7f2tPIAATUWThLD7121wAEQ9HBrXHhqyG1dPgje9WorVlMAETGX8g9FEPUltWO43rq5yBTZu0FKg==","signatures":[{"sig":"MEQCIAnC94dGwkGwxIEkoNztaMdCaupHnWN+p0SbqWCB+xQSAiAJOv4ButCngFFDwGd5W7iPqJR6GDOEInYORcLW3b55vQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":708513},"main":"./index.ts","type":"module","module":"index.ts","shasum":"d3d93e9ac3de67b121343480cdb1193f7cf37879","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"private":false,"scripts":{"example:coldnote":"bun ./example/coldnote-maxdepth-relative.integration.test.ts","example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:benchmark":"bun ./example/benchmark.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:inspector":"bun ./example/inspector.ts","example:perf-gate":"bun ./example/perf-gate.integration.test.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:filter-not":"bun ./example/filter-not.integration.test.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:ocr-window":"bun ./example/ocr-window.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:window-spy":"bun ./example/window-spy.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:monitor-dpi":"bun ./example/monitor-dpi.integration.test.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:jab-java-act":"bun ./example/jab-java-act.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:wgc-occluded":"bun ./example/wgc-occluded.integration.test.ts","example:hresult-named":"bun ./example/hresult-named.integration.test.ts","example:jab-java-tree":"bun ./example/jab-java-tree.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:select-option":"bun ./example/select-option.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:qt-widget-tree":"bun ./example/qt-widget-tree.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:wait-for-state":"bun ./example/wait-for-state.integration.test.ts","example:agent-grounding":"bun ./example/agent-grounding.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:chromium-scroll":"bun ./example/chromium-scroll.integration.test.ts","example:clipboard-image":"bun ./example/clipboard-image.integration.test.ts","example:element-drag-to":"bun ./example/element-drag-to.integration.test.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:non-latin-input":"bun ./example/non-latin-input.integration.test.ts","example:type-cursorfree":"bun ./example/type-cursorfree.integration.test.ts","example:virtual-desktop":"bun ./example/virtual-desktop.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:pattern-no-raise":"bun ./example/pattern-no-raise.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:dense-tree-budget":"bun ./example/dense-tree-budget.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:locate-all-images":"bun ./example/locate-all-images.integration.test.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:transform-pattern":"bun ./example/transform-pattern.integration.test.ts","example:filter-has-hastext":"bun ./example/filter-has-hastext.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:terminal-scrollback":"bun ./example/terminal-scrollback.integration.test.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:mcp-pattern-no-raise":"bun ./example/mcp-pattern-no-raise.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts","example:audit-args-not-leaked":"bun ./example/audit-args-not-leaked.integration.test.ts","example:wpf-hwndwrapper-input":"bun ./example/wpf-hwndwrapper-input.integration.test.ts","example:harness-asserted-guard":"bun ./example/harness-asserted-guard.integration.test.ts","example:click-no-raise-waitstate":"bun ./example/click-no-raise-waitstate.integration.test.ts","example:drag-interpolated-stroke":"bun ./example/drag-interpolated-stroke.integration.test.ts","example:element-capture-occlusion":"bun ./example/element-capture-occlusion.integration.test.ts","example:press-key-secret-not-journaled":"bun ./example/press-key-secret-not-journaled.integration.test.ts","example:posted-click-dead-window-honest":"bun ./example/posted-click-dead-window-honest.integration.test.ts","example:read-control-text-fenced-redacted":"bun ./example/read-control-text-fenced-redacted.integration.test.ts","example:copy-secret-redacted-not-journaled":"bun ./example/copy-secret-redacted-not-journaled.integration.test.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev@bell.net"},"_integrity":"sha512-8Q8Carwf3v7f2tPIAATUWThLD7121wAEQ9HBrXHhqyG1dPgje9WorVlMAETGX8g9FEPUltWO43rq5yBTZu0FKg==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/uia"},"_npmVersion":"10.8.3","description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/gdi32":"1.0.14","@bun-win32/dwmapi":"1.0.5","@bun-win32/oleacc":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/user32":"3.0.22","@bun-win32/combase":"1.1.0","@bun-win32/shell32":"1.0.8","@bun-win32/advapi32":"1.0.13","@bun-win32/kernel32":"1.0.26","@bun-win32/oleaut32":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/uia_1.9.0_1781739467036_0.8402084262094904","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"author":"Stev Peifer <stev.p@outlook.com>","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"dependencies":{"@bun-win32/advapi32":"1.0.13","@bun-win32/combase":"1.1.0","@bun-win32/core":"1.1.4","@bun-win32/d3d11":"1.0.1","@bun-win32/dwmapi":"1.0.5","@bun-win32/gdi32":"1.0.14","@bun-win32/kernel32":"1.0.26","@bun-win32/oleacc":"1.0.1","@bun-win32/oleaut32":"1.0.1","@bun-win32/shcore":"1.0.1","@bun-win32/shell32":"1.0.8","@bun-win32/user32":"3.0.22"},"description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","devDependencies":{"@types/bun":"latest"},"exports":{".":"./index.ts","./mcp":"./mcp.ts"},"bin":{"bun-uia-mcp":"mcp.ts"},"license":"MIT","module":"index.ts","name":"@bun-win32/uia","peerDependencies":{"typescript":"^5"},"private":false,"publishConfig":{"access":"public"},"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","repository":{"type":"git","url":"git://github.com/ObscuritySRL/bun-win32.git","directory":"packages/uia"},"type":"module","version":"1.9.1","main":"./index.ts","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"sideEffects":false,"engines":{"bun":">=1.1.0"},"scripts":{"example:agent-grounding":"bun ./example/agent-grounding.ts","example:agent-loop":"bun ./example/agent-loop.ts","example:attach-by-class":"bun ./example/attach-by-class.integration.test.ts","example:audit-args-not-leaked":"bun ./example/audit-args-not-leaked.integration.test.ts","example:automate-calculator":"bun ./example/automate-calculator.ts","example:benchmark":"bun ./example/benchmark.ts","example:chromium-scroll":"bun ./example/chromium-scroll.integration.test.ts","example:click-no-raise-waitstate":"bun ./example/click-no-raise-waitstate.integration.test.ts","example:clipboard-image":"bun ./example/clipboard-image.integration.test.ts","example:coldnote":"bun ./example/coldnote-maxdepth-relative.integration.test.ts","example:computer-use":"bun ./example/computer-use.ts","example:condition-perf":"bun ./example/condition-perf.integration.test.ts","example:copy-secret-redacted-not-journaled":"bun ./example/copy-secret-redacted-not-journaled.integration.test.ts","example:cursor-free-copy":"bun ./example/cursor-free-copy.integration.test.ts","example:dense-tree-budget":"bun ./example/dense-tree-budget.integration.test.ts","example:desktop-mcp":"bun ./example/desktop-mcp.ts","example:drag-interpolated-stroke":"bun ./example/drag-interpolated-stroke.integration.test.ts","example:drive-in-the-dark":"bun ./example/drive-in-the-dark.ts","example:element-capture-occlusion":"bun ./example/element-capture-occlusion.integration.test.ts","example:element-drag-to":"bun ./example/element-drag-to.integration.test.ts","example:expand-range":"bun ./example/expand-range.integration.test.ts","example:explorer-in-the-dark":"bun ./example/explorer-in-the-dark.integration.test.ts","example:filter-has-hastext":"bun ./example/filter-has-hastext.integration.test.ts","example:filter-not":"bun ./example/filter-not.integration.test.ts","example:find-cached":"bun ./example/find-cached.integration.test.ts","example:find-text":"bun ./example/find-text.integration.test.ts","example:get-variant":"bun ./example/get-variant.integration.test.ts","example:grid-cell":"bun ./example/grid-cell.integration.test.ts","example:harness-asserted-guard":"bun ./example/harness-asserted-guard.integration.test.ts","example:hello-uia":"bun ./example/hello-uia.ts","example:hresult-named":"bun ./example/hresult-named.integration.test.ts","example:inline-state":"bun ./example/inline-state.integration.test.ts","example:inspector":"bun ./example/inspector.ts","example:integrity-level":"bun ./example/integrity-level.integration.test.ts","example:jab-java-act":"bun ./example/jab-java-act.integration.test.ts","example:jab-java-tree":"bun ./example/jab-java-tree.integration.test.ts","example:locate-all-images":"bun ./example/locate-all-images.integration.test.ts","example:mcp-pattern-no-raise":"bun ./example/mcp-pattern-no-raise.integration.test.ts","example:mcp-snapshot-economy":"bun ./example/mcp-snapshot-economy.integration.test.ts","example:menu-drive":"bun ./example/menu-drive.integration.test.ts","example:monitor-dpi":"bun ./example/monitor-dpi.integration.test.ts","example:multi-select":"bun ./example/multi-select.integration.test.ts","example:non-latin-input":"bun ./example/non-latin-input.integration.test.ts","example:ocr-text":"bun ./example/ocr-text.integration.test.ts","example:ocr-window":"bun ./example/ocr-window.integration.test.ts","example:pattern-no-raise":"bun ./example/pattern-no-raise.integration.test.ts","example:perf-gate":"bun ./example/perf-gate.integration.test.ts","example:popup-windows":"bun ./example/popup-windows.integration.test.ts","example:posted-click-dead-window-honest":"bun ./example/posted-click-dead-window-honest.integration.test.ts","example:press-key-secret-not-journaled":"bun ./example/press-key-secret-not-journaled.integration.test.ts","example:qt-widget-tree":"bun ./example/qt-widget-tree.integration.test.ts","example:read-control-text-fenced-redacted":"bun ./example/read-control-text-fenced-redacted.integration.test.ts","example:read-table":"bun ./example/read-table.integration.test.ts","example:reveal-offscreen":"bun ./example/reveal-offscreen.integration.test.ts","example:safety-floor":"bun ./example/safety-floor.integration.test.ts","example:select-option":"bun ./example/select-option.integration.test.ts","example:selftest":"bun ./example/uia.selftest.ts","example:set-of-marks":"bun ./example/set-of-marks.ts","example:snapshot-economy":"bun ./example/snapshot-economy.integration.test.ts","example:snapshot-fallback":"bun ./example/snapshot-fallback.integration.test.ts","example:snapshot-leak":"bun ./example/snapshot-leak.integration.test.ts","example:snapshot-scope":"bun ./example/snapshot-scope.integration.test.ts","example:terminal-scrollback":"bun ./example/terminal-scrollback.integration.test.ts","example:text-content":"bun ./example/text-content.integration.test.ts","example:transform-pattern":"bun ./example/transform-pattern.integration.test.ts","example:type-cursorfree":"bun ./example/type-cursorfree.integration.test.ts","example:uia-report":"bun ./example/uia-report.ts","example:uwp-content":"bun ./example/uwp-content.integration.test.ts","example:vcall-safety":"bun ./example/vcall-safety.integration.test.ts","example:virtual-desktop":"bun ./example/virtual-desktop.integration.test.ts","example:visible-text":"bun ./example/visible-text.integration.test.ts","example:wait-for-state":"bun ./example/wait-for-state.integration.test.ts","example:web-content":"bun ./example/web-content.integration.test.ts","example:wgc-occluded":"bun ./example/wgc-occluded.integration.test.ts","example:window-events":"bun ./example/window-events.integration.test.ts","example:window-spy":"bun ./example/window-spy.ts","example:wpf-hwndwrapper-input":"bun ./example/wpf-hwndwrapper-input.integration.test.ts"},"_id":"@bun-win32/uia@1.9.1","_integrity":"sha512-lWy8gO5Aqymvg4uEMTiEvTKGkaDs1onaGKzFSNlsH7tnUc2pSYr7CzWEgGOTlyBamZiu/aAjm1ZIEvVxdw3Tzw==","_nodeVersion":"24.3.0","_npmVersion":"10.8.3","shasum":"9a503f2ee421889a38c632e457ffe1a80cddeab7","dist":{"integrity":"sha512-lWy8gO5Aqymvg4uEMTiEvTKGkaDs1onaGKzFSNlsH7tnUc2pSYr7CzWEgGOTlyBamZiu/aAjm1ZIEvVxdw3Tzw==","shasum":"9a503f2ee421889a38c632e457ffe1a80cddeab7","tarball":"https://registry.npmjs.org/@bun-win32/uia/-/uia-1.9.1.tgz","fileCount":35,"unpackedSize":713836,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD9v8jcjvOH2oNEY6eqjvm9PU/oK9YJYiNamR+ix/ccIgIhAMHivD78NDzadWBLyLV2qh71xXwd6k5jdNwjESaan4cn"}]},"_npmUser":{"name":"obscuritysrl","email":"stev.p@outlook.com"},"directories":{},"maintainers":[{"name":"obscuritysrl","email":"stev.p@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/uia_1.9.1_1781746549733_0.1524447352960261"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-13T18:28:37.324Z","modified":"2026-06-18T01:35:50.056Z","1.0.0":"2026-06-13T18:28:37.615Z","1.1.0":"2026-06-14T14:53:33.296Z","1.2.0":"2026-06-14T17:43:47.813Z","1.3.0":"2026-06-15T01:02:22.150Z","1.4.0":"2026-06-15T12:01:52.868Z","1.5.0":"2026-06-15T19:57:54.748Z","1.6.0":"2026-06-16T16:42:42.442Z","1.6.1":"2026-06-16T17:29:33.748Z","1.6.2":"2026-06-16T21:48:26.678Z","1.6.3":"2026-06-17T01:50:34.109Z","1.6.4":"2026-06-17T04:52:16.650Z","1.7.0":"2026-06-17T15:40:59.723Z","1.8.0":"2026-06-17T20:04:29.743Z","1.9.0":"2026-06-17T23:37:47.167Z","1.9.1":"2026-06-18T01:35:49.953Z"},"bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","homepage":"https://github.com/ObscuritySRL/bun-win32#readme","keywords":["accessibility","automation","bun","desktop","e2e","ffi","playwright","testing","typescript","uiautomation","win32","windows"],"repository":{"type":"git","url":"git://github.com/ObscuritySRL/bun-win32.git","directory":"packages/uia"},"description":"Playwright for the Windows desktop, from Bun — drive the UI Automation accessibility tree (find by name, invoke, type, assert), plus synthetic input, full-screen capture + image matching, native-window introspection (Spy++-style), an LLM computer-use adap","maintainers":[{"name":"obscuritysrl","email":"stev.p@outlook.com"}],"readme":"# @bun-win32/uia\r\n\r\n**Playwright for the Windows desktop — and an MCP server that hands Claude a whole Windows machine.** Target controls by **name and role, not brittle pixels**, then click, type, wait, read, and assert across any native app — Win32, WinForms, WPF, WinUI/UWP, Electron/Chromium, **Qt** (OBS/VLC/Telegram/KDE), and Java are each pinned by a regression test — through the live accessibility tree (UI Automation, with MSAA and the Java Access Bridge behind one facade), from Bun, with **zero native dependencies**. No node-gyp, no prebuild matrix, no Appium server, no .NET. And when an app exposes no tree, it reaches past it: synthetic input, window/process introspection, background capture, OCR, and image matching.\r\n\r\n**Two ways to use it:**\r\n\r\n- **In your project** — E2E-test and automate Windows GUIs the way Playwright tests the web: `find({ name })` → `waitFor` → `invoke`/`setValue`/`type` → assert `value`/`text()`. Semantic targeting survives the DPI, theme, and layout shifts that break pixel scripts.\r\n- **As an AI agent's hands** — `claude mcp add uia -- bunx bun-uia` and Claude (or any MCP client) drives the entire desktop through the a11y tree: by name, **cursor-free**, ~15 ms/step, even on a locked session.\r\n\r\n> The unscoped alias [`bun-uia`](https://www.npmjs.com/package/bun-uia) re-exports this package — `bun add bun-uia` is the discoverable front door.\r\n\r\n```ts\r\nimport { ControlType, uia } from '@bun-win32/uia';\r\n\r\nconst app = await uia.launch(['notepad.exe'], { className: 'Notepad' });\r\nconst edit = await app.waitFor({ controlType: ControlType.Document });\r\nedit.focus().type('nothing native compiles, and it just works');\r\nconsole.log(edit.text()); // → nothing native compiles, and it just works\r\n```\r\n\r\n```ts\r\n// Drive Calculator to 5 + 3 = 8 by name — survives DPI/theme/layout shifts that break pixel scripts:\r\nconst calc = await uia.launch(['cmd', '/c', 'start', 'calc'], { title: 'Calculator' });\r\nfor (const name of ['Five', 'Plus', 'Three', 'Equals']) calc.find({ controlType: ControlType.Button, name })?.invoke();\r\nconsole.log(calc.find({ automationId: 'CalculatorResults' })?.name); // → \"Display is 8\"\r\n```\r\n\r\n`bun add @bun-win32/uia` is the entire install story.\r\n\r\n## Why this exists\r\n\r\nThe Windows desktop-automation cluster on npm is a field of native-addon pain, paywalls, and abandoned daemons. Downloads verified against `api.npmjs.org` for the week of 2026-06-05→11.\r\n\r\n| Tool | Weekly dl | Install / runtime | The catch |\r\n| --- | --- | --- | --- |\r\n| `@nut-tree-fork/nut-js` | 32,360 | libnut N-API addon (cmake-js) | Fork of a **paywalled** original — *\"all of my packages around nut.js will cease to exist publicly on npm … only available through the private … registry, which requires an active subscription.\"* Pixel/image-match, **no a11y tree**. |\r\n| `appium-windows-driver` | 30,749 | Appium server **+ a separate WinAppDriver.exe** | *\"WinAppDriver server has not been maintained by Microsoft for years … Developer mode must be enabled.\"* Two daemons + a W3C HTTP hop per element read. |\r\n| `@jitsi/robotjs` / `robotjs` | 15,333 / 11,375 | node-gyp / prebuild matrix | *\"No prebuilt binaries found … node-gyp rebuild\"* C++ compile fallback — the #1 documented install failure. Blind pixel + keystroke, **no element model**. |\r\n| `uiohook-napi` (input hooks) | 21,965 | N-API addon | Healthy — but global `SetWindowsHookEx` hooks run on a foreign thread and can assert/segfault (node-addon-api #903). |\r\n| `@bright-fish/node-ui-automation` | 33 | NAPI/COM native addon | The only real npm UIA wrapper — **dead since 2022**. |\r\n| NodeRT `windows.ui.uiautomation` | 15 | NodeRT native addon | Dead 2022 **and wrong namespace** (projects WinRT, not the Win32 `IUIAutomation`). |\r\n| FlaUI / pywinauto / AutoIt | n/a | .NET / Python / bespoke EXE | A foreign runtime to install and ship. |\r\n\r\n**There is no zero-install, typed, in-process `IUIAutomation` client for Node or Bun.** @bun-win32/uia is a few kilobytes of TypeScript over `bun:ffi` — the runtime's own FFI, not a third-party N-API addon that rots against each Node minor (*\"PLEASE ARCHIVE THIS REPO\"* — node-ffi-napi #269). It **can't be paywalled** (no compiled binary to gate behind a subscription registry), has **no build step** (no node-gyp, no ABI matrix, no MSVC/Python), and talks to UIA **in-process** (no WinAppDriver.exe, no Appium daemon, no `127.0.0.1:4723` round-trip, no Developer Mode).\r\n\r\n## What you can do\r\n\r\n- **Find controls semantically** — by name, role, or automationId, not a fragile `(x, y)`. Exact scalars compile to a **server-side** UIA condition (the target app filters in-process); regex/substring filter client-side.\r\n- **Act** — `invoke()`, `click()`, `setValue()`, `type()`, `toggle()`, `expand()`, `select()`, `setRangeValue()`, window `close()`/`setVisualState()`. Each pattern is proven against a real control.\r\n- **Unicode / CJK / emoji input proven** — Japanese, Korean, accented-Latin, and astral-surrogate (emoji / Unicode plane-1) text round-trip cursor-free through all three input paths — `setControlText` (WM_SETTEXT), `postText` (WM_CHAR per UTF-16 unit, surrogate pairs intact), and `Element.setValue` (ValuePattern) — pinned by `example/non-latin-input.integration.test.ts`.\r\n- **`waitFor`** — Playwright-class auto-retry for flaky native UIs. No other Windows-desktop npm tool has it. Timeouts quote the selector, the window, and the nearest candidates. `waitForGone(selector)` is the inverse (a spinner / modal cleared); `waitForState(selector, expectation)` is the desktop `expect(locator).toBeChecked()/toHaveValue()` — a retrying STATE assertion that confirms an action landed (a toggle is now on, a set value stuck, an item is now selected/expanded/enabled) and throws quoting the last-seen state on timeout.\r\n- **Read & assert** — `value`, `text()`, `isEnabled`, `boundingRectangle`, `toggleState`. Read state back through the tree to assert — pixel tools can't.\r\n- **Serialize the tree to JSON** for an LLM agent (`uia.tree`), with a token-svelte agent profile.\r\n- **Screenshot** any window via PrintWindow — `Window.screenshot()` is pure PrintWindow (it re-renders the window into our DC, so it works occluded/background for most GDI/WinForms/WPF windows, but returns blank bytes for a GPU-swapchain surface or a locked session); for those, `captureWindowLive(hWnd)` (and the MCP `screenshot` tool) fall back to **Windows.Graphics.Capture** (the live composited surface — proven occluded in `example/wgc-occluded.integration.test.ts`). All can come back blank on a locked / secure-desktop session — UIA reads + `invoke`/`setValue` still work there.\r\n- **MSAA fallback** (`uia.msaaTree`) for legacy / owner-draw windows.\r\n- **Crash-safe input observation** via `GetAsyncKeyState` polling — no foreign-thread hook, no message-pump assert.\r\n- **Drive in the dark** — `invoke()`/`setValue()`/`toggle()`/`scroll()` move no real cursor and work on a window that is **minimized, in the background, occluded, or on a locked session** — no focus theft, the human-transcending default. (Caveat: a classic **Win32/HWND** app stays drivable while minimized; a **UWP/WinUI** store app suspends its UI thread + a11y tree when minimized or fully backgrounded — its tree reads empty and posted actions may not land until you `restoreWindow`/`raiseWindow` it.) (A bare `postClick(x, y)` posts to whatever window owns that on-screen pixel, so for a minimized/occluded target use the element/ref path, which posts to the control's own window.) SendInput is the opt-in \"a human is watching\" path.\r\n- **See a window even when it's not visible** — `captureWindowLive(hWnd)` reads the LIVE pixels of a window via **Windows.Graphics.Capture** even fully occluded / in the background / GPU-composited (hardware-accel Chromium/Edge/Electron, games, WinUI) — the same surface Alt+Tab previews use, with no foregrounding. It reaches the GPU-swapchain content `PrintWindow` often returns blank for (WebGL/video/games — though modern DWM re-renders many composition surfaces into PrintWindow's DC, so \"blank\" is content- and OS-build-dependent, not universal). *Proven, not asserted:* `example/wgc-occluded.integration.test.ts` captures a WinUI window while it sits fully occluded behind a maximized window — non-blank, never foregrounded, with the PrintWindow grab written alongside to SEE the difference. (A **minimized** window has no composed surface — restore it first; a locked/disconnected session or DRM content returns null/black.)\r\n- **Window & monitor management** — `moveWindow`/`minimizeWindow`/`maximizeWindow`/`restoreWindow`/`raiseWindow`/`closeWindow` (no foreground required), `listMonitors()`, and the exe path + min/max/foreground state of every window.\r\n- **Native window introspection** — `windowTree(hWnd)` dumps the raw HWND hierarchy (class, control id, decoded `WS_*`/`WS_EX_*` styles) like Spy++/Winspector, reaching the classic-Win32 controls UIA can't see.\r\n- **Pixel fallback for no-a11y surfaces** — `captureScreen()` (full desktop or region), `locateOnScreen(needle)` template matching, `pixelColor(x, y)` — the nut.js/robotjs niche, in-process, for games/canvas/browsers with no a11y tree.\r\n- **Clipboard** — `readClipboard()`/`writeClipboard()`/`paste()` (the reliable large-text path, no per-keystroke corruption) and `copy()` (Ctrl+C + read the selection from any app).\r\n\r\n## For AI agents\r\n\r\nFrontier computer-use agents ground actions in **screenshots** and the literature calls it fragile and expensive. Microsoft **UFO2** (arXiv 2504.14603) fuses the **UI Automation tree first, vision second**, to fix *\"fragile screenshot-based interaction\"*; OmniParser exists because VLMs can't reliably locate clickable elements from a bitmap; and **OSWorld-Human** (arXiv 2506.16042) reports a11y-tree builds taking **3–26 seconds** and \"thousands more tokens per step.\"\r\n\r\n@bun-win32/uia is exactly that UIA-first substrate — served **fast and in-process**. `uia.tree(app, { agentProfile: true })` walks a window's subtree in **one cached round-trip** and emits ground-truth `{ role, name, automationId, bounds, children }` an agent acts on without pixel-counting. The measured build time below beats the OSWorld 3–26 s reference by **two-to-three orders of magnitude**. `uia.execute(app, actions)` runs a JSON action list; `AGENT_TOOLS` is a ready LLM tool schema.\r\n\r\n## Drive Windows with Claude — MCP server + computer-use\r\n\r\nA zero-dependency **MCP server** ships in the box. Register it with one line and Claude (Desktop, Code, or any MCP client) drives Windows through the accessibility tree:\r\n\r\n```\r\nclaude mcp add uia -- bunx bun-uia\r\n```\r\n\r\n(Windows-hardened, for clients that spawn without a shell: `claude mcp add uia -- cmd /c bunx -y bun-uia`.) It exposes **61 snapshot-first tools** (55 under the default `safe` profile; 22 under `readonly`; the 6 os/fs tools need `full` or `BUN_UIA_OS=1`) (protocol `2025-11-25`), gated by a deployer policy. `desktop_snapshot` returns a ref-keyed tree — `Button \"Five\" [ref=e49#3]` — then `click`/`invoke`/`type`/`set_value`/`toggle`/`select`/`scroll` target a ref (cursor-free, so they work on a minimized/background/occluded/locked window — `select` even multi-selects a set of items with no real mouse; classic Win32/HWND apps stay drivable minimized, but a UWP/WinUI store app suspends its tree when minimized/fully backgrounded, so restore it first). Each ref carries a `#generation` tag that bumps when the tree is re-rendered, so a ref reused from before a re-render is **rejected** (not silently mis-resolved onto a different control) while a ref that survives a cheap delta keeps working. Every action returns the **smallest faithful re-grounding** — a compact `Δ` delta when little changed (`~ Text \"Display is 5\" → \"Display is 55\"`, ~28× cheaper than a full dump), else a pruned, size-capped tree — so the model re-grounds without drowning in tokens. Beyond one window it can **see the whole desktop** (`screen_capture`), **see a specific occluded/GPU window** (`capture_window` — Windows.Graphics.Capture), turn a pixel into a control (`inspect_point`), read a control's full state (`inspect_element`), read a data grid / list / table cell-by-cell (`read_table`), find + select text by content (`find_text` — the desktop getByText), read native/MSAA trees, list monitors, manage windows, and — gated default-OFF — launch apps, run programs, and read/write files. A thrown tool error comes back as `isError` so the loop self-corrects instead of stopping.\r\n\r\n**Deployer policy** decides which tools exist: `BUN_UIA_PROFILE=readonly` (observe only) · `safe` (**default** — observe + cursor-free desktop control + window management, no OS reach) · `full` (everything). Overrides: `BUN_UIA_OS=1` (enable launch/run/file), `BUN_UIA_ALLOW`/`BUN_UIA_DENY`, `BUN_UIA_CURSOR=never` (strictly cursor-free), `BUN_UIA_FS_ROOT=<path>` (sandbox file tools). `tools/list` advertises only the enabled tools.\r\n\r\n`uia.dispatch(window, action)` runs the **literal Anthropic `computer` and OpenAI CUA action sets** against Windows — but **semantic-first and cursor-free**: a coordinate `left_click` resolves the element under the point and `invoke()`s it, so the real mouse never moves, it works on a locked session, and every pixel action becomes a ground-truth semantic one (erasing the coordinate-hallucination and click-miss failure modes of screenshot-only agents). `screenshotWithMarks(app, uia.snapshot(app))` overlays numbered **Set-of-Marks** boxes derived from UIA bounds — the grounding the literature (Set-of-Mark, UFO2, Windows Agent Arena: **+57% from UIA-derived marks**) shows lifts task success, with no vision model. Honest limit: UIA can't see owner-draw/canvas/games, so the pixel layer (`locateOnScreen`) is the fallback there.\r\n\r\n## Benchmarks\r\n\r\nMeasured on Windows 11, Bun 1.4, by `bun run example/benchmark.ts` (run it to reproduce):\r\n\r\n| operation | result |\r\n| --- | --- |\r\n| single property read (cross-process) | ~58 µs |\r\n| naive subtree walk (73 nodes) | ~35 ms |\r\n| cached subtree walk (one round-trip) | ~45 ms (slower on this tiny 73-node tree — the BuildCache round-trip is a fixed cost it amortizes only as the tree grows; on a large cross-process tree it wins) |\r\n| **agent-grounding tree build** | **~13 ms, ~2.95k tokens** |\r\n| **vs OSWorld a11y-tree build (3–26 s)** | **~230–2000× faster** |\r\n\r\n## Requirements & honest scoping\r\n\r\n- **Windows 10/11, Bun ≥ 1.1.** Windows-only and Bun-only — the owned trade-off (nut.js/robotjs/uiohook are genuinely cross-platform; this is not).\r\n- **UIA-tree first, pixels where there's no tree.** Apps with no accessibility tree (games, canvas/WebGL, custom-draw) fall back to the built-in pixel layer — full-screen capture + `locateOnScreen` template matching + coordinate `click()` — plus MSAA. (Chromium/Edge/Electron in-page DOM is NOT a no-tree case — `webRoots()` reads it as UIA; the pixel layer is only for genuinely tree-less surfaces.) Those GPU/composited surfaces, even fully occluded or in the background, are still **seen** via `captureWindowLive` (Windows.Graphics.Capture) — including the GPU-swapchain content where `PrintWindow` goes blank (proven occluded + SEEN in `example/wgc-occluded.integration.test.ts`). UIA-native where there's a tree, pixels where there isn't.\r\n- **Synthetic input (`type`/`sendKeys`/`click`) needs an unlocked, interactive desktop.** UIA queries, `invoke`, and `setValue` work on a locked session; prefer them. (`screenshot`/PrintWindow can be blank when locked.)\r\n- **Selectors are client-side for regex/substring** (exact scalars are server-side). **Window/process lifecycle events ship** (`waitForWindow` via `SetWinEventHook`; `waitForProcess` polls a toolhelp32 snapshot); UIA property/structure event subscription is still roadmap — poll with `waitFor` / `waitForIdle`.\r\n\r\nRead [`AI.md`](./AI.md) — it is the complete surface; an agent should not need the source.\r\n\r\nMIT.\r\n","readmeFilename":"README.md"}