[workspace] resolver = "2" members = [ "crates/vak-llm", "crates/vak-session", "crates/vak-context", "crates/vak-store", "crates/vak-tools", "crates/vak-agent", "crates/vak-config", "crates/vak-permission", "crates/vak-plugin", "crates/vak-core", "crates/vak-hooks", "crates/vak-intent", "crates/vak-commit", "crates/vak-mcp", "crates/vak-flow", "crates/vak-delivery", "crates/vak-eval", "crates/vak-server", "crates/vak-ops", "crates/vak-tray", "crates/vak-desktop", "crates/vak-bus", "crates/vak-sandbox", "crates/vak-terminal", "crates/vak-voice", "crates/vak-presentation", "crates/vak-ooxml", "crates/vak", ] [workspace.package] version = "5.1.3" edition = "2024" license = "MIT" repository = "https://github.com/nranjan2code/code" [workspace.dependencies] vak-bus = { path = "crates/vak-bus" } vak-llm = { path = "crates/vak-llm" } vak-ops = { path = "crates/vak-ops" } vak-server = { path = "crates/vak-server" } vak-session = { path = "crates/vak-session" } vak-context = { path = "crates/vak-context" } vak-store = { path = "crates/vak-store" } vak-tools = { path = "crates/vak-tools" } vak-agent = { path = "crates/vak-agent" } vak-config = { path = "crates/vak-config" } vak-core = { path = "crates/vak-core" } vak-mcp = { path = "crates/vak-mcp" } vak-permission = { path = "crates/vak-permission" } vak-plugin = { path = "crates/vak-plugin" } vak-flow = { path = "crates/vak-flow" } vak-delivery = { path = "crates/vak-delivery" } vak-eval = { path = "crates/vak-eval" } vak-hooks = { path = "crates/vak-hooks" } vak-intent = { path = "crates/vak-intent" } vak-commit = { path = "crates/vak-commit" } vak-sandbox = { path = "crates/vak-sandbox" } vak-terminal = { path = "crates/vak-terminal" } vak-voice = { path = "crates/vak-voice" } vak-presentation = { path = "crates/vak-presentation" } vak-ooxml = { path = "crates/vak-ooxml" } crossterm = { version = "0.28", features = ["event-stream"] } ratatui = { version = "0.29", default-features = false, features = ["crossterm"] } # HTTP+SSE server for the headless agent (tokio-native standard) # "ws" powers the web client's terminal (docs/design/48-web-client.md ยง6). axum = { version = "0.8", features = ["json", "ws"] } tokio-stream = { version = "0.1", features = ["sync"] } # CORS so browser/webview surfaces (tauri://localhost, vite dev) can reach it tower-http = { version = "0.6", features = ["cors", "compression-gzip"] } tokio = { version = "1", features = ["full"] } tokio-util = { version = "0.7", features = ["rt"] } futures = "0.3" async-trait = "0.1" reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls", "blocking", "multipart"] } bytes = "1" # Gemini Live API (bidi voice synthesis) speaks raw WebSocket frames. tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] } rustls = { version = "0.23.45", default-features = false, features = ["ring"] } aws-config = { version = "1.12.0", default-features = false, features = ["default-https-client", "rt-tokio", "credentials-process", "sso"] } aws-sdk-bedrock = { version = "1.155.0", default-features = false, features = ["default-https-client", "rt-tokio"] } serde = { version = "1", features = ["derive"] } serde_json = "1" toml = "0.8" thiserror = "2" clap = { version = "4", features = ["derive", "env"] } uuid = { version = "1", features = ["v7"] } chrono = { version = "0.4", features = ["serde"] } chrono-tz = "0.10" regex = "1" # Standards-compliant CommonMark AST for lossless, surface-neutral output projection. pulldown-cmark = "=0.13.4" walkdir = "2" # Exact pins: zip and quick-xml are the hostile-input boundary for Office # packages (docs/design/72-openxml-documents.md, F12). zip = { version = "=4.6.1", default-features = false, features = ["deflate"] } csv = "1" quick-xml = "=0.41.0" image = { version = "0.25", default-features = false, features = ["png", "jpeg", "gif", "webp"] } lopdf = { version = "0.45", default-features = false } dom_query = "0.27" # checkpoint file-content encoding base64 = "0.22" # Constant-time token comparison for auth (timing-attack resistance) subtle = "2" # Release lifecycle: real precedence ordering for update decisions semver = "1" # Artifact integrity for downloaded release binaries sha2 = "0.10" # Ed25519 verification for signed plugin/catalog evidence; no signing or key generation. ring = "=0.17.14" hex = "0.4" # Cross-platform OS secret storage (macOS Keychain / Windows Credential # Manager / Linux Secret Service) for the credential store # (docs/design/44-shared-config.md, "Secrets Chain"). keyring = "3" # Embeds the built admin SPA (crates/vak-admin-ui/dist) into the binary include_dir = "0.7" globset = "0.4" similar = { version = "2", features = ["text"] } unicode-width = "0.2" libc = "0.2" tempfile = "3" # Linux filesystem containment: safe wrapper over the Landlock LSM syscalls landlock = "0.4" # Desktop shell (docs/design/20-tauri-desktop.md): native webview + Rust host. # `tray-icon` keeps the window and menu-bar lifecycle in this one app process. tauri = { version = "2.11", features = ["tray-icon", "image-png"] } # Static assets/context codegen for the tauri app at compile time tauri-build = "2.6" tauri-plugin-dialog = "2.7" tauri-plugin-notification = "2.3" # Enforces one running instance; a second launch refocuses the first window tauri-plugin-single-instance = "2.3" # Real PTY for the integrated terminal pane portable-pty = "0.9" # Menu-bar controller (vak-tray): native tray icon + event loop tray-icon = "0.21" winit = "0.30" notify-rust = "4" [workspace.lints.rust] unsafe_code = "deny" [workspace.lints.clippy] unwrap_used = "warn" expect_used = "warn" panic = "warn" dbg_macro = "deny" [profile.dev] debug = "line-tables-only" [profile.test] debug = "line-tables-only" incremental = false [profile.release] lto = "thin" strip = "symbols"