aboutsummaryrefslogtreecommitdiffstats
path: root/crates (follow)
Commit message (Collapse)AuthorAge
* chore(deps): Update to eye-declare v0.2.0 (#3355)Michelle Tilley2026-03-27
| | | | | | | | | | | eye-declare v0.2.0 includes two relevant changes: * "Capture-phase" event handling lets us remove the special-case event handling in `InputBox` that allowed global keyboard binds to work; the `AtuinAi` component now handles this directly. * `Tracked::read()` allows reading fields in tracked state without triggering the dirty-tracking from the `DerefMut` implementation, allowing us to send messages on the app event bus without marking the containing state as dirty.
* feat: Use eye-declare for more performant and flexible AI TUI (#3343)Michelle Tilley2026-03-27
| | | | | | | | | | | | | | | | This PR replaces the mess of custom rendering code in Atuin AI with [eye-declare](https://github.com/BinaryMuse/eye-declare), and updates the TUI to feel more terminal-native: output appears inline and persists in scrollback, so you can scroll up and look at previous conversations for reference. The "review" state — which used to exist between the LLM generating a response and the user either executing or following up — has been removed; just start typing to follow up with the LLM, or press `enter` at the empty input box to execute the suggested command. <img width="1203" height="633" alt="image" src="https://github.com/user-attachments/assets/159ee447-9a2a-4edd-b56e-a79bf1aaaa94" />
* fix: set WorkingDirectory in PowerShell Invoke-AtuinSearch (#3351)James Brooks2026-03-26
| | | | | | | | | Fixes #3350 PowerShell's Set-Location (cd) doesn't update the process-level working directory, so the spawned search process sees a stale cwd and directory filter mode matches against the wrong directory. Setting `WorkingDirectory` on the `ProcessStartInfo` ensures the correct cwd is passed through.
* fix(powershell): handle non-FileSystem drives (#3353)Lucas Trzesniewski2026-03-26
| | | | | | | | | | | | | | | | | | | | | | | | | The current version generates the following error when PowerShell's current directory is on a [non-FileSystem drive](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_providers): > A parameter cannot be found that matches parameter name 'Raw'. Repro: <img width="475" height="166" alt="image" src="https://github.com/user-attachments/assets/72af2dd1-ff80-46e1-936d-808d0563796a" /> <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [x] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [x] I have checked that there are no existing pull requests for the same thing
* fix: remove unnecessary arboard/image-data default feature (#3345)Ross Williams2026-03-25
|
* chore: Prepare 18.13.5 (#3342)Michelle Tilley2026-03-24
|
* fix: Atuin Hex fails to init on bash and zsh (#3341)Michelle Tilley2026-03-24
| | | Fixes #3340
* chore(release): prepare for release 18.13.4 (#3336)Michelle Tilley2026-03-23
|
* fix: Don't run 'atuin init' in 'atuin hex init' — each must be ↵Michelle Tilley2026-03-23
| | | | initialized separately (#3334)
* chore: Refactor CLI auth flows and token storage (#3317)Michelle Tilley2026-03-23
| | | | | | | This PR eplaces the binary `is_hub_sync()` auth routing with an explicit `SyncAuth` enum that classifies the client's authentication state at runtime. This fixes a class of bugs where CLI session tokens were silently mis-stored or used with the wrong auth scheme during Hub migration.
* feat: hex init nu (#3330)Xavier Ruiz2026-03-23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - **feat(hex): add nushell support for `atuin hex init`** - **docs(hex): add nushell hex setup instructions** This adds setup for nushell. It breaks the pattern of calling `eval $(atuin init)` on behalf of the user because nushell simply cannot do this. I tried to source the atuin.nu file and add the preamble to it, but it is part of the atuin package, so it made things too difficult. I think settling for separate init is ok. Partially addresses #3329. Please see #3323 as well. I was able to get it working and I am using these changes in my dotfiles: https://github.com/xav-ie/dots/compare/b1a8cf96b58f802396ac5103f0925e1434fc473c...696dbf31008395587353e3071f5296c459685a17 Basically, I just do as the new docs say and make sure to add hex init before regular init and source it. <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [x] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [x] I have checked that there are no existing pull requests for the same thing
* fix: Disable features in init when that feature is explicitly disabled (#3328)Michelle Tilley2026-03-23
| | | | | | | This PR updates `atuin init` to skip initializers for subfeatures when that subfeature is explicitly disabled with a setting value of `false`. For `ai.enabled = false`, this releases the question mark keybind. Fixes #3325
* feat: Allow running `atuin search -i` as subcommand on Windows (#3250)Lucas Trzesniewski2026-03-20
| | | | | | | | | | | | | | | | | This is the equivalent of #3208, but for Windows. ~The rendering performance is noticeably slower in this mode when refreshing a large part of the screen, but it's better than not having the feature at all.~ Fixed 🙂 The second commit fixes some unrelated warnings. /cc @BinaryMuse FYI ## Checks - [x] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [x] I have checked that there are no existing pull requests for the same thing
* feat: add a small atuin label to the ai box (#3309)Ellie Huxtable2026-03-20
| | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* feat: error if value not provided and no stdinEllie Huxtable2026-03-20
|
* feat: allow setting kv values from stdinEllie Huxtable2026-03-20
|
* fix: Clarify what data is sent when using Atuin AI during setup (only OS and ↵Michelle Tilley2026-03-19
| | | | | | shell) (#3290) Clarifies during `atuin setup` that Atuin AI does not send any shell history to the AI provider.
* fix: remove per-event mouse capture toggling that leaked ANSI to stdout (#3299)Michelle Tilley2026-03-19
| | | | | | | | | | The per-event `EnableMouseCapture`/`DisableMouseCapture` in `handle_input` wrote directly to `std::io::stdout()`, causing ANSI escape sequences to leak into captured output when running under command substitution (e.g. `VAR=$(atuin search -i)`). This toggling became redundant when session-level mouse capture was added to `Stdout::new()`/`Stdout::drop()`. Fixes #3298
* fix(ai): restore url-quote-magic for ? in zsh (#3304)Alex Kirk2026-03-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | I discovered that since #3178, typing or pasting a `?` in a URL no longer gets escaped by `url-quote-magic`. For example, pasting `https://example.com/search?q=foo&test` would result in `https://example.com/search?q=foo\&test` (leave the `?` unescaped, while `&` still worked correctly). The root cause is that Atuin binds `?` to `_atuin_ai_question_mark`, which bypasses `url-quote-magic` in two ways: 1. **Typed `?`**: the else branch (non-empty buffer) appended `?` directly to `LBUFFER` instead of delegating to `self-insert` which runs `url-quote-magic`. 2. **Pasted `?`**: `bracketed-paste-magic` only [activates widgets whose name matches `self-*`](https://github.com/zsh-users/zsh/blob/99f578897614f318cdad76402a7d2423ce176b5a/Functions/Zle/bracketed-paste-magic#L24). Since `_atuin_ai_question_mark` didn't match, pasted `?` characters fell through to `zle .self-insert` — the raw built-in that inserts literally without any URL escaping. The fix renames the widget to `self-atuin-ai-question-mark` (Note: I am not sure this is the best way but it is a relatively simple one). The `self-` prefix satisfies `bracketed-paste-magic`'s `active-widgets` pattern, so `?` in paste is processed by our widget and delegated to `zle self-insert`, restoring `url-quote-magic` behaviour. The typed case delegates to `zle self-insert` in the else branch for the same reason.
* fix: Call ensure_hub_session even if primary sync endpoint is self-hostedMichelle Tilley2026-03-18
|
* chore: Replace atuin-ai rendering with component-oriented system (#3288)Michelle Tilley2026-03-17
|
* feat: Report distro name with OS for distro-specific commands (#3289)Michelle Tilley2026-03-17
|
* chore(release): prepare for release 18.13.3Ellie Huxtable2026-03-16
|
* chore: vendor nucleo-ext + fork, so we can depend on our changes properly ↵Ellie Huxtable2026-03-16
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (#3284) We cannot publish to crates.io without specifying a version, and we cannot do that without properly forking nucleo. We're shipping atuin-nucleo, but will likely drop this if we can get our changes upstream. This is highlighted in the README + manifest, and the original author is still included. Originally forked here: https://github.com/atuinsh/nucleo-ext cc @BinaryMuse - this should just be a vendor + restructure, but would appreciate the sanity check ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
| * vendor nucleo fork into atuin workspaceEllie Huxtable2026-03-16
| | | | | | | | | | | | | | | | | | | | | | | | Rename crates (nucleo → atuin-nucleo, nucleo-matcher → atuin-nucleo-matcher), add to workspace members and dependencies, update all import paths, remove vendored CI workflow, and suppress upstream clippy warnings. format codespell fixes clippy clappy
| * feat: Add custom filtering and scoring mechanismsMichelle Tilley2026-03-16
| |
| * Update readmeMichelle Tilley2026-03-16
| |
| * bring in base nucleoEllie Huxtable2026-03-16
| |
| * specify version in all daemon atuin cratesEllie Huxtable2026-03-16
| |
* | feat: Allow headless account ops against Hub server (#3280)Michelle Tilley2026-03-16
| |
* | chore: symlink changelog so dist can pick it upEllie Huxtable2026-03-16
| |
* | fix: Nushell 0.111; future Nushell 0.112 support (#3266)Stuart Carnie2026-03-16
|/ | | | Fix issue introduced by #3249. Nushell 0.112 will introduce the breaking change; not 0.111.
* chore(release): prepare for release 18.13.2 (#3264)Ellie Huxtable2026-03-13
| | | | | | | | | | | I tried adding a windows arm64 build to the last release, which was perhaps a little naive of me. I thought it working on x86 windows and arm everything else would be enough 💀 ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* chore(release): prepare for release 18.13.1 (#3263)Ellie Huxtable2026-03-13
| | | | | | | | | | We were using buildjet as our runners previously, but it looks like they have gone under. Luckily, GitHub now provides the arm runners we need ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* chore(release): prepare for release 18.13.0 (#3262)Ellie Huxtable2026-03-13
| | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* chore(release): prepare for release 18.13.0-beta.7 (#3259)Ellie Huxtable2026-03-12
| | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* feat: Add `atuin setup` (#3257)Michelle Tilley2026-03-12
|
* chore(release): prepare for release 18.13.0-beta.6 (#3258)Ellie Huxtable2026-03-12
| | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* feat: Initialize Atuin AI by default with `atuin init` (#3255)Michelle Tilley2026-03-11
| | | | | | | * Run Atuin AI's `init` during main `init` for bash, zsh, and fish * Note that logging into Hub will enable sync * Add instructions for users with existing sync accounts * Ensure daemon respects `auto_sync` setting * Update docs on disabling Atuin AI
* fix: ctrl-c not exiting ai (#3256)Ellie Huxtable2026-03-12
| | | | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> Listen to signals as well as state ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* chore(release): prepare for release 18.13.0-beta.5 (#3253)Ellie Huxtable2026-03-11
| | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* feat: Allow authenticating with Atuin Hub (#3237)Michelle Tilley2026-03-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## Summary This PR enables the Atuin CLI to authenticate with Atuin Hub, unifying authentication across CLI sync and Hub features (AI, runbooks, etc.). ### Key Changes - **Dual auth support**: New `AuthToken` enum supports both `Bearer` (Hub) and `Token` (legacy CLI) authentication - **Smart protocol selection**: New `sync_protocol` setting (`auto`/`hub`/`legacy`) determines auth method. By default, `api.atuin.sh` uses Hub auth; custom sync addresses use legacy auth - **Hub login flow**: `atuin login` now initiates an OAuth-like flow for Hub users—generates a code, user authorizes in browser, CLI polls for completion - **Account linking**: After Hub auth, silently attempts to link existing CLI sync account to Hub account for seamless migration - **Graceful fallback**: `sync_auth_token()` prefers Hub token when available, falls back to CLI session token ### Auth Flow 1. User runs `atuin login` (with default sync address) 2. CLI requests auth code from Hub, displays URL 3. User opens URL, logs in/registers on Hub 4. Hub attaches API token to code 5. CLI polls, receives token, saves as hub session 6. If user had existing CLI sync account, it's automatically linked ### Backward Compatibility - Existing self-hosted users: unaffected (legacy auth via `Token` header) - Existing `api.atuin.sh` users: continue working with CLI session until they run `atuin login` - New users: go through Hub flow automatically ## Test Plan - [ ] New user registration via Hub flow - [ ] Existing CLI user can still sync without changes - [ ] `atuin login` links CLI account to Hub account - [ ] Self-hosted users unaffected by changes - [ ] AI commands work after Hub auth --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* chore(release): prepare for release 18.13.0-beta.4 (#3252)Ellie Huxtable2026-03-10
| | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* fix: support Nushell 0.111 (#3249)Stuart Carnie2026-03-10
| | | | | | | | | | The flag for `job spawn` changed, which prevents the script from compiling on Nushell 0.111+. ## Checks - [x] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [x] I have checked that there are no existing pull requests for the same thing
* chore: upgrade axum 0.7 to 0.8 to deduplicate with tonic's axumEllie Huxtable2026-03-09
| | | | | | | atuin-server used axum 0.7 while tonic already pulled in axum 0.8, resulting in both versions compiled into the binary. Migrates to axum 0.8: path params use {param} syntax, FromRequestParts uses native async traits (dropping async-trait dep from atuin-server).
* feat: use pty proxy for rendering tui popups without clearing the terminal ↵Ellie Huxtable2026-03-09
| | | | | | | | | | | | | | | | | | (#3234) It feels much, much nicer this way. This has also been asked for pretty consistently since we made inline rendering the default. Now we can have everything :) Maintains a shadow vt100 renderer so that we can restore the terminal state upon popup close. This happens on a background thread, so our impact on terminal performance should still be super minimal, if anything ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing
* feat: Allow running `atuin search -i` as subcommand (#3208)Michelle Tilley2026-03-09
| | | | | | | | | | | | | | | | | | | Allow `atuin search -i` to work in command substitution contexts like `VAR=$(atuin search -i)`. Previously this would fail with "The cursor position could not be read within a normal duration" because stdout was captured by the subshell, preventing terminal queries from working. Changes: - When stdout isn't a terminal, fall back to /dev/tty for TUI rendering (Unix only) - Force fullscreen mode in this case (inline mode requires cursor position queries that don't work with captured stdout) - Write the selected command to stdout (instead of stderr) when stdout is captured, so it gets assigned to the variable Fixes #3207
* feat: Allow setting multipliers for frequency, recency, and frecency scores ↵Michelle Tilley2026-03-05
| | | | (#3235)
* feat: initial draft of atuin-shell (#3206)Ellie Huxtable2026-03-04
| | | | | | | | | | | | | | | | <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing --------- Co-authored-by: Claude <noreply@anthropic.com>
* fix: clear script database before rebuild to prevent unique constraint ↵Ellie Huxtable2026-03-03
| | | | | | | | | | | | | | | | | | | violation (#3232) The script store build() replays all records from the record store into SQLite but never cleared the database first. Stale rows from previous builds caused unique constraint violations on the name index when scripts were renamed or recreated. <!-- Thank you for making a PR! Bug fixes are always welcome, but if you're adding a new feature or changing an existing one, we'd really appreciate if you open an issue, post on the forum, or drop in on Discord --> ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing