aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
...
* docs: Minor readability improvement to README (#3381)Anirudh Vempati2026-04-07
| | | | | | | | | | | | <!-- 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
* docs: cover prefix mode properly (#3383)Ellie Huxtable2026-04-07
| | | | | | | | | | | | <!-- 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 support for deleting all matching commands via keybindings (#3375)Ellie Huxtable2026-04-04
|
* feat: option to disable mouse support (#3372)依云2026-04-03
| | | | | | | | | | | | | | | | | | | | | | <!-- 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 This adds an option to disable mouse support, so that the terminal handles mouse events, making it easy to select text. I've found myself needing to copy from history frequently recently and holding Shift is not convenient. However, this makes mouse scrolling not work as expected, e.g. in my case it scrolls six lines at a time. Also see #1209.
* fix(ui): when inverted, invert scroll events handling (#3373)依云2026-04-03
| | | | | | | | | | | | <!-- 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
* docs: remove docker-compose duplication (#3376)Ellie Huxtable2026-04-03
| | | | | | | | | | | | | | It does not make sense to have two copies of it to keep in sync The user needs to read and edit this file anyway, so prefer keeping the docs copy resolves #3371 ## 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 config' subcommand for reading and setting config values ↵Michelle Tilley2026-03-31
| | | | | | (#3368) Adds a new `atuin config` command with three subcommands for inspecting and modifying `config.toml` without opening an editor.
* feat: opt-in to sharing last command with ai (#3367)Ellie Huxtable2026-03-31
| | | | | | | | | | This enables it to perform more effectively and give better suggestions. Same as send_cwd, disabled by default, opt in. ## 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(ui): make preview line breaking algorithm aware of CJK double-width ↵依云2026-03-31
| | | | | | | | | | | | | | | | | | | | | characters (#3360) <!-- 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 Or part of the command may be missing and the user may be misled to run a wrong command. --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* fix: resolve git worktrees to main repo in workspace filter (#3366)Paul Hinze2026-03-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #3364 ## Summary When using `filter_mode = "workspace"`, each git worktree gets its own isolated history scope instead of sharing history with the main checkout. ## Root cause `in_git_repo()` walks up the directory tree looking for a `.git` entry. In a worktree, `.git` is a file (not a directory) containing a `gitdir:` pointer back to the main repo's `.git/worktrees/<name>`. Since `has_git_dir()` just checks `.exists()`, the worktree's own path becomes the workspace root, and the `WHERE cwd LIKE '<root>%'` filter isolates its history from the main repo and other worktrees. ## Fix Add `resolve_git_worktree()`, which reads the `.git` file when it's not a directory, parses the `gitdir:` pointer, and walks back up to find the parent containing a real `.git` directory. No new dependencies -- just a bit of file reading and path traversal. ## Testing Two new tests in `utils::tests`: - `in_git_repo_regular` -- baseline that normal repos still resolve correctly - `in_git_repo_worktree_resolves_to_main_repo` -- creates a simulated worktree layout and verifies it resolves to the main repo root Both pass locally, along with the full `atuin-common` test suite and `cargo clippy -- -D warnings`. --- Disclosure: I'm a Rust novice, and I put this together with help from Claude Code. I'm eager to learn more, so please let me know if anything doesn't feel like idiomatic Rust! ## 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: Update to eye-declare 0.3.0 (#3365)Michelle Tilley2026-03-30
|
* fix: replace `e>|` with `|` in nushell integration to restore history ↵Hleb Shauchenka2026-03-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | recording (#3358) <!-- 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 --> ## Summary Fix nushell history recording completely broken since v18.13.0. No commands are recorded because `ATUIN_HISTORY_ID` is always set to an empty string. Closes #3308 ## Root Cause PR #3183 (first included in v18.13.0) changed the `_atuin_pre_execution` hook: ```diff - $env.ATUIN_HISTORY_ID = (atuin history start -- $cmd) + $env.ATUIN_HISTORY_ID = (atuin history start -- $cmd e>| complete | get stdout | str trim) ``` The intent was to silence DB errors (e.g. when disk is full) by using `complete` to swallow failures. However, `e>|` redirects exclusively stderr into the pipe, dropping stdout. `complete` then sees atuin's stdout in the `stderr` field and the `stdout` field is empty. The result is that `ATUIN_HISTORY_ID` is always empty, and no commands are ever recorded. All nushell versions are affected. Not only 0.111.0, as I incorrectly wrote in [the issue](https://github.com/atuinsh/atuin/issues/3308#issuecomment-4113840110). ## Fix Replace `e>|` with `|`. The `| complete | get stdout` pattern still silences errors: `complete` captures stdout, stderr, and exit code into a record, and `get stdout` discards the rest, preserving the error suppression from #3183 without breaking stdout capture. ## Testing Tested with nix shells across three nushell versions (0.98, 0.103, 0.111): **History recording:** | Version | `e>\| complete \| get stdout` | `\| complete \| get stdout` | |---------|-------------------------------|------------------------------| | 0.98 | empty (broken) | valid history ID | | 0.103 | empty (broken) | valid history ID | | 0.111 | empty (broken) | valid history ID | **Error silencing** (verified `| complete | get stdout` on a failing command): | Version | Error shown to user? | stdout field | |---------|---------------------|--------------| | 0.98 | No | empty | | 0.103 | No | empty | | 0.111 | No | empty | ## 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: Prepare 18.13.6 release (#3356)Michelle Tilley2026-03-27
|
* 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: use printf to append fish shell init block (#3346)lif2026-03-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## Summary - The existing sed-based fish config injection produced malformed output on some systems, concatenating 'atuin init fish | source' and 'end' onto the same line (issue #3192) - Replace the GNU/BSD sed detection block with a single printf append that writes a self-contained 'if status is-interactive' block - Remove the now-unnecessary sed dependency check from the installer ## Root cause sed backslash-newline replacement behaves inconsistently across GNU and BSD (macOS) implementations, causing the newline to be dropped on some systems. ## Fix Use printf to append a new 'if status is-interactive' block, consistent with how bash/zsh init lines are already added. ## Test plan - shellcheck -e SC2148 install.sh passes with no warnings - Idempotency preserved via existing grep -q duplicate guard Fixes #3192 Signed-off-by: majiayu000 <1835304752@qq.com>
* 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
* chore(ci): switch most workflows to depot ci (#3352)Ellie Huxtable2026-03-26
| | | | | | | | | | | | | | | | | | | | | | | Continuing the trend of shifting away from GitHub services. Depot is faster, and more reliable. Avoiding docker + release workflows for now, as those have been a pain in the ass to get correct. Will check and see if we can ensure the logs/etc can be public. I'm going to merge this, see how well it works, and if we're good delete the matching github workflows <!-- 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: 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
* docs: fix duplicated word in Kubernetes guide (#3338)Rohan Santhosh Kumar2026-03-24
|
* 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
* chore(ci): Tag docker images with semantic versions on tag creation (#3316)Chris Rose2026-03-21
| | | | | | | | | | | | | | | | | | - use the docker metadata action to add tags based on metadata - do not add the `latest` tag; it's discouraged for self-hosting safety - continue to include the SHA based tags for granularity Fixes https://github.com/atuinsh/atuin/issues/3202 <!-- 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
* 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
* docs: add inline_height_shell_up_key_binding (#3270)Adam Batkin2026-03-20
|
* fix: better tty check (#3313)Ellie Huxtable2026-03-20
| | | | | | | | | | | | | | | Our previous tty check could return true in environments where the tty device node exists, but cannot actually be opened. <!-- 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 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-hosted ↵Ellie Huxtable2026-03-19
|\ | | | | | | | | | | (#3301) Fixes https://discord.com/channels/954121165239115808/1484018882254602240
| * fix: Call ensure_hub_session even if primary sync endpoint is self-hostedMichelle Tilley2026-03-18
| |
* | fix: redirect tty0 when running setup (#3302)Ellie Huxtable2026-03-19
|\ \ | |/ |/| | | | | | | | | ## 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: redirect tty0 when running setupEllie Huxtable2026-03-18
|/
* docs: Remove 'experimental' status from Atuin Daemon (#3295)Ellie Huxtable2026-03-18
|\ | | | | What is says on the tin
| * docs: Remove 'experimental' status from Atuin DaemonMichelle Tilley2026-03-18
|/
* docs: fix typo in FAQ alternatives section (#3292)Rohan Santhosh Kumar2026-03-17
|
* 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(ci): use github for macosEllie Huxtable2026-03-16
|
* chore(release): prepare for release 18.13.3 (#3285)Ellie Huxtable2026-03-16
|\ | | | | | | | | | | | | | | | | | | | | | | <!-- 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: update changelogEllie Huxtable2026-03-16
| |