This commit introduces a generic `Store` struct to handle all common database operations, such as connection management and schema initialization. All existing manager structs (`QuicklinkManager`, `SnippetManager`, `FrecencyManager`, `ClipboardHistoryManager`, `AiUsageManager`) have been refactored to use this new abstraction.
Previously, the logic for displaying keyboard shortcuts was all over the place. This commit creates a single KeyboardShortcut component that is responsible for displaying it. It slightly changes some styles in the Kbd component, and also adds the Tauri `os` plugin to determine whether to display Mac symbols or Windows names. It also maps cmd to Ctrl on Windows.
This commit adds a native calculation engine by integrating the pre-compiled SoulverCore Swift library. A Swift package (`SoulverWrapper`) was created to act as a C-compatible FFI bridge, allowing the Rust backend to call into the library (because the library does not include de-mangled names). The build process was updated to compile this Swift wrapper and correctly bundle the necessary shared libraries and resources for both development and production environments. A new Tauri command, `calculate_soulver`, exposes this functionality to the Svelte frontend.
In the future, we will be using this functionality to improve the built-in calculator.
This commit introduces functionality to manage hidden items in the frecency store, including fetching hidden item IDs, hiding items, and deleting frecency entries. Additionally, the apps store is updated to filter out hidden applications based on the new frecency store logic.
This commit replaces the stub in `environment.canAccess(AI)`. The access status is now determined by the backend when a command is launched and is passed to the sidecar process. This allows the `canAccess` function within the plugin's environment to synchronously return the correct access status. In the future, we should probably avoid hardcoding it in the parameter somehow.
This commit moves default model mappings into the backend, making it the single source of truth. The `get_ai_settings` command now merges user-defined settings with these defaults, so the UI always receives a complete and correct configuration. The model selection logic in `ai_ask_stream` was also simplified to use the merged settings, which fixes a bug where the system would use a global fallback instead of the correct model-specific default. Additionally, the `set_ai_settings` command now only persists user overrides, keeping the configuration file clean.
This commit introduces a new AI module that includes schemas for AI requests and responses, as well as event handling for streaming AI responses. It adds functions to manage AI API keys, log usage, and handle streaming data from the AI service.
This commit implements a system for dynamic snippet placeholders, including support for date/time manipulation, clipboard history, and nested snippets. It also adds a flexible modifier system (`uppercase`, `trim`, `percent-encode`, `json-stringify`) that can be chained and applied to any placeholder.
This commit adds a basic file search feature, allowing users to find files and folders within their home directory. The backend consists of a Rust module that builds and maintains a SQLite index of the file system. It performs an initial scan and then uses the `notify` crate to watch for real-time changes.
On the frontend, a new Svelte view provides a dedicated UI for searching. It displays results, file details, and an action bar with options to open the file/folder, show it in the native file manager, copy its path, or move it to the trash.
This commit adds two ways that hides the main window. First, when the user presses escape in the command palette, the window hides; second, when the focus is lost (i.e. the user's cursor goes outside the window), it also hides itself.
Instead of closing the window, this commit changes the event listener so that it simply hides the window instead. This allows for near-instant re-opening of the window, as well as state preservation.
This commit implements the "Search Snippets" feature, providing a dedicated user interface accessible from the main command palette. The new view allows users to search their snippets by name, keyword, or content and see details like usage statistics. This change adds the necessary backend logic for searching and tracking usage, and a new frontend component.
Currently, our application does not support snippets without keywords. We will have to figure out why it's possible to have a text replacement item without the text to replace.
This commit introduces a new `SnippetForm` component for creating snippets, updates the `ViewManager` to handle the new 'create-snippet-form' view, and integrates the form into the main page routing.
This commit implements implements the `inject_text` method using the `enigo` crate for input simulation. A new `ExpansionEngine` is created to listen for keyboard input, maintain a buffer of recent characters, and check against the database for a matching keyword to trigger an expansion.
This commit creates the initial backend infrastructure for the snippets feature. It sets up the core data model, a dedicated `SnippetManager` for database interactions using `rusqlite`, and integrates it into the Tauri application state.
This commit sets up the codebase for the Snippets feature. Specifically, it implements an InputManager trait, which listens for, well, inputs. In the future, we will be using this to keep track of the user's keypresses, triggering the text expansion when the trigger word is entered.
This commit refactors the monolithic `src-tauri/src/clipboard_history.rs` file into a dedicated Rust module with a clear separation of concerns. The original 350+ line file has been broken down into smaller, single-responsibility files for types, encryption, business logic (manager), and the background monitor.
This commit adds a "frecency" (frequency + recency) based ranking algorithm to the command palette. By tracking the usage of commands, applications, and quicklinks, we can provide more useful results when paired with the search score. It prioritizes recently used items, which are likely more relevant for the user. A new `FrecencyManager` was added to the Rust backend to handle usage tracking in a dedicated SQLite database. The `CommandPalette.svelte` component now fetches this data and computes a dynamic score for each item to determine its rank in the list.
This commit introduces new system message schemas and corresponding commands for managing applications, including fetching applications, getting the default application, retrieving the frontmost application, showing an application in Finder, and trashing files.
This commit completely revamps the clipboard history feature to resolve major performance bottlenecks. The backend now uses a more intelligent data model, storing previews and content size in the database to allow for lazy-loading of large clipboard items. The frontend is updated to use paginated, infinite-scrolling lists, and it fetches full item content on-demand, which makes the initial load instantaneous and keeps the UI responsive even with a very large history.
Previously, when built, ignoring cursor events before the window was shown resulted in a panic!() from tao. Now, by moving show() to before the call, the panic is resolved.
Originally, using the built-in `fetch()` resulted in CORS errors because it was fetching from the "frontend", which doesn't work after building. This commit migrates to Tauri's HTTP plugin, which is made for exactly this scenario.
This commit adds the HUD API, allowing extensions to display temporary, non-interactive messages on the screen. The implementation adds a `show_hud` Tauri command that manages a dedicated, borderless Svelte window. This window is dynamically resized to fit its content and is automatically hidden after two seconds.
This commit implements the full api for the Raycast browser extension. It introduces a WebSocket server in the Tauri backend to handle JSON-RPC communication with the companion browser extension. The sidecar now exposes the BrowserExtension module with getTabs and getContent methods, which proxy requests through the frontend to the new backend commands.
This commit accomplishes two things. First of all, Raycast should only ever have one window open (it wouldn't make sense to have multiple). Second, it also allows WMs (specifically Hyprland) to show the window, as it does not support global shortcuts. Instead, by just calling the application again (generally from a `bind =` statement), users can show the window.
This commit adds the ability to install extensions from the UI. It introduces a new `install_extension` command that downloads and extracts the extension files into the local plugins directory. The UI is updated to reflect the installation process, including a loading state for the install button.
Added schemas and message handling for the new get-selected-finder-items command. Implemented the logic to retrieve selected items from the Finder on macOS, Windows, and Linux, enhancing the application's ability to interact with the file system.
Previously, this function was a shell that always rejected. This commit implements the schemas for a new get-selected-text command and updates the SidecarMessageWithPluginsSchema to include the new message type.
Add caching for installed applications, allowing for faster retrieval and reduced scanning overhead. Implemented error handling for cache operations and improved the directory scanning logic to support parallel processing. Added background refresh functionality to keep the cache updated.
Added functionality to the PluginList component to display installed applications alongside plugins. Implemented search filtering for installed apps and integrated app launching capabilities. Updated the page to fetch installed apps from the backend, improving user interaction and experience.