letta 0.1.2

A robust Rust client for the Letta REST API
Documentation
# Phase 1 Archive - Completed Work

This file archives the completed Phase 1 implementation details for reference.

## Phase 1: Core Infrastructure (COMPLETED ✅)

### 1. Agent Sub-APIs (Priority: CRITICAL) ✅

#### Core Memory Endpoints ✅
- [x] Update Memory type to match SDK structure (blocks, file_blocks, prompt_template)
- [x] Implement GET `/v1/agents/{id}/core-memory` - Get complete memory state
- [x] Implement GET `/v1/agents/{id}/core-memory/blocks` - List all memory blocks
- [x] Implement GET `/v1/agents/{id}/core-memory/blocks/{block_label}` - Get specific block
- [x] Implement PATCH `/v1/agents/{id}/core-memory/blocks/{block_label}` - Update block
- [x] Implement PATCH `/v1/agents/{id}/core-memory/blocks/attach/{block_id}` - Attach block
- [x] Implement PATCH `/v1/agents/{id}/core-memory/blocks/detach/{block_id}` - Detach block
- [x] Add integration tests for all core memory endpoints

#### Archival Memory Endpoints ✅
- [x] Implement GET `/v1/agents/{id}/archival-memory` - List passages with search/pagination
- [x] Implement POST `/v1/agents/{id}/archival-memory` - Create new passage
- [x] Implement PATCH `/v1/agents/{id}/archival-memory/{memory_id}` - Update passage
  - Note: Server-side bug returns tuples instead of Passage objects
- [x] Implement DELETE `/v1/agents/{id}/archival-memory/{memory_id}` - Delete passage
- [x] Add integration tests for all archival memory endpoints

#### Tools Endpoints ✅
- [x] Implement main tools API endpoints
  - [x] GET `/v1/tools/` - List all tools
  - [x] POST `/v1/tools/` - Create a new tool
  - [x] GET `/v1/tools/{tool_id}` - Get a tool by ID
  - [x] PATCH `/v1/tools/{tool_id}` - Update a tool
  - [x] DELETE `/v1/tools/{tool_id}` - Delete a tool
  - [x] GET `/v1/tools/count` - Get tools count
  - [x] PUT `/v1/tools/` - Upsert a tool
- [x] Implement agent tools sub-API endpoints
  - [x] GET `/v1/agents/{id}/tools` - List tools attached to agent
  - [x] PATCH `/v1/agents/{id}/tools/{tool_id}` - Attach tool to agent
  - [x] DELETE `/v1/agents/{id}/tools/{tool_id}` - Detach tool from agent
- [x] Add integration tests for all tools endpoints

#### Sources Endpoints ✅
- [x] Implement `/v1/agents/{id}/sources` endpoints (completed with full sources API)

### 2. Message API Completion (Priority: CRITICAL) ✅
- [x] Implement SSE streaming support for messages
- [x] Add token-level streaming with `stream_tokens` parameter
- [x] Implement individual message CRUD operations (update)
- [x] Add proper streaming error handling

### 3. Enhanced Error Handling (Priority: HIGH) ✅
- [x] Create status-specific error type mapping (404 -> NotFound, etc.)
  - Implemented automatic mapping in `from_response()` method
  - Maps 401 -> Auth, 404 -> NotFound, 422 -> Validation, 429 -> RateLimit, 408/504 -> RequestTimeout
  - Extracts resource information from 404 errors (e.g., "Agent with ID xxx not found")
  - Extracts validation fields from 422 errors
  - Extracts retry-after values from 429 errors
- [x] Match error patterns from Python/TypeScript SDKs
- [x] Add better error context for common failures

### 4. Environment Management (Priority: MEDIUM) ✅
- [x] Create Environment enum (LettaCloud, Local)
  - Added `LettaEnvironment` enum with Cloud and SelfHosted variants
  - Each environment has predefined base URLs
  - Cloud environment marked as requiring authentication
- [x] Implement environment-specific authentication
  - Cloud environment requires auth by default
  - Self-hosted/local doesn't require auth
  - Warning printed when using cloud without auth
- [x] Add environment configuration management
  - `ClientBuilder` supports `.environment()` method
  - Convenience constructors: `LettaClient::cloud()` and `LettaClient::local()`
  - Base URL can override environment settings
- [x] Update client to handle environment switching
  - Builder pattern allows flexible configuration
  - Environment defaults to Cloud if not specified

### 5. Infrastructure (Priority: LOW) ✅
- [x] Implement `/v1/health` endpoint
  - Simple GET request to `/v1/health/` (trailing slash required)
  - Returns `Health` struct with version and status fields
  - No authentication required
  - Integration tests confirm it works on local server
- [ ] Add retry logic for transient failures (moved to Phase 2)
- [ ] Improve authentication token management (moved to Phase 3)

## Key Implementation Details

### LettaId Type System
- Custom type that handles both bare UUIDs and prefixed UUIDs
- Seamless conversion between formats
- Used throughout the entire API for type safety
- Handles prefixes like `agent-`, `message-`, `tool-`, `source-`, etc.

### Error Handling
- Comprehensive error types with rich context
- Automatic HTTP status code mapping
- Smart extraction of error details from API responses
- Integration with miette for excellent error reporting

### Environment Management
- Clear separation between Cloud and Self-hosted environments
- Automatic authentication handling based on environment
- Convenience constructors for common use cases
- Builder pattern for advanced configuration

## Test Coverage
- All implemented endpoints have integration tests
- Tests pass on local server
- Cloud tests are properly ignored (require API keys)
- Streaming tests work when server supports SSE