| Commit message (Collapse) | Author | Age |
| | |
|
| |
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| |
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
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"
/>
|