| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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"
/>
|
| |
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| | |
|
| | |
|
| |
|
| |
Fixes #3340
|
| | |
|
| |
|
|
| |
initialized separately (#3334)
|
| |
|
|
|
|
|
| |
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): 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
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| | |
|
| | |
|
| |
|
|
|
|
| |
shell) (#3290)
Clarifies during `atuin setup` that Atuin AI does not send any shell
history to the AI provider.
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
(#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
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| |/
|
|
| |
Fix issue introduced by #3249. Nushell 0.112 will introduce the breaking
change; not 0.111.
|
| |
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| |
|
|
|
|
|
| |
* 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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
## 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>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(#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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
(#3235)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|