virtualcode 1.9.1 → 2.0.0
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/CHANGELOG.md +106 -0
- package/LICENSE +21 -0
- package/README.md +227 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +194 -67
- package/dist/index.js.map +1 -1
- package/package.json +14 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.0.0] - 2026-06-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- `/start` command with welcome message and quick setup guide
|
|
12
|
+
- Token format validation (`^\d+:[\w-]+$`) before connecting
|
|
13
|
+
- Auto-reconnect with exponential backoff (5s -> 10s -> 20s -> 30s cap)
|
|
14
|
+
- LRU-bounded session tracking (max 100 entries)
|
|
15
|
+
- Pending message timeout (30s) to prevent memory leaks
|
|
16
|
+
- Non-text message handler (replies "Only text messages are supported.")
|
|
17
|
+
- Prefix ambiguity detection ("Multiple sessions match. Use the full ID.")
|
|
18
|
+
- Graceful shutdown in `dispose()` (clears all timers, maps, and state)
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Removed all emoji characters from user-facing messages
|
|
22
|
+
- `findSessionById` now returns typed result (`found | ambiguous | not_found`)
|
|
23
|
+
- `lastForwardedBySession` uses LRU eviction instead of unbounded growth
|
|
24
|
+
- `pendingTelegram` entries auto-expire after 30s
|
|
25
|
+
- Error messages are shorter and more consistent
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
- Bot never auto-reconnected after 403/block errors
|
|
29
|
+
- `lastForwardedBySession` grew unbounded with every new session
|
|
30
|
+
- `pendingTelegram` leaked entries when `prompt()` hung
|
|
31
|
+
- Prefix matching silently failed when multiple sessions matched
|
|
32
|
+
- `dispose()` didn't clean up timers or pending state
|
|
33
|
+
|
|
34
|
+
## [1.9.2] - 2026-06-19
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- All error messages prefixed with error indicators
|
|
38
|
+
- `sanitizeUI()` strips stack traces and truncates to 200 chars
|
|
39
|
+
- `fmtId()` truncates session IDs to 12 chars
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
- `userError()` now extracts only the first line of error messages
|
|
43
|
+
- All `ctx.reply()` error paths go through `sanitizeUI()`
|
|
44
|
+
|
|
45
|
+
## [1.9.1] - 2026-06-19
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
- Prefix matching for session IDs in `/link` and `/use`
|
|
49
|
+
- `/ls` now shows full session IDs for easy copy-paste
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- `/link` used `client.session.get()` which failed for valid IDs from other directories
|
|
53
|
+
- Now uses `client.session.list()` + `findSessionById()` for reliable matching
|
|
54
|
+
|
|
55
|
+
## [1.9.0] - 2026-06-19
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
- `handlePluginError()` maps known errors to friendly messages
|
|
59
|
+
- `debugLog()` for structured debug output (enable with `DEBUG_TELEGRAM=1`)
|
|
60
|
+
- All bot command handlers wrapped in try/catch
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
- Raw error objects could overflow the TUI with stack traces
|
|
64
|
+
- `String(err)` on SDK errors produced 500+ line dumps
|
|
65
|
+
- Event handler errors not sanitized
|
|
66
|
+
|
|
67
|
+
## [1.8.1] - 2026-06-19
|
|
68
|
+
|
|
69
|
+
### Changed
|
|
70
|
+
- `/ls` output shows both session title and ID
|
|
71
|
+
|
|
72
|
+
## [1.8.0] - 2026-06-19
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
- `slashName: "telegram"` on TUI palette command
|
|
76
|
+
- `/telegram` now appears in chat slash suggestions
|
|
77
|
+
- `desc` field on palette command for meaningful descriptions
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
- Removed all 6 `console.log` startup statements
|
|
81
|
+
- All `bot.stop()` calls wrapped in try/catch
|
|
82
|
+
- All `client.session.*` SDK calls wrapped in try/catch
|
|
83
|
+
- Added `bot.catch()` for global Telegraf error handling
|
|
84
|
+
|
|
85
|
+
## [1.7.0] - 2026-06-18
|
|
86
|
+
|
|
87
|
+
### Added
|
|
88
|
+
- TUI plugin with `/telegram` slash command for token setup
|
|
89
|
+
- Dialog prompt for pasting bot token
|
|
90
|
+
- Toast notification on successful token save
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
- Cleared stale OpenCode cache for plugin updates
|
|
94
|
+
|
|
95
|
+
## [1.0.0] - 2026-06-13
|
|
96
|
+
|
|
97
|
+
### Added
|
|
98
|
+
- Initial release
|
|
99
|
+
- Bidirectional Telegram <-> OpenCode bridge
|
|
100
|
+
- Session linking via `/link`
|
|
101
|
+
- `/ls`, `/use`, `/history`, `/help` commands
|
|
102
|
+
- `telegram_send` tool for LLM-initiated messages
|
|
103
|
+
- Persistent links across restarts
|
|
104
|
+
- Multi-session support
|
|
105
|
+
- `allowed_users` access control
|
|
106
|
+
- `notify_on_reconnect` option
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 virtualcode contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,51 +1,255 @@
|
|
|
1
|
-
#
|
|
1
|
+
# virtualcode
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```
|
|
4
|
+
__ ___ _
|
|
5
|
+
\ \ / (_)_ __ ___ ___ _ __ ___ | |_
|
|
6
|
+
\ \ / /| | '_ \ / _ \/ _ \| '_ \ / _ \ | __|
|
|
7
|
+
\ V / | | | | | __/ (_) | | | | (_) || |_
|
|
8
|
+
\_/ |_|_| |_|\___|\___/|_| |_|\___/ \__|
|
|
9
|
+
|
|
10
|
+
Talk to your terminal from your phone.
|
|
11
|
+
```
|
|
4
12
|
|
|
5
|
-
|
|
13
|
+
An [OpenCode](https://opencode.ai) plugin that bridges your terminal sessions with Telegram.
|
|
14
|
+
Send prompts from your phone, receive LLM responses in real time. The LLM can also message
|
|
15
|
+
you back via a built-in tool.
|
|
6
16
|
|
|
7
|
-
|
|
17
|
+
```
|
|
18
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
19
|
+
│ │
|
|
20
|
+
│ YOUR PHONE YOUR TERMINAL │
|
|
21
|
+
│ ┌───────────────────┐ ┌───────────────────┐ │
|
|
22
|
+
│ │ Telegram │ │ $ opencode │ │
|
|
23
|
+
│ │ │ │ │ │
|
|
24
|
+
│ │ > fix the bug │ ─────────────>│ [AI] analyzing... │ │
|
|
25
|
+
│ │ │ │ │ │
|
|
26
|
+
│ │ [AI] Fixed. The │ <─────────────│ [AI] Fixed. The │ │
|
|
27
|
+
│ │ issue was in... │ │ issue was in... │ │
|
|
28
|
+
│ │ │ │ │ │
|
|
29
|
+
│ └───────────────────┘ └───────────────────┘ │
|
|
30
|
+
│ │
|
|
31
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
32
|
+
```
|
|
8
33
|
|
|
9
|
-
|
|
10
|
-
- **`/link` sessions**: Bind a Telegram chat to an OpenCode session
|
|
11
|
-
- **`telegram_send` tool**: LLM can proactively message you on Telegram
|
|
12
|
-
- **Multi-session**: One chat linked to one session; multiple chats can link to the same session
|
|
13
|
-
- **Persistent links**: Session-chat bindings survive restarts
|
|
34
|
+
---
|
|
14
35
|
|
|
15
36
|
## Installation
|
|
16
37
|
|
|
17
38
|
```bash
|
|
18
|
-
npm install
|
|
39
|
+
npm install -g virtualcode
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Then add the plugin to your OpenCode config:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"plugin": ["virtualcode"]
|
|
47
|
+
}
|
|
19
48
|
```
|
|
20
49
|
|
|
21
|
-
|
|
50
|
+
And to your TUI config (`~/.config/opencode/tui.json`):
|
|
22
51
|
|
|
23
52
|
```json
|
|
24
53
|
{
|
|
25
|
-
"
|
|
26
|
-
|
|
54
|
+
"plugin": ["virtualcode"]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Setup
|
|
61
|
+
|
|
62
|
+
### 1. Create a Telegram Bot
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
1. Open Telegram and search for @BotFather
|
|
66
|
+
2. Send /newbot
|
|
67
|
+
3. Choose a name and username for your bot
|
|
68
|
+
4. Copy the token (format: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Connect the Bot
|
|
72
|
+
|
|
73
|
+
In your OpenCode terminal, type `/telegram` and paste your bot token.
|
|
74
|
+
|
|
75
|
+
Or configure it directly in `opencode.jsonc`:
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"plugin": [
|
|
80
|
+
["virtualcode", {
|
|
27
81
|
"token": "YOUR_BOT_TOKEN",
|
|
28
|
-
"allowed_users": [
|
|
82
|
+
"allowed_users": [YOUR_TELEGRAM_USER_ID]
|
|
29
83
|
}]
|
|
30
84
|
]
|
|
31
85
|
}
|
|
32
86
|
```
|
|
33
87
|
|
|
88
|
+
### 3. Link a Session
|
|
89
|
+
|
|
90
|
+
In your Telegram chat with the bot:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
/ls -- list your OpenCode sessions
|
|
94
|
+
/link <ID> -- bind this chat to a session
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Now any message you send goes to that session. Responses come back automatically.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Commands
|
|
102
|
+
|
|
103
|
+
### Telegram Bot Commands
|
|
104
|
+
|
|
105
|
+
| Command | Description |
|
|
106
|
+
|---------|-------------|
|
|
107
|
+
| `/start` | Welcome message and quick setup guide |
|
|
108
|
+
| `/link <ID>` | Bind this chat to an OpenCode session |
|
|
109
|
+
| `/unlink` | Remove the session binding |
|
|
110
|
+
| `/status` | Show connection state and linked session |
|
|
111
|
+
| `/ls` | List recent sessions (number, title, ID) |
|
|
112
|
+
| `/use <N\|ID>` | Switch to a session by number or ID |
|
|
113
|
+
| `/history [N]` | View last N messages in the linked session |
|
|
114
|
+
| `/help` | Show command reference |
|
|
115
|
+
|
|
116
|
+
Any other message is forwarded to the linked session as a prompt.
|
|
117
|
+
|
|
118
|
+
### OpenCode Terminal Commands
|
|
119
|
+
|
|
120
|
+
| Command | Description |
|
|
121
|
+
|---------|-------------|
|
|
122
|
+
| `/telegram` | Open token setup dialog |
|
|
123
|
+
| `/telegram <token>` | Connect with a bot token |
|
|
124
|
+
| `/telegram status` | Show bot connection state |
|
|
125
|
+
| `/telegram disconnect` | Stop bot and remove saved token |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
34
129
|
## Configuration
|
|
35
130
|
|
|
36
131
|
| Option | Type | Default | Description |
|
|
37
132
|
|--------|------|---------|-------------|
|
|
38
|
-
| `token` | `string` | `env.TELEGRAM_BOT_TOKEN` | Telegram bot token |
|
|
39
|
-
| `allowed_users` | `number[]` | `null` (all) | Restrict to specific Telegram user IDs |
|
|
40
|
-
| `notify_on_reconnect` | `boolean` | `false` | Send
|
|
133
|
+
| `token` | `string` | `env.TELEGRAM_BOT_TOKEN` | Telegram bot token from @BotFather |
|
|
134
|
+
| `allowed_users` | `number[]` | `null` (all) | Restrict access to specific Telegram user IDs |
|
|
135
|
+
| `notify_on_reconnect` | `boolean` | `false` | Send a message to linked chats when the bot reconnects |
|
|
41
136
|
|
|
42
|
-
|
|
137
|
+
### Environment Variables
|
|
138
|
+
|
|
139
|
+
| Variable | Description |
|
|
140
|
+
|----------|-------------|
|
|
141
|
+
| `TELEGRAM_BOT_TOKEN` | Bot token (alternative to config) |
|
|
142
|
+
| `DEBUG_TELEGRAM` | Set to `1` to enable verbose debug logging |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## How It Works
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
150
|
+
│ │
|
|
151
|
+
│ Telegram Bot OpenCode Plugin │
|
|
152
|
+
│ ┌──────────────┐ ┌──────────────────────────────┐ │
|
|
153
|
+
│ │ │ send prompt │ │ │
|
|
154
|
+
│ │ User sends │ ─────────────> │ session.prompt() │ │
|
|
155
|
+
│ │ a message │ │ │ │
|
|
156
|
+
│ │ │ │ │ │
|
|
157
|
+
│ │ │ response │ session.status -> idle │ │
|
|
158
|
+
│ │ User sees │ <───────────── │ -> fetch last message │ │
|
|
159
|
+
│ │ AI reply │ │ -> sendMessage() │ │
|
|
160
|
+
│ │ │ │ │ │
|
|
161
|
+
│ └──────────────┘ └──────────────────────────────┘ │
|
|
162
|
+
│ │
|
|
163
|
+
│ Persistence: │
|
|
164
|
+
│ ~/.config/opencode/telegram-token.json (bot token) │
|
|
165
|
+
│ ~/.config/opencode/telegram-links.json (chat <-> session map) │
|
|
166
|
+
│ │
|
|
167
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Troubleshooting
|
|
173
|
+
|
|
174
|
+
**Bot doesn't respond to messages**
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
1. Check /status -- is the chat linked to a session?
|
|
178
|
+
2. If not linked, use /ls then /link <ID>
|
|
179
|
+
3. If linked, check OpenCode logs for errors
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**"Invalid token" error**
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
1. Make sure you copied the full token from @BotFather
|
|
186
|
+
2. Token format: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
|
|
187
|
+
3. Try /telegram disconnect then reconnect with the correct token
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**"Another bot instance running" error**
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
Only one bot can use a token at a time. Check if:
|
|
194
|
+
- Another OpenCode instance is running
|
|
195
|
+
- Another app is using the same bot token
|
|
196
|
+
- A previous instance didn't shut down cleanly (wait 30s)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Messages not coming back from OpenCode**
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
1. Check that the session is still active in OpenCode
|
|
203
|
+
2. The bot auto-reconnects after failures (5s -> 10s -> 20s -> 30s)
|
|
204
|
+
3. Set DEBUG_TELEGRAM=1 to see detailed logs
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Session ID not found**
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
1. Use /ls to list sessions
|
|
211
|
+
2. Copy the full ID (starts with "ses_")
|
|
212
|
+
3. You can also use the number: /use 1
|
|
213
|
+
4. Prefix matching works: /link ses_123 (if unique)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Architecture
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
virtualcode
|
|
222
|
+
├── src/
|
|
223
|
+
│ ├── index.ts Server plugin (bot logic, session bridge, event handling)
|
|
224
|
+
│ └── tui.ts TUI plugin (slash command, token dialog)
|
|
225
|
+
├── install.js Postinstall script (auto-configures opencode.jsonc + tui.json)
|
|
226
|
+
├── package.json npm: virtualcode
|
|
227
|
+
└── dist/ Compiled output
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Key design decisions:**
|
|
231
|
+
|
|
232
|
+
- Atomic file writes (write to .tmp, then rename) prevent corruption
|
|
233
|
+
- All errors are sanitized before reaching the UI (no stack traces)
|
|
234
|
+
- Exponential backoff auto-reconnect (5s -> 10s -> 20s -> 30s cap)
|
|
235
|
+
- LRU-bounded session tracking (max 100 entries)
|
|
236
|
+
- Pending message timeout (30s) prevents memory leaks
|
|
237
|
+
- Prefix matching for session IDs with ambiguity detection
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Contributing
|
|
242
|
+
|
|
243
|
+
Issues and PRs welcome.
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
git clone https://github.com/anomalyco/opencode-telegram.git
|
|
247
|
+
cd opencode-telegram
|
|
248
|
+
npm install
|
|
249
|
+
npm run build
|
|
250
|
+
```
|
|
43
251
|
|
|
44
|
-
|
|
45
|
-
- `/unlink` — Remove binding
|
|
46
|
-
- `/status` — Show connection state
|
|
47
|
-
- `/sessions` — List recent sessions
|
|
48
|
-
- `/help` — Show this help
|
|
252
|
+
---
|
|
49
253
|
|
|
50
254
|
## License
|
|
51
255
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;;;;;AAmrBjD,wBAGC"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,10 @@ const LINK_TMP = LINK_FILE + ".tmp";
|
|
|
8
8
|
const TOKEN_FILE = join(homedir(), ".config", "opencode", "telegram-token.json");
|
|
9
9
|
const TOKEN_TMP = TOKEN_FILE + ".tmp";
|
|
10
10
|
const CONFIG_DIR = join(homedir(), ".config", "opencode");
|
|
11
|
+
const TOKEN_REGEX = /^\d+:[\w-]+$/;
|
|
12
|
+
const MAX_LRU_SIZE = 100;
|
|
13
|
+
const PENDING_TIMEOUT_MS = 30_000;
|
|
14
|
+
const RECONNECT_DELAYS = [5_000, 10_000, 20_000, 30_000];
|
|
11
15
|
function loadLinks() {
|
|
12
16
|
try {
|
|
13
17
|
if (existsSync(LINK_FILE)) {
|
|
@@ -48,10 +52,18 @@ function saveToken(token) {
|
|
|
48
52
|
writeFileSync(TOKEN_FILE, JSON.stringify({ token }, null, 2));
|
|
49
53
|
}
|
|
50
54
|
}
|
|
55
|
+
function isValidToken(token) {
|
|
56
|
+
return TOKEN_REGEX.test(token);
|
|
57
|
+
}
|
|
51
58
|
function userError(err) {
|
|
52
|
-
if (err
|
|
53
|
-
return
|
|
54
|
-
|
|
59
|
+
if (!err)
|
|
60
|
+
return "Unknown error";
|
|
61
|
+
if (err instanceof Error) {
|
|
62
|
+
const first = err.message.split("\n")[0].trim();
|
|
63
|
+
return first || "Unknown error";
|
|
64
|
+
}
|
|
65
|
+
const s = String(err).split("\n")[0].trim();
|
|
66
|
+
return s || "Unknown error";
|
|
55
67
|
}
|
|
56
68
|
const DEBUG = !!process.env.DEBUG_TELEGRAM;
|
|
57
69
|
function debugLog(...args) {
|
|
@@ -63,13 +75,27 @@ function debugLog(...args) {
|
|
|
63
75
|
}
|
|
64
76
|
}
|
|
65
77
|
}
|
|
78
|
+
function sanitizeUI(text, maxLen = 200) {
|
|
79
|
+
if (!text)
|
|
80
|
+
return "";
|
|
81
|
+
let cleaned = text
|
|
82
|
+
.split("\n")
|
|
83
|
+
.filter((line) => !/^\s*at\s/.test(line))
|
|
84
|
+
.join(" ")
|
|
85
|
+
.trim();
|
|
86
|
+
cleaned = cleaned.replace(/\s+/g, " ");
|
|
87
|
+
if (cleaned.length > maxLen) {
|
|
88
|
+
cleaned = cleaned.slice(0, maxLen - 3).trim() + "...";
|
|
89
|
+
}
|
|
90
|
+
return cleaned;
|
|
91
|
+
}
|
|
66
92
|
const KNOWN_ERRORS = [
|
|
67
|
-
[/Expected a string starting with "ses"/, "Invalid
|
|
68
|
-
[/ECONNRESET/, "Connection
|
|
69
|
-
[/(409|Conflict)/, "Another
|
|
70
|
-
[/(401|Unauthorized|invalid.*token)/i, "
|
|
71
|
-
[/(403|Forbidden)/, "Bot
|
|
72
|
-
[/(socket|timeout)/i, "Connection
|
|
93
|
+
[/Expected a string starting with "ses"/, "Invalid session ID."],
|
|
94
|
+
[/ECONNRESET/, "Connection lost."],
|
|
95
|
+
[/(409|Conflict)/, "Another bot instance running."],
|
|
96
|
+
[/(401|Unauthorized|invalid.*token)/i, "Invalid token."],
|
|
97
|
+
[/(403|Forbidden)/, "Bot blocked."],
|
|
98
|
+
[/(socket|timeout)/i, "Connection timed out."],
|
|
73
99
|
];
|
|
74
100
|
function handlePluginError(err, context) {
|
|
75
101
|
const msg = userError(err);
|
|
@@ -78,7 +104,7 @@ function handlePluginError(err, context) {
|
|
|
78
104
|
if (pattern.test(msg))
|
|
79
105
|
return friendly;
|
|
80
106
|
}
|
|
81
|
-
return "Something went wrong.
|
|
107
|
+
return "Something went wrong.";
|
|
82
108
|
}
|
|
83
109
|
function chunkText(text, maxLen = 4000) {
|
|
84
110
|
if (text.length <= maxLen)
|
|
@@ -90,7 +116,18 @@ function chunkText(text, maxLen = 4000) {
|
|
|
90
116
|
return chunks;
|
|
91
117
|
}
|
|
92
118
|
function fmtId(id) {
|
|
93
|
-
return id.length >
|
|
119
|
+
return id.length > 12 ? id.slice(0, 12) + "..." : id;
|
|
120
|
+
}
|
|
121
|
+
function findSessionById(id, list) {
|
|
122
|
+
const exact = list.find((s) => s.id === id);
|
|
123
|
+
if (exact)
|
|
124
|
+
return { status: "found", session: exact };
|
|
125
|
+
const prefix = list.filter((s) => s.id.startsWith(id));
|
|
126
|
+
if (prefix.length === 1)
|
|
127
|
+
return { status: "found", session: prefix[0] };
|
|
128
|
+
if (prefix.length > 1)
|
|
129
|
+
return { status: "ambiguous" };
|
|
130
|
+
return { status: "not_found" };
|
|
94
131
|
}
|
|
95
132
|
const TelegramPlugin = async ({ client, directory }, options) => {
|
|
96
133
|
const config = options;
|
|
@@ -99,6 +136,10 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
99
136
|
let bot = null;
|
|
100
137
|
let botReady = false;
|
|
101
138
|
let botStarting = false;
|
|
139
|
+
let userStopped = false;
|
|
140
|
+
let savedToken = null;
|
|
141
|
+
let reconnectTimer = null;
|
|
142
|
+
let reconnectAttempts = 0;
|
|
102
143
|
const lastForwardedBySession = new Map();
|
|
103
144
|
const pendingTelegram = new Map();
|
|
104
145
|
const links = loadLinks();
|
|
@@ -144,6 +185,48 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
144
185
|
}
|
|
145
186
|
persistLinks(links);
|
|
146
187
|
}
|
|
188
|
+
function lruSet(map, key, value) {
|
|
189
|
+
if (map.has(key)) {
|
|
190
|
+
map.delete(key);
|
|
191
|
+
}
|
|
192
|
+
else if (map.size >= MAX_LRU_SIZE) {
|
|
193
|
+
const oldest = map.keys().next().value;
|
|
194
|
+
if (oldest !== undefined)
|
|
195
|
+
map.delete(oldest);
|
|
196
|
+
}
|
|
197
|
+
map.set(key, value);
|
|
198
|
+
}
|
|
199
|
+
function setPending(sessionId, chatId) {
|
|
200
|
+
const existing = pendingTelegram.get(sessionId);
|
|
201
|
+
if (existing)
|
|
202
|
+
clearTimeout(existing.timer);
|
|
203
|
+
const timer = setTimeout(() => {
|
|
204
|
+
pendingTelegram.delete(sessionId);
|
|
205
|
+
}, PENDING_TIMEOUT_MS);
|
|
206
|
+
pendingTelegram.set(sessionId, { chatId, timer });
|
|
207
|
+
}
|
|
208
|
+
function clearPending(sessionId) {
|
|
209
|
+
const entry = pendingTelegram.get(sessionId);
|
|
210
|
+
if (entry) {
|
|
211
|
+
clearTimeout(entry.timer);
|
|
212
|
+
pendingTelegram.delete(sessionId);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function scheduleReconnect() {
|
|
216
|
+
if (userStopped || !savedToken)
|
|
217
|
+
return;
|
|
218
|
+
if (reconnectTimer)
|
|
219
|
+
return;
|
|
220
|
+
const delay = RECONNECT_DELAYS[Math.min(reconnectAttempts, RECONNECT_DELAYS.length - 1)];
|
|
221
|
+
reconnectAttempts++;
|
|
222
|
+
debugLog("scheduling reconnect in", delay, "ms (attempt", reconnectAttempts + ")");
|
|
223
|
+
reconnectTimer = setTimeout(async () => {
|
|
224
|
+
reconnectTimer = null;
|
|
225
|
+
if (savedToken && !userStopped) {
|
|
226
|
+
await startBot(savedToken);
|
|
227
|
+
}
|
|
228
|
+
}, delay);
|
|
229
|
+
}
|
|
147
230
|
async function sendToChats(chats, text) {
|
|
148
231
|
if (!botReady)
|
|
149
232
|
return;
|
|
@@ -155,8 +238,9 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
155
238
|
}
|
|
156
239
|
catch (err) {
|
|
157
240
|
const msg = handlePluginError(err, "sendMessage");
|
|
158
|
-
if (msg.includes("blocked") || msg.includes("
|
|
241
|
+
if (msg.includes("blocked") || msg.includes("Invalid token")) {
|
|
159
242
|
botReady = false;
|
|
243
|
+
scheduleReconnect();
|
|
160
244
|
}
|
|
161
245
|
}
|
|
162
246
|
}
|
|
@@ -168,20 +252,18 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
168
252
|
return;
|
|
169
253
|
await sendToChats(chats, text);
|
|
170
254
|
}
|
|
171
|
-
async function findSessionById(id, list) {
|
|
172
|
-
const exact = list.find((s) => s.id === id);
|
|
173
|
-
if (exact)
|
|
174
|
-
return exact;
|
|
175
|
-
const prefix = list.filter((s) => s.id.startsWith(id));
|
|
176
|
-
if (prefix.length === 1)
|
|
177
|
-
return prefix[0];
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
255
|
async function startBot(token) {
|
|
181
256
|
if (botStarting)
|
|
182
257
|
return;
|
|
258
|
+
if (!isValidToken(token)) {
|
|
259
|
+
debugLog("startBot: invalid token format");
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
183
262
|
botStarting = true;
|
|
184
263
|
botReady = false;
|
|
264
|
+
userStopped = false;
|
|
265
|
+
savedToken = token;
|
|
266
|
+
reconnectAttempts = 0;
|
|
185
267
|
try {
|
|
186
268
|
try {
|
|
187
269
|
bot?.stop();
|
|
@@ -191,12 +273,22 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
191
273
|
bot.catch((err) => {
|
|
192
274
|
handlePluginError(err, "bot.catch");
|
|
193
275
|
});
|
|
276
|
+
bot.command("start", async (ctx) => {
|
|
277
|
+
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
278
|
+
return;
|
|
279
|
+
await ctx.reply("virtualcode - OpenCode Telegram bridge\n\n" +
|
|
280
|
+
"Quick setup:\n" +
|
|
281
|
+
"1. /ls - list your sessions\n" +
|
|
282
|
+
"2. /link <ID> - bind this chat\n" +
|
|
283
|
+
"3. Send any message to talk to OpenCode\n\n" +
|
|
284
|
+
"Type /help for all commands.");
|
|
285
|
+
});
|
|
194
286
|
bot.command("link", async (ctx) => {
|
|
195
287
|
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
196
288
|
return;
|
|
197
289
|
const arg = ctx.payload.trim();
|
|
198
290
|
if (!arg) {
|
|
199
|
-
await ctx.reply("Usage: /link <
|
|
291
|
+
await ctx.reply("Usage: /link <sessionID>");
|
|
200
292
|
return;
|
|
201
293
|
}
|
|
202
294
|
try {
|
|
@@ -205,30 +297,34 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
205
297
|
await ctx.reply("Could not load sessions.");
|
|
206
298
|
return;
|
|
207
299
|
}
|
|
208
|
-
const
|
|
209
|
-
if (
|
|
210
|
-
await ctx.reply("Session not found.
|
|
300
|
+
const result = findSessionById(arg, list.data);
|
|
301
|
+
if (result.status === "not_found") {
|
|
302
|
+
await ctx.reply("Session not found.");
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
if (result.status === "ambiguous") {
|
|
306
|
+
await ctx.reply("Multiple sessions match. Use the full ID from /ls.");
|
|
211
307
|
return;
|
|
212
308
|
}
|
|
213
309
|
const old = links[ctx.chat.id];
|
|
214
|
-
addLink(ctx.chat.id,
|
|
310
|
+
addLink(ctx.chat.id, result.session.id);
|
|
215
311
|
if (old) {
|
|
216
|
-
await ctx.reply("Switched
|
|
312
|
+
await ctx.reply("Switched to " + fmtId(result.session.id) + " (from " + fmtId(old) + ")");
|
|
217
313
|
}
|
|
218
314
|
else {
|
|
219
|
-
await ctx.reply("Linked to
|
|
315
|
+
await ctx.reply("Linked to " + (result.session.title || fmtId(result.session.id)));
|
|
220
316
|
}
|
|
221
317
|
}
|
|
222
318
|
catch (err) {
|
|
223
319
|
const msg = handlePluginError(err, "/link");
|
|
224
|
-
await ctx.reply(msg);
|
|
320
|
+
await ctx.reply(sanitizeUI(msg));
|
|
225
321
|
}
|
|
226
322
|
});
|
|
227
323
|
bot.command("unlink", async (ctx) => {
|
|
228
324
|
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
229
325
|
return;
|
|
230
326
|
if (!links[ctx.chat.id]) {
|
|
231
|
-
await ctx.reply("
|
|
327
|
+
await ctx.reply("Not linked.");
|
|
232
328
|
return;
|
|
233
329
|
}
|
|
234
330
|
removeLink(ctx.chat.id);
|
|
@@ -239,10 +335,10 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
239
335
|
return;
|
|
240
336
|
const sessionId = links[ctx.chat.id];
|
|
241
337
|
if (!sessionId) {
|
|
242
|
-
await ctx.reply("Not linked. Use /link <
|
|
338
|
+
await ctx.reply("Not linked. Use /link <ID>");
|
|
243
339
|
return;
|
|
244
340
|
}
|
|
245
|
-
await ctx.reply("Connected
|
|
341
|
+
await ctx.reply("Connected | Session: " + fmtId(sessionId) + " | Project: " + (directory || "none"));
|
|
246
342
|
});
|
|
247
343
|
bot.command(["ls", "sessions"], async (ctx) => {
|
|
248
344
|
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
@@ -256,15 +352,15 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
256
352
|
const current = links[ctx.chat.id];
|
|
257
353
|
const lines = res.data.slice(-20).map((s, i, arr) => {
|
|
258
354
|
const num = arr.length - i;
|
|
259
|
-
const marker = s.id === current ? "
|
|
355
|
+
const marker = s.id === current ? " *" : "";
|
|
260
356
|
const label = s.title || s.id.slice(0, 16);
|
|
261
|
-
return
|
|
357
|
+
return num + ". " + label + " -- " + s.id + marker;
|
|
262
358
|
});
|
|
263
359
|
await ctx.reply("Sessions:\n" + (lines.length ? lines.join("\n") : "None"));
|
|
264
360
|
}
|
|
265
361
|
catch (err) {
|
|
266
362
|
const msg = handlePluginError(err, "/ls");
|
|
267
|
-
await ctx.reply(msg);
|
|
363
|
+
await ctx.reply(sanitizeUI(msg));
|
|
268
364
|
}
|
|
269
365
|
});
|
|
270
366
|
bot.command("use", async (ctx) => {
|
|
@@ -272,7 +368,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
272
368
|
return;
|
|
273
369
|
const arg = ctx.payload.trim();
|
|
274
370
|
if (!arg) {
|
|
275
|
-
await ctx.reply("Usage: /use <number|
|
|
371
|
+
await ctx.reply("Usage: /use <number|ID>");
|
|
276
372
|
return;
|
|
277
373
|
}
|
|
278
374
|
try {
|
|
@@ -291,20 +387,24 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
291
387
|
if (!s)
|
|
292
388
|
return;
|
|
293
389
|
addLink(ctx.chat.id, s.id);
|
|
294
|
-
await ctx.reply("Switched to
|
|
390
|
+
await ctx.reply("Switched to " + (s.title || fmtId(s.id)));
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const result = findSessionById(arg, res.data);
|
|
394
|
+
if (result.status === "not_found") {
|
|
395
|
+
await ctx.reply("Session not found.");
|
|
295
396
|
return;
|
|
296
397
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
await ctx.reply("Session not found. Copy the full ID from /ls — you can paste just the first few chars.");
|
|
398
|
+
if (result.status === "ambiguous") {
|
|
399
|
+
await ctx.reply("Multiple sessions match. Use the full ID from /ls.");
|
|
300
400
|
return;
|
|
301
401
|
}
|
|
302
|
-
addLink(ctx.chat.id,
|
|
303
|
-
await ctx.reply("Switched to
|
|
402
|
+
addLink(ctx.chat.id, result.session.id);
|
|
403
|
+
await ctx.reply("Switched to " + (result.session.title || fmtId(result.session.id)));
|
|
304
404
|
}
|
|
305
405
|
catch (err) {
|
|
306
406
|
const msg = handlePluginError(err, "/use");
|
|
307
|
-
await ctx.reply(msg);
|
|
407
|
+
await ctx.reply(sanitizeUI(msg));
|
|
308
408
|
}
|
|
309
409
|
});
|
|
310
410
|
bot.command("history", async (ctx) => {
|
|
@@ -312,7 +412,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
312
412
|
return;
|
|
313
413
|
const sessionId = links[ctx.chat.id];
|
|
314
414
|
if (!sessionId) {
|
|
315
|
-
await ctx.reply("Not linked. Use /link <
|
|
415
|
+
await ctx.reply("Not linked. Use /link <ID>");
|
|
316
416
|
return;
|
|
317
417
|
}
|
|
318
418
|
try {
|
|
@@ -325,7 +425,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
325
425
|
}
|
|
326
426
|
const lines = [];
|
|
327
427
|
for (const msg of res.data) {
|
|
328
|
-
const role = msg.info.role === "user" ? "
|
|
428
|
+
const role = msg.info.role === "user" ? "[User]" : "[AI]";
|
|
329
429
|
const text = msg.parts
|
|
330
430
|
.filter((p) => p.type === "text" && !p.synthetic)
|
|
331
431
|
.map((p) => p.text)
|
|
@@ -334,7 +434,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
334
434
|
if (!text)
|
|
335
435
|
continue;
|
|
336
436
|
const truncated = text.length > 500 ? text.slice(0, 500) + "..." : text;
|
|
337
|
-
lines.push(role + "
|
|
437
|
+
lines.push(role + " " + truncated);
|
|
338
438
|
}
|
|
339
439
|
if (lines.length === 0) {
|
|
340
440
|
await ctx.reply("No text messages found.");
|
|
@@ -347,31 +447,36 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
347
447
|
}
|
|
348
448
|
catch (err) {
|
|
349
449
|
const msg = handlePluginError(err, "/history");
|
|
350
|
-
await ctx.reply(msg);
|
|
450
|
+
await ctx.reply(sanitizeUI(msg));
|
|
351
451
|
}
|
|
352
452
|
});
|
|
353
453
|
bot.command("help", async (ctx) => {
|
|
354
454
|
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
355
455
|
return;
|
|
356
|
-
await ctx.reply("/link <sessionId> - Bind this chat to a session
|
|
456
|
+
await ctx.reply("/link <sessionId> - Bind this chat to a session\n" +
|
|
357
457
|
"/unlink - Remove binding\n" +
|
|
358
458
|
"/status - Show connection state\n" +
|
|
359
|
-
"/ls - List recent sessions
|
|
360
|
-
"/use <number|
|
|
459
|
+
"/ls - List recent sessions\n" +
|
|
460
|
+
"/use <number|ID> - Switch active session\n" +
|
|
361
461
|
"/history [N] - View last N messages\n" +
|
|
362
462
|
"/help - Show this help\n\n" +
|
|
363
463
|
"Any other message will be sent to the linked session.");
|
|
364
464
|
});
|
|
465
|
+
bot.on(["photo", "sticker", "document", "video", "audio", "voice"], async (ctx) => {
|
|
466
|
+
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
467
|
+
return;
|
|
468
|
+
await ctx.reply("Only text messages are supported.");
|
|
469
|
+
});
|
|
365
470
|
bot.on("text", async (ctx) => {
|
|
366
471
|
if (allowedSet && !allowedSet.has(ctx.from.id))
|
|
367
472
|
return;
|
|
368
473
|
const sessionId = links[ctx.chat.id];
|
|
369
474
|
if (!sessionId) {
|
|
370
|
-
await ctx.reply("Not linked. Use /link <
|
|
475
|
+
await ctx.reply("Not linked. Use /link <ID>");
|
|
371
476
|
return;
|
|
372
477
|
}
|
|
373
|
-
const working = await ctx.reply("
|
|
374
|
-
|
|
478
|
+
const working = await ctx.reply("...");
|
|
479
|
+
setPending(sessionId, ctx.chat.id);
|
|
375
480
|
try {
|
|
376
481
|
const res = await client.session.prompt({
|
|
377
482
|
path: { id: sessionId },
|
|
@@ -382,14 +487,14 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
382
487
|
});
|
|
383
488
|
if (res.error) {
|
|
384
489
|
const msg = handlePluginError(res.error, "prompt");
|
|
385
|
-
await ctx.reply(msg);
|
|
490
|
+
await ctx.reply(sanitizeUI(msg));
|
|
386
491
|
}
|
|
387
492
|
}
|
|
388
493
|
catch (err) {
|
|
389
494
|
const msg = handlePluginError(err, "prompt");
|
|
390
|
-
await ctx.reply(msg);
|
|
495
|
+
await ctx.reply(sanitizeUI(msg));
|
|
391
496
|
}
|
|
392
|
-
|
|
497
|
+
clearPending(sessionId);
|
|
393
498
|
try {
|
|
394
499
|
await ctx.deleteMessage(working.message_id);
|
|
395
500
|
}
|
|
@@ -397,7 +502,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
397
502
|
});
|
|
398
503
|
if (notifyOnReconnect) {
|
|
399
504
|
for (const chatId of Object.keys(links)) {
|
|
400
|
-
bot.telegram.sendMessage(Number(chatId), "
|
|
505
|
+
bot.telegram.sendMessage(Number(chatId), "Telegram bridge reconnected.").catch(() => { });
|
|
401
506
|
}
|
|
402
507
|
}
|
|
403
508
|
try {
|
|
@@ -408,6 +513,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
408
513
|
debugLog("startBot failed:", msg);
|
|
409
514
|
botStarting = false;
|
|
410
515
|
botReady = false;
|
|
516
|
+
scheduleReconnect();
|
|
411
517
|
return;
|
|
412
518
|
}
|
|
413
519
|
botReady = true;
|
|
@@ -415,12 +521,14 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
415
521
|
bot.launch().catch((err) => {
|
|
416
522
|
handlePluginError(err, "bot.launch");
|
|
417
523
|
botReady = false;
|
|
524
|
+
scheduleReconnect();
|
|
418
525
|
});
|
|
419
526
|
}
|
|
420
527
|
catch (err) {
|
|
421
528
|
handlePluginError(err, "startBot");
|
|
422
529
|
botStarting = false;
|
|
423
530
|
botReady = false;
|
|
531
|
+
scheduleReconnect();
|
|
424
532
|
}
|
|
425
533
|
}
|
|
426
534
|
const configToken = config?.token;
|
|
@@ -447,7 +555,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
447
555
|
if (event.type === "session.status" && event.properties.status.type === "idle") {
|
|
448
556
|
const sid = event.properties.sessionID;
|
|
449
557
|
const pending = pendingTelegram.get(sid);
|
|
450
|
-
const chats = pending ? new Set([pending]) : sessionToChats.get(sid);
|
|
558
|
+
const chats = pending ? new Set([pending.chatId]) : sessionToChats.get(sid);
|
|
451
559
|
if (!chats || chats.size === 0)
|
|
452
560
|
return;
|
|
453
561
|
let msgs;
|
|
@@ -462,7 +570,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
462
570
|
const last = [...msgs.data].reverse().find((m) => m.info.role === "assistant");
|
|
463
571
|
if (!last || lastForwardedBySession.get(sid) === last.info.id)
|
|
464
572
|
return;
|
|
465
|
-
lastForwardedBySession
|
|
573
|
+
lruSet(lastForwardedBySession, sid, last.info.id);
|
|
466
574
|
const text = last.parts
|
|
467
575
|
.filter((p) => p.type === "text" && !p.synthetic)
|
|
468
576
|
.map((p) => p.text)
|
|
@@ -493,6 +601,11 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
493
601
|
if (text.startsWith("/telegram")) {
|
|
494
602
|
const args = text.slice("/telegram".length).trim().toLowerCase();
|
|
495
603
|
if (args === "disconnect" || args === "stop") {
|
|
604
|
+
userStopped = true;
|
|
605
|
+
if (reconnectTimer) {
|
|
606
|
+
clearTimeout(reconnectTimer);
|
|
607
|
+
reconnectTimer = null;
|
|
608
|
+
}
|
|
496
609
|
try {
|
|
497
610
|
bot?.stop();
|
|
498
611
|
}
|
|
@@ -500,6 +613,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
500
613
|
botReady = false;
|
|
501
614
|
bot = null;
|
|
502
615
|
botStarting = false;
|
|
616
|
+
savedToken = null;
|
|
503
617
|
if (loadSavedToken())
|
|
504
618
|
saveToken("");
|
|
505
619
|
part.text = "Telegram bot disconnected and token removed.";
|
|
@@ -509,24 +623,26 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
509
623
|
if (botReady) {
|
|
510
624
|
part.text =
|
|
511
625
|
"Telegram bot is connected.\n" +
|
|
512
|
-
"
|
|
513
|
-
"
|
|
514
|
-
"
|
|
626
|
+
"- /telegram <new_token> - Change bot token\n" +
|
|
627
|
+
"- /telegram disconnect - Stop bot and remove token\n" +
|
|
628
|
+
"- /telegram - Open setup dialog (type /telegram in command palette)";
|
|
515
629
|
}
|
|
516
630
|
else {
|
|
517
631
|
part.text =
|
|
518
632
|
"Telegram bot is not connected.\n" +
|
|
519
|
-
"
|
|
520
|
-
"
|
|
633
|
+
"- /telegram <your_bot_token> - Connect with a token\n" +
|
|
634
|
+
"- /telegram - Open setup dialog (type /telegram in command palette)";
|
|
521
635
|
}
|
|
522
636
|
return;
|
|
523
637
|
}
|
|
524
638
|
const token = args;
|
|
639
|
+
if (!isValidToken(token)) {
|
|
640
|
+
part.text = "Invalid token.";
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
525
643
|
saveToken(token);
|
|
526
644
|
await startBot(token);
|
|
527
|
-
part.text = botReady
|
|
528
|
-
? "\u2705 Telegram bot connected!"
|
|
529
|
-
: "\u274c Invalid token. Check the token from @BotFather and try again.";
|
|
645
|
+
part.text = botReady ? "Connected." : "Invalid token.";
|
|
530
646
|
return;
|
|
531
647
|
}
|
|
532
648
|
}
|
|
@@ -550,6 +666,16 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
550
666
|
}),
|
|
551
667
|
},
|
|
552
668
|
async dispose() {
|
|
669
|
+
userStopped = true;
|
|
670
|
+
if (reconnectTimer) {
|
|
671
|
+
clearTimeout(reconnectTimer);
|
|
672
|
+
reconnectTimer = null;
|
|
673
|
+
}
|
|
674
|
+
for (const [, entry] of pendingTelegram) {
|
|
675
|
+
clearTimeout(entry.timer);
|
|
676
|
+
}
|
|
677
|
+
pendingTelegram.clear();
|
|
678
|
+
lastForwardedBySession.clear();
|
|
553
679
|
try {
|
|
554
680
|
bot?.stop();
|
|
555
681
|
}
|
|
@@ -557,6 +683,7 @@ const TelegramPlugin = async ({ client, directory }, options) => {
|
|
|
557
683
|
botReady = false;
|
|
558
684
|
botStarting = false;
|
|
559
685
|
bot = null;
|
|
686
|
+
savedToken = null;
|
|
560
687
|
},
|
|
561
688
|
};
|
|
562
689
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "virtualcode",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "OpenCode plugin that bridges your terminal sessions with Telegram",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
},
|
|
19
19
|
"files": [
|
|
20
20
|
"dist",
|
|
21
|
-
"install.js"
|
|
21
|
+
"install.js",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE",
|
|
24
|
+
"CHANGELOG.md"
|
|
22
25
|
],
|
|
23
26
|
"scripts": {
|
|
24
27
|
"build": "tsc",
|
|
@@ -30,11 +33,19 @@
|
|
|
30
33
|
"type": "git",
|
|
31
34
|
"url": "git+https://github.com/anomalyco/opencode-telegram.git"
|
|
32
35
|
},
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/anomalyco/opencode-telegram/issues"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/anomalyco/opencode-telegram#readme",
|
|
33
40
|
"keywords": [
|
|
34
41
|
"opencode",
|
|
35
42
|
"telegram",
|
|
36
43
|
"plugin",
|
|
37
|
-
"ai"
|
|
44
|
+
"ai",
|
|
45
|
+
"llm",
|
|
46
|
+
"bridge",
|
|
47
|
+
"remote",
|
|
48
|
+
"mobile"
|
|
38
49
|
],
|
|
39
50
|
"dependencies": {
|
|
40
51
|
"@opencode-ai/plugin": "^1.17.8",
|