feat(tracking): follow the caret in Java apps via the Java Access Bridge (#281) - #282
Merged
Merged
Conversation
…dge (#281) Java apps (IntelliJ, PyCharm) report the caret only through the Java Access Bridge. The client DLL is loaded from the Java app's own folder the first time a Java window is foreground; the bridge is enabled in .accessibility.properties for future launches so users need no manual step. Reads run on the tracker thread only, triggered by events (bridge callbacks, WinEvents), never the 60 Hz poll. Wind is a UIAccess process, so UIPI dropped the Java side's handshake messages: the bridge's own hidden windows now allow exactly that traffic. Version 0.11.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
- per-folder failure cache instead of a session-wide latch - .accessibility.properties is only rewritten after a clean read or when it does not exist; a locked file is left alone and retried in 30 s - the bridge DLL (and a vcruntime shipped beside it) must be Authenticode signed, held open while verified and loaded, deps from its folder and System32 only: Wind is UIAccess and window classes are spoofable - UIPI allowance narrowed to the 7 bridge protocol messages - skip bridge calls while the Java window is not responding - reads only after a Java event or window switch, never unrelated wakes Docs: findings, cursor chapter, README, spec scope note, CLAUDE.md gotcha. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #281.
Caret tracking now works in Java apps (IntelliJ, PyCharm, other Swing/AWT apps), which neither Wind nor Windows Magnifier followed before.
src/java_bridge.*).AccessBridgeMessages.h).%USERPROFILE%\.accessibility.properties(whatjabswitch -enabledoes); a Java app picks it up at its next start. The file is never rewritten from a failed read.Review
A 3-lens review (correctness, performance, security; sonnet reviewer plus adversarial sonnet verifier per lens) confirmed 7 findings, 2 rejected. All fixed in the second commit: per-folder retry, safe properties rewrite, signed-DLL loading with a pinned dependency search, narrowed UIPI allowance, hung-window skip, event-only reads.
Verification
build.bat test: all doctests pass (newtest_java_bridge_util.cpp)🤖 Generated with Claude Code
https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG