Skip to content

feat(quick-tools): move Quick Tools and the assistant panel to the native desktop - #6707

Open
ARE404 wants to merge 8 commits into
apache:rust-previewfrom
ARE404:feat/quick-tools-rust
Open

ARE404 wants to merge 8 commits into
apache:rust-previewfrom
ARE404:feat/quick-tools-rust

Conversation

@ARE404

@ARE404 ARE404 commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Moves Quick Tools and the assistant panel from the Electron app to the native Rust desktop on rust-preview.

  • Panel: the launcher is a nonactivating NSPanel hosting an NSH view. Summoning it gives the panel the keyboard without activating Maka. The app the user was in stays frontmost and keeps its menu bar, as with Spotlight and Raycast. Closing the panel returns to that app.
  • Off by default: a fresh install registers no global shortcut. Turning on "唤起快捷工具" in settings binds Alt+Space, and the user can rebind it.
  • Settings: Quick Tools is managed from the main app's settings. Plugin rows show the manifest description muted after the name. The expanded command list lines up with the plugin name and adds alias and shortcut columns. SettingsRow gains an optional note for this.
  • Plugins: the built-in tools (applications, files, Chrome tabs, Bilibili, clipboard, snippets, notes, calculator, symbols, screenshot, assistant) run on the new runtime. scripts/quick-tools/import-legacy.mjs imports Electron-era data.
  • Settings migration: a fix that moves the retired privacy field out of existing profiles.

Verification

  • node --test products/maka/workbench/tests/quick-tools.test.mjs: 11 passed
  • plugin-sdk generate.mjs check: 5 runtime declaration files verified
  • UI types example plus tsc: pass
  • npx biome format on the touched TS/TSX files: clean
  • cargo build --locked -p maka-cli -p maka-desktop-shell -p maka-host-shell: pass; quick_tools unit tests pass
  • Manual checks in the dev app (node scripts/quick-tools/run.mjs --root <temp>):
    • with a fresh data root the launcher toggle is off, and turning it on shows ⌥Space
    • the settings page shows descriptions inline, and the command column aligns with plugin names
  • Not yet checked by hand: with another app frontmost, press ⌥Space and confirm typing and ⌘V work in the panel while that app stays active.
  • Not run: the repo-wide biome format (it already fails on files this branch doesn't touch) and cargo fmt --check (its only diff is pre-existing, in quick_tools/mod.rs).

AI use

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope: Claude Code and Codex helped with implementation and debugging; the design, review and testing are mine.

Checklist

  • Tests cover the change and fail without it
  • Format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

GPUI was replaced by the NSH native backends on rust-preview, so the
Quick Tools panel now runs as a nonactivating NSPanel subclass that
hosts an NSH AppView instead of a GPUI window.

- panel.rs: QuickPanel (NSPanel) with becomeKey/resignKey hooks,
  present/dismiss that restore the previous app, and a file picker
  shown as a sheet on the panel so it never activates the app or
  hands key status to the main window.
- appkit.rs: connect the quick-tools control on startup, reconnect on
  follow(), and close panels on quit and barrier.
- Cargo.toml: drop GPUI deps, add objc2 / objc2-app-kit / block2.
- bundle tsconfig: exclude quick-tools runtime/ and tools/, which are
  NSH UI-side sources checked by the ui_types step.
- Remove the leftover MAKA_GPUI env var and GPUI wording in the README.
…cher off

The panel now becomes key as a nonactivating panel without activating
Maka, so the app the user was in keeps its menu bar and focus, as
Spotlight and Raycast do.

A fresh install registers no global shortcut; turning the launcher on in
settings still picks Alt+Space.
…tings

Settings rows take an optional note, shown muted after the label and
truncated first. Plugin rows use it for the manifest description, the
expanded command list lines up with the plugin name and keeps the row
background, and four built-in descriptions are rewritten to fit one line.
@ARE404
ARE404 force-pushed the feat/quick-tools-rust branch from bc465c6 to a17b233 Compare November 8, 2026 16:09

This branch has not been deployed

No deployments
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