Skip to content

fix: replace copyleft input dependencies#40

Merged
abrichr merged 26 commits into
mainfrom
agent/native-input-observers
Jul 23, 2026
Merged

fix: replace copyleft input dependencies#40
abrichr merged 26 commits into
mainfrom
agent/native-input-observers

Conversation

@abrichr

@abrichr abrichr commented Jul 23, 2026

Copy link
Copy Markdown
Member

Summary

  • restores the default Recorder runtime/import contract from fix: restore capture runtime contract #39
  • removes pynput and oa-atomacos from the shipped runtime and archive metadata
  • replaces global input capture with native, fail-loud observers:
    • macOS: listen-only Quartz event tap with explicit Input Monitoring checks
    • Windows: low-level hooks with a bounded raw queue and off-hook layout translation
    • Linux/X11: XInput2 with state-aware XKB/libxkbcommon text handling
  • keeps hook/event callbacks nonblocking through bounded delivery queues
  • preserves OS receipt timestamps and keyboard/mouse ordering through one Recorder observer
  • treats ambiguous dead/compose text as unverifiable unless locale compose state commits exact text
  • preserves auxiliary mouse buttons through storage and event processing
  • surfaces startup, runtime, queue-overflow, permission, teardown, and Recorder worker failures to the caller

Release boundary

pynput remains only in the local development dependency group as a synthetic-input test driver. It is absent from:

  • project runtime dependencies
  • wheel and sdist Requires-Dist
  • packaged openadapt_capture source

The distribution verifier now rejects both pynput and oa-atomacos if either re-enters a release archive.

Verification

  • 265 passed, 7 skipped — full macOS/unit suite excluding the separately scoped browser-bridge test
  • 138 passed, 1 skipped — focused native observer, Recorder, runtime-import, and window contracts
  • ruff check openadapt_capture/
  • git diff --check
  • clean wheel and sdist built from the exact PR head
  • both archives passed scripts/verify_distribution.py
  • wheel contents confirmed all four native observer modules and no forbidden runtime dependency

This is the consolidated replacement for #39. #39 should not merge separately.

@abrichr
abrichr merged commit f0af5a8 into main Jul 23, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant