| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
## 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>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| | |
|
| | |
|
| |
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
<!-- 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.
|
| |\
| |
| |
| |
| |
| | |
(#3301)
Fixes
https://discord.com/channels/954121165239115808/1484018882254602240
|
| | | |
|
| |\ \
| |/
|/|
| |
| |
| |
| | |
## 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
|
| |/ |
|
| |\
| |
| | |
What is says on the tin
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
<!-- 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
|
| | | |
|
| |/ |
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
(#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
|
| | | |
|
| | | |
|
| | |\ |
|
| | |
| |
| |
| |
| | |
git-subtree-dir: crates/atuin-nucleo
git-subtree-split: 4253de9faabb4e5c6d81d946a5e35a90f87347ee
|
| | | |
|
| | | |
|