Releases: artickc/opencode-telegram-bot
Releases · artickc/opencode-telegram-bot
Release list
v2.0.0 - First Stable Release
First Stable Release — v2.0.0
OpenCode Telegram Bot is now stable. This is the first production-ready release with all features complete and verified.
Control OpenCode from Telegram over the Agent Client Protocol (ACP) — opencode acp over JSON-RPC/stdio. Switch projects, resume sessions, stream responses with live diffs and rich tool-call detail, queue follow-ups, run scheduled tasks, and run 24/7 as a cross-platform background service.
Complete Feature Set
- Projects and Sessions — Browse folders, create projects, resume/attach to live sessions, multi-session control with
/running - Streaming and Rendering — Live typing indicators, MarkdownV2 rendering, unified edit diffs, chunking for long messages
- Tool Call Visibility — Rich detail for every tool: searches (pattern + scope + filters), reads (path + line/offset), edits (diff blocks with stats), writes (content preview + syntax highlighting), deletes, moves (source to dest), shell commands (bash blocks), fetches (URL + method + body), web searches, MCP calls (server + method + args)
- Tool Status Tracking — See pending to completed/failed for each tool call as it completes
- Subagent Visibility — Watch subagents start, work, and finish in real-time
- Self-Healing — Auto-fork on context-full, transient-error retry with backoff, auto-restart, single-instance guard
- Progress Bar — Live
{progress: N%}bar with bot-computed fallback - Scheduled Tasks — Run tasks on a schedule with
/tasks - Voice Messages — Transcribe voice to prompts (configurable STT endpoint)
- Image Prompts — Send photos to the agent, receive generated images back
- File Ingestion — Send documents for the agent to read
- MCP Control —
/mcpto inspect, health-check, enable/disable MCP servers - Inline Approvals — Approve/deny risky tool calls from Telegram buttons
- Cross-Platform Daemon — Windows (Startup folder / Task Scheduler), Linux (systemd), macOS (launchd)
- npm Package —
npm install -g @artickc/opencode-telegram-botgives you theopencode-tgCLI - Auto-Update — Checks hourly, updates when idle
- Status Panel — Pinned live status with activity, location, config, progress
- Threaded Replies — Every message threaded to your prompt with searchable hashtags
- Self-Cleaning UI — Transient menus auto-remove for a tidy chat history
- JSONC Support — MCP config reader handles comments + trailing commas
What Changed
- Transport: HTTP/SSE → ACP over stdio. The bot now runs
opencode acpand speaks JSON-RPC on the agent process pipe. Mid-turn freezes from dropped SSE streams, wrong-directory event scopes, and silent TCP half-closes no longer apply. formatToolCallrewritten to per-kind formatter functions with rich detail.- Diff rendering improved — smart-truncated (keeps first/last hunks, drops middle with summary).
- Removed
@opencode-ai/sdkdependency (no longer needed with ACP/stdio).
Fixed
- Second (and later) turns ended instantly with empty Done — model aliases are now expanded to full
provider/modelids. - Tool cards stuck on ⏳ after Done — streamer now upserts the same card through pending → completed.
- First message showed only your prompt and no reply — client tracks message roles and emits only newly-appended suffix.
- Single-instance lock could terminate an unrelated process — now verifies command line before killing.
Install
npm install -g @artickc/opencode-telegram-bot
opencode-tg setup # configure .env + detect opencode CLI
opencode-tg install # install as 24/7 background serviceOr see the Install Guide.
Architecture
A fork of artickc/kiro-telegram-bot, re-architected for OpenCode ACP (opencode acp over JSON-RPC/stdio).
- Runtime: Node.js >= 20, TypeScript via
tsx(no build step) - Key deps:
grammy(Telegram),dotenv,diff - Entry point:
src/index.ts/ CLI/daemon:src/cli.ts
Full changelog: CHANGELOG.md
v1.0.5
Fixed
- First message showed only your prompt and no reply: filter the user's own message parts, stream only the new suffix of each growing snapshot, and drop the redundant message.part.delta emit (no echo, no duplication).
- Assistant reply could be lost or the prompt echoed on resumed sessions: buffer out-of-order parts until the role resolves, with a safety flush at session.idle.
- Single-instance lock could terminate an unrelated node/tsx process (e.g. a sibling kiro-telegram-bot) via a recycled PID: it now verifies the target's command line belongs to this bot before killing.