What's Changed
- fix: make desktop control optional and idle timeout configurable by @zengfanfan in #458
- fix: resolve the PowerShell executable against the child's PATH (#411) by @NishilRathod in #459
- fix(tools): parse FileSystem and MultiSelect boolean flags through as_bool by @Dev-next-gen in #461
- fix: recover stale desktop input after missed release events by @zengfanfan in #460
- chore(deps): bump the all-dependencies group with 4 updates by @dependabot[bot] in #462
- chore(deps): bump platformdirs from 4.12.4 to 4.13.0 in the all-dependencies group by @dependabot[bot] in #463
- docs: align installation guidance with the current package by @dajiaohuang in #469
- Add desktop gate policies and deliberate mouse takeover by @zengfanfan in #466
- fix(scrape): improve Fake-IP DNS diagnostics by @legendteddy in #473
- chore(deps): bump posthog from 7.67.0 to 7.68.0 in the all-dependencies group by @dependabot[bot] in #468
- Skip the server's own windows when collecting control handles (Snapshot 15 s -> 0.6 s) by @Saturcolor in #476
- fix(scrape): honour the document charset when Content-Type declares none by @michealmachine in #477
- Fix Japanese IME mode events latching desktop control by @Plastic-time in #481
- chore(deps): bump the all-dependencies group with 3 updates by @dependabot[bot] in #480
- fix: release SendKeys keys after interrupted chords by @Plastic-time in #485
- Shortcut: natural punctuation names; MultiSelect: validate points before pressing Ctrl (#483) by @junglin830 in #487
- Fix visible console window left open by windows-mcp install by @junglin830 in #486
- Exclude hidden directory contents from recursive listings by @Plastic-time in #491
- Delete symbolic links and junctions without removing their targets by @Plastic-time in #490
- fix(filesystem): reject overlapping copy and move paths by @Plastic-time in #489
- Pass registry key paths literally so wildcard key names don't hit sibling keys by @Plastic-time in #492
- Bound UI Automation calls with IUIAutomation2 timeouts and stop retrying timed-out windows (refs #383) by @WindriseAI in #497
- chore(deps): bump the all-dependencies group across 1 directory with 4 updates by @dependabot[bot] in #484
- chore(deps): bump pillow from 12.3.0 to 13.0.0 by @dependabot[bot] in #499
- chore(deps): bump opentelemetry-api from 1.45.0 to 1.45.1 by @dependabot[bot] in #501
- chore(deps): bump certifi from 2026.7.22 to 2026.10.19 by @dependabot[bot] in #500
- Document the required application ID for toast notifications by @zwk110 in #503
- Decode schtasks and PowerShell output with the console code page by @mayuriphad in #502
- Ignore mouse motion that does not move the cursor by @nalikip in #508
- Report region-filtered UI tree scope in Snapshot responses by @zwk110 in #507
- Sample snapshot cursor position after desktop and tree collection by @Plastic-time in #509
- chore(deps): bump the all-dependencies group with 3 updates by @dependabot[bot] in #510
- chore(deps): bump authlib from 1.8.0 to 1.9.1 by @dependabot[bot] in #512
- chore(deps): bump dnspython from 2.8.0 to 2.9.0 by @dependabot[bot] in #511
- fix(filesystem): allow case-only renames in move mode by @jaeminbird in #513
- fix(filesystem): report symlinks and junctions in info mode by @jaeminbird in #514
- fix(filesystem): strip the NT path prefix from info-mode link targets by @jaeminbird in #517
- fix(filesystem): decode BOM-marked UTF-16 and UTF-8 files in read mode by @jaeminbird in #516
- fix(filesystem): remove read-only files in recursive delete and overwrite by @jaeminbird in #515
- fix(process): measure CPU usage over a short window and skip the Idle process by @Plastic-time in #521
- fix(scrape): return non-HTML bodies as fetched instead of running markdownify by @Plastic-time in #522
- fix(install): make start-server.cmd work from non-ASCII profile paths by @tanishqbaweja in #523
- fix(config): escape strings in write_config so auth --with-tls saves a loadable config by @tanishqbaweja in #524
- fix(powershell): escape typographic single quotes in ps_quote by @tanishqbaweja in #525
- fix(registry): stop list mode hiding PS values, cutting arrays and wrapping lines by @tanishqbaweja in #526
- fix(filesystem): stop write mode doubling the carriage return in CRLF content by @tanishqbaweja in #537
- fix(filesystem): let read mode return line ranges from files over 10 MB by @tanishqbaweja in #538
- fix(config): load config.toml files saved with a UTF-8 BOM by @tanishqbaweja in #541
- fix(filesystem): stop move mode deleting a directory when a file is moved onto it by @tanishqbaweja in #540
- fix(scrape): fetch the page off the event loop so Scrape stops freezing the server by @tanishqbaweja in #539
- fix(filesystem): resolve ~ to the user's home folder instead of a '~' folder on the Desktop by @tanishqbaweja in #543
- fix(filesystem): hide entries with the Windows hidden attribute in list mode by @tanishqbaweja in #542
- fix(control): report why the controller is unavailable by @FaberVi in #532
- fix(cli): stop auth printing 0.0.0.0 and unbracketed IPv6 addresses as the client URL by @tanishqbaweja in #544
- feat(tree): optionally merge per-glyph Word nodes into line runs by @FaberVi in #534
- docs(move): state that drag does not work on XAML shell surfaces by @FaberVi in #536
- fix(control): keep the indicator heartbeat fresh while building layers by @FaberVi in #535
- feat(snapshot): add save_path to write the screenshot to a PNG file by @FaberVi in #533
- fix(desktop): list windows in z-order so Snapshot's Depth column is the stacking order by @tanishqbaweja in #549
- fix(cli): honor WINDOWS_MCP_DEBUG again and let debug mode reach stderr by @tanishqbaweja in #547
- feat(control): tag the cursor glow with "AI" and mark each AI click by @ShengLin1001 in #553
- fix(registry): write Binary and MultiString values as arrays by @jaeminbird in #564
- fix(powershell): decode CLIXML error output from Windows PowerShell by @jaeminbird in #563
- fix(desktop): walk the other windows in z-order when building the UI tree by @tanishqbaweja in #550
- fix(snapshot): show the text selection the UI tree walk already records by @tanishqbaweja in #551
- fix(tools): accept JSON-string arrays for Snapshot/Screenshot
displayand Appwindow_loc/window_sizeby @tanishqbaweja in #545 - fix(desktop): exclude hung processes before Snapshot window metadata queries by @mvanhorn in #568
- fix(process): let kill mode match a process name given without .exe by @tanishqbaweja in #546
- fix(registry): read a value whose name contains wildcard characters by @Plastic-time in #570
- fix(scrape): say "Reached bottom" for a page that does not scroll by @Plastic-time in #575
- fix(tools): parse Snapshot, Screenshot, Scrape and Process flags strictly by @Plastic-time in #574
- fix(input): say what Scroll and Click did by @Plastic-time in #573
- fix(registry): refuse an empty value name instead of deleting the key by @Plastic-time in #571
- fix(powershell): keep inherited variables whose registry name has another case by @Plastic-time in #572
- Report rejected cursor positioning as an input tool error by @minhoyooDEV in #576
- fix(screenshot): wait for a fresh DXGI frame instead of returning a stale one by @cyppe in #560
- fix(type): clear fields without Ctrl+A and report what the field reads back by @cyppe in #558
- feat(control): ask before AI starts a new desktop control period by @ShengLin1001 in #552
- Report a click that a modal dialog swallowed by @Eapp1e in #581
- fix(app): match the switch target from the window list without a UI tree walk by @1AbdullahButt in #580
- perf(overlay): premultiply with Pillow channel ops and fade the flash with window opacity by @cyppe in #562
- fix(screenshot): say windows were not listed instead of 'No windows found' by @cyppe in #559
- fix(powershell): cap long output and distinguish timeouts by @tumbledseea in #585
- fix(type): put the caret at the start or end of a multi-line field by @Plastic-time in #591
- fix(registry): show a value's type and stored form in get mode by @Plastic-time in #590
- fix(type): put the whole clipboard back after pasting long text by @Plastic-time in #589
- fix(process): refuse a list limit below 1 by @Plastic-time in #588
- fix(powershell): return when PowerShell exits, not at pipe EOF by @Plastic-time in #587
- fix(input): reject Move, Scroll, drag and MultiSelect points outside the desktop by @tanishqbaweja in #593
- fix(snapshot): clip UI elements to the current virtual screen, not the one at server start by @tanishqbaweja in #592
- fix(desktop): keep Snapshot and Screenshot working when the virtual desktop query fails by @tanishqbaweja in #594
- fix(snapshot): show which radio button, tab or list item is selected by @tanishqbaweja in #601
- fix(filesystem): append to BOM-marked files in their own encoding by @jaeminbird in #602
- fix(powershell): keep programs the command started when it times out by @Plastic-time in #597
- feat(powershell): send progress notifications while a command runs by @Mystery01092000 in #605
- fix(process): list only processes whose name matches the filter by @jaeminbird in #603
- fix(control): recover the overlay after a missed ack timeout by @MaxWang007 in #606
- fix(registry): list values with their type and stored form by @Plastic-time in #599
- fix(screenshot): draw the requested reference grid on clean screenshots (use_annotation=False) by @tanishqbaweja in #600
- fix(filesystem): do not walk into junctions in recursive list and search by @Plastic-time in #598
- fix(app): list the windows again before App switch matches a name by @tanishqbaweja in #596
- feat(control): keep AI control until the agent releases it or the user takes over by @ShengLin1001 in #595
- fix(uia): fail fast on abandoned worker calls, expose ui_busy in ControlStatus, and bound stalled leases by @Nani-2007-code in #608
New Contributors
- @NishilRathod made their first contribution in #459
- @Dev-next-gen made their first contribution in #461
- @dajiaohuang made their first contribution in #469
- @Saturcolor made their first contribution in #476
- @michealmachine made their first contribution in #477
- @Plastic-time made their first contribution in #481
- @junglin830 made their first contribution in #487
- @WindriseAI made their first contribution in #497
- @zwk110 made their first contribution in #503
- @mayuriphad made their first contribution in #502
- @nalikip made their first contribution in #508
- @jaeminbird made their first contribution in #513
- @tanishqbaweja made their first contribution in #523
- @FaberVi made their first contribution in #532
- @ShengLin1001 made their first contribution in #553
- @minhoyooDEV made their first contribution in #576
- @cyppe made their first contribution in #560
- @Eapp1e made their first contribution in #581
- @1AbdullahButt made their first contribution in #580
- @tumbledseea made their first contribution in #585
- @Mystery01092000 made their first contribution in #605
- @MaxWang007 made their first contribution in #606
- @Nani-2007-code made their first contribution in #608
Full Changelog: v0.8.8...v0.8.9