aboutsummaryrefslogtreecommitdiffstats
path: root/crates (follow)
Commit message (Collapse)AuthorAge
* feat(ui): prominent banner for wrong-key errors at login/sync (#3475)Ellie Huxtable2026-05-12
| | | | | | | | | | | | | | | | | | | | | | | | | The wrong-key error was a long unwrapped sentence buried under "Successfully authenticated.", and wrapped by eyre error formatting add - print_error(title, description) — red box-drawn bars across the terminal width (capped at 100 cols) with bold title; word-wraps the description; plain "Error:" header when stderr isn't a TTY. - format_sync_error(SyncError) -> eyre::Report — intercepts WrongKey to print the banner and exit(1) so eyre's footer never runs; forwards other variants unchanged. Use it from: - account/login.rs — replaces bail\! in the wrong-key path - command/client/sync.rs — .map_err(format_sync_error)? on sync() - store/push.rs and store/pull.rs — .map_err on check_encryption_key ## 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: ensure local key matches remote data before syncing (#3474)Ellie Huxtable2026-05-12
| | | | | | | | | | | | | | | We rely on the user to manage their keys. This is ok, and is intentionally part of our security model However. If the user messes up, they corrupt their remote store. It is possible to work around and fix, but not without difficulty. This change ensures that if the local key does not match the remote data, no data is synced and the user has a chance to fix it before breaking things. ## 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: Rename 'atuin hex' to 'atuin pty-proxy' (#3473)Michelle Tilley2026-05-11
|
* fix(shell/xonsh): use os.devnull instead of hard-coded /dev/null (#3464)Sai Asish Y2026-05-05
| | | | | | | | | | | Refiles a previously-closed PR (#3463) that was closed in error after the force-push. Same fix; new branch. Uses inline `@(os.devnull)` per @ltrzesniewski's suggestion in #3463. Fixes #3462. Signed-off-by: SAY-5 <saiasish.cnp@gmail.com> Co-authored-by: SAY-5 <saiasish.cnp@gmail.com>
* fix: atuin update on windows (#3453)Lucas Trzesniewski2026-05-04
| | | | | | | | | | | | | | | | | | | | | | This fixes the `atuin update` command on Windows. Windows doesn't let you overwrite a running exe, but it lets you rename it. This PR special-cases the official `update` plugin by renaming the running `atuin.exe` to `atuin.old` before the update, and rolling it back if the update fails. Note that the `atuin.old` file is left behind on success, which shouldn't be a problem in practice: it will be overwritten on the next call to `atuin update` (also deleted if there's no update available), and is located in `~/.atuin/bin`, which is an isolated location specific to Atuin. Fixes #3451 ## 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(release): prepare for release 18.16.0 (#3457)Michelle Tilley2026-04-28
|
* chore(release): prepare for release 18.16.0-beta.1 (#3450)Michelle Tilley2026-04-24
|
* chore: Update to eye_declare 0.5.1 (#3449)Michelle Tilley2026-04-24
|
* perf: Reduce AI TUI rendering overhead for long conversations (#3447)Michelle Tilley2026-04-23
| | | | | | | | | | | | | | | | | | | | | | | | Fixes keystroke lag in Atuin AI that scales with conversation length. After extended use (many turns, lots of tool calls with output viewports), pressing a key had noticeable delay before the letter appeared. Three layers of optimization: - **Skip `sync_view_state` for `InputUpdated`** — every keystroke was cloning all events, tools, and archived data even though no FSM state changed. Uses `handle.update_tracked()` (eye_declare 0.5) to skip rebuilds when values haven't actually changed. - **Pre-compute turns and `has_command` on the driver thread** — the view function was rebuilding the full turn structure from raw events and scanning for `suggest_command` tool calls 3× per render frame. Now computed once per FSM state change and cached in ViewState. - **Commit-based element tree pruning** — turns that scroll into terminal scrollback are tracked via `on_commit` and filtered from the element tree, keeping rendering work proportional to visible content. Turn views are now direct children of the root VStack (not nested inside AtuinAi) so `detect_committed` can see them.
* feat: Add skill discovery, loading, and invocation (#3444)Michelle Tilley2026-04-23
| | | Adds a skills system that lets users define reusable LLM instructions as `SKILL.md` files with YAML frontmatter.
* feat: Send user-defined context with `TERMINAL.md` (#3443)Michelle Tilley2026-04-23
| | | | | | | | | | This PR adds the ability to inject user-defined content into Atuin AI requests, a la `AGENTS.md` or `CLAUDE.md`. * `.atuin/TERMINAL.md` (or alternatively just `TERMINAL.md`) is checked in every directory from the cwd up to the root * `~/.config/atuin/TERMINAL.md` (or equivalent config dir) is also checked * Supports Claude-style ``` !`` ``` and ```` ```!...``` ```` style shell interpolation
* fix: minor issues with fish's vim mode(s) (#3362)Aditya Bhargava2026-04-23
| | | | | | | | | | This PR fixes two minor issues when using Atuin with fish's vim mode(s): 1. Add support for `fish_hybrid_key_bindings`: in addition to `fish_vi_key_bindings`, fish also provides `fish_hybrid_key_bindings`, which is a vi-based mode with some extra keybinds; but the key bind check for `atuin search` only checks for the former. 2. The AI keybind inserts a `?` on the command line in vim mode even though it can only be called from normal mode, when pressing `?` normally does nothing.
* fix: require all subcommands covered for shell allow rules (#3440)Michelle Tilley2026-04-21
|
* feat: shell tool execution timeouts (#3437)Michelle Tilley2026-04-21
|
* fix: shell tool preview stuck as Running after completion (#3436)Michelle Tilley2026-04-21
|
* chore: Use cat -n format for read_file tool (#3435)Michelle Tilley2026-04-21
|
* refactor: Replace ad-hoc dispatch with FSM + driver architecture (#3434)Michelle Tilley2026-04-21
| | | | | | | Replaces the tangled dispatch handler system (`tui/dispatch.rs`, `tui/state.rs`) with a pure finite state machine + driver architecture. The FSM handles all state transitions as explicit `(State, Event) → (NewState, Effects)` mappings. The driver executes IO effects and bridges the TUI to the FSM.
* feat: Implement write_file tool with overwrite safety (#3432)Michelle Tilley2026-04-21
| | | | | | | | | | | | | | | | | | | | ## Summary Implements the `write_file` client-side tool — creates new files or overwrites existing ones with an explicit `overwrite` flag for safety. - **Overwrite flag**: Writing to an existing file without `overwrite: true` returns an error directing the LLM to set the flag or use `edit_file` for targeted changes. Prevents accidental overwrites. - **Snapshots**: Existing files are backed up before overwriting (same infrastructure as `edit_file`). - **Content preview**: Completed writes show the first 10 lines in gray with line numbers, plus "+ N more lines" for longer files. - **Atomic writes**: Uses `tempfile` + fsync + rename (same as `edit_file`). - **File tracker update**: After writing, the file is registered in the tracker so subsequent `edit_file` calls work without a separate read. - **Permission**: Shares the `"Write"` rule with `edit_file` — one permission covers both tools.
* feat: AI tool rendering overhaul + edit_file tool (#3423)Michelle Tilley2026-04-21
| | | | | | Overhaul of how AI tool calls are modeled, rendered, and displayed in the Atuin AI TUI. Fixes bugs in shell command output capture, implements the `edit_file` tool with full safety infrastructure, and adds a diff preview for edits.
* chore: update to rust 1.95 (#3426)Ellie Huxtable2026-04-21
| | | | | | | | | | | | <!-- 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.15.2 (#3421)Michelle Tilley2026-04-16
| | | | | | | | ## 18.15.2 ### Bug Fixes - Tab doesn't insert suggested command ([#3420](https://github.com/atuinsh/atuin/issues/3420))
* fix: Tab doesn't insert suggested command (#3420)Michelle Tilley2026-04-16
|
* chore(release): prepare for release 18.15.1 (#3419)Michelle Tilley2026-04-15
|
* fix: Enter runs suggested command when selecting permissions (#3418)Michelle Tilley2026-04-15
|
* chore(release): prepare for release 18.15.0 (#3417)Michelle Tilley2026-04-15
|
* fix: loss of loading spinners + tokio panic on exit (#3415)Michelle Tilley2026-04-14
|
* feat: Allow resuming previous AI sessions (#3407)Michelle Tilley2026-04-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR introduces session continuation to Atuin AI. * Conversations with Atuin AI are stored in a local SQLite database * Upon startup, Atuin AI tries to find a session to resume based on its directory/workspace and the time since the last event * If found, Atuin AI will show a note that the session has been resumed, and an event is added to help the LLM know where the invocation boundaries are * If not, Atuin AI will create a new conversation * The user can create a new conversation with `/new` * The new setting `ai.session_continue_minutes`, which defaults to `60`, controls how old the last event in a session can be before it's no longer considered for automatic resuming. <img width="1055" height="593" alt="image" src="https://github.com/user-attachments/assets/3f9ff01a-ef64-44a9-b0e2-3a4252c5746f" /> ## Architecture A new `SessionService` trait defines an API contract for a service that can manage session data. `LocalSessionService` implements this, with `DaemonSessionService` a possible future extension point. `SessionManager` owns a `dyn SessionService` and delegates as appropriate.
* fix: dependency fix (#3414)Michael Zeller2026-04-14
| | | | | | | | | | | This was commented out in #3413 and needs to be fixed back up. It's possible we can drop this line altogether if CI passed before without it. ## 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: Enable atuin hex for illumos (#3413)Michael Zeller2026-04-14
| | | | | | | | | | | | | This bumps the `portable-pty` dep which itself has a dependency on a newer termios that knows about illumos. Unless this was pinned for a particular reason I think this is fine. With this dep bumped we can enable `atuin hex` on illumos. ## 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(release): prepare for release 18.14.1 (#3405)Ellie Huxtable2026-04-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
* fix: Thread remote and content_length through system for server tool calls ↵Michelle Tilley2026-04-13
| | | | (#3404)
* fix: ensure we can publish to crates (#3403)Ellie Huxtable2026-04-13
| | | | | | | | | | | | | | | include_str won't work outside of the crate boundary. Crates is so frustrating sometimes. <!-- 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.14.0 (#3401)Ellie Huxtable2026-04-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
* refactor: rename examples -> contrib (#3400)Ellie Huxtable2026-04-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
* feat: add pi hook installer (#3398)Ellie Huxtable2026-04-13
| | | | | | | | | | | | | | | Support installing the pi extension via `atuin hook install pi`. Bundle the extension in the binary and update the docs. <!-- 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: remove agent search from tui (#3397)Ellie Huxtable2026-04-13
| | | | | | | | | | | | | This is essentially not a useful place to search agent history Right now, using the CLI is the best way to explore this. We are looking into building another TUI for searching records more widely and in more detail ## 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: track coding agent shell usage (#3388)Ellie Huxtable2026-04-11
| | | | | | | | | | | https://github.com/user-attachments/assets/7868c7a4-6a91-4c93-ac6a-e8665cf1f799 ## 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: ensure daemon is running (#3384)Ellie Huxtable2026-04-11
| | | | | | | | | | | | | | | | | | | Instead of only ensuring the daemon is running as part of writing history, route all calls through a function that ensures it's running if an error occurs. This fixes the case where a system boots, no commands run, and the user tries to search history. <!-- 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 history tail for live monitoring view (#3389)Ellie Huxtable2026-04-11
| | | | | | | | | | Useful for watching what agents are doing, or viewing live info from other machines. Regardless I am liking it for debugging ## 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: Prepare 18.14.0-beta.1 release (#3393)Michelle Tilley2026-04-10
|
* feat: Client-tool execution + permission system (#3370)Michelle Tilley2026-04-10
| | | | | | Adds client-side tool execution to Atuin AI, starting with `atuin_history`. The server can request tool calls, which are executed locally with a permission system, and results are sent back to continue the conversation.
* feat: add strip_trailing_whitespace, on by default (#3390)Ellie Huxtable2026-04-10
| | | | | | | | | | | | I can't think of any reason you would want this disabled by default - trailing whitespace means nothing, breaks dedupe, and wastes a few bytes closes #3387 ## 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
* 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
|