teleton 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +241 -301
  2. package/dist/{bootstrap-DDFVEMYI.js → bootstrap-SPDT3XBQ.js} +5 -7
  3. package/dist/{chunk-GHMXWAXI.js → chunk-2MZP75SH.js} +72 -202
  4. package/dist/chunk-35X3V6OW.js +139 -0
  5. package/dist/{chunk-LVTKJQ7O.js → chunk-4KURCUWD.js} +1 -1
  6. package/dist/{chunk-XDZDOKIF.js → chunk-5K4YDCVU.js} +1 -1
  7. package/dist/{chunk-7MWKT67G.js → chunk-6U6VA2OT.js} +520 -2187
  8. package/dist/{chunk-OIMAE24Q.js → chunk-7ZXUUDQQ.js} +18 -7
  9. package/dist/{chunk-AERHOXGC.js → chunk-FSL2MOYK.js} +236 -93
  10. package/dist/{chunk-LC4TV3KL.js → chunk-GUX6ZFVF.js} +1 -1
  11. package/dist/{chunk-CUE4UZXR.js → chunk-KYSAHDYE.js} +2 -2
  12. package/dist/{chunk-C4NKJT2Z.js → chunk-L3LPVF4Z.js} +1 -1
  13. package/dist/{chunk-EYWNOHMJ.js → chunk-L653KKCR.js} +1 -0
  14. package/dist/{chunk-ALKAAG4O.js → chunk-LD24DWWE.js} +4 -4
  15. package/dist/{chunk-33Z47EXI.js → chunk-LM6AL6LN.js} +2417 -867
  16. package/dist/chunk-M6M4DCDU.js +942 -0
  17. package/dist/{chunk-35MX4ZUI.js → chunk-PK3TVFBT.js} +2 -2
  18. package/dist/{chunk-2ERTYRHA.js → chunk-Z63KUQX4.js} +37 -13
  19. package/dist/cli/index.js +35 -25
  20. package/dist/{client-5KD25NOP.js → client-G62EZT6U.js} +3 -3
  21. package/dist/harden-permissions-6BLHRCQJ.js +100 -0
  22. package/dist/index.js +14 -14
  23. package/dist/{local-IHKJFQJS.js → local-HQ3UJ7KR.js} +2 -2
  24. package/dist/{memory-QMJRM3XJ.js → memory-BJH724PQ.js} +6 -5
  25. package/dist/{memory-hook-VUNWZ3NY.js → memory-hook-LUAKTXU5.js} +5 -5
  26. package/dist/{migrate-5VBAP52B.js → migrate-C4LBLOZH.js} +6 -5
  27. package/dist/{paths-XA2RJH4S.js → paths-WMVV7ZAJ.js} +1 -1
  28. package/dist/{server-JF6FX772.js → server-4J56HS62.js} +8 -15
  29. package/dist/{server-N4T7E25M.js → server-I6TYJ36S.js} +7 -15
  30. package/dist/{setup-server-IX3BFPPH.js → setup-server-VJ3MGUSM.js} +16 -17
  31. package/dist/{store-BY7S6IFN.js → store-2IGAMTES.js} +7 -6
  32. package/dist/{task-dependency-resolver-L6UUMTHK.js → task-dependency-resolver-CQ432Z7J.js} +1 -1
  33. package/dist/{task-executor-XBNJLUCS.js → task-executor-JELRREUV.js} +1 -1
  34. package/dist/{tool-index-FTERJSZK.js → tool-index-XPCMWBYY.js} +4 -4
  35. package/dist/{transcript-IM7G25OS.js → transcript-OEO3HA4Z.js} +2 -2
  36. package/dist/web/assets/{index-BfYCdwLI.js → index-Dn5ZH1Y6.js} +13 -13
  37. package/dist/web/assets/{index.es-DitvF-9H.js → index.es-eSR4Qv6s.js} +1 -1
  38. package/dist/web/index.html +1 -1
  39. package/package.json +2 -6
  40. package/src/templates/HEARTBEAT.md +5 -0
  41. package/dist/chunk-AEHTQI3H.js +0 -142
  42. package/dist/chunk-FUNF6H4W.js +0 -251
package/README.md CHANGED
@@ -15,19 +15,27 @@
15
15
 
16
16
  ---
17
17
 
18
- <p align="center">Teleton is an autonomous AI agent platform that operates as a real Telegram user account (not a bot). It thinks through an agentic loop with tool calling, remembers conversations across sessions with hybrid RAG, and natively integrates the TON blockchain: send crypto, swap on DEXs, bid on domains, verify payments - all from a chat message. It can schedule tasks to run autonomously at any time. It ships with 125+ built-in tools, supports 15 LLM providers, and exposes a Plugin SDK so you can build your own tools on top of the platform.</p>
18
+ <p align="center">Teleton is an autonomous AI agent platform that operates as a real Telegram user account (not a bot). It thinks through an agentic loop with tool calling, remembers conversations across sessions with hybrid RAG, and natively integrates the TON blockchain: send crypto, swap on DEXs, bid on domains, verify payments - all from a chat message. It can schedule tasks to run autonomously at any time. It ships with 135+ built-in tools, supports 15 LLM providers, and exposes a Plugin SDK so you can build your own tools on top of the platform.</p>
19
19
 
20
20
  ### Key Highlights
21
21
 
22
- - **Full Telegram access** - Operates as a real user via MTProto (GramJS), not a limited bot
23
- - **Agentic loop** - Up to 5 iterations of tool calling per message, the agent thinks, acts, observes, and repeats
24
- - **Multi-Provider LLM** - Anthropic, Claude Code, OpenAI, Google Gemini, xAI Grok, Groq, OpenRouter, Moonshot, Mistral, Cerebras, ZAI, MiniMax, Hugging Face, Cocoon, Local (15 providers)
25
- - **TON Blockchain** - Built-in W5R1 wallet, send/receive TON & jettons, swap on STON.fi and DeDust, NFTs, DNS domains
26
- - **Persistent memory** - Hybrid RAG (sqlite-vec + FTS5), auto-compaction with AI summarization, daily logs
27
- - **125+ built-in tools** - Messaging, media, blockchain, DEX trading, deals, DNS, exec, journaling, and more
28
- - **Plugin SDK** - Extend the agent with custom tools, frozen SDK with isolated databases, secrets management, lifecycle hooks
29
- - **MCP Client** - Connect external tool servers (stdio/SSE/Streamable HTTP) with 2 lines of YAML, no code, no rebuild
30
- - **Secure by design** - Prompt injection defense, sandboxed workspace, plugin isolation, wallet encryption
22
+ <table>
23
+ <tr>
24
+ <td align="center" width="33%"><br><b><ins>Full Telegram Access</ins></b><br>Real user via MTProto,<br>not a bot<br><br></td>
25
+ <td align="center" width="33%"><br><b><ins>Agentic Loop</ins></b><br>Think, act, observe, repeat<br>until shit gets done<br><br></td>
26
+ <td align="center" width="33%"><br><b><ins>15 LLM Providers</ins></b><br>Anthropic, OpenAI, Google, xAI, Groq, and more<br><br></td>
27
+ </tr>
28
+ <tr>
29
+ <td align="center"><br><b><ins>TON Blockchain</ins></b><br>Wallet, jettons, DEX swaps, DNS, NFTs<br><br></td>
30
+ <td align="center"><br><b><ins>Persistent Memory</ins></b><br>Hybrid RAG, vector + keyword, auto-compaction<br><br></td>
31
+ <td align="center"><br><b><ins>135+ Built-in Tools</ins></b><br>Messaging, media, crypto, DEX, DNS, files<br><br></td>
32
+ </tr>
33
+ <tr>
34
+ <td align="center"><br><b><ins>Plugin SDK</ins></b><br>Custom tools, isolated DBs, secrets, hooks<br><br></td>
35
+ <td align="center"><br><b><ins>MCP Client</ins></b><br>Connect any MCP tool server<br><br></td>
36
+ <td align="center"><br><b><ins>Secure by Design</ins></b><br>Sandbox, plugin isolation, prompt defense<br><br></td>
37
+ </tr>
38
+ </table>
31
39
 
32
40
  ---
33
41
 
@@ -35,39 +43,42 @@
35
43
 
36
44
  ### Tool Categories
37
45
 
38
- | Category | Tools | Description |
39
- | ------------- | ----- | ------------------------------------------------------------------------------------------------------------------ |
40
- | Telegram | 77 | Messaging, media, chats, groups, polls, stickers, gifts, stars, stories, contacts, folders, profile, memory, tasks, voice transcription, scheduled messages |
41
- | TON & Jettons | 15 | W5R1 wallet, send/receive TON & jettons, balances, prices, holders, history, charts, NFTs, smart DEX router |
42
- | STON.fi DEX | 5 | Swap, quote, search, trending tokens, liquidity pools |
43
- | DeDust DEX | 5 | Swap, quote, pools, prices, token analytics (holders, top traders, buy/sell tax) |
44
- | TON DNS | 8 | Domain auctions, bidding, linking/unlinking, TON Site hosting, resolution, availability checks |
45
- | Deals | 5 | P2P escrow with inline buttons, on-chain payment verification, anti double-spend |
46
- | Journal | 3 | Trade/operation logging with P&L tracking and natural language queries |
47
- | Web | 2 | Web search and page extraction via Tavily (search, fetch/extract) |
48
- | Workspace | 6 | Sandboxed file operations with path traversal protection |
49
- | Exec | 4 | System execution (YOLO mode) — shell commands, file read/write, process management (off by default, admin-only) |
46
+ | Category | Tools | Description |
47
+ | ------------- | ----- | -------------------------------------------------------------- |
48
+ | Telegram | 80 | Messages, media, chats, polls, stickers, gifts, stars, stories |
49
+ | TON & Jettons | 15 | Wallet, send/receive, balances, prices, NFTs, DEX router |
50
+ | STON.fi DEX | 5 | Swap, quote, search, trending, pools |
51
+ | DeDust DEX | 5 | Swap, quote, pools, prices, token analytics |
52
+ | TON DNS | 8 | Auctions, bidding, linking, TON Sites, resolution |
53
+ | Deals | 5 | P2P escrow, on-chain verification, anti double-spend |
54
+ | Journal | 3 | Trade logging, P&L tracking, natural language queries |
55
+ | Web | 2 | Search and page extraction via Tavily |
56
+ | Workspace | 6 | Sandboxed file operations, path traversal protection |
57
+ | Exec | 4 | Shell, files, processes (off by default, admin-only) |
58
+ | Bot | 1 | Inline bot message sending for plugin interactions |
50
59
 
51
60
  ### Advanced Capabilities
52
61
 
53
- | Capability | Description |
54
- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- |
55
- | **Multi-Provider LLM** | Switch between Anthropic, Claude Code, OpenAI, Google, xAI, Groq, OpenRouter, Moonshot, Mistral, Cerebras, ZAI, MiniMax, Hugging Face, Cocoon, or Local — Dashboard validates API key before switching |
56
- | **RAG + Hybrid Search** | Local ONNX embeddings (384d) or Voyage AI (512d/1024d) with FTS5 keyword + sqlite-vec cosine similarity, fused via RRF |
57
- | **Auto-Compaction** | AI-summarized context management prevents overflow, preserves key information in `memory/*.md` files |
58
- | **Observation Masking** | Compresses old tool results to one-line summaries, saving ~90% context window |
59
- | **Plugin SDK** | Frozen namespaced SDK (`sdk.ton`, `sdk.telegram`, `sdk.secrets`, `sdk.storage`) with isolated databases and lifecycle hooks |
60
- | **Smart DEX Router** | `dex_quote` compares STON.fi vs DeDust in parallel, recommends the best rate |
61
- | **Vision Analysis** | Image understanding via multimodal LLM (utility model) |
62
- | **Scheduled Tasks** | Time-based task execution with DAG dependency resolution |
63
- | **Message Debouncing** | Intelligent batching of rapid group messages (DMs are always instant) |
64
- | **Daily Logs** | Automatic session summaries preserved across resets |
65
- | **Multi-Policy Access** | Configurable DM/group policies (open, allowlist, admin-only, disabled) with per-group module permissions |
66
- | **Tool RAG** | Semantic tool selection (enabled by default) - sends only the top-K most relevant tools per message (hybrid vector + FTS5, configurable `top_k`, `always_include` patterns) |
67
- | **MCP Client** | Connect external MCP tool servers (stdio, SSE, or Streamable HTTP) - auto-discovery, namespaced tools, managed via CLI or WebUI |
68
- | **System Execution** | YOLO mode — 4 system tools (shell, file read/write, process list) with audit logging, configurable timeout, admin-only scope (off by default) |
69
- | **TON Proxy** | Browse .ton domains via Tonutils-Proxy HTTP proxy, auto-downloads binary from GitHub, PID-based orphan cleanup, configurable port |
70
- | **Sandboxed Workspace** | Secure file system with recursive URL decoding, symlink detection, and immutable config files |
62
+ | Capability | Description |
63
+ | ----------------------- | ------------------------------------------------------------------------ |
64
+ | **Multi-Provider LLM** | 15 providers, hot-swap from dashboard or CLI |
65
+ | **RAG + Hybrid Search** | Vector (sqlite-vec) + keyword (FTS5) fused search |
66
+ | **Auto-Compaction** | AI summarizes old context, saves to `memory/*.md` |
67
+ | **Observation Masking** | Compresses old tool results, saves ~90% context |
68
+ | **Plugin SDK** | Frozen SDK, isolated DBs, secrets, lifecycle hooks |
69
+ | **Smart DEX Router** | Compares STON.fi vs DeDust, picks best rate |
70
+ | **Vision Analysis** | Image understanding via utility model |
71
+ | **Scheduled Tasks** | Cron-like tasks with dependency chains |
72
+ | **Message Debouncing** | Batches rapid group messages, DMs stay instant |
73
+ | **Daily Logs** | Auto session summaries, persisted across resets |
74
+ | **Multi-Policy Access** | DM/group policies (open, allowlist, admin-only, disabled), per-group |
75
+ | **Tool RAG** | Sends only top-K relevant tools per message |
76
+ | **MCP Client** | stdio, SSE, Streamable HTTP, auto-discovery, CLI or WebUI |
77
+ | **System Execution** | YOLO mode: shell, files, processes (off by default, admin-only) |
78
+ | **TON Proxy** | Browse .ton domains via HTTP proxy, auto-installed |
79
+ | **Management API** | HTTPS control plane for remote admin, bootstrap mode, lifecycle control |
80
+ | **Sandboxed Workspace** | Path traversal protection, symlink detection, immutable configs |
81
+ | **Heartbeat** | Autonomous periodic wake-up, HEARTBEAT.md task checklist, configurable intervals |
71
82
 
72
83
  ---
73
84
 
@@ -105,35 +116,21 @@ cd teleton-agent
105
116
  npm install && npm run build
106
117
  ```
107
118
 
108
- ### 2. Setup
119
+ ### 2. Setup & Start
109
120
 
110
121
  ```bash
111
- teleton setup
122
+ teleton setup --ui
112
123
  ```
113
124
 
114
- The wizard will configure:
115
- - LLM provider selection (15 providers: Anthropic, Claude Code, OpenAI, Google, xAI, Groq, OpenRouter, Moonshot, Mistral, Cerebras, ZAI, MiniMax, Hugging Face, Cocoon, Local)
116
- - Telegram authentication (API credentials, phone, login code)
117
- - Access policies (DM/group response rules)
118
- - Admin user ID
119
- - TON wallet generation (W5R1 with 24-word mnemonic)
120
- - Workspace initialization (SOUL.md, STRATEGY.md, SECURITY.md, MEMORY.md)
125
+ The WebUI wizard walks you through everything: LLM provider, Telegram auth (QR code or phone), access policies, admin ID, TON wallet, and workspace files. Once done, the agent starts automatically.
121
126
 
122
- Configuration files created:
123
- - `~/.teleton/config.yaml` - Main configuration
124
- - `~/.teleton/wallet.json` - TON wallet (backup mnemonic securely)
125
- - `~/.teleton/memory.db` - SQLite database (WAL mode, sqlite-vec, FTS5)
126
- - `~/.teleton/workspace/` - Sandboxed file storage
127
-
128
- ### 3. Start
129
-
130
- If setup completed without errors, your agent is ready to go:
127
+ To restart later with the dashboard:
131
128
 
132
129
  ```bash
133
- teleton start
130
+ teleton start --webui
134
131
  ```
135
132
 
136
- ### 4. Verify
133
+ ### 3. Verify
137
134
 
138
135
  Send a message to your agent on Telegram:
139
136
 
@@ -198,25 +195,31 @@ ton_proxy: # Optional: .ton domain proxy
198
195
 
199
196
  ### Supported Models
200
197
 
201
- All models are defined in `src/config/model-catalog.ts` and shared across the CLI setup, WebUI setup wizard, and Dashboard. To add a model, add it there — it will appear everywhere automatically.
202
-
203
- | Provider | Models |
204
- |----------|--------|
205
- | **Anthropic** | Claude Opus 4.6, Claude Opus 4.5, Claude Sonnet 4.6, Claude Haiku 4.5 |
206
- | **Claude Code** | Same as Anthropic (auto-detected credentials) |
207
- | **OpenAI** | GPT-5, GPT-5 Pro, GPT-5 Mini, GPT-5.1, GPT-4o, GPT-4.1, GPT-4.1 Mini, o4 Mini, o3, Codex Mini |
208
- | **Google** | Gemini 3 Pro (preview), Gemini 3 Flash (preview), Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite, Gemini 2.0 Flash |
209
- | **xAI** | Grok 4.1 Fast, Grok 4 Fast, Grok 4, Grok Code, Grok 3 |
210
- | **Groq** | Llama 4 Maverick, Qwen3 32B, DeepSeek R1 70B, Llama 3.3 70B |
211
- | **OpenRouter** | Claude Opus/Sonnet, GPT-5, Gemini, DeepSeek R1/V3, Qwen3 Coder/Max/235B, Nemotron, Sonar Pro, MiniMax, Grok 4 |
212
- | **Moonshot** | Kimi K2.5, Kimi K2 Thinking |
213
- | **Mistral** | Devstral Small/Medium, Mistral Large, Magistral Small |
214
- | **Cerebras** | Qwen 3 235B, GPT OSS 120B, ZAI GLM-4.7, Llama 3.1 8B |
215
- | **ZAI** | GLM-5, GLM-4.7, GLM-4.7 Flash (free), GLM-4.6, GLM-4.5 Flash (free), GLM-4.5V |
216
- | **MiniMax** | MiniMax M2.5, MiniMax M2.5 Fast, MiniMax M2.1, MiniMax M2 |
217
- | **Hugging Face** | DeepSeek V3.2, DeepSeek R1, Qwen3 235B, Qwen3 Coder 480B, Qwen3 Next 80B, Kimi K2.5, GLM-4.7 Flash, GLM-5 |
218
- | **Cocoon** | Qwen/Qwen3-32B (decentralized, pays in TON) |
219
- | **Local** | Auto-detected (Ollama, vLLM, LM Studio) |
198
+ 70+ models across 15 providers. Defined in `src/config/model-catalog.ts`, shared across CLI, WebUI, and Dashboard.
199
+
200
+ <table>
201
+ <tr>
202
+ <td align="center" width="20%"><br><b>Anthropic</b><br>Claude Opus 4.6<br><br></td>
203
+ <td align="center" width="20%"><br><b>Claude Code</b><br>Auto-detected<br><br></td>
204
+ <td align="center" width="20%"><br><b>OpenAI</b><br>GPT-5<br><br></td>
205
+ <td align="center" width="20%"><br><b>Google</b><br>Gemini 3 Pro<br><br></td>
206
+ <td align="center" width="20%"><br><b>xAI</b><br>Grok 4.1<br><br></td>
207
+ </tr>
208
+ <tr>
209
+ <td align="center"><br><b>Groq</b><br>Llama 4 Maverick<br><br></td>
210
+ <td align="center"><br><b>OpenRouter</b><br>Multi-provider<br><br></td>
211
+ <td align="center"><br><b>Moonshot</b><br>Kimi K2.5<br><br></td>
212
+ <td align="center"><br><b>Mistral</b><br>Devstral<br><br></td>
213
+ <td align="center"><br><b>Cerebras</b><br>Qwen 3 235B<br><br></td>
214
+ </tr>
215
+ <tr>
216
+ <td align="center"><br><b>ZAI</b><br>GLM-5<br><br></td>
217
+ <td align="center"><br><b>MiniMax</b><br>M2.5<br><br></td>
218
+ <td align="center"><br><b>Hugging Face</b><br>DeepSeek V3.2<br><br></td>
219
+ <td align="center"><br><b>Cocoon</b><br>Decentralized (TON)<br><br></td>
220
+ <td align="center"><br><b>Local</b><br>Ollama, vLLM, LM Studio<br><br></td>
221
+ </tr>
222
+ </table>
220
223
 
221
224
  ### MCP Servers
222
225
 
@@ -251,49 +254,6 @@ When the WebUI is enabled, the **MCP Servers** page lets you add/remove servers,
251
254
 
252
255
  Tools are namespaced as `mcp_<server>_<tool>` (e.g. `mcp_filesystem_read_file`). Each server supports `scope` (always, dm-only, group-only, admin-only) and `enabled` toggle.
253
256
 
254
- ### Web Search & Fetch
255
-
256
- The agent has two built-in web tools powered by [Tavily](https://tavily.com/) (free tier available):
257
-
258
- | Tool | Description |
259
- |------|-------------|
260
- | `web_search` | Search the web - returns titles, URLs, content snippets, relevance scores. Supports `topic`: general, news, finance |
261
- | `web_fetch` | Extract readable text from a URL - articles, docs, links shared by users |
262
-
263
- Both tools require a Tavily API key. Set it via CLI or config:
264
-
265
- ```bash
266
- teleton config set tavily_api_key
267
- ```
268
-
269
- Or in `config.yaml`:
270
- ```yaml
271
- tavily_api_key: "tvly-..."
272
- ```
273
-
274
- Once configured, the agent can autonomously search the web and read pages when needed to answer questions or verify information.
275
-
276
- ### Managing Config Keys
277
-
278
- Use `teleton config` to manage optional keys without editing YAML manually:
279
-
280
- ```bash
281
- # List all configurable keys and their status
282
- teleton config list
283
-
284
- # Set a key (prompts interactively if value omitted)
285
- teleton config set tavily_api_key
286
- teleton config set tonapi_key AFTWPHSLN3...
287
-
288
- # View a key (sensitive values are masked)
289
- teleton config get tavily_api_key
290
-
291
- # Remove a key
292
- teleton config unset tavily_api_key
293
- ```
294
-
295
- Configurable keys: `tavily_api_key`, `tonapi_key`, `telegram.bot_token`, `telegram.bot_username`.
296
-
297
257
  ### Environment Variables
298
258
 
299
259
  All environment variables override the corresponding `config.yaml` value at startup - useful for Docker and CI:
@@ -301,95 +261,81 @@ All environment variables override the corresponding `config.yaml` value at star
301
261
  | Variable | Description | Default |
302
262
  |----------|-------------|---------|
303
263
  | `TELETON_HOME` | Data directory (config, DB, session) | `~/.teleton` |
304
- | `TELETON_API_KEY` | LLM API key (overrides config) | - |
305
- | `TELETON_TG_API_ID` | Telegram API ID (overrides config) | - |
306
- | `TELETON_TG_API_HASH` | Telegram API Hash (overrides config) | - |
307
- | `TELETON_TG_PHONE` | Phone number (overrides config) | - |
308
- | `TELETON_TAVILY_API_KEY` | Tavily API key for web search | - |
309
- | `TELETON_TONAPI_KEY` | TonAPI key for higher rate limits | - |
310
- | `TELETON_WEBUI_ENABLED` | Enable WebUI (overrides config) | `false` |
311
- | `TELETON_WEBUI_PORT` | WebUI port (overrides config) | `7777` |
264
+ | `TELETON_API_KEY` | LLM API key | - |
265
+ | `TELETON_BASE_URL` | Custom LLM base URL | - |
266
+ | `TELETON_TG_API_ID` | Telegram API ID | - |
267
+ | `TELETON_TG_API_HASH` | Telegram API Hash | - |
268
+ | `TELETON_TG_PHONE` | Phone number | - |
269
+ | `TELETON_TAVILY_API_KEY` | Tavily API key for web tools | - |
270
+ | `TELETON_TONAPI_KEY` | TonAPI key | - |
271
+ | `TELETON_TONCENTER_API_KEY` | Toncenter API key | - |
272
+ | `TELETON_WEBUI_ENABLED` | Enable WebUI | `false` |
273
+ | `TELETON_WEBUI_PORT` | WebUI port | `7777` |
274
+ | `TELETON_WEBUI_HOST` | WebUI bind address | `127.0.0.1` |
275
+ | `TELETON_API_ENABLED` | Enable Management API | `false` |
276
+ | `TELETON_API_PORT` | Management API port | `7778` |
277
+ | `TELETON_LOG_LEVEL` | Log level (debug, info, warn, error) | `info` |
312
278
 
313
279
  ---
314
280
 
315
281
  ## WebUI Dashboard
316
282
 
317
- Teleton includes an **optional web dashboard** for monitoring and configuration. The WebUI is disabled by default and runs only on localhost for security.
318
-
319
- ### Features
320
-
321
- - **Dashboard**: System status, uptime, model info, session count, memory stats, live token usage tracking, provider switching with API key validation, tabbed configuration editor
322
- - **Tools Management**: View all tools grouped by module, toggle enable/disable, change scope per tool
323
- - **Plugin Marketplace**: Install, update, and manage plugins from registry with secrets management
324
- - **Soul Editor**: Edit SOUL.md, SECURITY.md, STRATEGY.md, MEMORY.md with unsaved changes warning
325
- - **Memory Search**: Search knowledge base with hybrid vector+keyword search
326
- - **Live Logs**: Real-time log streaming via Server-Sent Events
327
- - **Workspace**: File browser with inline text editor
328
- - **MCP Servers**: Add/remove external tool servers, manage API keys (env vars), view connection status
329
- - **TON Proxy**: Start/stop Tonutils-Proxy, install/uninstall binary, view status
330
- - **Tasks**: Scheduled task management with status, dependencies, and bulk actions
331
-
332
- ### Usage
333
-
334
- **Enable via config.yaml:**
335
- ```yaml
336
- webui:
337
- enabled: true
338
- port: 7777
339
- ```
340
-
341
- **Enable via CLI flag:**
342
- ```bash
343
- teleton start --webui
344
- # or specify custom port
345
- teleton start --webui --webui-port 8080
346
- ```
283
+ Optional web dashboard, localhost only, token auth. Start with `teleton start --webui` or `teleton setup --ui`.
284
+
285
+ <table>
286
+ <tr>
287
+ <td align="center" width="25%"><br><b>Dashboard</b><br>Status, model, tokens, config<br><br></td>
288
+ <td align="center" width="25%"><br><b>Tools</b><br>Toggle, scope, per-module<br><br></td>
289
+ <td align="center" width="25%"><br><b>Plugins</b><br>Marketplace, install, secrets<br><br></td>
290
+ <td align="center" width="25%"><br><b>Soul Editor</b><br>SOUL, SECURITY, STRATEGY, MEMORY<br><br></td>
291
+ </tr>
292
+ <tr>
293
+ <td align="center"><br><b>Memory Search</b><br>Vector + keyword hybrid<br><br></td>
294
+ <td align="center"><br><b>Live Logs (in Dashboard)</b><br>Real-time SSE streaming<br><br></td>
295
+ <td align="center"><br><b>Workspace</b><br>File browser + editor<br><br></td>
296
+ <td align="center"><br><b>MCP Servers</b><br>Add, remove, configure<br><br></td>
297
+ </tr>
298
+ <tr>
299
+ <td align="center"><br><b>TON Proxy (in Config)</b><br>Start/stop, auto-install<br><br></td>
300
+ <td align="center"><br><b>Tasks</b><br>Schedule, dependencies, bulk<br><br></td>
301
+ <td align="center"><br><b>Setup Wizard</b><br>QR code + phone auth<br><br></td>
302
+ <td align="center"><br><b>Config</b><br>Provider switch, key validation<br><br></td>
303
+ </tr>
304
+ <tr>
305
+ <td align="center"><br><b>Hooks</b><br>Plugin hook registrations<br><br></td>
306
+ </tr>
307
+ </table>
308
+
309
+ Auth token is printed at startup. Stored as HttpOnly cookie for 7 days. For remote access:
347
310
 
348
- **Enable via environment variable:**
349
311
  ```bash
350
- TELETON_WEBUI_ENABLED=true teleton start
312
+ ssh -L 7777:localhost:7777 user@remote-server
351
313
  ```
352
314
 
353
- ### Access
315
+ ### Coding Agent
354
316
 
355
- When WebUI is enabled, the agent will display:
356
- ```
357
- 🌐 WebUI: http://localhost:7777?token=your-token-here
358
- 🔑 Token: your-token-here
359
- ```
317
+ By default, the agent has a **sandboxed workspace** at `~/.teleton/workspace/` with 6 file tools (read, write, delete, rename, list, info). Path traversal protection, symlink detection, and 500 MB quota. Core files (`SOUL.md`, `STRATEGY.md`, `SECURITY.md`) are immutable. Write operations are DM-only.
360
318
 
361
- 1. Click the URL (token is auto-filled) or visit `http://localhost:7777`
362
- 2. Paste the token from the console (displayed once at startup)
363
- 3. Token is stored as HttpOnly cookie (7 days) for subsequent visits
319
+ **YOLO mode** unlocks full system access (off by default, Linux only):
364
320
 
365
- ### Security
321
+ | Tool | Description |
322
+ |------|-------------|
323
+ | `exec_run` | Execute any bash command |
324
+ | `exec_install` | Install packages (apt, pip, npm, docker) |
325
+ | `exec_service` | Manage systemd services |
326
+ | `exec_status` | Server health (disk, RAM, CPU, uptime) |
366
327
 
367
- - **Localhost only**: Server binds to `127.0.0.1` by default (not accessible from network)
368
- - **Bearer token auth**: All API routes require authentication (timing-safe comparison)
369
- - **HttpOnly cookies**: SameSite=Strict, prevents XSS token theft
370
- - **No persistence**: Runtime changes (like model switches via WebUI) are not saved to config.yaml
371
- - **For remote access**: Use SSH tunneling or reverse proxy (nginx/caddy) with HTTPS
328
+ All commands are audit-logged with user, command, output, exit code, and duration. Configurable timeout (default 120s), scope (`admin-only`, `allowlist`, `all`), and output capture limit.
372
329
 
373
- **SSH tunnel example:**
374
- ```bash
375
- ssh -L 7777:localhost:7777 user@remote-server
376
- # Then access http://localhost:7777 on your local machine
330
+ ```yaml
331
+ capabilities:
332
+ exec:
333
+ mode: "yolo" # off | yolo
334
+ scope: "admin-only" # admin-only | allowlist | all
335
+ limits:
336
+ timeout: 120 # seconds (1-3600)
377
337
  ```
378
338
 
379
- ### Workspace Files
380
-
381
- The agent's personality and rules are configured via markdown files in `~/.teleton/workspace/`. Default templates are generated during `teleton setup` - you can edit any of them to customize your agent:
382
-
383
- | File | Purpose | Mutable by Agent |
384
- |------|---------|-----------------|
385
- | `SOUL.md` | Personality, tone, behavior guidelines | No |
386
- | `STRATEGY.md` | Trading rules, buy/sell thresholds | No |
387
- | `SECURITY.md` | Security principles, threat recognition | No |
388
- | `MEMORY.md` | Persistent memory (facts, contacts, decisions) | Yes |
389
- | `memory/*.md` | Session summaries, daily logs (auto-generated) | Yes |
390
-
391
- > **Tip**: Templates are located in `src/templates/` if installing from source. Edit the workspace copies in `~/.teleton/workspace/` - not the source templates.
392
-
393
339
  ### Admin Commands
394
340
 
395
341
  All admin commands support `/`, `!`, or `.` prefix:
@@ -416,6 +362,94 @@ All admin commands support `/`, `!`, or `.` prefix:
416
362
 
417
363
  ---
418
364
 
365
+ ## Plugins
366
+
367
+ Extend the agent with custom tools. Install from the WebUI marketplace in one click, or drop a `.js` file in `~/.teleton/plugins/`. Loaded at startup, no rebuild needed. See [official example plugins](https://github.com/TONresistor/teleton-plugins).
368
+
369
+ ```
370
+ ~/.teleton/plugins/
371
+ ├── weather.js # Single-file plugin
372
+ └── my-plugin/
373
+ ├── index.js # Folder plugin
374
+ ├── package.json # npm deps (auto-installed via npm ci)
375
+ └── package-lock.json
376
+ ```
377
+
378
+ Plugins export a `tools` function (recommended) or array, plus optional lifecycle hooks:
379
+
380
+ ```js
381
+ // ~/.teleton/plugins/weather.js
382
+
383
+ export const manifest = {
384
+ name: "weather",
385
+ version: "1.0.0",
386
+ sdkVersion: "^1.0.0",
387
+ };
388
+
389
+ // Optional: creates an isolated database at ~/.teleton/plugins/data/weather.db
390
+ export function migrate(db) {
391
+ db.exec(`CREATE TABLE IF NOT EXISTS weather_cache (
392
+ city TEXT PRIMARY KEY, data TEXT, cached_at INTEGER
393
+ )`);
394
+ }
395
+
396
+ // Required: tools as a function receiving the Plugin SDK
397
+ export const tools = (sdk) => [
398
+ {
399
+ name: "weather_get",
400
+ description: "Get current weather for a city",
401
+ parameters: {
402
+ type: "object",
403
+ properties: { city: { type: "string", description: "City name" } },
404
+ required: ["city"],
405
+ },
406
+ execute: async (params) => {
407
+ sdk.log.info(`Fetching weather for ${params.city}`);
408
+ const res = await fetch(`https://wttr.in/${params.city}?format=j1`);
409
+ if (!res.ok) return { success: false, error: "City not found" };
410
+ const data = await res.json();
411
+ return { success: true, data: { temp: data.current_condition[0].temp_C } };
412
+ },
413
+ },
414
+ ];
415
+ ```
416
+
417
+ ### Plugin SDK
418
+
419
+ The SDK provides namespaced access to core services:
420
+
421
+ | Namespace | Methods |
422
+ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
423
+ | `sdk.ton` | **Wallet**: `getAddress()`, `getBalance()`, `getPrice()`, `sendTON()`, `getTransactions()`, `verifyPayment()` |
424
+ | | **Jettons**: `getJettonBalances()`, `getJettonInfo()`, `sendJetton()`, `getJettonWalletAddress()` |
425
+ | | **Analytics**: `getJettonPrice()`, `getJettonHolders()`, `getJettonHistory()` |
426
+ | | **NFT**: `getNftItems()`, `getNftInfo()` |
427
+ | | **DEX** (`sdk.ton.dex`): `quote()`, `swap()`, `quoteSTONfi()`, `quoteDeDust()`, `swapSTONfi()`, `swapDeDust()` |
428
+ | | **DNS** (`sdk.ton.dns`): `check()`, `resolve()`, `getAuctions()`, `startAuction()`, `bid()`, `link()`, `unlink()`, `setSiteRecord()` |
429
+ | | **Signed Transfers**: `createTransfer()`, `createJettonTransfer()`, `getPublicKey()`, `getWalletVersion()` |
430
+ | | **Utils**: `toNano()`, `fromNano()`, `validateAddress()` |
431
+ | `sdk.telegram` | **Messages**: `sendMessage()`, `editMessage()`, `deleteMessage()`, `forwardMessage()`, `pinMessage()`, `searchMessages()`, `scheduleMessage()`, `getScheduledMessages()`, `deleteScheduledMessage()`, `sendScheduledNow()`, `getReplies()` |
432
+ | | **Media**: `sendPhoto()`, `sendVideo()`, `sendVoice()`, `sendFile()`, `sendGif()`, `sendSticker()`, `downloadMedia()` |
433
+ | | **Chat & Users**: `getChatInfo()`, `getUserInfo()`, `resolveUsername()`, `getParticipants()`, `getDialogs()`, `getHistory()` |
434
+ | | **Interactive**: `sendDice()`, `sendReaction()`, `createPoll()`, `createQuiz()` |
435
+ | | **Moderation**: `banUser()`, `unbanUser()`, `muteUser()`, `kickUser()` |
436
+ | | **Stars & Gifts**: `getStarsBalance()`, `sendGift()`, `getAvailableGifts()`, `getMyGifts()`, `getResaleGifts()`, `buyResaleGift()`, `getStarsTransactions()`, `transferCollectible()`, `setCollectiblePrice()`, `getCollectibleInfo()`, `getUniqueGift()`, `getUniqueGiftValue()`, `sendGiftOffer()` |
437
+ | | **Advanced**: `getMe()`, `getMessages()`, `isAvailable()`, `getRawClient()`, `setTyping()`, `sendStory()` |
438
+ | `sdk.bot` | `onInlineQuery()`, `onCallback()`, `onChosenResult()`, `editInlineMessage()`, `keyboard()`, `isAvailable`, `username` |
439
+ | `sdk.secrets` | `get()`, `require()`, `has()` |
440
+ | `sdk.storage` | `get()`, `set()`, `delete()`, `has()`, `clear()` (KV with TTL) |
441
+ | `sdk.db` | Raw `better-sqlite3` database, isolated per plugin |
442
+ | `sdk.config` | Sanitized app config (no API keys) |
443
+ | `sdk.pluginConfig` | Plugin-specific config from `config.yaml` |
444
+ | `sdk.log` | `info()`, `warn()`, `error()`, `debug()` |
445
+ | `sdk.on()` | Register hooks: `tool:before`, `tool:after`, `tool:error`, `prompt:before`, `prompt:after`, `session:start`, `session:end`, `message:receive`, `response:before`, `response:after`, `response:error`, `agent:start`, `agent:stop` |
446
+
447
+ **Lifecycle hooks**: `migrate(db)`, `start(ctx)`, `stop()`, `onMessage(event)`, `onCallbackQuery(event)`
448
+
449
+ **Security**: all SDK objects are frozen. Plugins never see API keys or other plugins' data.
450
+
451
+ ---
452
+
419
453
  ## Architecture
420
454
 
421
455
  ### Tech Stack
@@ -423,7 +457,7 @@ All admin commands support `/`, `!`, or `.` prefix:
423
457
  | Layer | Technology |
424
458
  |-------|------------|
425
459
  | LLM | Multi-provider via [pi-ai](https://github.com/mariozechner/pi-ai) (15 providers: Anthropic, Claude Code, OpenAI, Google, xAI, Groq, OpenRouter, Moonshot, Mistral, Cerebras, ZAI, MiniMax, Hugging Face, Cocoon, Local) |
426
- | Telegram Userbot | [GramJS](https://gram.js.org/) Layer 222 fork (MTProto) |
460
+ | Telegram Userbot | [GramJS](https://gram.js.org/) Layer 223 fork (MTProto) |
427
461
  | Inline Bot | [Grammy](https://grammy.dev/) (Bot API, for deals) |
428
462
  | Blockchain | [TON SDK](https://github.com/ton-org/ton) (W5R1 wallet) |
429
463
  | DeFi | STON.fi SDK, DeDust SDK |
@@ -431,7 +465,6 @@ All admin commands support `/`, `!`, or `.` prefix:
431
465
  | Vector Search | [sqlite-vec](https://github.com/asg017/sqlite-vec) (cosine similarity) |
432
466
  | Full-Text Search | SQLite FTS5 (BM25 ranking) |
433
467
  | Embeddings | [@huggingface/transformers](https://www.npmjs.com/package/@huggingface/transformers) (local ONNX) or Voyage AI |
434
- | Token Counting | [js-tiktoken](https://github.com/dqbd/tiktoken) |
435
468
  | MCP Client | [@modelcontextprotocol/sdk](https://modelcontextprotocol.io/) (stdio + SSE + Streamable HTTP) |
436
469
  | WebUI | [Hono](https://hono.dev/) (API) + React + Vite (frontend) |
437
470
  | Language | TypeScript 5.7, Node.js 20+ |
@@ -444,13 +477,13 @@ src/
444
477
  ├── agent/ # Core agent runtime
445
478
  │ ├── runtime.ts # Agentic loop (5 iterations, tool calling, masking, compaction)
446
479
  │ ├── client.ts # Multi-provider LLM client
447
- │ └── tools/ # 125+ built-in tools
448
- │ ├── register-all.ts # Central tool registration (8 categories, 121 tools)
480
+ │ └── tools/ # 135+ built-in tools
481
+ │ ├── register-all.ts # Central tool registration (9 categories)
449
482
  │ ├── registry.ts # Tool registry, scope filtering, provider limits
450
483
  │ ├── module-loader.ts # Built-in module loading (deals + exec)
451
484
  │ ├── plugin-loader.ts # External plugin discovery, validation, hot-reload
452
485
  │ ├── mcp-loader.ts # MCP client (stdio/SSE), tool discovery, lifecycle
453
- │ ├── telegram/ # Telegram operations (77 tools)
486
+ │ ├── telegram/ # Telegram operations (80 tools)
454
487
  │ ├── ton/ # TON blockchain + jettons + DEX router (15 tools)
455
488
  │ ├── stonfi/ # STON.fi DEX (5 tools)
456
489
  │ ├── dedust/ # DeDust DEX (5 tools)
@@ -508,14 +541,19 @@ src/
508
541
  │ └── model-catalog.ts # Shared model catalog (70+ models across all providers)
509
542
  ├── webui/ # Optional web dashboard
510
543
  │ ├── server.ts # Hono server, auth middleware, static serving
511
- │ └── routes/ # 12 API route groups (status, tools, logs, memory, soul, plugins, mcp, tasks, workspace, config, marketplace, ton-proxy)
544
+ │ └── routes/ # 14 route groups (status, tools, logs, memory, soul, plugins, mcp, tasks, workspace, config, marketplace, hooks, ton-proxy, setup)
545
+ ├── api/ # Management API (HTTPS control plane)
546
+ │ ├── server.ts # Hono HTTPS server, TLS, middleware stack
547
+ │ ├── bootstrap.ts # API-only mode (no config needed)
548
+ │ ├── middleware/ # Auth, rate-limit, audit, request-id
549
+ │ └── routes/ # Agent lifecycle, system, logs, memory, auth
512
550
  ├── constants/ # Centralized limits, timeouts, API endpoints
513
551
  ├── utils/ # Logger, sanitize, retry, fetch
514
552
  ├── workspace/ # Path validator (anti-traversal, anti-symlink)
515
553
  ├── templates/ # Workspace template files (SOUL.md, etc.)
516
554
  └── cli/ # CLI commands (setup, config, doctor, mcp)
517
555
 
518
- web/ # React + Vite frontend (10 pages)
556
+ web/ # React + Vite frontend (11 pages)
519
557
  packages/sdk/ # Published @teleton-agent/sdk
520
558
  ```
521
559
 
@@ -580,105 +618,6 @@ npm run test # Vitest
580
618
  npm run format # Prettier
581
619
  ```
582
620
 
583
- ### Plugins
584
-
585
- Plugins extend the agent with custom tools. Drop a `.js` file or folder in `~/.teleton/plugins/` - loaded at startup, hot-reloaded in dev mode, no rebuild needed. See [official example plugins](https://github.com/TONresistor/teleton-plugins) for complete working examples.
586
-
587
- ```
588
- ~/.teleton/plugins/
589
- ├── weather.js # Single-file plugin
590
- └── my-plugin/
591
- ├── index.js # Folder plugin
592
- ├── package.json # npm deps (auto-installed via npm ci)
593
- └── package-lock.json
594
- ```
595
-
596
- Plugins export a `tools` function (recommended) or array, plus optional lifecycle hooks:
597
-
598
- ```js
599
- // ~/.teleton/plugins/weather.js
600
-
601
- export const manifest = {
602
- name: "weather",
603
- version: "1.0.0",
604
- sdkVersion: "^1.0.0",
605
- };
606
-
607
- // Optional: creates an isolated database at ~/.teleton/plugins/data/weather.db
608
- export function migrate(db) {
609
- db.exec(`CREATE TABLE IF NOT EXISTS weather_cache (
610
- city TEXT PRIMARY KEY, data TEXT, cached_at INTEGER
611
- )`);
612
- }
613
-
614
- // Required: tools as a function receiving the Plugin SDK
615
- export const tools = (sdk) => [
616
- {
617
- name: "weather_get",
618
- description: "Get current weather for a city",
619
- parameters: {
620
- type: "object",
621
- properties: { city: { type: "string", description: "City name" } },
622
- required: ["city"],
623
- },
624
- execute: async (params) => {
625
- sdk.log.info(`Fetching weather for ${params.city}`);
626
- const res = await fetch(`https://wttr.in/${params.city}?format=j1`);
627
- if (!res.ok) return { success: false, error: "City not found" };
628
- const data = await res.json();
629
- return { success: true, data: { temp: data.current_condition[0].temp_C } };
630
- },
631
- },
632
- ];
633
- ```
634
-
635
- #### Plugin SDK
636
-
637
- When `tools` is a function, the SDK provides namespaced access to core services:
638
-
639
- | Namespace | Methods |
640
- |-----------|---------|
641
- | `sdk.ton` | **Wallet**: `getAddress()`, `getBalance()`, `getPrice()`, `sendTON()`, `getTransactions()`, `verifyPayment()` |
642
- | | **Jettons**: `getJettonBalances()`, `getJettonInfo()`, `sendJetton()`, `getJettonWalletAddress()` |
643
- | | **Analytics**: `getJettonPrice()`, `getJettonHolders()`, `getJettonHistory()` |
644
- | | **NFT**: `getNftItems()`, `getNftInfo()` |
645
- | | **DEX** (`sdk.ton.dex`): `quote()`, `swap()`, `quoteSTONfi()`, `quoteDeDust()`, `swapSTONfi()`, `swapDeDust()` |
646
- | | **DNS** (`sdk.ton.dns`): `check()`, `resolve()`, `getAuctions()`, `startAuction()`, `bid()`, `link()`, `unlink()`, `setSiteRecord()` |
647
- | | **Signed Transfers** (`sdk.ton`): `createTransfer()`, `createJettonTransfer()`, `getPublicKey()`, `getWalletVersion()` |
648
- | | **Utils**: `toNano()`, `fromNano()`, `validateAddress()` |
649
- | `sdk.telegram` | **Messages**: `sendMessage()`, `editMessage()`, `deleteMessage()`, `forwardMessage()`, `pinMessage()`, `searchMessages()`, `scheduleMessage()`, `getScheduledMessages()`, `deleteScheduledMessage()`, `sendScheduledNow()`, `getReplies()` |
650
- | | **Media**: `sendPhoto()`, `sendVideo()`, `sendVoice()`, `sendFile()`, `sendGif()`, `sendSticker()`, `downloadMedia()` |
651
- | | **Chat & Users**: `getChatInfo()`, `getUserInfo()`, `resolveUsername()`, `getParticipants()`, `getDialogs()`, `getHistory()` |
652
- | | **Interactive**: `sendDice()`, `sendReaction()`, `createPoll()`, `createQuiz()` |
653
- | | **Moderation**: `banUser()`, `unbanUser()`, `muteUser()`, `kickUser()` |
654
- | | **Stars & Gifts**: `getStarsBalance()`, `sendGift()`, `getAvailableGifts()`, `getMyGifts()`, `getResaleGifts()`, `buyResaleGift()`, `getStarsTransactions()`, `transferCollectible()`, `setCollectiblePrice()`, `getCollectibleInfo()`, `getUniqueGift()`, `getUniqueGiftValue()`, `sendGiftOffer()` |
655
- | | **Advanced**: `getMe()`, `isAvailable()`, `getRawClient()`, `setTyping()`, `sendStory()` |
656
- | `sdk.secrets` | `get()`, `require()`, `has()` - 3-tier resolution (env var → secrets file → plugin config) |
657
- | `sdk.storage` | `get()`, `set()`, `delete()`, `has()`, `clear()` - KV store with TTL support |
658
- | `sdk.db` | Raw `better-sqlite3` database - isolated per plugin at `~/.teleton/plugins/data/<name>.db` |
659
- | `sdk.config` | Sanitized app config (no API keys exposed) |
660
- | `sdk.pluginConfig` | Plugin-specific config from `config.yaml` `plugins:` section |
661
- | `sdk.log` | `info()`, `warn()`, `error()`, `debug()` - Prefixed logger |
662
-
663
- **Lifecycle hooks**: `migrate(db)`, `start(ctx)`, `stop()`, `onMessage(event)`, `onCallbackQuery(event)`
664
-
665
- **Security**: all SDK objects are `Object.freeze()`-ed. Plugins never see API keys or other plugins' data.
666
-
667
- Plugin config in `config.yaml`:
668
- ```yaml
669
- plugins:
670
- weather:
671
- api_key: "abc123"
672
- ```
673
-
674
- Backward compatible: plugins can export `tools` as a static array without the SDK.
675
-
676
- At startup:
677
- ```
678
- 🔌 Plugin "weather": 1 tool registered
679
- ✅ 115 tools loaded (1 from plugins)
680
- ```
681
-
682
621
  ---
683
622
 
684
623
  ## Documentation
@@ -692,6 +631,7 @@ Full documentation is available in the [`docs/`](docs/) directory:
692
631
  | [Plugin Development](docs/plugins.md) | Step-by-step plugin tutorial |
693
632
  | [Telegram Setup](docs/telegram-setup.md) | API credentials, policies, 2FA, admin commands |
694
633
  | [TON Wallet](docs/ton-wallet.md) | Wallet setup, DEX trading, security |
634
+ | [Management API](docs/management-api.md) | HTTPS API, bootstrap mode, authentication, endpoints |
695
635
 
696
636
  ---
697
637