# Module map This page is a high-level map of Takopi’s internal modules: what they do and how they fit together. ## Entry points | Module | Responsibility | |--------|----------------| | `cli.py` | Typer CLI entry point; loads settings, selects engine/transport, runs the transport backend. | | `telegram/backend.py` | Telegram transport backend: validates config, runs onboarding, builds and runs the Telegram bridge. | ## Orchestration and routing | Module | Responsibility | |--------|----------------| | `runner_bridge.py` | Transport-agnostic orchestration: per-message handler, progress updates, final render, cancellation, resume coordination. | | `router.py` | Auto-router: resolves resume tokens by polling runners; selects a runner for a message. | | `scheduler.py` | Per-thread FIFO job queueing with serialization. | | `transport_runtime.py` | Facade used by transports and commands to resolve messages and runners without importing internal router/project types. | ## Domain model and events | Module | Responsibility | |--------|----------------| | `model.py` | Domain types: resume tokens, events, actions, run results. | | `runner.py` | Runner protocol and event queue utilities. | | `events.py` | Event factory helpers for building Takopi events consistently. | ## Rendering and progress | Module | Responsibility | |--------|----------------| | `progress.py` | Progress tracking: reduces takopi events into progress snapshots. | | `markdown.py` | Markdown formatting for progress/final messages; includes helpers like elapsed formatting. | | `presenter.py` | Presenter protocol: converts `ProgressState` into transport-specific messages. | | `transport.py` | Transport protocol: send/edit/delete abstractions and message reference types. | ## Telegram implementation | Module | Responsibility | |--------|----------------| | `telegram/bridge.py` | Telegram bridge loop: polls updates, filters messages, dispatches handlers, coordinates cancellation. | | `telegram/client.py` | Telegram API wrapper with retry/outbox semantics. | | `telegram/render.py` | Telegram markdown rendering and trimming. | | `telegram/onboarding.py` | Interactive setup and setup validation UX. | | `telegram/commands/*` | In-chat command handlers (`/agent`, `/file`, `/topic`, `/ctx`, `/new`, …). | ## Plugins | Module | Responsibility | |--------|----------------| | `plugins.py` | Entrypoint discovery and lazy loading (capture load errors, filter by enabled list). | | `engines.py` | Engine backend discovery and loading via entrypoints. | | `transports.py` | Transport backend discovery and loading via entrypoints. | | `commands.py` | Command backend discovery and loading via entrypoints; command execution helpers. | | `ids.py` | Shared ID regex and collision checks for plugin ids and Telegram command names. | | `api.py` | Public plugin API boundary (`takopi.api` re-exports). | ## Runners and schemas | Module | Responsibility | |--------|----------------| | `runners/*` | Engine runner implementations (Codex, Claude, OpenCode, Pi). | | `schemas/*` | msgspec schemas / decoders for engine JSONL streams. | ## Configuration and persistence | Module | Responsibility | |--------|----------------| | `settings.py` | Loads `takopi.toml` (TOML + env), validates with pydantic-settings. | | `config_store.py` | Raw TOML read/write (merge/update without clobbering extra sections). | | `config_migrations.py` | One-time edits to on-disk config (e.g. legacy Telegram key migration). | ## Utilities | Module | Responsibility | |--------|----------------| | `utils/paths.py` | Path/command relativization helpers. | | `utils/streams.py` | Async stream helpers (`iter_bytes_lines`, stderr draining). | | `utils/subprocess.py` | Subprocess management helpers (terminate/kill best-effort). |