## atuinsh/atuin — v18.20.0-beta.3…v18.20.0

_64 commits._

### Features
- **feat: enable gzip and zstd for reqwest (#3980)** (c262340)
- **feat: improve powershell highlighting (#3917)** (1738451)
- **feat(sync): send the auth token on the capabilities fetch when logged in (#3974)** (803903f)
- **feat: capabilities-driven sync page size (#3979)** (765f16f)
- **feat: Eager Key Query (#3968)** (5d3fdcb)
- **Faster packfile sync transfers** — Implemented parallel uploads and downloads for packfile synchronization, improving performance when syncing data between client and server. (15fe131)
- **feat: client-side history packfiles (#3737)** (1f7cbdc)
- **feat: offer account login during install setup (#3849)** (84f8010)
- **feat: enable syntax highlighting on illumos (#3879)** (bdb58ee)
- **feat(daemon): change default daemon socket path (#3910)** (2a6868a)
- **feat: Add turn time and tips to Atuin AI (#3870)** (7b96cf6)
- **feat(domain): add RecordTag string enum (#3899)** (b6aadd0)
- **feat(common): add rmp::serde iterator-to-MessagePack helper (#3897)** (009f5cb)
- **feat: add windows/powershell highlighting (#3883)** (4f99379)
- **feat: setup claude in devcontainers (#3878)** (83250e8)
- **feat: add devcontainers (#3871)** (968c849)

### Fixes
- **fix: make pty-proxy socket path shorter (#3991)** (e89b6b0)
- **perf(sql): chunked bulk inserts + shared sqlite wrapper (#3981)** (01c70a4)
- **perf(sync): parallel record downloads (#3955)** (824c871)
- **bug: avoid rare race condition in sync (#3972)** (c06067b)
- **fix(history): don't misclassify users named after an agent as agents (#3951)** (281608b)
- **fix(search): don't overflow on a session id with an out-of-range uuid timestamp (#3965)** (63fc82e)
- **perf(tracing): OTel export + instrumentation coverage (#3952)** (8c49c4c)
- **fix(wrapped): panic when every command is in stats.ignored_commands (#3925)** (9a45598)
- **Faster syncing with batched indexing** — Improved performance when syncing history by batching database operations into bulk transactions instead of processing them individually. Also optimized CI workflows to cache dependencies and added safeguards to skip operations on empty data sets. (c0a3504)
- **Fix Bash 3.2 variable conflicts** — Fixed an issue where readline variables (READLINE_LINE and READLINE_POINT) were not properly localized in Bash 3.2, causing conflicts with bash-preexec. The fix ensures these variables are only used in Bash 4.0+ or with ble.sh, preventing errors in older Bash versions. (da5cfd9)
- **Prevent crashes from small terminal sizes** — Added safe wrapper functions for the vt100 terminal emulator that clamp row and column values to a minimum of 2, preventing panics that could occur when creating parsers or screens with very small dimensions. The wrappers are now used throughout the codebase instead of calling the unsafe methods directly. (a1f37c8)
- **fix(install): atuin init for bash (#3919)** (bb280a2)
- **fix: silence hub 401 log spam during installer login (#3918)** (623b94a)
- **fix: 'atuin login' prints 401 failures until authorized (#3916)** (6bb922e)
- **fix(sync): fix off-by-one bugs in sync (#3913)** (46022a3)
- **fix(search): fall back when daemon-fuzzy fails (#3895)** (8cae264)
- **fix(common): survive wide characters on a one-column screen (#3876)** (b095912)
- **fix(ai): answer unrecognized tool calls with an error result (#3893)** (793d15a)
- **fix(ai): execute commands from enter in the bash integration (#3892)** (faf31fc)

### Backend
- **let's use parking_lot (#3973)** (ec3cf24)
- **Confirm packfile uploads with server** — Added a confirmation step after uploading packfiles to the server, ensuring the server verifies the upload was successful before marking it as downloadable. This removes reliance on webhook notifications from the storage backend. (2dbbb08)
- **devcontainer: temporarily drop tailscale and atuin (#3873)** (a339e4d)

### Docs
- **Document testing conventions with rstest** — Updated testing guidelines to standardize on rstest for all tests, with recommendations for using fixtures, parametrization with @case and @values, and proptest for property-based testing across multiple inputs. (ef576f5)

### Chore
- **chore(release): prepare for release 18.20.0 (#3992)** (cddc517)
- **chore: revert changes to `atuin-pty-proxy` from `lab share` PR / feat: store pty-proxy sockets in `/tmp/atuin-$UID` (#3988)** (7988333)
- **refactor(sync): introduce SyncEngine to hold shared sync state (#3962)** (4116b83)
- **chore: update to rust 1.98 (#3964)** (f6c0496)
- **chore(docker): install the toolchain pinned by rust-toolchain.toml (#3963)** (aabce12)
- **refactor(record): name the (host, tag) pair as RecordSeriesKey (#3961)** (71d63b4)
- **refactor(sqlx): use FromRow instead of manual row mapping (#3958)** (2074ee0)
- **chore: enable more Clippy lints (#3953)** (a3cc401)
- **chore: remove atuin-nucleo (#3950)** (0bfd506)
- **chore(lints): use workspace lints instead of overriding lints in GHA workflow (#3949)** (36bbd0d)
- **refactor: Add a `CmdOrigin` Type (#3943)** (cccdc26)
- **Simplified database abstraction layer** — Removed the generic Database trait and consolidated all database operations to use Sqlite directly throughout the codebase. This simplifies the internal architecture by eliminating an unnecessary abstraction layer while maintaining all existing functionality. (448392b)
- **Updated Rust code formatting standards** — Updated the Rustfmt configuration to be more opinionated, requiring nightly Rust for formatting. All code across the repository has been reformatted to match the new standards using `cargo +nightly fmt`. (ad81d1f)
- **Remove vestigial Host name field** — Dropped the unused `Host.name` field that was historically stored but no longer used. The field is now an empty string for backward compatibility with the serialization protocol, with plans to remove it entirely in a future update. (1da9cb9)
- **Remove separate AI initialization command** — The `atuin ai init` command has been removed since AI initialization is now included in the main `atuin init` command. Shell integration snippets are now exposed as simple constants rather than functions, simplifying the codebase. (e264d34)
- **Simplify Bash AI integration code** — The Bash AI integration now reuses existing helper functions (`__atuin_accept_line` and `__atuin_insert_line`) from the main Bash integration instead of duplicating the macro chaining logic. Documentation was also updated to explain these reusable helper functions for key binding configuration. (06754e7)
- **chore: more xdg compliance (#3932)** (a1d24f1)
- **refactor(bash): remove redundant check of existing preexec-backend (#3927)** (202f6ad)
- **chore: instruct agents to use `rstest` in AGENTS.md (#3912)** (cdbfd8f)
- **refactor(domain): make Record.version a RecordVersion enum (#3903)** (1232605)
- **refactor(domain): make Record::with_data consume self, add with_data_clone (#3900)** (8f33544)
- **refactor(caps): CapClient owns its client and warms on construction (#3898)** (55ecfc2)
- **refactor(client): own sync_addr via Arc<Url>, drop Client lifetime (#3896)** (91f3900)
- **refactor(deps): bump pymdown-extensions from 11.0 to 11.0.1 in /docs in the uv group across 1 directory (#3875)** (f895ad1)
- **chore(tests): fix flaky pty-proxy test (#3874)** (2b86792)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/atuinsh/atuin?utm_source=github-action)._