Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
615ed10
wip: tool perms
BinaryMuse Mar 31, 2026
fced2b8
wip: tool perms
BinaryMuse Apr 1, 2026
64b8247
wip: permission system
BinaryMuse Apr 4, 2026
d605c90
Make most of atuin-ai crate pub(crate)
BinaryMuse Apr 7, 2026
3429f87
wip
BinaryMuse Apr 7, 2026
424f41f
atuin-ai: Phase 1 — establish foundation types and resolve mutation b…
BinaryMuse Apr 8, 2026
66cd10c
atuin-ai: Phase 2 — decompose state, extract dispatch, split stream f…
BinaryMuse Apr 8, 2026
339dcb8
atuin-ai: Phase 3 — extract tool execution pipeline
BinaryMuse Apr 8, 2026
2d3885c
Close the client-side tool call loop
BinaryMuse Apr 8, 2026
1b84eb6
Remove temp debugging
BinaryMuse Apr 8, 2026
5697d9b
Ensure all local tool calls resolve before resuming stream
BinaryMuse Apr 8, 2026
d52ada1
Implement AtuinHistory client-side tool execution
BinaryMuse Apr 8, 2026
c29add2
Remove permissions file
BinaryMuse Apr 8, 2026
885d32a
ignore permissions files
BinaryMuse Apr 8, 2026
0ecfa74
Add timestamp and duration to AtuinHistory results
BinaryMuse Apr 8, 2026
5c8b22b
Add tree-sitter shell command parsing for scoped permissions
BinaryMuse Apr 8, 2026
4271f20
Stress-test shell parsing and fix concatenation gap
BinaryMuse Apr 8, 2026
e55d898
implement client-side shell command execution with VT100 preview
BinaryMuse Apr 9, 2026
04ef52c
Fix bug in events -> messages conversion
BinaryMuse Apr 9, 2026
45f4170
Introduce ToolTracker as single source of truth for tool execution state
BinaryMuse Apr 9, 2026
cb6b12d
Change client capabilities to individual tools
BinaryMuse Apr 9, 2026
d380aa3
Fix list item rendering
BinaryMuse Apr 9, 2026
0579001
Only allow history search by defualt
BinaryMuse Apr 9, 2026
8c60551
Fix tool calls when permissions needed
BinaryMuse Apr 9, 2026
a288f53
Handle tool call decline flow
BinaryMuse Apr 9, 2026
2007701
Fix spinners not spinning
BinaryMuse Apr 9, 2026
61a7b95
Clippy
BinaryMuse Apr 9, 2026
72c0316
Merge remote-tracking branch 'origin/main' into mkt/tool-perms
BinaryMuse Apr 9, 2026
8e9619e
more clippy
BinaryMuse Apr 9, 2026
28879bb
Implement 'always allow' and 'always allow in dir/project'
BinaryMuse Apr 10, 2026
7339cf8
Change read_file to use offset and limit
BinaryMuse Apr 10, 2026
45ae07e
Properly handle rule scopes in Read and Write tools
BinaryMuse Apr 10, 2026
2dfa30b
Tweak rule file application order
BinaryMuse Apr 10, 2026
dc8bf4d
Don't branch on runtime if no AI features
BinaryMuse Apr 10, 2026
bc1415c
Code review feedback
BinaryMuse Apr 10, 2026
557c2d5
Gate TreeSitter behind *nix
BinaryMuse Apr 10, 2026
b909bd8
feedback
BinaryMuse Apr 10, 2026
85f76b0
Fix Atuin AI compile on Windows
BinaryMuse Apr 10, 2026
d46f22c
Only enable treesitter on linux/macos target_os
BinaryMuse Apr 10, 2026
2c69d70
Gate tests that require tree-sitter behind flag
BinaryMuse Apr 10, 2026
6bac5d9
Don't execute client tools if capability wasn't advertised
BinaryMuse Apr 10, 2026
48c1266
Clean up server descriptors
BinaryMuse Apr 10, 2026
346066e
Convert paths on Windows for tool Rule matching
BinaryMuse Apr 10, 2026
4c965e3
Split path glob tests into windows and non-windows
BinaryMuse Apr 10, 2026
97e667c
Use capabilities from config to control req caps
BinaryMuse Apr 10, 2026
e79a44d
Add docs for new capabilities settings
BinaryMuse Apr 10, 2026
dc97331
and I type for a living
BinaryMuse Apr 10, 2026
d28afa4
Add instructions for disabling AI keybind
BinaryMuse Apr 10, 2026
8985e3d
If ai.enabled is None, show prompt to enable, disable, or cancel
BinaryMuse Apr 10, 2026
c5c76c4
Fine
BinaryMuse Apr 10, 2026
c426f11
Remove accidental files
BinaryMuse Apr 10, 2026
e8e90af
Update crates/atuin-client/src/settings.rs
BinaryMuse Apr 10, 2026
ee1c531
Use same vt100 project-wide
BinaryMuse Apr 10, 2026
add78e6
Merge branch 'mkt/tool-perms' of github.com:atuinsh/atuin into mkt/to…
BinaryMuse Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ ui/backend/target
ui/backend/gen

sqlite-server.db*

.atuin/permissions.*.toml
95 changes: 77 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
[workspace]
members = ["crates/*", "crates/atuin-nucleo/matcher", "crates/atuin-nucleo/bench"]
members = [
"crates/*",
"crates/atuin-nucleo/matcher",
"crates/atuin-nucleo/bench",
]

resolver = "2"
exclude = ["ui/backend", "crates/atuin-nucleo/matcher/fuzz"]
Expand Down Expand Up @@ -65,6 +69,7 @@ rustls = { version = "0.23", default-features = false, features = [
"std",
"tls12",
] }
regex = "1.10.5"

[workspace.dependencies.tracing-subscriber]
version = "0.3"
Expand Down
10 changes: 9 additions & 1 deletion crates/atuin-ai/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,17 @@ async-stream = "0.3"
uuid = { workspace = true }
tui-textarea-2 = "0.10.2"
unicode-width = "0.2"
eye_declare = "0.3"
eye_declare = { path = "../../../eye_declare/crates/eye_declare" }
ratatui-core = "0.1"
ratatui-widgets = "0.3"
thiserror = { workspace = true }
regex = { workspace = true }
time = { workspace = true }
toml = "1.1"
tree-sitter = "0.26.8"
tree-sitter-bash = "0.25.1"
tree-sitter-fish = "3.6.0"
typed-builder = { workspace = true }

[dev-dependencies]
pretty_assertions = { workspace = true }
6 changes: 3 additions & 3 deletions crates/atuin-ai/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ use eyre::Result;
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::{EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt};
pub mod init;
pub mod inline;
pub(crate) mod inline;

#[derive(Args, Debug)]
pub struct AiArgs {
pub(crate) struct AiArgs {
/// Enable verbose logging
#[arg(short, long, global = true)]
verbose: bool,
Expand Down Expand Up @@ -71,7 +71,7 @@ pub async fn run(
}
}

pub fn detect_shell() -> Option<String> {
pub(crate) fn detect_shell() -> Option<String> {
Some(Shell::current().to_string())
}

Expand Down
2 changes: 1 addition & 1 deletion crates/atuin-ai/src/commands/init.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::commands::detect_shell;

pub async fn run(shell: String) -> eyre::Result<()> {
pub(crate) async fn run(shell: String) -> eyre::Result<()> {
let integration = match shell.as_str() {
"zsh" => generate_zsh_integration(),
"bash" => generate_bash_integration(),
Expand Down
Loading