# Resume and History System Specification

## Overview

This specification defines a comprehensive system for viewing historical conversation data, resuming interrupted work, and rewinding/restoring to previous states in the Makima platform. The system integrates with the existing contract, task, supervisor, and checkpoint infrastructure.

## Table of Contents

1. [Current Infrastructure](#1-current-infrastructure)
2. [History Viewing Features](#2-history-viewing-features)
3. [Resume System](#3-resume-system)
4. [Rewind/Restore Features](#4-rewindrestore-features)
5. [Integration Points](#5-integration-points)
6. [Implementation Plan](#6-implementation-plan)

---

## 1. Current Infrastructure

### 1.1 Existing Database Tables

The system builds upon these existing tables:

#### `supervisor_states`
```sql
- id: UUID
- contract_id: UUID
- task_id: UUID
- conversation_history: JSONB  -- Full Claude conversation history
- last_checkpoint_id: UUID
- pending_task_ids: UUID[]
- phase: VARCHAR
- last_activity: TIMESTAMP
- created_at: TIMESTAMP
- updated_at: TIMESTAMP
```

#### `task_checkpoints`
```sql
- id: UUID
- task_id: UUID
- checkpoint_number: INT
- commit_sha: VARCHAR
- branch_name: VARCHAR
- message: VARCHAR
- files_changed: JSONB  -- [{path, action: 'A'|'M'|'D'}]
- lines_added: INT
- lines_removed: INT
- created_at: TIMESTAMP
```

#### `task_events`
```sql
- id: UUID
- task_id: UUID
- event_type: VARCHAR  -- 'output', 'status_change', etc.
- previous_status: VARCHAR
- new_status: VARCHAR
- event_data: JSONB  -- Contains full output data
- created_at: TIMESTAMP
```

#### `tasks` (relevant fields)
```sql
- conversation_state: JSONB  -- Saved conversation context
- continue_from_task_id: UUID  -- For worktree inheritance
- last_checkpoint_sha: VARCHAR
- checkpoint_count: INT
- checkpoint_message: VARCHAR
```

#### `mesh_chat_conversations` / `mesh_chat_messages`
```sql
-- Conversations for mesh chat
- id, owner_id, name, is_active, created_at, updated_at

-- Messages
- id, conversation_id, role, content, context_type, context_task_id
- tool_calls: JSONB, pending_questions: JSONB, created_at
```

#### `contract_chat_conversations` / `contract_chat_messages`
```sql
-- Similar structure to mesh chat, scoped to contracts
```

### 1.2 Existing Repository Functions

```rust
// Checkpoint functions
- list_task_checkpoints(pool, task_id) -> Vec<TaskCheckpoint>
- get_task_checkpoint(pool, id) -> Option<TaskCheckpoint>
- get_task_checkpoint_by_sha(pool, commit_sha) -> Option<TaskCheckpoint>

// Supervisor state functions
- upsert_supervisor_state(pool, contract_id, task_id, conversation_history, pending_task_ids, phase)
- get_supervisor_state(pool, contract_id) -> Option<SupervisorState>
- get_supervisor_state_by_task(pool, task_id) -> Option<SupervisorState>
- update_supervisor_conversation(pool, contract_id, conversation_history)
- update_supervisor_pending_tasks(pool, contract_id, pending_task_ids)

// Task output functions
- get_task_output(pool, task_id, limit) -> Vec<TaskEvent>
- list_task_events(pool, task_id, limit) -> Vec<TaskEvent>
```

### 1.3 Existing API Endpoints

```
GET  /api/v1/mesh/tasks/{id}/output         -- Task output history
GET  /api/v1/mesh/tasks/{id}/events         -- Task events
GET  /api/v1/mesh/tasks/{id}/checkpoints    -- List checkpoints
POST /api/v1/mesh/tasks/{id}/continue       -- Continue interrupted task
POST /api/v1/mesh/tasks/{id}/reassign       -- Reassign to new daemon
```

---

## 2. History Viewing Features

### 2.1 Contract History Timeline

View all activities across a contract's lifecycle, aggregating data from all phases and tasks.

#### API Endpoint

```
GET /api/v1/contracts/{contract_id}/history
```

#### Query Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `phase` | string | Filter by phase (research, specify, plan, execute, review) |
| `event_types` | string[] | Filter by event types (task_created, task_completed, checkpoint, phase_change, chat) |
| `from` | datetime | Start of time range |
| `to` | datetime | End of time range |
| `limit` | int | Max results (default: 100) |
| `cursor` | string | Pagination cursor |

#### Response Schema

```typescript
interface ContractHistoryResponse {
  contractId: string;
  entries: HistoryEntry[];
  totalCount: number;
  cursor?: string;
}

interface HistoryEntry {
  id: string;
  timestamp: datetime;
  entryType: 'task_event' | 'chat_message' | 'phase_change' | 'checkpoint' | 'file_change';
  phase: string;

  // Task event data (when entryType = 'task_event')
  taskId?: string;
  taskName?: string;
  eventType?: string;
  eventData?: any;

  // Chat message data (when entryType = 'chat_message')
  conversationId?: string;
  role?: string;
  content?: string;

  // Checkpoint data (when entryType = 'checkpoint')
  checkpointNumber?: number;
  commitSha?: string;
  message?: string;
  filesChanged?: FileChange[];

  // Phase change data (when entryType = 'phase_change')
  previousPhase?: string;
  newPhase?: string;
}
```

### 2.2 Task Conversation History

View the complete conversation history for a specific task.

#### API Endpoint

```
GET /api/v1/mesh/tasks/{task_id}/conversation
```

#### Query Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `include_tool_calls` | bool | Include tool call details (default: true) |
| `include_tool_results` | bool | Include tool results (default: true) |
| `limit` | int | Max messages (default: all) |

#### Response Schema

```typescript
interface TaskConversationResponse {
  taskId: string;
  taskName: string;
  status: string;
  messages: ConversationMessage[];
  totalTokens?: number;
  totalCost?: number;
}

interface ConversationMessage {
  id: string;
  role: 'user' | 'assistant' | 'system' | 'tool';
  content: string;
  timestamp: datetime;

  // For assistant messages
  toolCalls?: ToolCall[];

  // For tool messages
  toolName?: string;
  toolInput?: any;
  toolResult?: string;
  isError?: boolean;

  // Cost tracking
  tokenCount?: number;
  costUsd?: number;
}
```

### 2.3 Supervisor Conversation History

View the full conversation history for a contract's supervisor.

#### API Endpoint

```
GET /api/v1/contracts/{contract_id}/supervisor/conversation
```

#### Response Schema

```typescript
interface SupervisorConversationResponse {
  contractId: string;
  supervisorTaskId: string;
  phase: string;
  lastActivity: datetime;
  pendingTaskIds: string[];

  // Full conversation from supervisor_states.conversation_history
  messages: ConversationMessage[];

  // Tasks spawned during conversation
  spawnedTasks: TaskReference[];
}

interface TaskReference {
  taskId: string;
  taskName: string;
  status: string;
  createdAt: datetime;
  completedAt?: datetime;
}
```

### 2.4 Checkpoint History with Diffs

View checkpoint history with Git diff information.

#### API Endpoint

```
GET /api/v1/mesh/tasks/{task_id}/checkpoints/{checkpoint_id}/diff
```

#### Response Schema

```typescript
interface CheckpointDiffResponse {
  checkpoint: TaskCheckpoint;
  diff: GitDiff;
  previousCheckpoint?: TaskCheckpoint;
}

interface GitDiff {
  files: FileDiff[];
  stats: {
    filesChanged: number;
    insertions: number;
    deletions: number;
  };
}

interface FileDiff {
  path: string;
  action: 'added' | 'modified' | 'deleted';
  additions: number;
  deletions: number;
  hunks: DiffHunk[];
}
```

### 2.5 Activity Timeline View

Unified timeline showing all activities for a contract or task.

#### API Endpoint

```
GET /api/v1/timeline
```

#### Query Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `contract_id` | UUID | Filter by contract |
| `task_id` | UUID | Filter by specific task |
| `include_subtasks` | bool | Include subtask activities |
| `from` | datetime | Start of time range |
| `to` | datetime | End of time range |

---

## 3. Resume System

### 3.1 Resume Interrupted Supervisor

Resume a supervisor conversation that was interrupted (daemon disconnect, crash, etc.).

#### API Endpoint

```
POST /api/v1/contracts/{contract_id}/supervisor/resume
```

#### Request Schema

```typescript
interface ResumeSupervisorRequest {
  // Optional: specify daemon to resume on
  targetDaemonId?: string;

  // How to handle the resume
  resumeMode: 'continue' | 'restart_phase' | 'from_checkpoint';

  // For 'from_checkpoint' mode
  checkpointId?: string;

  // Additional context to inject
  additionalContext?: string;
}
```

#### Behavior

1. **continue** (default):
   - Load `supervisor_states.conversation_history`
   - Prepend context summary to prompt
   - Resume with full conversation context

2. **restart_phase**:
   - Start fresh for current phase
   - Keep knowledge of completed work
   - Don't replay old conversation

3. **from_checkpoint**:
   - Reset code to checkpoint state
   - Clear conversation after checkpoint
   - Resume from clean state

#### Response Schema

```typescript
interface ResumeSupervisorResponse {
  supervisorTaskId: string;
  daemonId: string;
  resumedFrom: {
    phase: string;
    lastActivity: datetime;
    messageCount: number;
  };
  status: 'starting' | 'running';
}
```

### 3.2 Resume Interrupted Task

Resume a task that was interrupted mid-execution.

#### API Endpoint (existing, enhanced)

```
POST /api/v1/mesh/tasks/{task_id}/continue
```

#### Enhanced Request Schema

```typescript
interface ContinueTaskRequest {
  targetDaemonId?: string;

  // NEW: Resume options
  resumeMode?: 'with_context' | 'clean_restart' | 'from_checkpoint';
  checkpointSha?: string;

  // NEW: Context control
  contextOptions?: {
    maxMessages?: number;  // Limit context size
    includeToolCalls?: boolean;
    includeToolResults?: boolean;
    summaryMode?: boolean;  // Use summarized context
  };
}
```

### 3.3 Resume from Specific Checkpoint

Create a new task that starts from a specific checkpoint's code state.

#### API Endpoint

```
POST /api/v1/mesh/tasks/{task_id}/checkpoints/{checkpoint_id}/resume
```

#### Request Schema

```typescript
interface ResumeFromCheckpointRequest {
  // Name for the new task
  taskName?: string;

  // Plan/instructions for the resumed task
  plan: string;

  // Whether to include conversation context up to checkpoint
  includeConversation?: boolean;

  // Target daemon
  targetDaemonId?: string;
}
```

#### Behavior

1. Get checkpoint's commit SHA
2. Create new task with `checkpoint_sha` set
3. When daemon spawns task:
   - Create worktree at checkpoint commit
   - Optionally include conversation context
4. Task starts from checkpoint's code state

#### Response Schema

```typescript
interface ResumeFromCheckpointResponse {
  newTaskId: string;
  sourceTaskId: string;
  checkpointUsed: {
    number: number;
    sha: string;
    message: string;
  };
  status: 'pending' | 'starting';
}
```

### 3.4 Continue from Previous Task State

Use existing `continue_from_task_id` field to inherit worktree state.

#### API Endpoint (existing)

```
POST /api/v1/mesh/tasks
```

#### Relevant Fields

```typescript
interface CreateTaskRequest {
  // ... other fields ...

  // Copy worktree from this task
  continueFromTaskId?: string;

  // Specific checkpoint SHA to branch from
  checkpointSha?: string;

  // Files to copy from parent task's worktree
  copyFiles?: string[];
}
```

---

## 4. Rewind/Restore Features

### 4.1 Rewind Code to Checkpoint

Restore a task's worktree to a specific checkpoint's state.

#### API Endpoint

```
POST /api/v1/mesh/tasks/{task_id}/rewind
```

#### Request Schema

```typescript
interface RewindTaskRequest {
  // Target checkpoint to rewind to
  checkpointId?: string;
  checkpointSha?: string;  // Alternative: use SHA directly

  // What to do with current state
  preserveMode: 'discard' | 'create_branch' | 'stash';

  // For 'create_branch' mode
  branchName?: string;
}
```

#### Behavior

1. **discard**: Hard reset to checkpoint, lose current changes
2. **create_branch**: Create branch from current HEAD, then reset
3. **stash**: Git stash current changes, then reset

#### Response Schema

```typescript
interface RewindTaskResponse {
  taskId: string;
  rewindedTo: {
    checkpointNumber: number;
    sha: string;
    message: string;
  };
  preservedAs?: {
    type: 'branch' | 'stash';
    reference: string;  // Branch name or stash ref
  };
}
```

### 4.2 Rewind Conversation to Point

Truncate conversation history to a specific point.

#### API Endpoint

```
POST /api/v1/contracts/{contract_id}/supervisor/conversation/rewind
```

#### Request Schema

```typescript
interface RewindConversationRequest {
  // Rewind to message with this ID
  toMessageId?: string;

  // OR rewind to messages before this timestamp
  toTimestamp?: datetime;

  // OR rewind by N messages
  byMessageCount?: number;

  // Whether to also rewind code to matching checkpoint
  rewindCode?: boolean;
}
```

#### Behavior

1. Identify the target point in `supervisor_states.conversation_history`
2. Truncate messages after that point
3. If `rewindCode` is true and there's a matching checkpoint, reset code
4. Update `supervisor_states` with truncated history

### 4.3 Fork from Historical Point

Create a new task/conversation branch from any point in history.

#### API Endpoint

```
POST /api/v1/mesh/tasks/{task_id}/fork
```

#### Request Schema

```typescript
interface ForkTaskRequest {
  // Fork point specification
  forkFrom: {
    type: 'checkpoint' | 'timestamp' | 'message_id';
    value: string;
  };

  // New task configuration
  newTask: {
    name: string;
    plan: string;
    includeConversation?: boolean;  // Include history up to fork point
  };

  // Git branching options
  branchOptions?: {
    createBranch?: boolean;
    branchName?: string;
  };
}
```

#### Behavior

1. Identify the fork point (checkpoint, timestamp, or message)
2. Create new task with:
   - `checkpoint_sha` from fork point (or nearest checkpoint)
   - Conversation context up to fork point (if requested)
3. Create git branch if requested
4. Start task in new direction

#### Response Schema

```typescript
interface ForkTaskResponse {
  newTaskId: string;
  sourceTaskId: string;
  forkPoint: {
    type: string;
    checkpoint?: TaskCheckpoint;
    timestamp: datetime;
  };
  branchName?: string;
  conversationIncluded: boolean;
  messageCount?: number;
}
```

### 4.4 Create Branch from Checkpoint

Create a new git branch from a specific checkpoint without starting a task.

#### API Endpoint

```
POST /api/v1/mesh/tasks/{task_id}/checkpoints/{checkpoint_id}/branch
```

#### Request Schema

```typescript
interface CreateBranchFromCheckpointRequest {
  branchName: string;
  checkout?: boolean;  // Whether to checkout the new branch
}
```

---

## 5. Integration Points

### 5.1 New CLI Commands

#### History Commands

```bash
# View contract history timeline
makima contract history [--phase <phase>] [--from <date>] [--to <date>]

# View task conversation history
makima task history <task_id> [--limit <n>] [--no-tool-calls]

# View task checkpoints
makima task checkpoints <task_id> [--with-diff]

# View specific checkpoint diff
makima task checkpoint-diff <task_id> <checkpoint_number>
```

#### Resume Commands

```bash
# Resume supervisor
makima supervisor resume [--mode <continue|restart|checkpoint>] [--checkpoint <id>]

# Resume task
makima task resume <task_id> [--mode <context|clean|checkpoint>] [--checkpoint <sha>]

# Resume from checkpoint
makima task resume-from <task_id> --checkpoint <number> --plan "continue with..."
```

#### Rewind Commands

```bash
# Rewind code to checkpoint
makima task rewind <task_id> --checkpoint <number> [--preserve-branch <name>]

# Rewind conversation
makima supervisor rewind-conversation --to-message <id> [--rewind-code]

# Fork from checkpoint
makima task fork <task_id> --checkpoint <number> --name "alternate approach" --plan "..."
```

### 5.2 New API Endpoints Summary

| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/v1/contracts/{id}/history` | Contract history timeline |
| GET | `/api/v1/contracts/{id}/supervisor/conversation` | Supervisor conversation |
| POST | `/api/v1/contracts/{id}/supervisor/resume` | Resume supervisor |
| POST | `/api/v1/contracts/{id}/supervisor/conversation/rewind` | Rewind conversation |
| GET | `/api/v1/mesh/tasks/{id}/conversation` | Task conversation |
| GET | `/api/v1/mesh/tasks/{id}/checkpoints/{cid}/diff` | Checkpoint diff |
| POST | `/api/v1/mesh/tasks/{id}/checkpoints/{cid}/resume` | Resume from checkpoint |
| POST | `/api/v1/mesh/tasks/{id}/checkpoints/{cid}/branch` | Branch from checkpoint |
| POST | `/api/v1/mesh/tasks/{id}/rewind` | Rewind task code |
| POST | `/api/v1/mesh/tasks/{id}/fork` | Fork from history |
| GET | `/api/v1/timeline` | Unified timeline |

### 5.3 Database Schema Changes

#### New Table: `conversation_snapshots`

Store conversation state at specific points for rewind capability.

```sql
CREATE TABLE conversation_snapshots (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    task_id UUID NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
    checkpoint_id UUID REFERENCES task_checkpoints(id) ON DELETE SET NULL,
    snapshot_type VARCHAR(50) NOT NULL,  -- 'auto', 'manual', 'checkpoint'
    message_count INT NOT NULL,
    conversation_state JSONB NOT NULL,  -- Full conversation at this point
    metadata JSONB,  -- Additional context
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_conversation_snapshots_task ON conversation_snapshots(task_id);
CREATE INDEX idx_conversation_snapshots_checkpoint ON conversation_snapshots(checkpoint_id);
```

#### New Table: `history_events`

Unified event table for timeline views.

```sql
CREATE TABLE history_events (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    owner_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    contract_id UUID REFERENCES contracts(id) ON DELETE CASCADE,
    task_id UUID REFERENCES tasks(id) ON DELETE CASCADE,
    event_type VARCHAR(50) NOT NULL,  -- 'task', 'chat', 'checkpoint', 'phase', 'file'
    event_subtype VARCHAR(50),  -- Specific event type
    phase VARCHAR(50),
    event_data JSONB NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_history_events_contract ON history_events(contract_id, created_at DESC);
CREATE INDEX idx_history_events_task ON history_events(task_id, created_at DESC);
CREATE INDEX idx_history_events_owner ON history_events(owner_id, created_at DESC);
```

#### Table Modifications

```sql
-- Add to task_checkpoints
ALTER TABLE task_checkpoints ADD COLUMN conversation_snapshot_id UUID
    REFERENCES conversation_snapshots(id) ON DELETE SET NULL;

-- Add to tasks
ALTER TABLE tasks ADD COLUMN forked_from_task_id UUID
    REFERENCES tasks(id) ON DELETE SET NULL;
ALTER TABLE tasks ADD COLUMN forked_at_checkpoint_id UUID
    REFERENCES task_checkpoints(id) ON DELETE SET NULL;
```

### 5.4 Frontend Integration

#### New Components

1. **ContractTimeline** - Visual timeline of contract activities
2. **ConversationViewer** - Display conversation history with syntax highlighting
3. **CheckpointBrowser** - Browse checkpoints with diff view
4. **RewindControls** - UI for rewind operations
5. **ForkDialog** - Modal for forking from history

#### New Routes

```
/contracts/:id/history          - Contract history timeline
/contracts/:id/supervisor       - Supervisor conversation view
/tasks/:id/conversation         - Task conversation view
/tasks/:id/checkpoints          - Checkpoint browser
/tasks/:id/checkpoints/:cid     - Checkpoint detail with diff
```

---

## 6. Implementation Plan

### 6.1 Phase 1: Database & Models (Migration 20250116_history_tables)

**Migrations:**

1. Create `conversation_snapshots` table
2. Create `history_events` table
3. Add columns to `task_checkpoints` and `tasks`
4. Create indexes for efficient queries

**Models (Rust):**

1. `ConversationSnapshot` struct
2. `HistoryEvent` struct
3. `ConversationMessage` struct (unified format)
4. Update `TaskCheckpoint` with new fields

### 6.2 Phase 2: Repository Functions

**New Functions:**

```rust
// Conversation snapshots
pub async fn create_conversation_snapshot(pool, task_id, checkpoint_id, state) -> ConversationSnapshot
pub async fn get_conversation_snapshot(pool, id) -> Option<ConversationSnapshot>
pub async fn get_conversation_at_checkpoint(pool, checkpoint_id) -> Option<ConversationSnapshot>
pub async fn list_conversation_snapshots(pool, task_id) -> Vec<ConversationSnapshot>

// History events
pub async fn record_history_event(pool, event) -> HistoryEvent
pub async fn get_contract_history(pool, contract_id, filters) -> Vec<HistoryEvent>
pub async fn get_task_history(pool, task_id, filters) -> Vec<HistoryEvent>
pub async fn get_timeline(pool, owner_id, filters) -> Vec<HistoryEvent>

// Conversation retrieval
pub async fn get_task_conversation(pool, task_id, options) -> Vec<ConversationMessage>
pub async fn get_supervisor_conversation(pool, contract_id) -> SupervisorConversation

// Checkpoint operations
pub async fn get_checkpoint_diff(pool, checkpoint_id) -> CheckpointDiff
pub async fn create_checkpoint_with_snapshot(pool, task_id, message, conversation_state) -> TaskCheckpoint
```

### 6.3 Phase 3: API Endpoints

**History Endpoints:**

1. `GET /api/v1/contracts/{id}/history`
2. `GET /api/v1/contracts/{id}/supervisor/conversation`
3. `GET /api/v1/mesh/tasks/{id}/conversation`
4. `GET /api/v1/mesh/tasks/{id}/checkpoints/{cid}/diff`
5. `GET /api/v1/timeline`

**Resume Endpoints:**

1. `POST /api/v1/contracts/{id}/supervisor/resume`
2. `POST /api/v1/mesh/tasks/{id}/checkpoints/{cid}/resume`
3. Enhance existing `POST /api/v1/mesh/tasks/{id}/continue`

**Rewind Endpoints:**

1. `POST /api/v1/mesh/tasks/{id}/rewind`
2. `POST /api/v1/contracts/{id}/supervisor/conversation/rewind`
3. `POST /api/v1/mesh/tasks/{id}/fork`
4. `POST /api/v1/mesh/tasks/{id}/checkpoints/{cid}/branch`

### 6.4 Phase 4: CLI Commands

**New Commands:**

1. `makima contract history` - View contract history
2. `makima task history` - View task conversation
3. `makima task checkpoints` - List checkpoints
4. `makima task checkpoint-diff` - View checkpoint diff
5. `makima supervisor resume` - Resume supervisor
6. `makima task resume` - Resume task
7. `makima task resume-from` - Resume from checkpoint
8. `makima task rewind` - Rewind code
9. `makima supervisor rewind-conversation` - Rewind conversation
10. `makima task fork` - Fork from history

### 6.5 Phase 5: Daemon Integration

**New Daemon Commands:**

```rust
enum DaemonCommand {
    // Existing...

    // New
    RewindToCheckpoint {
        task_id: Uuid,
        checkpoint_sha: String,
        preserve_mode: PreserveMode,
        branch_name: Option<String>,
    },
    CreateConversationSnapshot {
        task_id: Uuid,
    },
    RestoreFromSnapshot {
        task_id: Uuid,
        snapshot_id: Uuid,
    },
}
```

**Daemon Handlers:**

1. Implement `handle_rewind_to_checkpoint`
2. Implement `handle_create_conversation_snapshot`
3. Update checkpoint creation to include conversation state
4. Update task spawning to handle fork/resume scenarios

### 6.6 Phase 6: Frontend Components

**Components:**

1. ContractTimeline
2. ConversationViewer
3. CheckpointBrowser
4. DiffViewer
5. RewindControls
6. ForkDialog
7. ResumeDialog

**Routes & Pages:**

1. Contract history page
2. Supervisor conversation page
3. Task conversation page
4. Checkpoint detail page

---

## 7. Security Considerations

### 7.1 Access Control

- All history/resume/rewind operations must verify owner_id
- Supervisor operations require tool key authentication
- Frontend operations require user authentication
- Prevent access to other users' conversation history

### 7.2 Data Retention

- Conversation snapshots may contain sensitive data
- Implement configurable retention policies
- Consider encryption for stored conversation data
- Provide data export/deletion capabilities

### 7.3 Audit Trail

- Log all rewind/restore operations
- Track who initiated changes
- Maintain original data before modifications

---

## 8. Performance Considerations

### 8.1 Pagination

- All list endpoints support cursor-based pagination
- Limit maximum response sizes
- Use efficient queries with proper indexes

### 8.2 Caching

- Cache frequently accessed conversation history
- Invalidate cache on updates
- Consider read replicas for history queries

### 8.3 Storage

- Compress large conversation histories
- Consider archiving old snapshots
- Monitor database size growth

---

## 9. Future Enhancements

1. **Search within history** - Full-text search across conversations
2. **History comparison** - Diff between two points in time
3. **Replay mode** - Step through conversation history
4. **Export history** - Download conversation/checkpoint history
5. **History annotations** - Add notes to historical points
6. **Automatic snapshots** - Periodic conversation backups
7. **History sharing** - Share specific history ranges
8. **AI-powered summaries** - Generate summaries of historical periods
