This repository is a product fork of the original single-chat project at grinev/opencode-telegram-bot.
- Permanent git remote:
upstream->https://github.com/grinev/opencode-telegram-bot.git - Upstream repo:
https://github.com/grinev/opencode-telegram-bot - Upstream branch:
main - Last reviewed upstream head:
7a8e542(chore(release): v0.16.0, 2026-04-12) - Original fork point for this threaded fork:
21da71b(chore(release): v0.11.0)
- Keep this fork optimized for group topics, thread-scoped sessions, and DM control flows.
- Prefer selective ports over blind merges.
- Keep upstream-compatible naming and UX when the change is low-risk.
- Skip or rewrite upstream changes that assume one global chat/session lane.
c301481setup wizard now asks forOPENCODE_SERVER_USERNAMEandOPENCODE_SERVER_PASSWORDd7a114fdotenv startup noise suppression via quiet config loadingd758af7startup logging improvements, including resolved config path logging2b63c5balignment toward upstream command naming by exposing/abortdce630cpartial port:/startis now always allowed during active interactions and performs scope-aware recoveryc192aeepartial port: model favorites/recent lists are filtered against the current provider catalog and invalid stored scoped models are reconciled19e0644reviewed during sync; localized text remains compatible with this forkeb56b66adapted port: interactive/status/setup messages now default to raw Telegram text while assistant completions still fall back safely from MarkdownV2 to plain textc72e7cbported: French locale support added and registered in locale validation/docs6afb300+6619532ported: scoped pinned messages now show cumulative session costf3b3fc6+a337370+54a493dported:/commandspagination, filtering, and clearer execution UXfcd2273+e4eb83e+b414bf3covered by fork commitc97baf6: upstream tool-call streaming/reply formatting changes were already adapted into this fork's topic-aware streaming flow84c300dadapted port: subagent work status now renders inside the parent topic's tool stream without breaking topic-scoped deliveryafacadeported:/sessionsnow requests root sessions only, avoiding child-session entries in the control-lane picker6ff8fa1ported: Markdown fallback retries now strip stale parse options, and Markdown splitting avoids trailing escape characters at chunk boundariesb6efc31ported: todowrite formatter now separates the header from todo items with a blank line5632f2f+d888b16adapted port: MarkdownV2 retries now attempt reserved-character escaping first and final assistant sends preserve raw-text fallback content instead of leaking converted Telegram markdowndae0f82partial port: assistant stream pacing is now configurable viaRESPONSE_STREAM_THROTTLE_MSbd4504dported: scoped pinned messages now show the current git branch for the active project, including linked worktreesb0e96eeadapted port:todowriteservice messages are replaced in-place so todo streams stay isolated alongside the fork's scoped live stream and subagent cards0efb80cported: longbashtool commands in Telegram summaries now truncate viaBASH_TOOL_DISPLAY_MAX_LENGTH13a8948adapted port: scoped agent selection now falls back to an available project agent before prompts, commands, topic creation, and scheduled tasksa25af98ported: bot UI now labels the selector asagentinstead ofmode2f22851adapted port:/opennow adds projects by browsing configurable allowed roots while still respecting this fork's group/topic project-lock rules and scoped state reset flow
/stop->/abort- This fork exposes
/abortas the sole public command to match upstream.
- This fork exposes
/startreset behavior- Upstream clears global project/session/pinned state.
- This fork only clears non-topic scopes; topic-bound sessions remain attached to their thread.
- Model reconciliation
- Upstream validates one stored model.
- This fork validates all scoped stored models.
- Scheduled tasks
- Upstream stores and delivers scheduled tasks in a single global lane.
- This fork stores explicit delivery targets and creates a dedicated per-project scheduled topic in forum groups.
- Response and tool-call streaming
- Upstream streams through the current single chat lane.
- This fork routes streamed edits by
sessionId -> topic binding, keeping unrelated topics isolated.
- Subagent activity cards
- Upstream renders subagent work in one active chat lane.
- This fork maps child-session activity back into the parent topic thread and replaces prior subagent cards in-place.
- Release-only bumps (
v0.11.1,v0.11.2) - Release-only bumps (
v0.11.3,v0.11.4) - Release-only bumps (
v0.12.0,v0.12.1,v0.13.0) - Release-only bumps (
v0.13.1,v0.13.2) reviewed; runtime changes were already covered by fork commitc97baf6 - Release-only bumps (
v0.14.0,v0.14.1) reviewed; runtime fixes were selectively ported/adapted above - Upstream docs that frame forum topics / parallel thread workflows as out of scope
- Repo template churn that does not affect runtime behavior
d392778upstream concept docs link back to this fork; not needed in fork docs939ebb7reviewed; already covered in this fork because streamed interim sends already usedisable_notification: true239e512skipped: this fork still needs its custom final-delivery path for topic-aware ordering, TTS replies, and keyboard refresh behaviordae0f82generic Telegram API retry wrapper skipped: this fork already routes outbound calls through a topic-aware rate limiter withretry_afterhandling, plus scoped live-stream retry schedulingc91f137test-only upstream change skipped: this fork added equivalent linked-worktree coverage inside its scoped pinned manager tests- Release-only bump (
v0.15.0) reviewed; runtime/UI changes were selectively ported/adapted above 1ad75a5reviewed; file logging was already present in this fork, so no additional port was needede85380f+0580a73+5222bae+ed512ffreviewed forv0.16.0; skipped for now because this fork's topic-scoped live-stream/final-delivery pipeline diverges heavily and needs a dedicated manual adaptation pass- Release-only/docs-only changes in
v0.16.0skipped after review (57a0c56,a75f055,8940e35,7a8e542)
- Refresh upstream refs with
git fetch upstream main. - Compare
upstream/mainagainst the last reviewed commit in this file. - Classify changes into:
- safe cherry-pick / direct port
- manual adaptation required
- skip for fork-specific reasons
- Use
git log --oneline <last-reviewed>..upstream/mainandgit diff --stat <last-reviewed>..upstream/mainfor the initial review. - Port runtime/setup fixes first.
- Port command/state changes only after checking thread-scoped behavior in:
src/bot/commands/src/bot/index.tssrc/interaction/src/model/manager.tssrc/pinned/manager.tssrc/settings/manager.ts
- Run
npm run build,npm run lint, andnpm test. - Update this file:
- reviewed upstream head
- what was ported
- what was skipped and why
- Prefer the permanent
upstreamremote for all future fork-sync checks; do not create ad-hoc temporary refs when the remote is available. - Standard refresh command:
git fetch upstream main - Inspect new upstream commits with
git log --oneline HEAD..upstream/mainonly when you specifically want to compare your current branch tip to upstream; for sync review, compare from the recordedLast reviewed upstream headinstead. - If the remote is ever missing in a fresh clone, restore it with
git remote add upstream https://github.com/grinev/opencode-telegram-bot.git
src/bot/commands/start.tssrc/bot/index.tssrc/interaction/guard.tssrc/interaction/manager.tssrc/model/manager.tssrc/pinned/manager.tsREADME.md,PRODUCT.md,AGENTS.md
- Document the fork-specific behavior first; do not claim parity with the original project.
- Keep source-based setup instructions accurate until a distinct package name is chosen.