Skip to content

feat(mac): Cross-platform keyboard/mouse control via Hammerspoon#278

Merged
seonglae merged 1 commit into
mainfrom
feature/cross-platform-input
Feb 4, 2026
Merged

feat(mac): Cross-platform keyboard/mouse control via Hammerspoon#278
seonglae merged 1 commit into
mainfrom
feature/cross-platform-input

Conversation

@seonglae
Copy link
Copy Markdown
Owner

@seonglae seonglae commented Feb 4, 2026

Summary

  • Add macOS equivalent to Windows AHK input control using Hammerspoon
  • Implement platform detection in Run.vue to automatically choose the appropriate backend
  • Create @intuiter/mac-input package with modular Lua configuration

Features

Mouse Control (Cmd + IJKL)

  • Smooth, accelerated mouse movement via keyboard
  • Diagonal movement support (hold two keys)
  • Ctrl modifier for instant max speed

Mouse Clicks

  • Cmd + U: Left click (hold for drag)
  • Cmd + O: Right click
  • Cmd + M: Middle click

Scrolling

  • Alt + U/O: Scroll up/down
  • Alt + Shift + U/O: Scroll left/right

Text Navigation (Alt + IJKL)

  • Alt + I/K: Arrow up/down
  • Alt + J/L: Word left/right (Option+Arrow on Mac)
  • Alt + Shift + variants: Select while moving
  • Alt + Ctrl + variants: Repeat while held

Text Selection

  • Alt + W: Select word (press twice for line)
  • Alt + A: Select line (press twice for paragraph)

Architecture

packages/
  ahk/           # Windows (existing)
  mac-input/     # macOS (new)
    hammerspoon/
      init.lua   # Entry point
      config.lua # Settings (mirrors AHK const.ahk)
      mouse.lua  # Mouse movement, clicks, scroll
      text.lua   # Text navigation and selection
    scripts/
      install.js   # Setup Hammerspoon config
      uninstall.js # Cleanup

Platform Detection

Run.vue now detects the OS and uses:

  • Windows (win32): AutoHotkey via existing flow
  • macOS (darwin): Hammerspoon via new flow

Test plan

  • Verify Windows AHK functionality unchanged
  • Test macOS Hammerspoon installation via script
  • Test mouse movement (all directions, diagonals)
  • Test mouse clicks (left, right, middle)
  • Test scrolling (vertical, horizontal)
  • Test text navigation shortcuts
  • Test text selection shortcuts
  • Verify Electron app detects platform correctly

Prerequisites for macOS

  1. Hammerspoon installed: brew install --cask hammerspoon
  2. Accessibility permissions granted in System Preferences

Generated with Claude Code

@bolt-new-by-stackblitz
Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

Implements macOS equivalent to Windows AHK input control:

- Mouse movement via Cmd+IJKL (smooth, accelerated)
- Mouse clicks via Cmd+U/O/M (left/right/middle)
- Scrolling via Alt+U/O and Cmd+H/P
- Text navigation via Alt+IJKL (word/line movement)
- Text selection shortcuts via Alt+W/A

Platform detection in Run.vue automatically chooses:
- Windows: AutoHotkey (existing)
- macOS: Hammerspoon (new)

Configuration mirrors AHK settings in const.ahk for consistency.
Installation scripts handle Hammerspoon setup via Homebrew.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
@seonglae seonglae force-pushed the feature/cross-platform-input branch from 9e0ee59 to d7a875b Compare February 4, 2026 21:41
@seonglae seonglae merged commit 4c0e8f8 into main Feb 4, 2026
4 checks passed
@seonglae seonglae deleted the feature/cross-platform-input branch February 4, 2026 21:42
seonglae added a commit that referenced this pull request Apr 11, 2026
…278)

Implements macOS equivalent to Windows AHK input control:

- Mouse movement via Cmd+IJKL (smooth, accelerated)
- Mouse clicks via Cmd+U/O/M (left/right/middle)
- Scrolling via Alt+U/O and Cmd+H/P
- Text navigation via Alt+IJKL (word/line movement)
- Text selection shortcuts via Alt+W/A

Platform detection in Run.vue automatically chooses:
- Windows: AutoHotkey (existing)
- macOS: Hammerspoon (new)

Configuration mirrors AHK settings in const.ahk for consistency.
Installation scripts handle Hammerspoon setup via Homebrew.

Co-authored-by: seonglae <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
seonglae added a commit that referenced this pull request May 14, 2026
* deps: Update dependency nuxt to v3

* deps: Update dependency electron to v20.3.7

* deps: Update all non-major dependencies

* chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2

Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](SamVerschueren/decode-uri-component@v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update dependency @types/node to v18.11.18

* chore(deps): bump json5 from 1.0.1 to 1.0.2

Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](json5/json5@v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update Node.js to >=v18.13.0

* deps: Update all non-major dependencies

* deps: Update dependency electron to v20.3.10

* deps: Update all non-major dependencies

* chore(deps): bump jszip from 3.7.1 to 3.10.1

Bumps [jszip](https://github.com/Stuk/jszip) from 3.7.1 to 3.10.1.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/main/CHANGES.md)
- [Commits](Stuk/jszip@v3.7.1...v3.10.1)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1

Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](kornelski/http-cache-semantics@v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update dependency vuetify to v3

* deps: Update all non-major dependencies

* deps: Update dependency @nuxt/typescript-build to v3

* deps: Update all non-major dependencies

* deps: Update dependency ini to v4

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update dependency electron to v24

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* meta: update weekly schedule renovate.json5

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update dependency @types/node to v18.16.13

* deps: Update all non-major dependencies

* deps: Update dependency electron to v25

* deps: Update all non-major dependencies

* chore(deps): bump vite from 4.0.4 to 4.3.9

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.0.4 to 4.3.9.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.3.9/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update dependency electron-builder to v24

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* fix: remove node from renovate.json5

* chore(deps): bump semver from 5.7.1 to 5.7.2

Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](npm/node-semver@v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* feat: automerge added to renovate.json5

* deps: Update all non-major dependencies

* deps: Update dependency electron to v26

* deps: Update dependency @types/node to v18.17.6

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update dependency @types/node to v18.17.13

* deps: Update all non-major dependencies

* deps: Update actions/checkout action to v4

* deps: Update dependency @types/node to v18.17.15

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* deps: Update all non-major dependencies

* docs: update README.md for meta intuiter info

* deps: Update all non-major dependencies

* chore(deps): bump postcss from 8.4.19 to 8.4.31

Bumps [postcss](https://github.com/postcss/postcss) from 8.4.19 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](postcss/postcss@8.4.19...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update dependency electron to v27

* deps: Update Node.js to >=18.18.2

* chore(deps): bump undici from 5.23.0 to 5.26.3

Bumps [undici](https://github.com/nodejs/undici) from 5.23.0 to 5.26.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v5.23.0...v5.26.3)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump @babel/traverse from 7.22.11 to 7.23.2

Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.11 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update dependency electron to v27.0.2

* chore(deps): bump browserify-sign from 4.2.1 to 4.2.2

Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](browserify/browserify-sign@v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* deps: Update all non-major dependencies

* deps: Update Node.js to v20

* deps: Update actions/setup-node action to v4

* deps: Update all non-major dependencies

* chore(deps): bump vite from 4.3.9 to 4.5.2

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.3.9 to 4.5.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* Delete .github/workflows/semgrep.yml

* chore(deps): bump undici from 5.26.3 to 5.28.3

Bumps [undici](https://github.com/nodejs/undici) from 5.26.3 to 5.28.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v5.26.3...v5.28.3)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump ip from 2.0.0 to 2.0.1

Bumps [ip](https://github.com/indutny/node-ip) from 2.0.0 to 2.0.1.
- [Commits](indutny/node-ip@v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 4.5.2 to 4.5.3

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.2 to 4.5.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump undici from 5.28.3 to 5.28.4

Bumps [undici](https://github.com/nodejs/undici) from 5.28.3 to 5.28.4.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v5.28.3...v5.28.4)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump tar from 6.1.11 to 6.2.1

Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.11 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](isaacs/node-tar@v6.1.11...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump ejs from 3.1.9 to 3.1.10

Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](mde/ejs@v3.1.9...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump ws from 8.14.2 to 8.17.1

Bumps [ws](https://github.com/websockets/ws) from 8.14.2 to 8.17.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](websockets/ws@8.14.2...8.17.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps-dev): bump nuxt from 3.8.0 to 3.12.4

Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 3.8.0 to 3.12.4.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v3.12.4/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps-dev): bump webpack from 4.47.0 to 5.94.0

Bumps [webpack](https://github.com/webpack/webpack) from 4.47.0 to 5.94.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](webpack/webpack@v4.47.0...v5.94.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump micromatch from 4.0.4 to 4.0.8

Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.4 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](micromatch/micromatch@4.0.4...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 5.3.5 to 5.4.6

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.3.5 to 5.4.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump serve-static from 1.15.0 to 1.16.2

Bumps [serve-static](https://github.com/expressjs/serve-static) from 1.15.0 to 1.16.2.
- [Release notes](https://github.com/expressjs/serve-static/releases)
- [Changelog](https://github.com/expressjs/serve-static/blob/v1.16.2/HISTORY.md)
- [Commits](expressjs/serve-static@v1.15.0...v1.16.2)

---
updated-dependencies:
- dependency-name: serve-static
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump rollup from 4.20.0 to 4.22.4

Bumps [rollup](https://github.com/rollup/rollup) from 4.20.0 to 4.22.4.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](rollup/rollup@v4.20.0...v4.22.4)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump cross-spawn from 7.0.3 to 7.0.6

Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](moxystudio/node-cross-spawn@v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 5.4.6 to 5.4.14

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.6 to 5.4.14.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.14/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.14/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump undici from 5.28.4 to 5.28.5

Bumps [undici](https://github.com/nodejs/undici) from 5.28.4 to 5.28.5.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v5.28.4...v5.28.5)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump serialize-javascript from 6.0.1 to 6.0.2

Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/yahoo/serialize-javascript/releases)
- [Commits](yahoo/serialize-javascript@v6.0.1...v6.0.2)

---
updated-dependencies:
- dependency-name: serialize-javascript
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps-dev): bump nuxt from 3.12.4 to 3.16.0

Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 3.12.4 to 3.16.0.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v3.16.0/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 6.2.2 to 6.2.3

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.2 to 6.2.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 6.2.3 to 6.2.4

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.3 to 6.2.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 6.2.4 to 6.2.5

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.4 to 6.2.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 6.2.5 to 6.2.6

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.5 to 6.2.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 6.2.6 to 6.3.4

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* feat(ui): add documentation tab

* fix: keep screen saver active when launching

* feat(custom-hotkeys): allow win+1..0 app shortcuts

* feat: add CapsLock toggle for shortcuts

* refactor: update resources/ahk/src/win/app_shortcut.ahk

Co-authored-by: Copilot <[email protected]>

* refactor: update resources/ahk/runner.ahk

Co-authored-by: Copilot <[email protected]>

* fix: update src/renderer/components/templates/Custom.vue

Co-authored-by: Copilot <[email protected]>

* refactor: update resources/ahk/src/win/global_win.ahk

Co-authored-by: Copilot <[email protected]>

* chore: remove VirtualDesktopAccessor dll

* feat: add auto update support

* chore(deps-dev): bump electron from 27.0.3 to 28.3.2

Bumps [electron](https://github.com/electron/electron) from 27.0.3 to 28.3.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](electron/electron@v27.0.3...v28.3.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 28.3.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump form-data from 4.0.0 to 4.0.4

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump tmp from 0.2.1 to 0.2.4

Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.1 to 0.2.4.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](raszi/node-tmp@v0.2.1...v0.2.4)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps-dev): bump electron from 28.3.2 to 35.7.5

Bumps [electron](https://github.com/electron/electron) from 28.3.2 to 35.7.5.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](electron/electron@v28.3.2...v35.7.5)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 35.7.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump devalue from 5.1.1 to 5.3.2

Bumps [devalue](https://github.com/sveltejs/devalue) from 5.1.1 to 5.3.2.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](sveltejs/devalue@v5.1.1...v5.3.2)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 6.3.4 to 6.3.6

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.4 to 6.3.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.3.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps-dev): bump nuxt from 3.16.0 to 3.19.0

Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 3.16.0 to 3.19.0.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v3.19.0/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-version: 3.19.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump vite from 7.1.5 to 7.1.11

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.5 to 7.1.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.1.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.1.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump @nuxt/devtools from 2.6.3 to 2.7.0

Bumps [@nuxt/devtools](https://github.com/nuxt/devtools/tree/HEAD/packages/devtools) from 2.6.3 to 2.7.0.
- [Release notes](https://github.com/nuxt/devtools/releases)
- [Changelog](https://github.com/nuxt/devtools/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nuxt/devtools/commits/v2.7.0/packages/devtools)

---
updated-dependencies:
- dependency-name: "@nuxt/devtools"
  dependency-version: 2.7.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump js-yaml from 4.1.0 to 4.1.1

Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* chore(deps): bump node-forge from 1.3.1 to 1.3.2 (#273)

Bumps [node-forge](https://github.com/digitalbazaar/forge) from 1.3.1 to 1.3.2.
- [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md)
- [Commits](digitalbazaar/forge@v1.3.1...v1.3.2)

---
updated-dependencies:
- dependency-name: node-forge
  dependency-version: 1.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump devalue from 5.3.2 to 5.6.2 (#274)

Bumps [devalue](https://github.com/sveltejs/devalue) from 5.3.2 to 5.6.2.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](sveltejs/devalue@v5.3.2...v5.6.2)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.6.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump h3 from 1.15.4 to 1.15.5 (#275)

Bumps [h3](https://github.com/h3js/h3) from 1.15.4 to 1.15.5.
- [Release notes](https://github.com/h3js/h3/releases)
- [Changelog](https://github.com/h3js/h3/blob/v1.15.5/CHANGELOG.md)
- [Commits](h3js/h3@v1.15.4...v1.15.5)

---
updated-dependencies:
- dependency-name: h3
  dependency-version: 1.15.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump lodash from 4.17.21 to 4.17.23 (#276)

Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* experiment: tauri v2 prototype

- Add Tauri v2 Rust backend with AHK process management
- Create tauri.conf.json configuration
- Add Vue 3 + Vuetify frontend in src-vue/
- Implement spawn_ahk, kill_ahk, restart_ahk commands
- Document migration notes and benefits

Bundle size: ~10-15MB vs ~150MB (Electron)

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* refactor: move AHK to packages/ with minimal changes (#277)

- Move resources/ahk to packages/ahk
- Add packages/ahk-builder for AHK compilation
- Add workspaces to package.json
- Update builder.config.js path
- Keep src/renderer and electron-nuxt intact

This is a minimal restructure that organizes AHK into a package
while maintaining full compatibility with the existing build system.

Co-authored-by: seonglae <[email protected]>

* experiment: electron-vite prototype (#279)

- Add electron-vite configuration
- Create TypeScript main process with AHK spawning
- Add preload script with IPC APIs
- Create Vue 3 + Vuetify renderer
- Document migration notes

Co-authored-by: seonglae <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>

* feat(mac): add cross-platform keyboard/mouse control via Hammerspoon (#278)

Implements macOS equivalent to Windows AHK input control:

- Mouse movement via Cmd+IJKL (smooth, accelerated)
- Mouse clicks via Cmd+U/O/M (left/right/middle)
- Scrolling via Alt+U/O and Cmd+H/P
- Text navigation via Alt+IJKL (word/line movement)
- Text selection shortcuts via Alt+W/A

Platform detection in Run.vue automatically chooses:
- Windows: AutoHotkey (existing)
- macOS: Hammerspoon (new)

Configuration mirrors AHK settings in const.ahk for consistency.
Installation scripts handle Hammerspoon setup via Homebrew.

Co-authored-by: seonglae <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>

* fix(tauri): fix Hammerspoon integration and UI issues

- Fix Hammerspoon check to not fail when not installed
- Add process plugin for exit functionality
- Fix dancing button size to 200x200 with centered play icon
- Fix transparent window and border-radius for rounded corners
- Add uppercase tabs and proper title styling
- Update capabilities with process permissions

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): restore original design and add Custom tab UI

- Restore title to original: "Intuit Manager" with text-uppercase
- Fix Exit button color (remove bg class, use color prop)
- Add Custom tab with Cmd+1-0 text fields like original
- Keep other tabs as "Developing" placeholder

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): restore original button shape and implement all tabs

- Fix dancing button to original 200x60 shape (not 200x200)
- Make "INTUIT" bold in title
- Option tab: startup/menubar/notifications switches
- Shortcut tab: keyboard shortcuts table
- Extension tab: mode list (text/mouse/window)
- Custom tab: Cmd+1-0 path fields

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* refactor: migrate from Vue/Vuetify to React/Tailwind

- Replace Vue with React
- Use Tailwind CSS utility classes (no custom CSS)
- Implement all tabs with center alignment
- Original dancing button (200x60)
- Title: bold INTUIT, light MANAGER

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): remove Exit button border

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): add button colors and fix window transparency

- Add teal/cyan colors to dancing button
- Ensure html/body/root have transparent backgrounds
- Fix rounded corners

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): add explicit white text color and fix header

- Add text-white to root container
- Fix header background color
- Remove custom button colors (use defaults)

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): restore original title format

- Add space between Intuit and Manager
- Remove bold from Intuit (keep light on Manager)
- Match original: "INTUIT MANAGER"

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): INTUIT bold, no space, MANAGER light

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): enforce minimum height 600px

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* refactor: use Tailwind @apply instead of raw CSS

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fix(ui): use fixed positioning for full window height

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>

* chore: add src-tauri/target to gitignore

* fix(ci): add .npmrc with legacy-peer-deps to resolve npm ci failure

The Nuxt 2 leftover devDependency @nuxtjs/composition-api requires
peer nuxt@^2.15 while the project upgraded to [email protected], causing
ERESOLVE during npm ci on CI.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* fix(ci): remove darwin-only os field from mac-input workspace

The "os": ["darwin"] restriction caused `npm ci` to fail with
EBADPLATFORM on Linux/Windows CI runners. The package only contains
manually-invoked Hammerspoon install scripts (no postinstall), so
removing the restriction lets it install harmlessly on all platforms
without changing actual behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* fix(ci): drop darwin os field from mac-input entry in package-lock

The lockfile preserved the old "os": ["darwin"] constraint, which
npm ci treats as authoritative. Removing it from package-lock.json so
the EBADPLATFORM error on Linux CI is actually resolved.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* fix(ci): regenerate package-lock.json to include all platform binaries

The previous lockfile was generated on darwin and was missing
platform-specific optional dependencies (e.g. @rollup/rollup-linux-x64-gnu)
due to npm bug #4828. This caused vite build to fail on Linux runners
with "Cannot find module @rollup/rollup-linux-x64-gnu".

Regenerated the lockfile from scratch so it includes all platform
variants, allowing npm ci to install the correct rollup binary on each
runner OS.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* fix(ci): install Tauri Linux system deps in test job

The test job runs on ubuntu-latest and runs `cargo check` against the
Tauri Rust crates, which depend on glib-sys / gobject-sys / webkit2gtk.
Without libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev, and
patchelf installed, pkg-config can't find glib-2.0 / gobject-2.0 and
the build script fails.

The build job already has this step; mirroring it into the test job.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* fix(ci): use tauri CLI binary instead of cargo subcommand

The workflow installs Tauri CLI via `npm install -g @tauri-apps/cli`,
which exposes a `tauri` binary, not the `cargo tauri` subcommand.
Calling `cargo tauri build` therefore failed with "no such command:
tauri" on all four build matrix platforms.

Switched to `tauri build --target ...` to use the globally-installed
npm binary directly.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: seonglae <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
Co-authored-by: Seonglae Cho <[email protected]>
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