aboutsummaryrefslogtreecommitdiffstats
path: root/crates (unfollow)
Commit message (Collapse)Author
98 min.fix(client/settings): Trim sync user_id and encryption_keyHEADmainBenedikt Peetz
The files might be newline delimited, which we should remove before we try to parse the contents.
7 hoursfix({client,server}/settings): Don't fail, when there is no config fileBenedikt Peetz
7 hourschore(treewide): Remove glob importsBenedikt Peetz
12 hoursfix(config): Don't write non-TOML default config filesBenedikt Peetz
12 hourschore(daemon): Remove the `autostart` featureBenedikt Peetz
A service manager should deal with that.
12 hoursfix(sqlite): Ensure that database migration runs sequentiallyBenedikt Peetz
Otherwise, we might run migration from multiple db-connections.
26 hourschore(treewide): Also fix all `clippy` warningsBenedikt Peetz
27 hourschore(treewide): Fix some of `clippy`'s errorBenedikt Peetz
Just a run of `cargo clippy --fix`
27 hourschore(treewide): Remove `cargo` warnings to 0Benedikt Peetz
There are still the `clippy` warnings, but they are for a future date.
35 hourschore(treewide): Cleanup themesBenedikt Peetz
2 daysfeat(server): Really make users stateless (with tests)Benedikt Peetz
This commit also remove another load of unneeded features.
2 daysfeat(server): Make user stuff statelessBenedikt Peetz
2 dayschore(server): Remove the last remnants of the "hub" sync-server thingyBenedikt Peetz
2 dayschore(server): Simplify the database supportBenedikt Peetz
3 dayschore: Remove all `pub`sBenedikt Peetz
They will not be marked by rustc/cargo as unused, and as atuin doesn't expose an API all of them _should_ be `pub(crate)`
3 dayschore: Restore db migrationsBenedikt Peetz
3 dayschore: Move everything into one big crateBenedikt Peetz
That helps remove duplicated code and rustc/cargo will now also show dead code correctly.
3 dayschore: Somewhat simplify sync codeBenedikt Peetz
3 dayschore: Remove more (kinda) useless stuffBenedikt Peetz
3 dayschore: Turn all `allow`s into into `expect`sBenedikt Peetz
3 dayschore: Remove more useless codeBenedikt Peetz
3 dayschore: Remove some unused rust codeBenedikt Peetz
5 daysfeat: Capture command output + expose to new `atuin_output` tool (#3510)Michelle Tilley
10 dayschore: update GitHub app token formatChris Rose
2026-05-27fix: Atuin hangs when attempting to spawn daemon from Ctrl+R invocation (#3502)Michelle Tilley
This PR fixes a shell hang when daemon autostart happens from the interactive search widget. The bash/zsh/fish integrations run `atuin search -i` under command substitution and swap stdout/stderr so the TUI can draw to the terminal while the selected command is captured: ```sh 3>&1 1>&2 2>&3 ``` This leaves fd 3 open in the atuin search process. If search autostarts the daemon, the spawned long-running `atuin daemon start --daemonize` inherits fd 3, the command-substitution pipe, so the shell keeps waiting for EOF until the daemon is killed. The fix: close fd 3 after the swap in the non-tmux bash/zsh/fish paths: ```sh 3>&1 1>&2 2>&3 3>&- ``` Tested on zsh; I still need to confirm for bash and fish. Near as I can tell, the other shell integrations don't need this change. Fixes #3499
2026-05-19Allow overriding model with env var (#3493)Michelle Tilley
This PR allows overriding the Atuin AI model for feature-flagged users with the `ATUIN_AI__MODEL` environment variable. Any OpenRouter model is accepted; it's recommended to include an explicit `openrouter:` provider prefix, so models with colons in their names are interpreted correctly, e.g. `ATUIN_AI__MODEL=openrouter:deepseek/deepseek-v4-flash:free`.
2026-05-14refactor: pull `fn into_utc` into atuin-server-database crate (#3487)John Oxley
The `fn into_utc` was defined in both `atuin-server-postgres` and `atuin-server-sqlite`, with tests being in the postgres crate. This pulls the function into the `atuin-server-database` crate along with the tests and references it from both crates. ## 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
2026-05-14refactor: Implement From<sqlx::Error> and clean up fix_error (#3484)John Oxley
In the database crates for atuin-server, there is `fn fix_error`. This PR implements `From<sqlx::Error>` on `DbError` which makes it possible to mostly use `?` to bubble up the errors. There are cases where `?` is not being used e.g. ```rust async fn get_session(&self, token: &str) -> DbResult<Session> { sqlx::query_as("select id, user_id, token from sessions where token = $1") .bind(token) .fetch_one(&self.pool) .await .map_err(fix_error) .map(|DbSession(session)| session) } ``` There are two options ## 1. Use `Into::into` ```rust async fn get_session(&self, token: &str) -> DbResult<Session> { sqlx::query_as("select id, user_id, token from sessions where token = $1") .bind(token) .fetch_one(&self.pool) .await .map_err(fix_error) .map(|DbSession(session)| session) } ``` ## 2. Create a variable and use `?` ```rust async fn get_session(&self, token: &str) -> DbResult<Session> { let session = sqlx::query_as("select id, user_id, token from sessions where token = $1") .bind(token) .fetch_one(&self.pool) .await .map(|DbSession(session)| session)?; Ok(session) } ``` I chose to do option 1 as it was just a find/replace but say the word and I'll convert them all to option 2 ## 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
2026-05-12chore(release): prepare for release 18.16.1 (#3476)Ellie Huxtable
## 18.16.1 ### Bug Fixes - *(shell/xonsh)* Use os.devnull instead of hard-coded /dev/null ([#3464](https://github.com/atuinsh/atuin/issues/3464)) - Atuin update on windows ([#3453](https://github.com/atuinsh/atuin/issues/3453)) - Ensure local key matches remote data before syncing ([#3474](https://github.com/atuinsh/atuin/issues/3474)) ### Documentation - Add related projects section to README ### Features - *(ui)* Prominent banner for wrong-key errors at login/sync ([#3475](https://github.com/atuinsh/atuin/issues/3475)) ### Miscellaneous Tasks - Generate LLM-optimized docs ([#3468](https://github.com/atuinsh/atuin/issues/3468)) - Rename 'atuin hex' to 'atuin pty-proxy' ([#3473](https://github.com/atuinsh/atuin/issues/3473))
2026-05-12feat(ui): prominent banner for wrong-key errors at login/sync (#3475)Ellie Huxtable
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
2026-05-12fix: ensure local key matches remote data before syncing (#3474)Ellie Huxtable
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
2026-05-11chore: Rename 'atuin hex' to 'atuin pty-proxy' (#3473)Michelle Tilley
2026-05-05fix(shell/xonsh): use os.devnull instead of hard-coded /dev/null (#3464)Sai Asish Y
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>
2026-05-04fix: atuin update on windows (#3453)Lucas Trzesniewski
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
2026-04-28chore(release): prepare for release 18.16.0 (#3457)Michelle Tilley
2026-04-24chore(release): prepare for release 18.16.0-beta.1 (#3450)Michelle Tilley
2026-04-24chore: Update to eye_declare 0.5.1 (#3449)Michelle Tilley
2026-04-23perf: Reduce AI TUI rendering overhead for long conversations (#3447)Michelle Tilley
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.
2026-04-23feat: Add skill discovery, loading, and invocation (#3444)Michelle Tilley
Adds a skills system that lets users define reusable LLM instructions as `SKILL.md` files with YAML frontmatter.
2026-04-23feat: Send user-defined context with `TERMINAL.md` (#3443)Michelle Tilley
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
2026-04-23fix: minor issues with fish's vim mode(s) (#3362)Aditya Bhargava
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.
2026-04-21fix: require all subcommands covered for shell allow rules (#3440)Michelle Tilley
2026-04-21feat: shell tool execution timeouts (#3437)Michelle Tilley
2026-04-21fix: shell tool preview stuck as Running after completion (#3436)Michelle Tilley
2026-04-21chore: Use cat -n format for read_file tool (#3435)Michelle Tilley
2026-04-21refactor: Replace ad-hoc dispatch with FSM + driver architecture (#3434)Michelle Tilley
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.
2026-04-21feat: Implement write_file tool with overwrite safety (#3432)Michelle Tilley
## 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.
2026-04-21feat: AI tool rendering overhaul + edit_file tool (#3423)Michelle Tilley
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.
2026-04-21chore: update to rust 1.95 (#3426)Ellie Huxtable
<!-- 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
2026-04-16chore(release): prepare for release 18.15.2 (#3421)Michelle Tilley
## 18.15.2 ### Bug Fixes - Tab doesn't insert suggested command ([#3420](https://github.com/atuinsh/atuin/issues/3420))