Commit graph

104 commits

Author SHA1 Message Date
ByteAtATime
a974167760
refactor: lowercase tauri product name 2025-07-29 11:18:08 -07:00
ByteAtATime
80667a9fd6 refactor: remove cache dir suffix 2025-07-29 17:51:30 +00:00
ByteAtATime
26ab181caf refactor: use tauri paths for cache path resolving 2025-07-29 17:51:30 +00:00
ByteAtATime
205e6940c4 refactor: update crate name 2025-07-29 17:51:30 +00:00
ByteAtATime
1c429538eb feat: change "raycast" to "flare" in ui 2025-07-29 17:51:30 +00:00
ByteAtATime
956e907bd6 feat: rename package 2025-07-29 17:51:30 +00:00
ByteAtATime
39ad9f6d83 fix: swallow global shortcut errors 2025-07-21 18:41:05 +00:00
ByteAtATime
be460d268f fix: conditionally register global shortcut 2025-07-21 18:41:05 +00:00
ByteAtATime
dbec9fcde5
perf: update Cargo.toml profiles for optimization
This commit adds incremental compilation for the development profile and optimizes the release profile with settings for code generation, link-time optimization, size optimization, panic behavior, and stripping of symbols.

Fixes #4
2025-07-14 09:11:04 -07:00
ByteAtATime
327584f905
feat(snippets): Use rdev by default, fallback to evdev on Wayland
This commit updates the snippet expansion feature to dynamically select an input manager based on the user's display server. It now checks for the `WAYLAND_DISPLAY` environment variable at startup to determine whether to use the `evdev` (for Wayland) or `rdev` (for X11) backend. This change significantly improves compatibility, allowing snippet expansion to function correctly on both major Linux display servers, whereas previously it was limited.
2025-07-12 21:28:16 -07:00
ByteAtATime
2c1542e2a4
feat: remove capabilities logic 2025-07-12 21:19:44 -07:00
ByteAtATime
cae7aa31fd
fix: grant capabilities when initializing evdev input manager 2025-07-12 19:40:12 -07:00
ByteAtATime
ed0303806d
feat: use linux capabilities to set up file permissions 2025-07-12 18:42:36 -07:00
ByteAtATime
7b2720b8c2
ci: add github action for building 2025-07-12 16:26:24 -07:00
ByteAtATime
66f40dc607
refactor: move plugin list request and discovery logic to backend
This commit removes the `sendPluginList` function and its associated calls from the frontend. The plugin discovery logic is now handled directly in the Tauri backend, which is the first step in moving the sidecar to purely be about running plugins.
2025-07-09 09:54:26 -07:00
ByteAtATime
c8b4cb58e0
feat(extensions): add MacOSPathHeuristic for detecting hardcoded macOS paths
This commit introduces a new heuristic, MacOSPathHeuristic, which checks for potential hardcoded macOS paths in file content. The heuristic is added to the existing list of checks in the run_heuristic_checks function, enhancing the compatibility checks for extensions.
2025-07-05 21:13:13 -07:00
ByteAtATime
3ee3787a05
feat(extensions): implement basic heuristic for extension incompatibility
This commit introduces a confirmation dialog for users when installing extensions that may have compatibility issues. It adds a new `ExtensionInstallConfirm` component to display potential violations and allows users to proceed with or cancel the installation. The Rust module has been updated to add these checks and return appropriate results based on user confirmation.

Because many Raycast extensions are built with MacOS in mind, they use Mac APIs not available on other platforms.
2025-07-05 20:33:12 -07:00
ByteAtATime
ef510af02a
refactor(actions): combine Footer into ActionBar
Previously, the two components did basically the same thing. This commit removes Footer in favor of ActionBar. It also extracts a Toast.svelte component, which is now used to render the toast and dropdown in ActionBar.
2025-07-05 13:57:09 -07:00
ByteAtATime
307d862b3b
chore: correctly include swift so libraries at runtime
This commit changes the build process to include Swift shared object files, allowing users to not need to include them at runtime. However, this requires the files to be present in src-tauri/SoulverWrapper/Vendor/SoulverCore-linux at build time.
2025-07-03 14:38:00 -07:00
ByteAtATime
d9d924a40b
fix(build): embed rpath into binary to locate shared object files
The packaged Linux application was failing to launch with a "cannot open shared object file" error because the dynamic linker could not locate the necessary Swift shared libraries (`.so` files).

This was caused by two missing runtime search paths (rpath):
1.  The main `raycast-linux` executable did not have an rpath pointing to the location of `libSoulverWrapper.so`. This is fixed by adding a `-Wl,-rpath,...` linker argument in `build.rs`.

2.  The `libSoulverWrapper.so` library did not have its own rpath to locate its transitive dependency, `libSoulverCoreDynamic.so`. An rpath on an executable is not inherited by the libraries it loads. This is fixed by passing `-Xlinker -rpath` flags to the `swift build` command, embedding the path into the library itself.
2025-07-02 21:41:11 -07:00
ByteAtATime
75182dd4aa
test(backend): add unit tests for caching, usage tracking, and snippet management 2025-07-02 15:25:02 -07:00
ByteAtATime
e2f40553ac
test(backend): add initial tests for soulver, encryption, and snippet engine 2025-07-02 15:10:12 -07:00
ByteAtATime
beafaffb73
feat(tauri): update window dimensions to 774x474 2025-06-30 11:50:17 -07:00
ByteAtATime
20395ae8ee
style(backend): formatting 2025-06-30 11:06:09 -07:00
ByteAtATime
dc38b38611
feat(backend): only hide window on unfocus in production 2025-06-30 09:30:50 -07:00
ByteAtATime
cfbd31f51b
refactor(backend): implement Storable trait and refactor database operations
This commit introduces the `Storable` trait to standardize the conversion of database rows into application data structures. It refactors existing manager implementations (`AiUsageManager`, `FrecencyManager`, `QuicklinkManager`, `SnippetManager`) to utilize the new `query` and `execute` methods in the `Store` struct.
2025-06-29 16:11:34 -07:00
ByteAtATime
7156827585
refactor(backend): abstract database logic into generic Store
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.
2025-06-29 15:48:03 -07:00
ByteAtATime
8852c73f5a
feat(actions): improve keyboard shortcut display
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.
2025-06-29 11:32:18 -07:00
ByteAtATime
323697284b
style: formatting 2025-06-29 11:18:49 -07:00
ByteAtATime
10d6709b44
feat(soulver): add ResultFormatter for evaluation results
This commit introduces the ResultFormatter function, which formats various evaluation results based on their type.
2025-06-29 10:12:05 -07:00
ByteAtATime
9913fb539f
feat(soulver): implement RaycastCurrencyProvider for real-time currency rates
This commit introduces the RaycastCurrencyProvider class, which fetches and updates currency rates from external APIs. It also uses EngineCustomization.standard, simply initializing the ResourceBundle instead of passing it in. This fixed a previous configuration error where something in the custom configuration wasn't set, causing it to not convert cryptocurrencies somehow.
2025-06-28 22:11:56 -07:00
ByteAtATime
5a5e609992
feat(calculator): replace mathjs with SoulverCore
This commit replaces the `mathjs` library with the native SoulverCore engine for all calculations within the command palette. It updates the Swift wrapper to expose SoulverCore's functionality and modified the frontend to use the `calculate_soulver` command for evaluating expressions.
2025-06-28 20:22:44 -07:00
ByteAtATime
5f1ad1c84a
feat(calculator): initialize basic SoulverCore library
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.
2025-06-28 20:08:43 -07:00
ByteAtATime
398ed86c40
feat(command-palette): add action bar to command palette
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.
2025-06-28 14:44:05 -07:00
ByteAtATime
640ef53118
feat(ai): implement environment.canAccess(AI)
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.
2025-06-27 18:52:58 -07:00
ByteAtATime
5dafd76912
fix(ai): refactor AI model settings and fallback logic
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.
2025-06-27 18:27:53 -07:00
ByteAtATime
87751b30ca
feat(ai): implement AI API
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.
2025-06-27 15:58:05 -07:00
ByteAtATime
2437ad7d61
feat(snippets): implement dynamic placeholders and modifiers
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.
2025-06-26 15:34:33 -07:00
ByteAtATime
e2316cf949
feat(file-search): implement file and folder search with indexing
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.
2025-06-26 14:27:30 -07:00
ByteAtATime
58e48213bd
feat: Implement hide on escape and focus loss
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.
2025-06-25 14:31:21 -07:00
ByteAtATime
9d73ac0a23
feat(app): hide window instead of closing
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.
2025-06-25 14:18:06 -07:00
ByteAtATime
e32cc6223d
feat(snippets): implement Search Snippets command
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.
2025-06-25 11:32:02 -07:00
ByteAtATime
59174dddca
feat(snippets): reduce delay before typing
Previously, we had a 50ms delay between deleting and pasting, as well as a 10ms delay between each keypress. This was intended to be on the safe side and sure the contents get resolved before pasting. However, the delay was a bit overkill, and this commit changes it to 5ms/2ms.
2025-06-25 11:03:52 -07:00
ByteAtATime
b1c4693998
refactor(snippets): simplify key mapping and state management
This commit replaces the large, brittle `match` statements for key mapping with `lazy_static` `HashMap`s, making the logic declarative and much easier to update.
2025-06-25 10:34:15 -07:00
ByteAtATime
3054b5bfb1
refactor(snippets): extract clipboard handling into a separate function
This commit refactors the `inject_text` method in both `RdevInputManager` and `EvdevInputManager` to utilize a new `with_clipboard_text` function for clipboard operations.
2025-06-25 10:15:07 -07:00
ByteAtATime
a34968f851
feat(snippets): use clipboard to type text
This commit changes the `inject_text` method in both `RdevInputManager` and `EvdevInputManager` to utilize clipboard functionality for text input. This allows for both instantaneous snippet resolving as well as the ability to type symbols not on the keyboard (e.g. ⌘)
2025-06-25 10:07:49 -07:00
ByteAtATime
9667dd62fb
feat(clipboard-history): add internal clipboard change tracking and expose manager module
This commit introduces an `AtomicBool` to track internal clipboard changes. This way, we can safely use the clipboard to "type" text without it getting tracked by the clipboard history.
2025-06-25 10:06:58 -07:00
ByteAtATime
6365d18cdb
style(backend): formatting 2025-06-25 08:38:24 -07:00
ByteAtATime
56813684e1
feat(snippets): add import snippet feature
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.
2025-06-25 08:38:14 -07:00
ByteAtATime
b68c4ccb6e
feat(snippets): implement snippet placeholder resolution
This commit introduces a new method to parse and resolve placeholders in snippet content, allowing for dynamic content insertion such as clipboard text, current date, and time. Additionally, it implements cursor positioning for better user experience during snippet expansion.
2025-06-24 20:50:55 -07:00