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.
- package/README.md +241 -301
- package/dist/{bootstrap-DDFVEMYI.js → bootstrap-SPDT3XBQ.js} +5 -7
- package/dist/{chunk-GHMXWAXI.js → chunk-2MZP75SH.js} +72 -202
- package/dist/chunk-35X3V6OW.js +139 -0
- package/dist/{chunk-LVTKJQ7O.js → chunk-4KURCUWD.js} +1 -1
- package/dist/{chunk-XDZDOKIF.js → chunk-5K4YDCVU.js} +1 -1
- package/dist/{chunk-7MWKT67G.js → chunk-6U6VA2OT.js} +520 -2187
- package/dist/{chunk-OIMAE24Q.js → chunk-7ZXUUDQQ.js} +18 -7
- package/dist/{chunk-AERHOXGC.js → chunk-FSL2MOYK.js} +236 -93
- package/dist/{chunk-LC4TV3KL.js → chunk-GUX6ZFVF.js} +1 -1
- package/dist/{chunk-CUE4UZXR.js → chunk-KYSAHDYE.js} +2 -2
- package/dist/{chunk-C4NKJT2Z.js → chunk-L3LPVF4Z.js} +1 -1
- package/dist/{chunk-EYWNOHMJ.js → chunk-L653KKCR.js} +1 -0
- package/dist/{chunk-ALKAAG4O.js → chunk-LD24DWWE.js} +4 -4
- package/dist/{chunk-33Z47EXI.js → chunk-LM6AL6LN.js} +2417 -867
- package/dist/chunk-M6M4DCDU.js +942 -0
- package/dist/{chunk-35MX4ZUI.js → chunk-PK3TVFBT.js} +2 -2
- package/dist/{chunk-2ERTYRHA.js → chunk-Z63KUQX4.js} +37 -13
- package/dist/cli/index.js +35 -25
- package/dist/{client-5KD25NOP.js → client-G62EZT6U.js} +3 -3
- package/dist/harden-permissions-6BLHRCQJ.js +100 -0
- package/dist/index.js +14 -14
- package/dist/{local-IHKJFQJS.js → local-HQ3UJ7KR.js} +2 -2
- package/dist/{memory-QMJRM3XJ.js → memory-BJH724PQ.js} +6 -5
- package/dist/{memory-hook-VUNWZ3NY.js → memory-hook-LUAKTXU5.js} +5 -5
- package/dist/{migrate-5VBAP52B.js → migrate-C4LBLOZH.js} +6 -5
- package/dist/{paths-XA2RJH4S.js → paths-WMVV7ZAJ.js} +1 -1
- package/dist/{server-JF6FX772.js → server-4J56HS62.js} +8 -15
- package/dist/{server-N4T7E25M.js → server-I6TYJ36S.js} +7 -15
- package/dist/{setup-server-IX3BFPPH.js → setup-server-VJ3MGUSM.js} +16 -17
- package/dist/{store-BY7S6IFN.js → store-2IGAMTES.js} +7 -6
- package/dist/{task-dependency-resolver-L6UUMTHK.js → task-dependency-resolver-CQ432Z7J.js} +1 -1
- package/dist/{task-executor-XBNJLUCS.js → task-executor-JELRREUV.js} +1 -1
- package/dist/{tool-index-FTERJSZK.js → tool-index-XPCMWBYY.js} +4 -4
- package/dist/{transcript-IM7G25OS.js → transcript-OEO3HA4Z.js} +2 -2
- package/dist/web/assets/{index-BfYCdwLI.js → index-Dn5ZH1Y6.js} +13 -13
- package/dist/web/assets/{index.es-DitvF-9H.js → index.es-eSR4Qv6s.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +2 -6
- package/src/templates/HEARTBEAT.md +5 -0
- package/dist/chunk-AEHTQI3H.js +0 -142
- 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
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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 |
|
|
41
|
-
| TON & Jettons | 15 |
|
|
42
|
-
| STON.fi DEX | 5 | Swap, quote, search, trending
|
|
43
|
-
| DeDust DEX | 5 | Swap, quote, pools, prices, token analytics
|
|
44
|
-
| TON DNS | 8 |
|
|
45
|
-
| Deals | 5 | P2P escrow
|
|
46
|
-
| Journal | 3 | Trade
|
|
47
|
-
| Web | 2 |
|
|
48
|
-
| Workspace | 6 | Sandboxed file operations
|
|
49
|
-
| Exec | 4 |
|
|
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** |
|
|
56
|
-
| **RAG + Hybrid Search** |
|
|
57
|
-
| **Auto-Compaction** | AI
|
|
58
|
-
| **Observation Masking** | Compresses old tool results
|
|
59
|
-
| **Plugin SDK** | Frozen
|
|
60
|
-
| **Smart DEX Router** |
|
|
61
|
-
| **Vision Analysis** | Image understanding via
|
|
62
|
-
| **Scheduled Tasks** |
|
|
63
|
-
| **Message Debouncing** |
|
|
64
|
-
| **Daily Logs** |
|
|
65
|
-
| **Multi-Policy Access** |
|
|
66
|
-
| **Tool RAG** |
|
|
67
|
-
| **MCP Client** |
|
|
68
|
-
| **System Execution** | YOLO mode
|
|
69
|
-
| **TON Proxy** | Browse .ton domains via
|
|
70
|
-
| **
|
|
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
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
|
305
|
-
| `
|
|
306
|
-
| `
|
|
307
|
-
| `
|
|
308
|
-
| `
|
|
309
|
-
| `
|
|
310
|
-
| `
|
|
311
|
-
| `
|
|
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
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
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
|
-
|
|
312
|
+
ssh -L 7777:localhost:7777 user@remote-server
|
|
351
313
|
```
|
|
352
314
|
|
|
353
|
-
###
|
|
315
|
+
### Coding Agent
|
|
354
316
|
|
|
355
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
|
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/ #
|
|
448
|
-
│ ├── register-all.ts # Central tool registration (
|
|
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 (
|
|
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/ #
|
|
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 (
|
|
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
|
|