Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
069ef58
feat(execpolicy): add typed permission rules
greyfreedom May 8, 2026
e356f96
fix(execpolicy): harden path permission matching
greyfreedom May 8, 2026
3140c18
fix(execpolicy): preserve on-request approval semantics
greyfreedom May 11, 2026
d3a122a
fix(pandoc): validate binary output before resolving binary
greyfreedom May 12, 2026
eedaa16
fix(vision): use platform absolute path in boundary test
greyfreedom May 12, 2026
42dfd4b
test(tui): avoid instant underflow in sidebar test
greyfreedom May 14, 2026
4e58b95
ci: avoid caching cargo bin shims
greyfreedom May 14, 2026
78e4243
fix(config): update rebased execpolicy references
greyfreedom May 25, 2026
db1e3df
fix(tui): bound composer history writer batches
greyfreedom May 25, 2026
75eeb31
fix(execpolicy): respect deny command boundaries
greyfreedom May 25, 2026
501dc0d
feat(tui): route shell and file tools through typed permission rules
greyfreedom May 9, 2026
b0da4d6
feat(tui): persist permission rules from approvals
greyfreedom May 12, 2026
9ac9b69
fix(tui): address permission rule review findings
greyfreedom May 12, 2026
8cdbddb
test(tui): keep comment assertions scoped to permission rules
greyfreedom May 12, 2026
e16c36d
fix(tui): adapt persisted permission UI to codewhale crates
greyfreedom May 25, 2026
d39434f
fix(tui): harden persisted permission rule handling
greyfreedom May 25, 2026
eb6e458
fix(tui): pass approval input through events
greyfreedom May 25, 2026
87eef2f
fix(tui): persist permission rules to resolved config
greyfreedom May 25, 2026
ebc1f54
fix(tui): persist approval rules separately
greyfreedom May 25, 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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
if: runner.os != 'Linux'
with:
cache-bin: false
cache-bin: "false"
- name: Run tests
if: runner.os != 'Linux'
run: cargo test --workspace --all-features --locked
Expand Down Expand Up @@ -90,7 +90,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
if: runner.os != 'Linux'
with:
cache-bin: false
cache-bin: "false"
- name: Build wrapper binaries
if: runner.os != 'Linux'
run: cargo build --release --locked -p codewhale-cli -p codewhale-tui
Expand Down Expand Up @@ -120,7 +120,7 @@ jobs:
sudo apt-get install -y libdbus-1-dev pkg-config
- uses: Swatinem/rust-cache@v2
with:
cache-bin: false
cache-bin: "false"
- name: Build docs
run: cargo doc --workspace --no-deps
env:
Expand Down
5 changes: 5 additions & 0 deletions Cargo.lock

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

17 changes: 17 additions & 0 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,23 @@ sandbox_mode = "workspace-write" # read-only | workspace-write | danger-full-acc
# auto_allow = ["cargo check", "npm run"]
#
# auto_allow = []
# auto_deny = ["rm -rf"]
#
# Typed persistent permission rules. User-approved persistent rules are written
# to a sibling permissions.toml file as top-level [[rules]] entries so this
# config file does not grow without bound. The config.toml form below remains
# supported for manual configuration. Shell commands use the same arity-aware
# matching as auto_allow, and file paths are workspace-relative globs.
#
# [[permissions.rules]]
# tool = "exec_shell"
# decision = "allow" # "allow", "deny", or "ask"
# command = "cargo test"
#
# [[permissions.rules]]
# tool = "edit_file"
# decision = "ask"
# path = "src/**"
max_subagents = 10 # optional (1-20)

# Optional sub-agent tuning. max_concurrent overrides top-level max_subagents.
Expand Down
5 changes: 2 additions & 3 deletions crates/app-server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use axum::{Json, Router};
use codewhale_agent::ModelRegistry;
use codewhale_config::{CliRuntimeOverrides, ConfigStore};
use codewhale_core::Runtime;
use codewhale_execpolicy::ExecPolicyEngine;
use codewhale_hooks::{HookDispatcher, JsonlHookSink, StdoutHookSink};
use codewhale_mcp::McpManager;
use codewhale_protocol::{
Expand Down Expand Up @@ -263,7 +262,7 @@ async fn app_handler(

fn build_state(config_path: Option<PathBuf>) -> Result<AppState> {
let store = ConfigStore::load(config_path.clone())?;
let config = store.config.clone();
let config = store.effective_config();
let registry = ModelRegistry::default();

let state_db_path = config_path
Expand All @@ -285,7 +284,7 @@ fn build_state(config_path: Option<PathBuf>) -> Result<AppState> {
state_store,
Arc::new(ToolRegistry::default()),
Arc::new(McpManager::default()),
ExecPolicyEngine::new(Vec::new(), Vec::new()),
config.exec_policy_engine(),
hooks,
);

Expand Down
1 change: 1 addition & 0 deletions crates/config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ description = "Config schema and precedence model for DeepSeek workspace archite

[dependencies]
anyhow.workspace = true
codewhale-execpolicy = { path = "../execpolicy", version = "0.8.44" }
codewhale-secrets = { path = "../secrets", version = "0.8.44" }
dirs.workspace = true
serde.workspace = true
Expand Down
Loading
Loading