# dirigent_tools

Tool implementations for ACP (Agent-Client Protocol) client operations with sandboxing and permission management.

## Overview

This package provides the core tool operations for interacting with the filesystem, terminal, and search capabilities in a secure, sandboxed environment. It is designed to support ACP-compliant agents (like Claude) by implementing the client-side tool handlers with safety guarantees.

## Features

### File Operations
- **Read** text files with line range support
- **Write** text files with atomic writes and parent directory creation
- **Edit** files with diff generation for previews

### Terminal Operations
- **Create** terminals and spawn commands
- **Capture** output with byte limits and ring-buffer truncation
- **Wait** for command completion
- **Kill** running commands
- **Release** terminal resources

### Search Operations
- **Glob** file matching with patterns
- **Grep** content search with regex
- **LS** directory listing

### Security Features
- **Sandboxing**: All operations restricted to configured allowed roots
- **Blocklists**: Explicit deny patterns for sensitive paths
- **Permissions**: Configurable prompt modes (ask, whitelist, yolo)
- **Audit Logging**: Structured logs for all operations
- **Resource Limits**: Bounded file sizes, search results, and terminal output

## Platform Support

Windows is a first-class platform:
- Handles Windows paths (backslashes, drive letters, UNC shares, `\\?\` prefixes)
- Supports MINGW-style paths (`/c/...`)
- Works with cmd.exe and PowerShell
- Normalizes path separators for consistent policy enforcement

All tests run on Windows, Linux, and macOS.

## Status

**Phase**: Scaffolding (SCAFF-01) - Structure created, implementation pending

All modules are stubs with `unimplemented!()` placeholders. Actual implementation will occur in subsequent phases:
- **Protocol tasks**: Path normalization, sandbox enforcement
- **Tool tasks**: File operations, terminal execution, search
- **Integration tasks**: Permission prompts, audit logging, ACP event generation

## Configuration

See `src/config.rs` for configuration types (to be implemented in SCAFF-05):
- `SandboxConfig` - Filesystem sandboxing
- `PermissionConfig` - Permission prompts and caching
- `TerminalConfig` - Terminal limits and restrictions
- `SearchConfig` - Search result limits
- `EmbeddingConfig` - File embedding thresholds

## Usage Example (Future)

```rust
use dirigent_tools::{fs, SandboxConfig};

// Configure sandbox
let sandbox = SandboxConfig {
    allowed_roots: vec!["C:/work/project".to_string()],
    blocked_paths: vec!["**/.env".to_string()],
    // ... other fields
};

// Read a file (within sandbox)
let content = fs::read_text_file(
    Path::new("C:/work/project/src/main.rs"),
    None,  // line
    None,  // limit
)?;
```

## Testing

Test infrastructure will be set up in SCAFF-03. Tests will cover:
- Path normalization (especially Windows paths)
- Sandbox containment
- Permission flows
- File operations
- Terminal lifecycle
- Search operations

## Documentation

- **CLAUDE.md**: Package context for AI assistants
- **docs/**: API documentation (to be generated with `cargo doc`)

## License

Same as parent Dirigent project.
