@matthias-hausberger/beige 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +183 -0
  3. package/dist/channels/registry.d.ts +14 -0
  4. package/dist/channels/registry.d.ts.map +1 -0
  5. package/dist/channels/registry.js +14 -0
  6. package/dist/channels/registry.js.map +1 -0
  7. package/dist/channels/telegram.d.ts +92 -0
  8. package/dist/channels/telegram.d.ts.map +1 -0
  9. package/dist/channels/telegram.js +469 -0
  10. package/dist/channels/telegram.js.map +1 -0
  11. package/dist/channels/tui.d.ts +8 -0
  12. package/dist/channels/tui.d.ts.map +1 -0
  13. package/dist/channels/tui.js +574 -0
  14. package/dist/channels/tui.js.map +1 -0
  15. package/dist/cli.d.ts +23 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +571 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config/loader.d.ts +6 -0
  20. package/dist/config/loader.d.ts.map +1 -0
  21. package/dist/config/loader.js +103 -0
  22. package/dist/config/loader.js.map +1 -0
  23. package/dist/config/loader.spec.d.ts +2 -0
  24. package/dist/config/loader.spec.d.ts.map +1 -0
  25. package/dist/config/loader.spec.js +195 -0
  26. package/dist/config/loader.spec.js.map +1 -0
  27. package/dist/config/schema.d.ts +107 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +42 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/schema.spec.d.ts +2 -0
  32. package/dist/config/schema.spec.d.ts.map +1 -0
  33. package/dist/config/schema.spec.js +180 -0
  34. package/dist/config/schema.spec.js.map +1 -0
  35. package/dist/gateway/agent-manager.d.ts +138 -0
  36. package/dist/gateway/agent-manager.d.ts.map +1 -0
  37. package/dist/gateway/agent-manager.js +532 -0
  38. package/dist/gateway/agent-manager.js.map +1 -0
  39. package/dist/gateway/api.d.ts +43 -0
  40. package/dist/gateway/api.d.ts.map +1 -0
  41. package/dist/gateway/api.js +256 -0
  42. package/dist/gateway/api.js.map +1 -0
  43. package/dist/gateway/api.spec.d.ts +2 -0
  44. package/dist/gateway/api.spec.d.ts.map +1 -0
  45. package/dist/gateway/api.spec.js +256 -0
  46. package/dist/gateway/api.spec.js.map +1 -0
  47. package/dist/gateway/audit.d.ts +38 -0
  48. package/dist/gateway/audit.d.ts.map +1 -0
  49. package/dist/gateway/audit.js +82 -0
  50. package/dist/gateway/audit.js.map +1 -0
  51. package/dist/gateway/audit.spec.d.ts +2 -0
  52. package/dist/gateway/audit.spec.d.ts.map +1 -0
  53. package/dist/gateway/audit.spec.js +212 -0
  54. package/dist/gateway/audit.spec.js.map +1 -0
  55. package/dist/gateway/gateway.d.ts +27 -0
  56. package/dist/gateway/gateway.d.ts.map +1 -0
  57. package/dist/gateway/gateway.js +158 -0
  58. package/dist/gateway/gateway.js.map +1 -0
  59. package/dist/gateway/policy.d.ts +27 -0
  60. package/dist/gateway/policy.d.ts.map +1 -0
  61. package/dist/gateway/policy.js +40 -0
  62. package/dist/gateway/policy.js.map +1 -0
  63. package/dist/gateway/policy.spec.d.ts +2 -0
  64. package/dist/gateway/policy.spec.d.ts.map +1 -0
  65. package/dist/gateway/policy.spec.js +121 -0
  66. package/dist/gateway/policy.spec.js.map +1 -0
  67. package/dist/gateway/provider-health.d.ts +83 -0
  68. package/dist/gateway/provider-health.d.ts.map +1 -0
  69. package/dist/gateway/provider-health.js +219 -0
  70. package/dist/gateway/provider-health.js.map +1 -0
  71. package/dist/gateway/provider-health.spec.d.ts +2 -0
  72. package/dist/gateway/provider-health.spec.d.ts.map +1 -0
  73. package/dist/gateway/provider-health.spec.js +278 -0
  74. package/dist/gateway/provider-health.spec.js.map +1 -0
  75. package/dist/gateway/session-settings.d.ts +62 -0
  76. package/dist/gateway/session-settings.d.ts.map +1 -0
  77. package/dist/gateway/session-settings.js +91 -0
  78. package/dist/gateway/session-settings.js.map +1 -0
  79. package/dist/gateway/session-settings.spec.d.ts +2 -0
  80. package/dist/gateway/session-settings.spec.d.ts.map +1 -0
  81. package/dist/gateway/session-settings.spec.js +141 -0
  82. package/dist/gateway/session-settings.spec.js.map +1 -0
  83. package/dist/gateway/sessions.d.ts +68 -0
  84. package/dist/gateway/sessions.d.ts.map +1 -0
  85. package/dist/gateway/sessions.js +177 -0
  86. package/dist/gateway/sessions.js.map +1 -0
  87. package/dist/gateway/sessions.spec.d.ts +2 -0
  88. package/dist/gateway/sessions.spec.d.ts.map +1 -0
  89. package/dist/gateway/sessions.spec.js +190 -0
  90. package/dist/gateway/sessions.spec.js.map +1 -0
  91. package/dist/index.d.ts +11 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +10 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/install.d.ts +39 -0
  96. package/dist/install.d.ts.map +1 -0
  97. package/dist/install.js +144 -0
  98. package/dist/install.js.map +1 -0
  99. package/dist/sandbox/manager.d.ts +63 -0
  100. package/dist/sandbox/manager.d.ts.map +1 -0
  101. package/dist/sandbox/manager.js +294 -0
  102. package/dist/sandbox/manager.js.map +1 -0
  103. package/dist/skills/index.d.ts +2 -0
  104. package/dist/skills/index.d.ts.map +1 -0
  105. package/dist/skills/index.js +2 -0
  106. package/dist/skills/index.js.map +1 -0
  107. package/dist/skills/registry.d.ts +11 -0
  108. package/dist/skills/registry.d.ts.map +1 -0
  109. package/dist/skills/registry.js +86 -0
  110. package/dist/skills/registry.js.map +1 -0
  111. package/dist/skills/registry.spec.d.ts +2 -0
  112. package/dist/skills/registry.spec.d.ts.map +1 -0
  113. package/dist/skills/registry.spec.js +220 -0
  114. package/dist/skills/registry.spec.js.map +1 -0
  115. package/dist/socket/protocol.d.ts +21 -0
  116. package/dist/socket/protocol.d.ts.map +1 -0
  117. package/dist/socket/protocol.js +7 -0
  118. package/dist/socket/protocol.js.map +1 -0
  119. package/dist/socket/protocol.spec.d.ts +2 -0
  120. package/dist/socket/protocol.spec.d.ts.map +1 -0
  121. package/dist/socket/protocol.spec.js +135 -0
  122. package/dist/socket/protocol.spec.js.map +1 -0
  123. package/dist/socket/server.d.ts +21 -0
  124. package/dist/socket/server.d.ts.map +1 -0
  125. package/dist/socket/server.js +133 -0
  126. package/dist/socket/server.js.map +1 -0
  127. package/dist/socket/server.spec.d.ts +2 -0
  128. package/dist/socket/server.spec.d.ts.map +1 -0
  129. package/dist/socket/server.spec.js +333 -0
  130. package/dist/socket/server.spec.js.map +1 -0
  131. package/dist/test/fixtures.d.ts +47 -0
  132. package/dist/test/fixtures.d.ts.map +1 -0
  133. package/dist/test/fixtures.js +144 -0
  134. package/dist/test/fixtures.js.map +1 -0
  135. package/dist/toolkit/index.d.ts +4 -0
  136. package/dist/toolkit/index.d.ts.map +1 -0
  137. package/dist/toolkit/index.js +4 -0
  138. package/dist/toolkit/index.js.map +1 -0
  139. package/dist/toolkit/installer.d.ts +26 -0
  140. package/dist/toolkit/installer.d.ts.map +1 -0
  141. package/dist/toolkit/installer.js +247 -0
  142. package/dist/toolkit/installer.js.map +1 -0
  143. package/dist/toolkit/registry.d.ts +19 -0
  144. package/dist/toolkit/registry.d.ts.map +1 -0
  145. package/dist/toolkit/registry.js +119 -0
  146. package/dist/toolkit/registry.js.map +1 -0
  147. package/dist/toolkit/registry.spec.d.ts +2 -0
  148. package/dist/toolkit/registry.spec.d.ts.map +1 -0
  149. package/dist/toolkit/registry.spec.js +194 -0
  150. package/dist/toolkit/registry.spec.js.map +1 -0
  151. package/dist/toolkit/schema.d.ts +61 -0
  152. package/dist/toolkit/schema.d.ts.map +1 -0
  153. package/dist/toolkit/schema.js +116 -0
  154. package/dist/toolkit/schema.js.map +1 -0
  155. package/dist/toolkit/schema.spec.d.ts +2 -0
  156. package/dist/toolkit/schema.spec.d.ts.map +1 -0
  157. package/dist/toolkit/schema.spec.js +202 -0
  158. package/dist/toolkit/schema.spec.js.map +1 -0
  159. package/dist/tools/core.d.ts +10 -0
  160. package/dist/tools/core.d.ts.map +1 -0
  161. package/dist/tools/core.js +246 -0
  162. package/dist/tools/core.js.map +1 -0
  163. package/dist/tools/core.spec.d.ts +2 -0
  164. package/dist/tools/core.spec.d.ts.map +1 -0
  165. package/dist/tools/core.spec.js +315 -0
  166. package/dist/tools/core.spec.js.map +1 -0
  167. package/dist/tools/registry.d.ts +15 -0
  168. package/dist/tools/registry.d.ts.map +1 -0
  169. package/dist/tools/registry.js +62 -0
  170. package/dist/tools/registry.js.map +1 -0
  171. package/dist/tools/registry.spec.d.ts +2 -0
  172. package/dist/tools/registry.spec.d.ts.map +1 -0
  173. package/dist/tools/registry.spec.js +228 -0
  174. package/dist/tools/registry.spec.js.map +1 -0
  175. package/dist/tools/runner.d.ts +25 -0
  176. package/dist/tools/runner.d.ts.map +1 -0
  177. package/dist/tools/runner.js +35 -0
  178. package/dist/tools/runner.js.map +1 -0
  179. package/dist/tools/runner.spec.d.ts +2 -0
  180. package/dist/tools/runner.spec.d.ts.map +1 -0
  181. package/dist/tools/runner.spec.js +129 -0
  182. package/dist/tools/runner.spec.js.map +1 -0
  183. package/dist/types/session.d.ts +8 -0
  184. package/dist/types/session.d.ts.map +1 -0
  185. package/dist/types/session.js +23 -0
  186. package/dist/types/session.js.map +1 -0
  187. package/package.json +76 -0
  188. package/tools/README.md +1 -0
  189. package/tools/kv/README.md +150 -0
  190. package/tools/kv/index.ts +149 -0
  191. package/tools/kv/tool.json +23 -0
  192. package/tools/message/README.md +53 -0
  193. package/tools/message/index.ts +183 -0
  194. package/tools/message/tool.json +11 -0
@@ -0,0 +1,469 @@
1
+ import { Bot } from "grammy";
2
+ import { BeigeSessionStore } from "../gateway/sessions.js";
3
+ import { resolveSessionSetting } from "../gateway/session-settings.js";
4
+ /**
5
+ * Telegram channel adapter using GrammY.
6
+ *
7
+ * Session model:
8
+ * - Each chat gets a persistent session (survives gateway restarts).
9
+ * - If a chat has threads (forum topics), each thread gets its own session.
10
+ * - /new starts a fresh session in the current chat/thread.
11
+ * - /start shows a welcome message.
12
+ *
13
+ * Channel commands (handled locally, NOT forwarded to the LLM):
14
+ * - /start — welcome message + command overview
15
+ * - /new — start a new conversation session
16
+ * - /status — show session info + current settings
17
+ * - /v on|off — toggle verbose mode for this session (shorthand)
18
+ * - /verbose on|off — toggle verbose mode for this session
19
+ * - /s on|off — toggle streaming mode for this session (shorthand)
20
+ * - /streaming on|off — toggle streaming mode for this session
21
+ *
22
+ * Verbose mode:
23
+ * - When ON, the bot sends a small notification whenever the agent calls a tool.
24
+ * - Default is OFF (configurable via channels.telegram.defaults.verbose in config.json5).
25
+ * - Persisted per-session in ~/.beige/sessions/session-settings.json.
26
+ *
27
+ * Streaming mode:
28
+ * - When ON (default), responses are streamed in real-time (message edits as LLM generates).
29
+ * - When OFF, the full response is sent once the LLM finishes.
30
+ * - Default is ON (configurable via channels.telegram.defaults.streaming in config.json5).
31
+ * - Persisted per-session in ~/.beige/sessions/session-settings.json.
32
+ *
33
+ * Bot command registration:
34
+ * - On startup, the bot deletes all old commands and registers the current set.
35
+ */
36
+ export class TelegramChannel {
37
+ agentManager;
38
+ sessionStore;
39
+ settingsStore;
40
+ channelRegistry;
41
+ bot;
42
+ config;
43
+ constructor(telegramConfig, agentManager, sessionStore, settingsStore, channelRegistry) {
44
+ this.agentManager = agentManager;
45
+ this.sessionStore = sessionStore;
46
+ this.settingsStore = settingsStore;
47
+ this.channelRegistry = channelRegistry;
48
+ this.config = telegramConfig;
49
+ this.bot = new Bot(telegramConfig.token);
50
+ this.setupHandlers();
51
+ }
52
+ setupHandlers() {
53
+ // ── Auth middleware ──────────────────────────────────────
54
+ this.bot.use(async (ctx, next) => {
55
+ const userId = ctx.from?.id;
56
+ if (!userId || !this.config.allowedUsers.includes(userId)) {
57
+ console.log(`[TELEGRAM] Unauthorized user: ${userId}`);
58
+ await ctx.reply("⛔ Unauthorized.");
59
+ return;
60
+ }
61
+ await next();
62
+ });
63
+ // ── /start command ──────────────────────────────────────
64
+ this.bot.command("start", async (ctx) => {
65
+ const sessionKey = this.sessionKeyFromCtx(ctx);
66
+ const verbose = this.resolveVerbose(sessionKey);
67
+ const streaming = this.resolveStreaming(sessionKey);
68
+ await ctx.reply("👋 Hello! I'm your Beige agent. Send me a message and I'll help you out.\n\n" +
69
+ "Commands:\n" +
70
+ "/new — Start a new conversation session\n" +
71
+ "/status — Show current session info and settings\n" +
72
+ "/verbose on|off — Toggle tool-call notifications\n" +
73
+ "/v on|off — Same as /verbose (shorthand)\n" +
74
+ "/streaming on|off — Toggle real-time response streaming\n" +
75
+ "/s on|off — Same as /streaming (shorthand)\n\n" +
76
+ `Current settings:\n` +
77
+ `• Verbose: ${verbose ? "🔊 on" : "🔇 off"}\n` +
78
+ `• Streaming: ${streaming ? "⚡ on" : "📦 off"}`);
79
+ });
80
+ // ── /new command — start fresh session ──────────────────
81
+ this.bot.command("new", async (ctx) => {
82
+ const chatId = ctx.chat.id;
83
+ const threadId = ctx.message?.message_thread_id;
84
+ const sessionKey = BeigeSessionStore.telegramKey(chatId, threadId);
85
+ const agentName = this.resolveAgent(ctx.from.id);
86
+ // Clear session-level overrides on /new so the user starts fresh
87
+ this.settingsStore.clearAll(sessionKey);
88
+ await this.agentManager.newSession(sessionKey, agentName, {
89
+ onToolStart: this.makeToolStartHandler(sessionKey, ctx),
90
+ });
91
+ await ctx.reply("🆕 New session started. Previous conversation is saved.");
92
+ });
93
+ // ── /status command ─────────────────────────────────────
94
+ this.bot.command("status", async (ctx) => {
95
+ const chatId = ctx.chat.id;
96
+ const threadId = ctx.message?.message_thread_id;
97
+ const sessionKey = BeigeSessionStore.telegramKey(chatId, threadId);
98
+ const agentName = this.resolveAgent(ctx.from.id);
99
+ const sessionFile = this.sessionStore.getSessionFile(sessionKey);
100
+ const sessionStatus = sessionFile ? "📂 Continuing existing session" : "🆕 No session yet";
101
+ const verbose = this.resolveVerbose(sessionKey);
102
+ const streaming = this.resolveStreaming(sessionKey);
103
+ const overrides = this.settingsStore.getAll(sessionKey);
104
+ const verboseOverride = overrides.verbose !== undefined;
105
+ const streamingOverride = overrides.streaming !== undefined;
106
+ await ctx.reply(`*Session Status*\n\n` +
107
+ `Agent: \`${agentName}\`\n` +
108
+ `Chat: \`${chatId}${threadId ? ` / Thread: ${threadId}` : ""}\`\n` +
109
+ `${sessionStatus}\n\n` +
110
+ `*Settings*\n` +
111
+ `• Verbose: ${verbose ? "🔊 on" : "🔇 off"}` +
112
+ (verboseOverride ? " _(session override)_" : " _(channel default)_") + "\n" +
113
+ `• Streaming: ${streaming ? "⚡ on" : "📦 off"}` +
114
+ (streamingOverride ? " _(session override)_" : " _(channel default)_"), { parse_mode: "Markdown" });
115
+ });
116
+ // ── /verbose command ─────────────────────────────────────
117
+ this.bot.command("verbose", async (ctx) => {
118
+ await this.handleVerboseCommand(ctx);
119
+ });
120
+ // ── /v command (shorthand for /verbose) ──────────────────
121
+ this.bot.command("v", async (ctx) => {
122
+ await this.handleVerboseCommand(ctx);
123
+ });
124
+ // ── /streaming command ───────────────────────────────────
125
+ this.bot.command("streaming", async (ctx) => {
126
+ await this.handleStreamingCommand(ctx);
127
+ });
128
+ // ── /s command (shorthand for /streaming) ────────────────
129
+ this.bot.command("s", async (ctx) => {
130
+ await this.handleStreamingCommand(ctx);
131
+ });
132
+ // ── Text messages ───────────────────────────────────────
133
+ this.bot.on("message:text", async (ctx) => {
134
+ const text = ctx.message.text;
135
+ const chatId = ctx.chat.id;
136
+ const threadId = ctx.message?.message_thread_id;
137
+ const userId = ctx.from.id;
138
+ const sessionKey = BeigeSessionStore.telegramKey(chatId, threadId);
139
+ const agentName = this.resolveAgent(userId);
140
+ const streaming = this.resolveStreaming(sessionKey);
141
+ console.log(`[TELEGRAM] User ${userId} → agent '${agentName}' ` +
142
+ `(chat:${chatId}${threadId ? `/thread:${threadId}` : ""}): ` +
143
+ `${text.slice(0, 80)}${text.length > 80 ? "..." : ""}`);
144
+ try {
145
+ await ctx.replyWithChatAction("typing");
146
+ // Build onToolStart based on the current verbose setting
147
+ const onToolStart = this.resolveVerbose(sessionKey)
148
+ ? this.makeToolStartHandler(sessionKey, ctx)
149
+ : undefined;
150
+ if (streaming) {
151
+ // Streaming mode: update message in real-time
152
+ let currentMessage = "";
153
+ let sentMessage = null;
154
+ let lastUpdateTime = 0;
155
+ const UPDATE_INTERVAL_MS = 1000;
156
+ const response = await this.agentManager.promptStreaming(sessionKey, agentName, text, async (delta) => {
157
+ currentMessage += delta;
158
+ const now = Date.now();
159
+ if (now - lastUpdateTime < UPDATE_INTERVAL_MS)
160
+ return;
161
+ lastUpdateTime = now;
162
+ try {
163
+ if (!sentMessage) {
164
+ sentMessage = await ctx.reply(truncateForTelegram(currentMessage), {
165
+ parse_mode: undefined,
166
+ ...(threadId ? { message_thread_id: threadId } : {}),
167
+ });
168
+ }
169
+ else {
170
+ await ctx.api.editMessageText(ctx.chat.id, sentMessage.message_id, truncateForTelegram(currentMessage));
171
+ }
172
+ }
173
+ catch {
174
+ // Ignore edit errors
175
+ }
176
+ }, { onToolStart });
177
+ // Send final message
178
+ if (sentMessage) {
179
+ try {
180
+ await ctx.api.editMessageText(ctx.chat.id, sentMessage.message_id, truncateForTelegram(response));
181
+ }
182
+ catch {
183
+ await sendLongMessage(ctx, response, threadId);
184
+ }
185
+ }
186
+ else {
187
+ await sendLongMessage(ctx, response, threadId);
188
+ }
189
+ }
190
+ else {
191
+ // Non-streaming mode: send full response when complete
192
+ const response = await this.agentManager.prompt(sessionKey, agentName, text, { onToolStart });
193
+ await sendLongMessage(ctx, response, threadId);
194
+ }
195
+ }
196
+ catch (err) {
197
+ console.error(`[TELEGRAM] Error:`, err);
198
+ await ctx.reply(`❌ Error: ${err instanceof Error ? err.message : String(err)}`);
199
+ }
200
+ });
201
+ }
202
+ // ── Verbose mode helpers ────────────────────────────────────────────
203
+ /**
204
+ * Handle /verbose and /v commands.
205
+ * Parses "on"/"off" argument and persists the setting for this session.
206
+ */
207
+ async handleVerboseCommand(ctx) {
208
+ const chatId = ctx.chat.id;
209
+ const threadId = ctx.message?.message_thread_id;
210
+ const sessionKey = BeigeSessionStore.telegramKey(chatId, threadId);
211
+ // Extract argument: "/verbose on" or "/v off"
212
+ const text = ctx.message?.text ?? "";
213
+ const parts = text.trim().split(/\s+/);
214
+ const arg = parts[1]?.toLowerCase();
215
+ if (!arg || (arg !== "on" && arg !== "off")) {
216
+ const current = this.resolveVerbose(sessionKey);
217
+ await ctx.reply(`Usage: /verbose on|off\n\n` +
218
+ `Current: ${current ? "🔊 on" : "🔇 off"}`);
219
+ return;
220
+ }
221
+ const enable = arg === "on";
222
+ this.settingsStore.set(sessionKey, "verbose", enable);
223
+ // Update the live session's handler ref — no session restart needed.
224
+ if (enable) {
225
+ this.agentManager.updateToolStartHandler(sessionKey, this.makeToolStartHandlerForKey(sessionKey, ctx));
226
+ }
227
+ else {
228
+ this.agentManager.updateToolStartHandler(sessionKey, undefined);
229
+ }
230
+ await ctx.reply(enable
231
+ ? "🔊 Verbose mode *on* — you'll see tool calls as they happen."
232
+ : "🔇 Verbose mode *off* — tool calls are hidden.", { parse_mode: "Markdown" });
233
+ console.log(`[TELEGRAM] Verbose mode ${enable ? "ON" : "OFF"} for session ${sessionKey}`);
234
+ }
235
+ /**
236
+ * Resolve the effective verbose setting for a session (layered: default → config → override).
237
+ */
238
+ resolveVerbose(sessionKey) {
239
+ const sessionOverride = this.settingsStore.get(sessionKey, "verbose");
240
+ const channelDefault = this.config.defaults?.verbose;
241
+ return resolveSessionSetting("verbose", false, channelDefault, sessionOverride);
242
+ }
243
+ // ── Streaming mode helpers ────────────────────────────────────────────
244
+ /**
245
+ * Handle /streaming and /s commands.
246
+ * Parses "on"/"off" argument and persists the setting for this session.
247
+ */
248
+ async handleStreamingCommand(ctx) {
249
+ const chatId = ctx.chat.id;
250
+ const threadId = ctx.message?.message_thread_id;
251
+ const sessionKey = BeigeSessionStore.telegramKey(chatId, threadId);
252
+ // Extract argument: "/streaming on" or "/s off"
253
+ const text = ctx.message?.text ?? "";
254
+ const parts = text.trim().split(/\s+/);
255
+ const arg = parts[1]?.toLowerCase();
256
+ if (!arg || (arg !== "on" && arg !== "off")) {
257
+ const current = this.resolveStreaming(sessionKey);
258
+ await ctx.reply(`Usage: /streaming on|off\n\n` +
259
+ `Current: ${current ? "⚡ on" : "📦 off"}`);
260
+ return;
261
+ }
262
+ const enable = arg === "on";
263
+ this.settingsStore.set(sessionKey, "streaming", enable);
264
+ await ctx.reply(enable
265
+ ? "⚡ Streaming mode *on* — responses will appear in real-time as the AI generates them."
266
+ : "📦 Streaming mode *off* — full response will be sent once complete.", { parse_mode: "Markdown" });
267
+ console.log(`[TELEGRAM] Streaming mode ${enable ? "ON" : "OFF"} for session ${sessionKey}`);
268
+ }
269
+ /**
270
+ * Resolve the effective streaming setting for a session (layered: default → config → override).
271
+ */
272
+ resolveStreaming(sessionKey) {
273
+ const sessionOverride = this.settingsStore.get(sessionKey, "streaming");
274
+ const channelDefault = this.config.defaults?.streaming;
275
+ return resolveSessionSetting("streaming", true, channelDefault, sessionOverride);
276
+ }
277
+ /**
278
+ * Create an OnToolStart callback that sends a Telegram notification.
279
+ * Uses a GrammY context for thread-aware replies.
280
+ */
281
+ makeToolStartHandler(sessionKey, ctx) {
282
+ const chatId = ctx.chat.id;
283
+ const threadId = ctx.message?.message_thread_id;
284
+ return this.buildToolStartHandler(sessionKey, chatId, threadId);
285
+ }
286
+ /**
287
+ * Create an OnToolStart callback using raw chat/thread IDs.
288
+ * Used when toggling verbose on mid-session (no fresh ctx available).
289
+ */
290
+ makeToolStartHandlerForKey(sessionKey, ctx) {
291
+ const chatId = ctx.chat.id;
292
+ const threadId = ctx.message?.message_thread_id;
293
+ return this.buildToolStartHandler(sessionKey, chatId, threadId);
294
+ }
295
+ buildToolStartHandler(sessionKey, chatId, threadId) {
296
+ return (toolName, params) => {
297
+ const label = formatToolCall(toolName, params);
298
+ console.log(`[TELEGRAM] [verbose] ${sessionKey} tool: ${label}`);
299
+ // Fire-and-forget — we don't await inside a sync callback
300
+ this.bot.api
301
+ .sendMessage(chatId, `🔧 ${label}`, {
302
+ ...(threadId ? { message_thread_id: threadId } : {}),
303
+ })
304
+ .catch((err) => {
305
+ console.warn(`[TELEGRAM] Failed to send verbose notification: ${err}`);
306
+ });
307
+ };
308
+ }
309
+ /**
310
+ * Resolve which agent to use for a given user.
311
+ */
312
+ resolveAgent(_userId) {
313
+ return this.config.agentMapping.default;
314
+ }
315
+ sessionKeyFromCtx(ctx) {
316
+ const chatId = ctx.chat.id;
317
+ const threadId = ctx.message?.message_thread_id;
318
+ return BeigeSessionStore.telegramKey(chatId, threadId);
319
+ }
320
+ // ── Lifecycle ────────────────────────────────────────────────────────
321
+ supportsMessaging() {
322
+ return true;
323
+ }
324
+ async sendMessage(chatId, threadId, text, options) {
325
+ const MAX_LENGTH = 4096;
326
+ const chunks = [];
327
+ if (text.length <= MAX_LENGTH) {
328
+ chunks.push(text);
329
+ }
330
+ else {
331
+ let current = "";
332
+ for (const line of text.split("\n")) {
333
+ if (current.length + line.length + 1 > MAX_LENGTH) {
334
+ if (current)
335
+ chunks.push(current);
336
+ current = line;
337
+ }
338
+ else {
339
+ current += (current ? "\n" : "") + line;
340
+ }
341
+ }
342
+ if (current)
343
+ chunks.push(current);
344
+ }
345
+ for (const chunk of chunks) {
346
+ await this.bot.api.sendMessage(chatId, chunk, {
347
+ parse_mode: options?.parseMode === "markdown" ? "MarkdownV2" : options?.parseMode === "html" ? "HTML" : undefined,
348
+ ...(threadId ? { message_thread_id: parseInt(threadId, 10) } : {}),
349
+ });
350
+ }
351
+ }
352
+ async start() {
353
+ console.log("[TELEGRAM] Starting bot...");
354
+ if (this.channelRegistry) {
355
+ this.channelRegistry.register("telegram", this);
356
+ }
357
+ // Register bot commands (delete stale ones first, then set current set)
358
+ await this.registerBotCommands();
359
+ await this.bot.start({
360
+ onStart: (botInfo) => {
361
+ console.log(`[TELEGRAM] Bot started as @${botInfo.username}`);
362
+ },
363
+ });
364
+ }
365
+ async stop() {
366
+ await this.bot.stop();
367
+ console.log("[TELEGRAM] Bot stopped");
368
+ }
369
+ /**
370
+ * Register the bot's command list with Telegram.
371
+ * First deletes all existing commands, then sets the current ones.
372
+ * This ensures stale commands from old bot versions are removed.
373
+ */
374
+ async registerBotCommands() {
375
+ try {
376
+ // Delete all existing commands
377
+ await this.bot.api.deleteMyCommands();
378
+ console.log("[TELEGRAM] Cleared existing bot commands");
379
+ // Register current commands
380
+ await this.bot.api.setMyCommands([
381
+ { command: "start", description: "Show welcome message and available commands" },
382
+ { command: "new", description: "Start a new conversation session" },
383
+ { command: "status", description: "Show current session info and settings" },
384
+ {
385
+ command: "verbose",
386
+ description: "Toggle tool-call notifications: /verbose on|off",
387
+ },
388
+ {
389
+ command: "v",
390
+ description: "Shorthand for /verbose: /v on|off",
391
+ },
392
+ {
393
+ command: "streaming",
394
+ description: "Toggle real-time response streaming: /streaming on|off",
395
+ },
396
+ {
397
+ command: "s",
398
+ description: "Shorthand for /streaming: /s on|off",
399
+ },
400
+ ]);
401
+ console.log("[TELEGRAM] Registered bot commands");
402
+ }
403
+ catch (err) {
404
+ // Non-fatal — bot still works without registered commands
405
+ console.warn(`[TELEGRAM] Failed to register commands: ${err}`);
406
+ }
407
+ }
408
+ }
409
+ // ── Formatting ────────────────────────────────────────────────────────────
410
+ /**
411
+ * Format a tool call into a human-readable one-liner for verbose notifications.
412
+ */
413
+ function formatToolCall(toolName, params) {
414
+ switch (toolName) {
415
+ case "exec": {
416
+ const cmd = String(params.command ?? "");
417
+ return `exec: ${cmd.length > 80 ? cmd.slice(0, 77) + "…" : cmd}`;
418
+ }
419
+ case "read": {
420
+ const path = String(params.path ?? "");
421
+ return `read: ${path}`;
422
+ }
423
+ case "write": {
424
+ const path = String(params.path ?? "");
425
+ const bytes = params.bytes != null ? ` (${params.bytes} bytes)` : "";
426
+ return `write: ${path}${bytes}`;
427
+ }
428
+ case "patch": {
429
+ const path = String(params.path ?? "");
430
+ return `patch: ${path}`;
431
+ }
432
+ default:
433
+ return `${toolName}: ${JSON.stringify(params).slice(0, 80)}`;
434
+ }
435
+ }
436
+ function truncateForTelegram(text) {
437
+ if (text.length <= 4096)
438
+ return text;
439
+ return text.slice(0, 4090) + "\n[…]";
440
+ }
441
+ async function sendLongMessage(ctx, text, threadId) {
442
+ const MAX_LENGTH = 4096;
443
+ if (text.length <= MAX_LENGTH) {
444
+ await ctx.reply(text || "(empty response)", {
445
+ ...(threadId ? { message_thread_id: threadId } : {}),
446
+ });
447
+ return;
448
+ }
449
+ const chunks = [];
450
+ let current = "";
451
+ for (const line of text.split("\n")) {
452
+ if (current.length + line.length + 1 > MAX_LENGTH) {
453
+ if (current)
454
+ chunks.push(current);
455
+ current = line;
456
+ }
457
+ else {
458
+ current += (current ? "\n" : "") + line;
459
+ }
460
+ }
461
+ if (current)
462
+ chunks.push(current);
463
+ for (const chunk of chunks) {
464
+ await ctx.reply(chunk, {
465
+ ...(threadId ? { message_thread_id: threadId } : {}),
466
+ });
467
+ }
468
+ }
469
+ //# sourceMappingURL=telegram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { BeigeConfig } from "../config/schema.js";
2
+ export interface TUIOptions {
3
+ config: BeigeConfig;
4
+ agentName: string;
5
+ gatewayUrl?: string;
6
+ }
7
+ export declare function launchTUI(opts: TUIOptions): Promise<void>;
8
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/channels/tui.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,qBAAqB,CAAC;AA6BpE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmBD,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG/D"}