Takopi: Streaming Drafts (sendMessageDraft)

Status

In planning. Feature branch not yet created.

Overview

Use Telegram Bot API method sendMessageDraft (API 9.3, December 2025) to stream response text to the user as Claude generates it — like ChatGPT.

API Limitation

sendMessageDraft works only for bots with forum topic mode enabled.

Architecture

  • Progress message (existing) — list of actions + cancel
  • Draft (new) — partial response text, streamed in parallel
  • Feature flag: streaming_drafts = false in [transports.telegram]

Key Changes

  • New event type: TextDeltaEvent in core
  • Claude runner: --include-partial-messages to receive stream_event with text_delta
  • New Telegram API method: sendMessageDraft(chat_id, draft_id, text, ...)
  • StreamingDraftEdits class in runner_bridge.py — similar to ProgressEdits
  • Graceful fallback: after 3 API errors — switch to normal mode

sendMessageDraft Parameters

  • chat_id (int) — target private chat
  • draft_id (int, non-zero) — unique ID, same ID = animated update
  • text (str, 1-4096) — text
  • message_thread_id (int, optional)
  • parse_mode, entities (optional)
  • Returns: True

Files (12 total)

  • model.py, events.py — TextDeltaEvent
  • runners/claude.py — —include-partial-messages + emit
  • telegram/outbox.py — DRAFT_PRIORITY
  • telegram/client_api.py, client.py — send_message_draft
  • settings.py — streaming_drafts flag
  • runner_bridge.py — StreamingDraftEdits
  • progress.py — ignore TextDeltaEvent
  • telegram/bridge.py, backend.py, commands/executor.py — wire config