Skip to content

actus: thread management parity -- fork, delete/archive, auto-title #3

Description

@metasmile

Summary

Zed UI auto-generates thread titles from conversation content, supports forking threads, and lets users delete or archive stale threads. The headless Rust server (actus) needs equivalent functionality.

Requirements

Auto-generate thread titles

  • Listen for thread_title_changed events from the Zed WebSocket protocol
  • Fallback: derive a title from the first user message (truncate to ~60 chars)
  • Store and persist titles in ~/.actus/threads/threads.json
  • Update terminal.py CLI to display thread titles in /history output

Fork threads

  • POST /v1/threads/:id/fork -- creates a new thread copying the full message history from an existing thread
  • The forked thread gets a new ID; the original thread remains unchanged
  • The forked thread starts with completed: true (user sends the first message)
  • CLI: /fork <thread_id> command in terminal.py

Delete / Archive threads

  • DELETE /v1/threads/:id -- mark thread as archived
  • GET /v1/threads with ?include_archived=true -- filter archived threads
  • Archival is soft-delete: thread data stays on disk but hidden from default listing
  • CLI: /delete <thread_id> (or equivalent) command in terminal.py
  • Reaper: optionally auto-archive threads older than N days (configurable)

API Design

GET    /v1/threads                    # list active threads (with ?include_archived)
GET    /v1/threads/:id                # get thread detail
POST   /v1/threads/:id/fork           # fork a thread
DELETE /v1/threads/:id                # archive (soft-delete)

Current state

  • Thread CRUD: GET /v1/threads, GET /v1/threads/:id exists
  • Thread persistence: auto-saved to JSON file in ~/.actus/threads/
  • Thread completed flag already tracked per session
  • CLI: /history lists recent threads

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions