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 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
- # opencode-telegram
1
+ # virtualcode
2
2
 
3
- A [OpenCode](https://opencode.ai) plugin that bridges your terminal sessions with Telegram.
3
+ ```
4
+ __ ___ _
5
+ \ \ / (_)_ __ ___ ___ _ __ ___ | |_
6
+ \ \ / /| | '_ \ / _ \/ _ \| '_ \ / _ \ | __|
7
+ \ V / | | | | | __/ (_) | | | | (_) || |_
8
+ \_/ |_|_| |_|\___|\___/|_| |_|\___/ \__|
9
+
10
+ Talk to your terminal from your phone.
11
+ ```
4
12
 
5
- Send prompts from your phone via Telegram and receive LLM responses in real time. Also lets the LLM send messages back to you via a `telegram_send` tool.
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
- ## Features
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
- - **Bidirectional**: Send prompts from Telegram, get responses back
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 @opencode-ai/plugin-telegram
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
- Then add it to your `.opencode/opencode.json`:
50
+ And to your TUI config (`~/.config/opencode/tui.json`):
22
51
 
23
52
  ```json
24
53
  {
25
- "plugins": [
26
- ["@opencode-ai/plugin-telegram", {
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": [YOUR_TELEGRAM_ID]
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 reconnection notice to linked chats |
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
- ## Commands
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
- - `/link <sessionId>` — Bind this chat to a session
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
 
@@ -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;;;;;AA4iBjD,wBAGC"}
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 instanceof Error)
53
- return err.message;
54
- return "Unknown error";
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 OpenCode session ID. Use the ID shown in /ls."],
68
- [/ECONNRESET/, "Connection to Telegram lost. Reconnecting..."],
69
- [/(409|Conflict)/, "Another Telegram bot instance is running."],
70
- [/(401|Unauthorized|invalid.*token)/i, "Telegram token is invalid. Get a new one from @BotFather."],
71
- [/(403|Forbidden)/, "Bot was blocked by the user or removed from the chat."],
72
- [/(socket|timeout)/i, "Connection to Telegram timed out."],
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. Check OpenCode logs for details.";
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 > 16 ? id.slice(0, 16) + "..." : id;
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("invalid")) {
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 <sessionId>\nGet the ID from /ls.");
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 found = await findSessionById(arg, list.data);
209
- if (!found) {
210
- await ctx.reply("Session not found. Copy the full ID from /ls — you can paste just the first few chars.");
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, found.id);
310
+ addLink(ctx.chat.id, result.session.id);
215
311
  if (old) {
216
- await ctx.reply("Switched from " + fmtId(old) + " to " + fmtId(found.id));
312
+ await ctx.reply("Switched to " + fmtId(result.session.id) + " (from " + fmtId(old) + ")");
217
313
  }
218
314
  else {
219
- await ctx.reply("Linked to: " + (found.title || fmtId(found.id)));
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("This chat is not linked to any session.");
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 <sessionId> (from /ls)");
338
+ await ctx.reply("Not linked. Use /link <ID>");
243
339
  return;
244
340
  }
245
- await ctx.reply("Connected\nSession: " + fmtId(sessionId) + "\nProject: " + (directory || "unknown"));
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 ? " \u2705" : "";
355
+ const marker = s.id === current ? " *" : "";
260
356
  const label = s.title || s.id.slice(0, 16);
261
- return `${num}. ${label} ${s.id}${marker}`;
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|sessionId>\nUse a number from /ls or paste a session ID.");
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: " + (s.title || s.id));
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
- const found = await findSessionById(arg, res.data);
298
- if (!found) {
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, found.id);
303
- await ctx.reply("Switched to: " + (found.title || fmtId(found.id)));
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 <sessionId> (from /ls)");
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" ? "\uD83D\uDC64 User" : "\uD83E\uDD16 OpenCode";
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 + "\n" + truncated);
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 (use ID from /ls)\n" +
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 (shows number + title + ID)\n" +
360
- "/use <number|sessionId> - Switch active session (number from /ls)\n" +
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 <sessionId>");
475
+ await ctx.reply("Not linked. Use /link <ID>");
371
476
  return;
372
477
  }
373
- const working = await ctx.reply("\u23F3 Working...");
374
- pendingTelegram.set(sessionId, ctx.chat.id);
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
- pendingTelegram.delete(sessionId);
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), "OpenCode Telegram bridge reconnected.").catch(() => { });
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.set(sid, last.info.id);
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
- " /telegram <new_token> Change bot token\n" +
513
- " /telegram disconnect Stop bot and remove token\n" +
514
- " /telegram Open setup dialog (type /telegram in command palette)";
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
- " /telegram <your_bot_token> Connect with a token\n" +
520
- " /telegram Open setup dialog (type /telegram in command palette)";
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":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAA;AAC/E,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;AACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAA;AAChF,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAA;AACrC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;AAEzD,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B;IACjD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;YAC1D,IAAI,IAAI,EAAE,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;QACpC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5D,IAAI,CAAC;QACH,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAA;IAC5C,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;AAE1C,SAAS,QAAQ,CAAC,GAAG,IAAe;IAClC,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAuB;IACvC,CAAC,uCAAuC,EAAE,uDAAuD,CAAC;IAClG,CAAC,YAAY,EAAE,8CAA8C,CAAC;IAC9D,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;IAC/D,CAAC,oCAAoC,EAAE,2DAA2D,CAAC;IACnG,CAAC,iBAAiB,EAAE,uDAAuD,CAAC;IAC5E,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;CAC3D,CAAA;AAED,SAAS,iBAAiB,CAAC,GAAY,EAAE,OAAe;IACtD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAC1B,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;IAC5B,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAA;IACxC,CAAC;IACD,OAAO,wDAAwD,CAAA;AACjE,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,MAAM,GAAG,IAAI;IAC5C,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,cAAc,GAAW,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE;IACtE,MAAM,MAAM,GAAG,OAMF,CAAA;IAEb,MAAM,UAAU,GAAG,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvF,MAAM,iBAAiB,GAAG,MAAM,EAAE,mBAAmB,IAAI,KAAK,CAAA;IAE9D,IAAI,GAAG,GAAoB,IAAI,CAAA;IAC/B,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEjD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC/C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAA;IAErD,SAAS,WAAW;QAClB,aAAa,CAAC,KAAK,EAAE,CAAA;QACrB,cAAc,CAAC,KAAK,EAAE,CAAA;QACtB,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;YAC1B,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YACjC,IAAI,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACvC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;gBACf,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;YACpC,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CAAA;IAEb,SAAS,OAAO,CAAC,MAAc,EAAE,SAAiB;QAChD,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;QACzB,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACpC,IAAI,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;YACf,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACpC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACf,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,SAAS,UAAU,CAAC,MAAc;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QAC/B,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAA;QACpB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5B,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACtD,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,KAAuB,EAAE,IAAY;QAC9D,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,GAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAChD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;oBACjD,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBACvD,QAAQ,GAAG,KAAK,CAAA;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,IAAY;QAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,UAAU,eAAe,CAAC,EAAU,EAAE,IAAW;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAChD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;QACzC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,KAAa;QACnC,IAAI,WAAW;YAAE,OAAM;QACvB,WAAW,GAAG,IAAI,CAAA;QAClB,QAAQ,GAAG,KAAK,CAAA;QAChB,IAAI,CAAC;YACH,IAAI,CAAC;gBAAC,GAAG,EAAE,IAAI,EAAE,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC5B,GAAG,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;YACzB,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChB,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;gBAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,GAAG,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;oBACjE,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;oBACxC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC7B,MAAM,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;wBAC3C,OAAM;oBACR,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;oBACnD,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,GAAG,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAA;wBACzG,OAAM;oBACR,CAAC;oBACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;oBAC9B,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,GAAG,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;oBAC3E,CAAC;yBAAM,CAAC;wBACN,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;oBACnE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;oBAC3C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAClC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACxB,MAAM,GAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;oBAC1D,OAAM;gBACR,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACvB,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YAC9B,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAClC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,GAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;oBAC/D,OAAM;gBACR,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,CACb,sBAAsB,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,aAAa,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CACrF,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC5C,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;oBACvC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wBAC3B,MAAM,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;wBAC3C,OAAM;oBACR,CAAC;oBACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAClC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,CAAS,EAAE,GAAU,EAAE,EAAE;wBACtE,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;wBAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;wBAChD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;wBAC1C,OAAO,GAAG,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAA;oBAC9C,CAAC,CAAC,CAAA;oBACF,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC7E,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;oBACzC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC/B,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;gBAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,GAAG,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAA;oBAC/F,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;oBACvC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wBAC3B,MAAM,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;wBAC3C,OAAM;oBACR,CAAC;oBACD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;oBACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;wBAC3B,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;4BAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAA;4BACnE,OAAM;wBACR,CAAC;wBACD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;wBACzC,IAAI,CAAC,CAAC;4BAAE,OAAM;wBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;wBAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;wBACpD,OAAM;oBACR,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;oBAClD,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,GAAG,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAA;wBACzG,OAAM;oBACR,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;oBAC9B,MAAM,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBACrE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;oBAC1C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACnC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,GAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;oBAC/D,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;oBACpC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;oBACvE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;oBACnG,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACpD,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;wBACrC,OAAM;oBACR,CAAC;oBACD,MAAM,KAAK,GAAa,EAAE,CAAA;oBAC1B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;wBAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,uBAAuB,CAAA;wBACrF,MAAM,IAAI,GAAI,GAAG,CAAC,KAAe;6BAC9B,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;6BACrD,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;6BACvB,IAAI,CAAC,IAAI,CAAC;6BACV,IAAI,EAAE,CAAA;wBACT,IAAI,CAAC,IAAI;4BAAE,SAAQ;wBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;wBACvE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;oBACrC,CAAC;oBACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,MAAM,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;wBAC1C,OAAM;oBACR,CAAC;oBACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAC/B,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpC,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBACxB,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;oBAC9C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,MAAM,GAAG,CAAC,KAAK,CACb,yEAAyE;oBACzE,0CAA0C;oBAC1C,iDAAiD;oBACjD,4EAA4E;oBAC5E,qEAAqE;oBACrE,gDAAgD;oBAChD,4CAA4C;oBAC5C,uDAAuD,CACxD,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC3B,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,OAAM;gBACtD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;oBACpD,OAAM;gBACR,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;gBACpD,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC3C,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;wBACtC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;wBACvB,IAAI,EAAE;4BACJ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC;yBACxF;wBACD,KAAK,EAAE,EAAE,SAAS,EAAE;qBACrB,CAAC,CAAA;oBACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;wBAClD,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACtB,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;oBAC5C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;gBACD,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBACjC,IAAI,CAAC;oBAAC,MAAM,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAC9D,CAAC,CAAC,CAAA;YAEF,IAAI,iBAAiB,EAAE,CAAC;gBACtB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,uCAAuC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACnG,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;YAC5B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC3C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;gBACjC,WAAW,GAAG,KAAK,CAAA;gBACnB,QAAQ,GAAG,KAAK,CAAA;gBAChB,OAAM;YACR,CAAC;YACD,QAAQ,GAAG,IAAI,CAAA;YACf,WAAW,GAAG,KAAK,CAAA;YACnB,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;gBACpC,QAAQ,GAAG,KAAK,CAAA;YAClB,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;YAClC,WAAW,GAAG,KAAK,CAAA;YACnB,QAAQ,GAAG,KAAK,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,CAAA;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IAC/C,MAAM,SAAS,GAAG,cAAc,EAAE,CAAA;IAClC,MAAM,aAAa,GAAG,WAAW,IAAI,QAAQ,IAAI,SAAS,CAAA;IAC1D,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;YACnB,IAAI,CAAC,QAAQ;gBAAE,OAAM;YACrB,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAA;oBAC5C,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAA;wBAClC,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;wBACnD,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;oBAC/B,CAAC;oBACD,OAAM;gBACR,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAA;oBACtC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACpE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;wBAAE,OAAM;oBACtC,IAAI,IAAI,CAAA;oBACR,IAAI,CAAC;wBACH,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;oBAC7F,CAAC;oBAAC,MAAM,CAAC;wBAAC,OAAM;oBAAC,CAAC;oBAClB,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI;wBAAE,OAAM;oBACpC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;oBACnF,IAAI,CAAC,IAAI,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;wBAAE,OAAM;oBACrE,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC7C,MAAM,IAAI,GAAI,IAAI,CAAC,KAAe;yBAC/B,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;yBACrD,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;yBACvB,IAAI,CAAC,IAAI,CAAC,CAAA;oBACb,IAAI,IAAI;wBAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBACpC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC9B,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,CAAA;oBACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;oBAC/C,MAAM,SAAS,GAAG,cAAc,EAAE,CAAA;oBAClC,MAAM,KAAK,GAAG,WAAW,IAAI,QAAQ,IAAI,SAAS,CAAA;oBAClD,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAA;oBACvB,CAAC;gBACH,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAc,EAAE,CAAC;oBACzC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;wBAAE,SAAQ;oBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;oBAEtB,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;wBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;wBAEhE,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;4BAC7C,IAAI,CAAC;gCAAC,GAAG,EAAE,IAAI,EAAE,CAAA;4BAAC,CAAC;4BAAC,MAAM,CAAC,CAAA,CAAC;4BAC5B,QAAQ,GAAG,KAAK,CAAA;4BAChB,GAAG,GAAG,IAAI,CAAA;4BACV,WAAW,GAAG,KAAK,CAAA;4BACnB,IAAI,cAAc,EAAE;gCAAE,SAAS,CAAC,EAAE,CAAC,CAAA;4BACnC,IAAI,CAAC,IAAI,GAAG,8CAA8C,CAAA;4BAC1D,OAAM;wBACR,CAAC;wBAED,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;4BACrC,IAAI,QAAQ,EAAE,CAAC;gCACb,IAAI,CAAC,IAAI;oCACP,8BAA8B;wCAC9B,8CAA8C;wCAC9C,sDAAsD;wCACtD,qEAAqE,CAAA;4BACzE,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,IAAI;oCACP,kCAAkC;wCAClC,uDAAuD;wCACvD,qEAAqE,CAAA;4BACzE,CAAC;4BACD,OAAM;wBACR,CAAC;wBAED,MAAM,KAAK,GAAG,IAAI,CAAA;wBAClB,SAAS,CAAC,KAAK,CAAC,CAAA;wBAChB,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAA;wBACrB,IAAI,CAAC,IAAI,GAAG,QAAQ;4BAClB,CAAC,CAAC,gCAAgC;4BAClC,CAAC,CAAC,sEAAsE,CAAA;wBAC1E,OAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,EAAE;YACJ,aAAa,EAAE,IAAI,CAAC;gBAClB,WAAW,EAAE,kEAAkE;gBAC/E,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACnD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;iBAC/F;gBACD,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG;oBACpC,MAAM,QAAQ,GAAG,SAAS,IAAI,GAAG,CAAC,SAAS,CAAA;oBAC3C,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;oBACnC,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAA;gBAC/C,CAAC;aACF,CAAC;SACH;QAED,KAAK,CAAC,OAAO;YACX,IAAI,CAAC;gBAAC,GAAG,EAAE,IAAI,EAAE,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAA;YAChB,WAAW,GAAG,KAAK,CAAA;YACnB,GAAG,GAAG,IAAI,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,eAAe;IACb,EAAE,EAAE,aAAa;IACjB,MAAM,EAAE,cAAc;CACvB,CAAA"}
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": "1.9.1",
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",