P2 — add an extensible command palette and desktop capability registry #91

Open
opened 2026-08-12 14:44:15 +00:00 by lost-rob0t · 0 comments
lost-rob0t commented 2026-08-12 14:44:15 +00:00 (Migrated from github.com)

Motivation

Zara needs a keyboard-first command surface, and future plugins should be able to contribute desktop capabilities without receiving arbitrary Qt internals.

Scope

  • Add a global/in-app Zara command palette with filtering and keyboard navigation.
  • Register core commands such as Ask Zara, Open Chat, Explain/Summarize Clipboard, Analyze File, Search Files, Voice Mode, timer actions and Settings only when their backing capabilities exist.
  • Introduce a capability-oriented desktop extension registry for descriptors such as command, context provider, tray action, notification action, settings section, chat action and event listener.
  • Keep raw Qt application/window objects private to desktop implementation.
  • Isolate plugin callback failures and expose diagnostic status.
  • Reuse existing tool/plugin search paths/configuration rather than create an unrelated plugin location.

Acceptance criteria

  • Palette supports deterministic keyboard filtering/navigation/activation.
  • Commands are registered through descriptors, not hard-coded widget reach-through.
  • Plugins can contribute allowed desktop capabilities without arbitrary access to Qt internals.
  • Capability availability controls whether actions are enabled/visible.
  • Duplicate command IDs fail clearly.
  • A crashing extension is isolated and surfaced in diagnostics without taking down the desktop shell.
  • Existing LangChain tool plugins continue working unchanged unless they opt into desktop capabilities.

Testing requirements

  • Unit tests for registration, duplicate IDs, filtering, ordering and capability gating.
  • Plugin failure-isolation tests.
  • Qt keyboard-navigation/activation tests.
  • Security tests proving plugins are not handed unrestricted desktop objects by default.
  • Full repository/Nix suite.

Dependencies

  • #83 RuntimeHost commands.
  • #84 desktop shell.
  • #86 Quick Copilot for summon/palette integration where appropriate.
  • Design: #81.

Explicit non-goals

  • No arbitrary plugin QWidget injection by default.
  • No replacement of the existing tool registry.
  • No plugin marketplace/network installer.
  • No permission bypass for tools or context providers.
## Motivation Zara needs a keyboard-first command surface, and future plugins should be able to contribute desktop capabilities without receiving arbitrary Qt internals. ## Scope - Add a global/in-app Zara command palette with filtering and keyboard navigation. - Register core commands such as Ask Zara, Open Chat, Explain/Summarize Clipboard, Analyze File, Search Files, Voice Mode, timer actions and Settings only when their backing capabilities exist. - Introduce a capability-oriented desktop extension registry for descriptors such as command, context provider, tray action, notification action, settings section, chat action and event listener. - Keep raw Qt application/window objects private to desktop implementation. - Isolate plugin callback failures and expose diagnostic status. - Reuse existing tool/plugin search paths/configuration rather than create an unrelated plugin location. ## Acceptance criteria - [ ] Palette supports deterministic keyboard filtering/navigation/activation. - [ ] Commands are registered through descriptors, not hard-coded widget reach-through. - [ ] Plugins can contribute allowed desktop capabilities without arbitrary access to Qt internals. - [ ] Capability availability controls whether actions are enabled/visible. - [ ] Duplicate command IDs fail clearly. - [ ] A crashing extension is isolated and surfaced in diagnostics without taking down the desktop shell. - [ ] Existing LangChain tool plugins continue working unchanged unless they opt into desktop capabilities. ## Testing requirements - Unit tests for registration, duplicate IDs, filtering, ordering and capability gating. - Plugin failure-isolation tests. - Qt keyboard-navigation/activation tests. - Security tests proving plugins are not handed unrestricted desktop objects by default. - Full repository/Nix suite. ## Dependencies - #83 RuntimeHost commands. - #84 desktop shell. - #86 Quick Copilot for summon/palette integration where appropriate. - Design: #81. ## Explicit non-goals - No arbitrary plugin `QWidget` injection by default. - No replacement of the existing tool registry. - No plugin marketplace/network installer. - No permission bypass for tools or context providers.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/zara#91
No description provided.