2025-12-24 16:29:33 +00:00
# Tech Stack & Constraints
## Overview
This project is a desktop application built with **Tauri ** . It functions as an **Agentic Code Assistant ** capable of safely executing tools on the host system.
## Core Stack
* **Backend: ** Rust (Tauri Core)
* **MSRV: ** Stable (latest)
* **Framework: ** Tauri v2
* **Frontend: ** TypeScript + React
* **Build Tool: ** Vite
* **Styling: ** CSS Modules or Tailwind (TBD - Defaulting to CSS Modules)
* **State Management: ** React Context / Hooks
* **Chat UI: ** Rendered Markdown with syntax highlighting.
## Agent Architecture
The application follows a **Tool-Use (Function Calling) ** architecture:
1. **Frontend: ** Collects user input and sends it to the LLM.
2. **LLM: ** Decides to generate text OR request a **Tool Call ** (e.g., `execute_shell` , `read_file` ).
3. **Tauri Backend (The "Hand"): **
* Intercepts Tool Calls.
* Validates the request against the **Safety Policy ** .
* Executes the native code (File I/O, Shell Process, Search).
* Returns the output (stdout/stderr/file content) to the LLM.
2025-12-25 12:39:20 +00:00
* **Event Loop: ** The backend emits real-time events (`chat:update` ) to the frontend to ensure UI responsiveness during long-running Agent tasks.
2025-12-24 16:29:33 +00:00
## LLM Provider Abstraction
To support both Remote and Local models, the system implements a `ModelProvider` abstraction layer.
* **Strategy: **
* Abstract the differences between API formats (OpenAI-compatible vs Anthropic vs Gemini).
* Normalize "Tool Use" definitions, as each provider handles function calling schemas differently.
* **Supported Providers: **
* **Anthropic: ** Focus on Claude 3.5 Sonnet for coding tasks.
* **Google: ** Gemini 1.5 Pro for massive context windows.
* **Ollama: ** Local inference (e.g., Llama 3, DeepSeek Coder) for privacy and offline usage.
* **Configuration: **
* Provider selection is runtime-configurable by the user.
* API Keys must be stored securely (using OS native keychain where possible).
## Tooling Capabilities
### 1. Filesystem (Native)
* **Scope: ** Strictly limited to the user-selected `project_root` .
* **Operations: ** Read, Write, List, Delete.
* **Constraint: ** Modifications to `.git/` are strictly forbidden via file APIs (use Git tools instead).
### 2. Shell Execution
* **Library: ** `tokio::process` for async execution.
* **Constraint: ** We do **not ** run an interactive shell (repl). We run discrete, stateless commands.
* **Allowlist: ** The agent may only execute specific binaries:
* `git`
* `cargo` , `rustc` , `rustfmt` , `clippy`
* `npm` , `node` , `yarn` , `pnpm` , `bun`
* `ls` , `find` , `grep` (if not using internal search)
* `mkdir` , `rm` , `touch` , `mv` , `cp`
### 3. Search & Navigation
* **Library: ** `ignore` (by BurntSushi) + `grep` logic.
* **Behavior: **
* Must respect `.gitignore` files automatically.
* Must be performant (parallel traversal).
## Coding Standards
### Rust
* **Style: ** `rustfmt` standard.
* **Error Handling: ** Custom `AppError` type deriving `thiserror` . All Commands return `Result<T, AppError>` .
* **Concurrency: ** Heavy tools (Search, Shell) must run on `tokio` threads to avoid blocking the UI.
### TypeScript / React
* **Style: ** Prettier / ESLint standard.
* **Types: ** Shared types with Rust (via `tauri-specta` or manual interface matching) are preferred to ensure type safety across the bridge.
## Libraries (Approved)
* **Rust: **
* `serde` , `serde_json` : Serialization.
* `ignore` : Fast recursive directory iteration respecting gitignore.
2025-12-24 16:59:14 +00:00
* `walkdir` : Simple directory traversal.
2025-12-24 16:29:33 +00:00
* `tokio` : Async runtime.
* `reqwest` : For LLM API calls (if backend-initiated).
2025-12-24 17:17:35 +00:00
* `uuid` : For unique message IDs.
* `chrono` : For timestamps.
2025-12-24 16:29:33 +00:00
* `tauri-plugin-dialog` : Native system dialogs.
2025-12-24 17:46:27 +00:00
* `tauri-plugin-store` : Persistent key-value storage.
2025-12-24 16:29:33 +00:00
* **JavaScript: **
* `@tauri-apps/api` : Tauri Bridge.
* `@tauri-apps/plugin-dialog` : Dialog API.
2025-12-24 17:46:27 +00:00
* `@tauri-apps/plugin-store` : Store API.
2025-12-24 16:29:33 +00:00
* `react-markdown` : For rendering chat responses.
## Safety & Sandbox
1. **Project Scope: ** The application must strictly enforce that it does not read/write outside the `project_root` selected by the user.
2. **Human in the Loop: **
* Shell commands that modify state (non-readonly) should ideally require a UI confirmation (configurable).
* File writes must be confirmed or revertible.