Skip to content

feat: replace @nut-tree-fork/libnut with @jitsi/robotjs#354

Open
TSavo wants to merge 13 commits into
claude-did-this:mainfrom
TSavo:feature/robotjs-provider
Open

feat: replace @nut-tree-fork/libnut with @jitsi/robotjs#354
TSavo wants to merge 13 commits into
claude-did-this:mainfrom
TSavo:feature/robotjs-provider

Conversation

@TSavo

@TSavo TSavo commented Jan 18, 2026

Copy link
Copy Markdown

Summary

  • Switches from dormant @nut-tree-fork/libnut to actively-maintained @jitsi/robotjs (last updated Jan 2026 by Jitsi)
  • APIs are nearly identical - primarily find-and-replace with minor adjustments
  • Window management methods now return "not supported" (robotjs limitation)

Changes

  • Renamed provider folder from nutjs to robotjs
  • Updated all imports and class names
  • All 147 tests passing

Test plan

  • Build passes
  • All 147 unit tests pass
  • Manual testing: screenshots, mouse move/click, keyboard typing all work

🤖 Generated with Claude Code

Cheffromspace and others added 13 commits July 19, 2025 09:22
This major change replaces the Windows-only keysender library with nutjs (@nut-tree-fork/libnut) to enable cross-platform support for Windows, macOS, and Linux.

## Changes:
- Removed keysender provider implementation and all references
- Added nutjs provider with full keyboard, mouse, screen, and clipboard support
- Updated default provider from keysender to nutjs
- Fixed all TypeScript build errors and test failures
- Updated CI to test on Windows, Ubuntu, and macOS

## Documentation:
- Updated README to reflect cross-platform support
- Added clear build instructions for native compilation
- Clarified project maintenance status (not actively developed)
- Added CHANGELOG.md documenting the migration
- Disabled npm publishing (nutjs requires building from source)

## Breaking Changes:
- Users must build from source (no npm package)
- Requires native build tools (Visual Studio, Python, node-gyp)
- AutoHotkey and PowerShell providers remain Windows-only

All tests pass (152/152) and the project builds successfully.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated dependencies to fix high severity vulnerabilities found by npm audit.
This should resolve CI build failures across all platforms.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
The resizeWindow and repositionWindow methods in the nutjs screen provider
don't use any await expressions, so they don't need to be async. This fixes
ESLint errors and ensures CI builds pass.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
The resizeWindow and repositionWindow methods must be async to match the
ScreenAutomation interface. Added ESLint disable comments for the
require-await rule since these methods don't need await expressions.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This resolves path issues on Windows where prettier command
is not found in the PATH.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Remove the pr-review webhook job as we have a separate workflow for watching PRs.
This will fix the failing CI checks on Dependabot PRs.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Removed the pr-review job from CI workflow and deleted the associated
pr-webhook-utils.cjs file as they are no longer needed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add platform-specific prerequisites for Windows, macOS, and Linux
- Add platform-specific build instructions
- Create comprehensive migration guide from v0.2.0 to v0.3.0+
- Update README to reference migration guide for upgrading users
Resolved conflicts:
- package.json: Kept both nutjs dependencies and updated SDK version
- package-lock.json: Regenerated after resolving package.json
Remove unused @typescript-eslint/no-misused-promises directives that were causing linter warnings

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Switch to @jitsi/robotjs which is an actively maintained fork by Jitsi
(last updated Jan 2026) instead of the dormant @nut-tree-fork/libnut.

The APIs are nearly identical - this was primarily a find-and-replace
operation with some minor adjustments:
- Renamed provider folder from nutjs to robotjs
- Updated all imports and references
- RobotJS uses snake_case for some functions (move_mouse, etc.)
- Window management methods now return "not supported" as robotjs
  doesn't have those APIs

All 147 tests passing.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@TSavo

TSavo commented Jan 18, 2026

Copy link
Copy Markdown
Author

This fork is actively maintained at: https://github.com/TSavo/MCPControl

Changes include:

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.

3 participants