tg-claude 0.3.3 → 0.3.4

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 (125) hide show
  1. package/package.json +2 -3
  2. package/dist/claude/ClaudeProcess.d.ts +0 -77
  3. package/dist/claude/ClaudeProcess.d.ts.map +0 -1
  4. package/dist/claude/ClaudeProcess.js +0 -270
  5. package/dist/claude/ClaudeProcess.js.map +0 -1
  6. package/dist/claude/EventAdapter.d.ts +0 -44
  7. package/dist/claude/EventAdapter.d.ts.map +0 -1
  8. package/dist/claude/EventAdapter.js +0 -135
  9. package/dist/claude/EventAdapter.js.map +0 -1
  10. package/dist/claude/index.d.ts +0 -10
  11. package/dist/claude/index.d.ts.map +0 -1
  12. package/dist/claude/index.js +0 -9
  13. package/dist/claude/index.js.map +0 -1
  14. package/dist/claude/types.d.ts +0 -244
  15. package/dist/claude/types.d.ts.map +0 -1
  16. package/dist/claude/types.js +0 -8
  17. package/dist/claude/types.js.map +0 -1
  18. package/dist/env.d.ts +0 -21
  19. package/dist/env.d.ts.map +0 -1
  20. package/dist/env.js +0 -49
  21. package/dist/env.js.map +0 -1
  22. package/dist/index.d.ts +0 -2
  23. package/dist/index.d.ts.map +0 -1
  24. package/dist/index.js +0 -415
  25. package/dist/index.js.map +0 -1
  26. package/dist/parser/AnsiStripper.d.ts +0 -54
  27. package/dist/parser/AnsiStripper.d.ts.map +0 -1
  28. package/dist/parser/AnsiStripper.js +0 -115
  29. package/dist/parser/AnsiStripper.js.map +0 -1
  30. package/dist/parser/OptionExtractor.d.ts +0 -31
  31. package/dist/parser/OptionExtractor.d.ts.map +0 -1
  32. package/dist/parser/OptionExtractor.js +0 -91
  33. package/dist/parser/OptionExtractor.js.map +0 -1
  34. package/dist/parser/OutputParser.d.ts +0 -121
  35. package/dist/parser/OutputParser.d.ts.map +0 -1
  36. package/dist/parser/OutputParser.js +0 -306
  37. package/dist/parser/OutputParser.js.map +0 -1
  38. package/dist/parser/PromptDetector.d.ts +0 -20
  39. package/dist/parser/PromptDetector.d.ts.map +0 -1
  40. package/dist/parser/PromptDetector.js +0 -68
  41. package/dist/parser/PromptDetector.js.map +0 -1
  42. package/dist/parser/index.d.ts +0 -7
  43. package/dist/parser/index.d.ts.map +0 -1
  44. package/dist/parser/index.js +0 -5
  45. package/dist/parser/index.js.map +0 -1
  46. package/dist/parser/types.d.ts +0 -73
  47. package/dist/parser/types.d.ts.map +0 -1
  48. package/dist/parser/types.js +0 -2
  49. package/dist/parser/types.js.map +0 -1
  50. package/dist/pty/OutputBuffer.d.ts +0 -39
  51. package/dist/pty/OutputBuffer.d.ts.map +0 -1
  52. package/dist/pty/OutputBuffer.js +0 -55
  53. package/dist/pty/OutputBuffer.js.map +0 -1
  54. package/dist/pty/PtyProcess.d.ts +0 -47
  55. package/dist/pty/PtyProcess.d.ts.map +0 -1
  56. package/dist/pty/PtyProcess.js +0 -94
  57. package/dist/pty/PtyProcess.js.map +0 -1
  58. package/dist/pty/PtyService.d.ts +0 -55
  59. package/dist/pty/PtyService.d.ts.map +0 -1
  60. package/dist/pty/PtyService.js +0 -115
  61. package/dist/pty/PtyService.js.map +0 -1
  62. package/dist/pty/index.d.ts +0 -5
  63. package/dist/pty/index.d.ts.map +0 -1
  64. package/dist/pty/index.js +0 -4
  65. package/dist/pty/index.js.map +0 -1
  66. package/dist/pty/types.d.ts +0 -36
  67. package/dist/pty/types.d.ts.map +0 -1
  68. package/dist/pty/types.js +0 -2
  69. package/dist/pty/types.js.map +0 -1
  70. package/dist/router/BoundedQueue.d.ts +0 -57
  71. package/dist/router/BoundedQueue.d.ts.map +0 -1
  72. package/dist/router/BoundedQueue.js +0 -86
  73. package/dist/router/BoundedQueue.js.map +0 -1
  74. package/dist/router/EventRouter.d.ts +0 -103
  75. package/dist/router/EventRouter.d.ts.map +0 -1
  76. package/dist/router/EventRouter.js +0 -169
  77. package/dist/router/EventRouter.js.map +0 -1
  78. package/dist/router/index.d.ts +0 -13
  79. package/dist/router/index.d.ts.map +0 -1
  80. package/dist/router/index.js +0 -12
  81. package/dist/router/index.js.map +0 -1
  82. package/dist/router/types.d.ts +0 -104
  83. package/dist/router/types.d.ts.map +0 -1
  84. package/dist/router/types.js +0 -6
  85. package/dist/router/types.js.map +0 -1
  86. package/dist/setup/envWriter.d.ts +0 -22
  87. package/dist/setup/envWriter.d.ts.map +0 -1
  88. package/dist/setup/envWriter.js +0 -68
  89. package/dist/setup/envWriter.js.map +0 -1
  90. package/dist/setup/index.d.ts +0 -4
  91. package/dist/setup/index.d.ts.map +0 -1
  92. package/dist/setup/index.js +0 -4
  93. package/dist/setup/index.js.map +0 -1
  94. package/dist/setup/validators.d.ts +0 -22
  95. package/dist/setup/validators.d.ts.map +0 -1
  96. package/dist/setup/validators.js +0 -47
  97. package/dist/setup/validators.js.map +0 -1
  98. package/dist/setup/wizard.d.ts +0 -7
  99. package/dist/setup/wizard.d.ts.map +0 -1
  100. package/dist/setup/wizard.js +0 -56
  101. package/dist/setup/wizard.js.map +0 -1
  102. package/dist/telegram/TelegramBot.d.ts +0 -163
  103. package/dist/telegram/TelegramBot.d.ts.map +0 -1
  104. package/dist/telegram/TelegramBot.js +0 -634
  105. package/dist/telegram/TelegramBot.js.map +0 -1
  106. package/dist/telegram/index.d.ts +0 -7
  107. package/dist/telegram/index.d.ts.map +0 -1
  108. package/dist/telegram/index.js +0 -6
  109. package/dist/telegram/index.js.map +0 -1
  110. package/dist/telegram/types.d.ts +0 -30
  111. package/dist/telegram/types.d.ts.map +0 -1
  112. package/dist/telegram/types.js +0 -5
  113. package/dist/telegram/types.js.map +0 -1
  114. package/dist/terminal/TerminalInterface.d.ts +0 -61
  115. package/dist/terminal/TerminalInterface.d.ts.map +0 -1
  116. package/dist/terminal/TerminalInterface.js +0 -218
  117. package/dist/terminal/TerminalInterface.js.map +0 -1
  118. package/dist/terminal/index.d.ts +0 -3
  119. package/dist/terminal/index.d.ts.map +0 -1
  120. package/dist/terminal/index.js +0 -2
  121. package/dist/terminal/index.js.map +0 -1
  122. package/dist/terminal/types.d.ts +0 -17
  123. package/dist/terminal/types.d.ts.map +0 -1
  124. package/dist/terminal/types.js +0 -2
  125. package/dist/terminal/types.js.map +0 -1
package/dist/index.js DELETED
@@ -1,415 +0,0 @@
1
- // PTY imports commented out - replaced by ClaudeProcess
2
- // import { PtyService, OutputBuffer } from './pty/index.js';
3
- // import { OutputParser } from './parser/index.js';
4
- import { loadEnv } from './env.js';
5
- import { EventRouter } from './router/index.js';
6
- import { TelegramBot } from './telegram/index.js';
7
- import { ClaudeProcess, EventAdapter } from './claude/index.js';
8
- import { TerminalInterface } from './terminal/index.js';
9
- /**
10
- * Escape HTML special characters for Telegram HTML mode
11
- */
12
- function escapeHtml(text) {
13
- return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
14
- }
15
- /**
16
- * CLI entry point using ClaudeProcess with stream-json output.
17
- * Spawns Claude CLI as subprocess, parses JSON events, routes to Telegram.
18
- * Supports multi-turn conversations via Telegram with --resume.
19
- */
20
- // Package version for --version flag
21
- const VERSION = '0.3.3';
22
- // Detect sudo/root and exit early with fix instructions
23
- if (process.getuid && process.getuid() === 0) {
24
- console.error(`
25
- Error: tg-claude cannot run as root/sudo.
26
-
27
- Claude Code refuses to run with elevated privileges for security reasons.
28
-
29
- To fix npm permission issues (so you don't need sudo):
30
-
31
- sudo chown -R $(whoami) ~/.npm
32
-
33
- Then run normally:
34
-
35
- npx tg-claude "your prompt"
36
- `);
37
- process.exit(1);
38
- }
39
- // Load and validate environment variables
40
- const env = loadEnv();
41
- // Parse command line arguments
42
- // Usage: tg-claude "Your prompt here"
43
- const args = process.argv.slice(2);
44
- // Check for --version / -v flag (before other processing)
45
- if (args.includes('--version') || args.includes('-v')) {
46
- console.log(VERSION);
47
- process.exit(0);
48
- }
49
- // Check for --setup flag (before env loading)
50
- if (args.includes('--setup')) {
51
- const { setupWizard } = await import('./setup/index.js');
52
- await setupWizard();
53
- process.exit(0);
54
- }
55
- // Auto-trigger setup wizard if credentials missing and no args
56
- if (!env.hasTelegram && args.length === 0) {
57
- const { setupWizard } = await import('./setup/index.js');
58
- await setupWizard();
59
- console.log('\nNow run: npx tg-claude "your prompt"\n');
60
- process.exit(0);
61
- }
62
- // Check for --help / -h flag (before other processing)
63
- if (args.includes('--help') || args.includes('-h') || args.length === 0) {
64
- console.log(`tg-claude - Control Claude Code from Telegram
65
-
66
- Usage:
67
- tg-claude [options] "Your prompt"
68
- npx tg-claude [options] "Your prompt"
69
-
70
- Options:
71
- --setup Run setup wizard to configure Telegram credentials
72
- --verbose Show additional logging
73
- --debug Enable debug output
74
- --quiet Suppress bridge logs, show only Claude output
75
- --help, -h Show this help message
76
- --version, -v Show version number
77
-
78
- Environment Variables:
79
- TELEGRAM_BOT_TOKEN Bot token from @BotFather (required)
80
- TELEGRAM_USER_ID Your numeric user ID from @userinfobot (required)
81
-
82
- Examples:
83
- tg-claude "Fix the bug in app.js"
84
- tg-claude --verbose "Explain this codebase"
85
- npx tg-claude "Create a README"
86
-
87
- Setup:
88
- 1. Message @BotFather on Telegram, send /newbot, copy the token
89
- 2. Message @userinfobot, copy your numeric ID
90
- 3. Set TELEGRAM_BOT_TOKEN and TELEGRAM_USER_ID
91
- 4. Run with your prompt
92
- `);
93
- process.exit(args.length === 0 ? 1 : 0);
94
- }
95
- // Check for --verbose flag
96
- const verboseIndex = args.indexOf('--verbose');
97
- const verbose = verboseIndex !== -1;
98
- if (verbose) {
99
- args.splice(verboseIndex, 1);
100
- }
101
- // Check for --debug flag
102
- const debugIndex = args.indexOf('--debug');
103
- const debug = debugIndex !== -1;
104
- if (debug) {
105
- args.splice(debugIndex, 1);
106
- }
107
- // Check for --quiet flag (suppress bridge logs, show only Claude output)
108
- const quietIndex = args.indexOf('--quiet');
109
- const quiet = quietIndex !== -1;
110
- if (quiet) {
111
- args.splice(quietIndex, 1);
112
- }
113
- // Logger that respects --quiet flag
114
- const log = (message) => {
115
- if (!quiet) {
116
- // Write to stderr so it doesn't interfere with Claude's output on stdout
117
- process.stderr.write(message + '\n');
118
- }
119
- };
120
- const logWarn = (message) => {
121
- // Warnings always show (but to stderr)
122
- process.stderr.write(message + '\n');
123
- };
124
- // Prompt is required (help case already handled above)
125
- if (args.length === 0) {
126
- console.error('Error: No prompt provided. Run with --help for usage.');
127
- process.exit(1);
128
- }
129
- // Join remaining args as prompt
130
- const prompt = args.join(' ');
131
- // Session ID for routing (single session demo)
132
- const sessionId = 'demo-session';
133
- // State for session resumption
134
- let currentClaudeSessionId = null;
135
- let isProcessing = false;
136
- // Active adapter for tracking question state
137
- let activeAdapter = null;
138
- // Create event router
139
- const router = new EventRouter();
140
- // Create terminal interface for dual-interface mode
141
- const terminalInterface = new TerminalInterface({
142
- router,
143
- sessionId,
144
- prompt: '> ',
145
- });
146
- // Create Telegram bot if credentials are provided
147
- let telegramBot = null;
148
- if (env.hasTelegram) {
149
- telegramBot = new TelegramBot({
150
- token: env.telegramBotToken,
151
- allowedUserId: env.telegramUserId,
152
- });
153
- log('[TELEGRAM] Bot configured');
154
- }
155
- else {
156
- log('[TELEGRAM] Skipping - TELEGRAM_BOT_TOKEN or TELEGRAM_USER_ID not set');
157
- }
158
- // Wire up Telegram response handlers for session resumption
159
- if (telegramBot) {
160
- // Button click handler
161
- telegramBot.onCallback = (callbackSessionId, optionIndex) => {
162
- log(`[BRIDGE] Received button response: session=${callbackSessionId}, option=${optionIndex}`);
163
- router.publishInbound({
164
- sessionId: callbackSessionId,
165
- type: 'response',
166
- payload: { text: String(optionIndex), optionIndex },
167
- timestamp: Date.now(),
168
- source: 'telegram',
169
- });
170
- };
171
- // Text message handler
172
- telegramBot.onTextMessage = async (textSessionId, text) => {
173
- log(`[BRIDGE] Received text response: session=${textSessionId}`);
174
- // For GSD commands without active session, use the demo session
175
- const effectiveSessionId = textSessionId === 'telegram-gsd' ? sessionId : textSessionId;
176
- try {
177
- router.publishInbound({
178
- sessionId: effectiveSessionId,
179
- type: 'response',
180
- payload: { text, optionIndex: undefined },
181
- timestamp: Date.now(),
182
- source: 'telegram',
183
- });
184
- }
185
- catch (error) {
186
- // Propagate errors back to Telegram
187
- const errorMessage = error instanceof Error ? error.message : String(error);
188
- log(`[BRIDGE] Error processing command: ${errorMessage}`);
189
- // Send error notification to Telegram
190
- await telegramBot.api.sendMessage(env.telegramUserId, `<b>Error:</b> ${telegramBot.escapeHtml(errorMessage)}`, { parse_mode: 'HTML' });
191
- }
192
- };
193
- }
194
- // Log router events
195
- router.on('sessionCreated', (id) => log(`[ROUTER] Session created: ${id}`));
196
- router.on('sessionDestroyed', (id) => log(`[ROUTER] Session destroyed: ${id}`));
197
- router.on('outbound', async (event) => {
198
- log(`[ROUTER] Outbound event: ${event.type} for session ${event.sessionId}`);
199
- // Send Telegram notification for prompt events (AskUserQuestion)
200
- if (event.type === 'prompt' && telegramBot) {
201
- const promptPayload = event.payload;
202
- await telegramBot.sendNotification({
203
- sessionId: event.sessionId,
204
- question: promptPayload.question,
205
- options: promptPayload.options,
206
- rawContext: promptPayload.rawContext,
207
- multiSelect: promptPayload.multiSelect,
208
- });
209
- // Mark session as awaiting input after sending notification
210
- telegramBot.setAwaitingInput(event.sessionId);
211
- }
212
- // Display prompt in terminal as well
213
- if (event.type === 'prompt') {
214
- const promptPayload = event.payload;
215
- // Convert PromptOption (index, text) -> QuestionOption (label, description)
216
- // PromptOption.text is already "Label - Description" format
217
- terminalInterface.displayQuestion(promptPayload.question, promptPayload.options.map(opt => ({
218
- label: opt.text, // Use full text as label (includes label - description)
219
- description: '', // Already included in label
220
- })), promptPayload.multiSelect ?? false);
221
- }
222
- // Send Telegram notification for completion events
223
- if (event.type === 'completion' && telegramBot) {
224
- const completionPayload = event.payload;
225
- await telegramBot.sendCompletionNotification({
226
- sessionId: event.sessionId,
227
- summary: completionPayload.summary,
228
- duration: completionPayload.duration,
229
- });
230
- }
231
- // Set terminal awaiting input after completion
232
- if (event.type === 'completion') {
233
- terminalInterface.setAwaitingInput(true);
234
- }
235
- });
236
- router.on('queueOverflow', (id, dir) => {
237
- logWarn(`[ROUTER] Queue overflow: ${dir} for session ${id}`);
238
- });
239
- /**
240
- * Wire a ClaudeProcess to EventAdapter and attach event handlers.
241
- * Used for both initial process and resumed processes.
242
- */
243
- function wireClaudeProcess(proc, routerRef, routeSessionId) {
244
- const adapter = new EventAdapter(proc, routerRef, routeSessionId);
245
- // Store active adapter for tracking question state
246
- activeAdapter = adapter;
247
- proc.on('init', (e) => {
248
- currentClaudeSessionId = e.sessionId;
249
- log(`[CLAUDE] Session started: ${e.sessionId}`);
250
- log(`[CLAUDE] Model: ${e.model}`);
251
- log(`[CLAUDE] Tools: ${e.tools.length} available`);
252
- });
253
- proc.on('text', (e) => {
254
- process.stdout.write(e.text);
255
- });
256
- proc.on('tool_use', (e) => {
257
- if (verbose) {
258
- log(`[CLAUDE] Using tool: ${e.name}`);
259
- }
260
- });
261
- proc.on('tool_result', (e) => {
262
- if (verbose) {
263
- const preview = e.result.slice(0, 100);
264
- log(`[CLAUDE] Tool result: ${preview}${e.result.length > 100 ? '...' : ''}`);
265
- }
266
- });
267
- proc.on('complete', (e) => {
268
- log(`\n[CLAUDE] Complete: cost=$${e.cost.toFixed(4)}, duration=${Math.round(e.duration / 1000)}s`);
269
- log(`[CLAUDE] Session ID for resume: ${e.sessionId}`);
270
- isProcessing = false;
271
- telegramBot?.clearAwaitingInput();
272
- });
273
- proc.on('error', async (e) => {
274
- console.error(`[CLAUDE] Error (${e.type}): ${e.message}`);
275
- if (e.details) {
276
- console.error('[CLAUDE] Details:', e.details);
277
- }
278
- isProcessing = false;
279
- telegramBot?.clearAwaitingInput();
280
- // Send error to Telegram
281
- if (telegramBot && env.telegramUserId) {
282
- await telegramBot.api.sendMessage(env.telegramUserId, `<b>Claude Error:</b> ${telegramBot.escapeHtml(e.message)}`, { parse_mode: 'HTML' });
283
- }
284
- });
285
- return adapter;
286
- }
287
- // Handle inbound responses with session resumption
288
- router.on('inbound', async (event) => {
289
- log(`[ROUTER] Inbound event: ${event.type} for session ${event.sessionId}`);
290
- if (event.type === 'response') {
291
- const payload = event.payload;
292
- log(`[BRIDGE] Processing response: "${payload.text.slice(0, 50)}..."`);
293
- // Reset question state when user responds (allows new questions in next turn)
294
- if (activeAdapter?.hasQuestion) {
295
- log('[BRIDGE] User responding to question - resetting question state');
296
- activeAdapter.reset();
297
- }
298
- // Skip if already processing a request
299
- if (isProcessing) {
300
- log('[BRIDGE] Already processing - skipping response');
301
- return;
302
- }
303
- // Create new ClaudeProcess with user's response as prompt
304
- // Use --resume to continue conversation if sessionId available
305
- const resumeProc = new ClaudeProcess({
306
- cwd: process.cwd(),
307
- prompt: payload.text,
308
- sessionId: currentClaudeSessionId || undefined, // Resume if available
309
- permissionMode: 'bypassPermissions',
310
- });
311
- // Wire EventAdapter for resumed process
312
- wireClaudeProcess(resumeProc, router, sessionId);
313
- isProcessing = true;
314
- log(`[BRIDGE] Starting resumed ClaudeProcess${currentClaudeSessionId ? ` with session ${currentClaudeSessionId}` : ' (new session)'}`);
315
- try {
316
- await resumeProc.start();
317
- log('[BRIDGE] Resumed ClaudeProcess completed');
318
- // Re-enable awaiting state for subsequent follow-ups
319
- telegramBot?.setAwaitingInput(sessionId);
320
- terminalInterface.setAwaitingInput(true);
321
- }
322
- catch (err) {
323
- console.error('[BRIDGE] Resume error:', err);
324
- isProcessing = false;
325
- telegramBot?.clearAwaitingInput();
326
- }
327
- }
328
- });
329
- // Bidirectional echo between interfaces
330
- router.on('inbound', (event) => {
331
- if (event.type !== 'response')
332
- return;
333
- const payload = event.payload;
334
- // Echo terminal responses to Telegram
335
- if (event.source === 'terminal' && telegramBot && env.telegramUserId) {
336
- telegramBot.api.sendMessage(env.telegramUserId, `<i>[Terminal] ${escapeHtml(payload.text)}</i>`, { parse_mode: 'HTML' }).catch(err => log(`[ECHO] Telegram send failed: ${err}`));
337
- }
338
- // Echo Telegram responses to terminal
339
- if (event.source === 'telegram') {
340
- terminalInterface.displayNotification(`[Telegram] ${payload.text}`);
341
- }
342
- });
343
- // Register session before spawning
344
- router.registerSession(sessionId);
345
- telegramBot?.registerSession(sessionId);
346
- log('Starting Claude CLI with stream-json output...');
347
- log(`Prompt: ${prompt.slice(0, 100)}${prompt.length > 100 ? '...' : ''}`);
348
- if (verbose) {
349
- log('Verbose mode: ON');
350
- }
351
- if (debug) {
352
- log('Debug mode: ON');
353
- }
354
- if (quiet) {
355
- log('Quiet mode: ON (bridge logs suppressed)');
356
- }
357
- // Create initial ClaudeProcess
358
- const claudeProc = new ClaudeProcess({
359
- cwd: process.cwd(),
360
- prompt,
361
- permissionMode: 'bypassPermissions',
362
- });
363
- // Wire EventAdapter and event handlers using shared helper
364
- const adapter = wireClaudeProcess(claudeProc, router, sessionId);
365
- isProcessing = true;
366
- // Start Telegram bot if configured (long polling runs in parallel)
367
- if (telegramBot) {
368
- telegramBot.start().catch((err) => {
369
- logWarn(`[TELEGRAM] Failed to start bot: ${err}`);
370
- });
371
- }
372
- // Start ClaudeProcess and keep running for multi-turn
373
- async function main() {
374
- try {
375
- await claudeProc.start();
376
- log('[CLAUDE] Initial process completed');
377
- // Mark both interfaces as awaiting input for follow-up messages
378
- telegramBot?.setAwaitingInput(sessionId);
379
- terminalInterface.setAwaitingInput(true);
380
- log('[BRIDGE] Waiting for follow-up via Telegram or Terminal...');
381
- log('[BRIDGE] Type response in terminal or use Telegram. Press Ctrl+C to exit');
382
- // Keep the process alive for multi-turn conversations
383
- // The process will continue running until user exits
384
- await new Promise((resolve) => {
385
- process.once('SIGINT', () => {
386
- log('[BRIDGE] Shutting down...');
387
- resolve();
388
- });
389
- process.once('SIGTERM', () => {
390
- log('[BRIDGE] Shutting down...');
391
- resolve();
392
- });
393
- });
394
- }
395
- catch (err) {
396
- console.error('[CLAUDE] Fatal error:', err);
397
- process.exit(1);
398
- }
399
- finally {
400
- // Cleanup
401
- terminalInterface.close();
402
- telegramBot?.unregisterSession(sessionId);
403
- router.unregisterSession(sessionId);
404
- // Store session ID for potential future resume
405
- const storedSessionId = adapter.lastSessionId;
406
- if (storedSessionId) {
407
- log(`[BRIDGE] Session stored for resume: ${storedSessionId}`);
408
- }
409
- // Give Telegram a moment to send any pending notifications
410
- await new Promise((resolve) => setTimeout(resolve, 500));
411
- process.exit(0);
412
- }
413
- }
414
- main();
415
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- import type { ParsedChunk } from './types.js';
2
- /**
3
- * Wrapper around strip-ansi that transforms raw PTY output
4
- * into ParsedChunk objects with both raw and cleaned text.
5
- *
6
- * Also handles additional terminal control sequences that strip-ansi may miss.
7
- *
8
- * Supports two modes:
9
- * 1. Instance methods (strip/parse): Buffered stripping for streaming chunks
10
- * 2. Static method (stripComplete): One-shot stripping for complete text
11
- */
12
- export declare class AnsiStripper {
13
- private static readonly OSC_PATTERN;
14
- private static readonly DCS_PATTERN;
15
- private static readonly CONTROL_CHARS;
16
- private static readonly INCOMPLETE_SEQUENCE;
17
- private pendingBuffer;
18
- /**
19
- * Check if text ends with an incomplete escape sequence
20
- */
21
- private hasIncompleteSequence;
22
- /**
23
- * Internal stripping logic (used by both instance and static methods)
24
- */
25
- private static doStrip;
26
- /**
27
- * Strip ANSI escape sequences and control characters from raw terminal output.
28
- * Buffers incomplete escape sequences across chunk boundaries.
29
- *
30
- * @param raw - Raw string potentially containing ANSI codes
31
- * @returns Cleaned string with ANSI codes and control characters removed
32
- */
33
- strip(raw: string): string;
34
- /**
35
- * Force-strip any remaining buffer (for session end)
36
- * @returns Any remaining buffered content, stripped
37
- */
38
- flush(): string;
39
- /**
40
- * Static method for one-shot stripping of complete text.
41
- * Does NOT use instance buffering - ideal for already-accumulated text.
42
- *
43
- * @param text - Complete text to strip (e.g., rawContext)
44
- * @returns Cleaned string with all ANSI codes removed
45
- */
46
- static stripComplete(text: string): string;
47
- /**
48
- * Create a ParsedChunk from raw terminal data
49
- * @param raw - Raw string from PTY onData event
50
- * @returns ParsedChunk with raw, text, and timestamp
51
- */
52
- parse(raw: string): ParsedChunk;
53
- }
54
- //# sourceMappingURL=AnsiStripper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnsiStripper.d.ts","sourceRoot":"","sources":["../../src/parser/AnsiStripper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;GASG;AACH,qBAAa,YAAY;IAGvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAwC;IAG3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA0B;IAI7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAuC;IAI5E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAGlE,OAAO,CAAC,aAAa,CAAM;IAE3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAyBtB;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAyB1B;;;OAGG;IACH,KAAK,IAAI,MAAM;IAMf;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1C;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;CAOhC"}
@@ -1,115 +0,0 @@
1
- import stripAnsi from 'strip-ansi';
2
- /**
3
- * Wrapper around strip-ansi that transforms raw PTY output
4
- * into ParsedChunk objects with both raw and cleaned text.
5
- *
6
- * Also handles additional terminal control sequences that strip-ansi may miss.
7
- *
8
- * Supports two modes:
9
- * 1. Instance methods (strip/parse): Buffered stripping for streaming chunks
10
- * 2. Static method (stripComplete): One-shot stripping for complete text
11
- */
12
- export class AnsiStripper {
13
- // Pattern to match OSC (Operating System Command) sequences
14
- // These are used for things like setting window title, hyperlinks, etc.
15
- static OSC_PATTERN = /\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g;
16
- // Pattern to match DCS (Device Control String) sequences
17
- static DCS_PATTERN = /\x1bP[^\x1b]*\x1b\\/g;
18
- // Pattern to match remaining control characters (except newline \n and tab \t)
19
- // This includes carriage return \r which can cause text overwriting issues
20
- static CONTROL_CHARS = /[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g;
21
- // Pattern to detect incomplete escape sequences at end of string
22
- // Matches: ESC alone, or ESC[ followed by digits/semicolons/colons without terminator
23
- static INCOMPLETE_SEQUENCE = /\x1b(\[[\d;:]*)?$/;
24
- // Buffer for incomplete escape sequences across chunks
25
- pendingBuffer = '';
26
- /**
27
- * Check if text ends with an incomplete escape sequence
28
- */
29
- hasIncompleteSequence(text) {
30
- return AnsiStripper.INCOMPLETE_SEQUENCE.test(text);
31
- }
32
- /**
33
- * Internal stripping logic (used by both instance and static methods)
34
- */
35
- static doStrip(text) {
36
- let cleaned = text;
37
- // First pass: strip ANSI sequences with strip-ansi
38
- cleaned = stripAnsi(cleaned);
39
- // Second pass: remove OSC sequences (strip-ansi might miss some)
40
- cleaned = cleaned.replace(AnsiStripper.OSC_PATTERN, '');
41
- // Third pass: remove DCS sequences
42
- cleaned = cleaned.replace(AnsiStripper.DCS_PATTERN, '');
43
- // Fourth pass: remove remaining control characters
44
- // Keep \n (newline) and \t (tab) but remove \r (carriage return) etc.
45
- cleaned = cleaned.replace(AnsiStripper.CONTROL_CHARS, '');
46
- // Handle carriage return:
47
- // - \r\n is a normal line ending, convert to \n
48
- // - \r followed by text (not \n) means "overwrite", so remove text before \r
49
- cleaned = cleaned.replace(/\r\n/g, '\n'); // Normalize line endings first
50
- cleaned = cleaned.replace(/[^\n]*\r/g, ''); // Now handle actual overwrites
51
- return cleaned;
52
- }
53
- /**
54
- * Strip ANSI escape sequences and control characters from raw terminal output.
55
- * Buffers incomplete escape sequences across chunk boundaries.
56
- *
57
- * @param raw - Raw string potentially containing ANSI codes
58
- * @returns Cleaned string with ANSI codes and control characters removed
59
- */
60
- strip(raw) {
61
- // Prepend any pending buffer from previous chunk
62
- const combined = this.pendingBuffer + raw;
63
- this.pendingBuffer = '';
64
- // Check if combined text has incomplete sequence at end
65
- if (this.hasIncompleteSequence(combined)) {
66
- // Find last newline - ANSI sequences don't span lines
67
- const lastNewlineIdx = combined.lastIndexOf('\n');
68
- if (lastNewlineIdx !== -1) {
69
- // Split at newline: strip complete portion, buffer remainder
70
- const completePortion = combined.slice(0, lastNewlineIdx + 1);
71
- this.pendingBuffer = combined.slice(lastNewlineIdx + 1);
72
- return AnsiStripper.doStrip(completePortion);
73
- }
74
- else {
75
- // No newline - buffer entire string
76
- this.pendingBuffer = combined;
77
- return '';
78
- }
79
- }
80
- // No incomplete sequence - strip everything
81
- return AnsiStripper.doStrip(combined);
82
- }
83
- /**
84
- * Force-strip any remaining buffer (for session end)
85
- * @returns Any remaining buffered content, stripped
86
- */
87
- flush() {
88
- const remaining = this.pendingBuffer;
89
- this.pendingBuffer = '';
90
- return remaining ? AnsiStripper.doStrip(remaining) : '';
91
- }
92
- /**
93
- * Static method for one-shot stripping of complete text.
94
- * Does NOT use instance buffering - ideal for already-accumulated text.
95
- *
96
- * @param text - Complete text to strip (e.g., rawContext)
97
- * @returns Cleaned string with all ANSI codes removed
98
- */
99
- static stripComplete(text) {
100
- return AnsiStripper.doStrip(text);
101
- }
102
- /**
103
- * Create a ParsedChunk from raw terminal data
104
- * @param raw - Raw string from PTY onData event
105
- * @returns ParsedChunk with raw, text, and timestamp
106
- */
107
- parse(raw) {
108
- return {
109
- raw,
110
- text: this.strip(raw),
111
- timestamp: Date.now(),
112
- };
113
- }
114
- }
115
- //# sourceMappingURL=AnsiStripper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnsiStripper.js","sourceRoot":"","sources":["../../src/parser/AnsiStripper.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAY;IACvB,4DAA4D;IAC5D,wEAAwE;IAChE,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAC;IAE3E,yDAAyD;IACjD,MAAM,CAAU,WAAW,GAAG,sBAAsB,CAAC;IAE7D,+EAA+E;IAC/E,2EAA2E;IACnE,MAAM,CAAU,aAAa,GAAG,mCAAmC,CAAC;IAE5E,iEAAiE;IACjE,sFAAsF;IAC9E,MAAM,CAAU,mBAAmB,GAAG,mBAAmB,CAAC;IAElE,uDAAuD;IAC/C,aAAa,GAAG,EAAE,CAAC;IAE3B;;OAEG;IACK,qBAAqB,CAAC,IAAY;QACxC,OAAO,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,OAAO,CAAC,IAAY;QACjC,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,mDAAmD;QACnD,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAE7B,iEAAiE;QACjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExD,mCAAmC;QACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAExD,mDAAmD;QACnD,sEAAsE;QACtE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAE1D,0BAA0B;QAC1B,gDAAgD;QAChD,6EAA6E;QAC7E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAE,+BAA+B;QAC1E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,+BAA+B;QAE3E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAW;QACf,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAExB,wDAAwD;QACxD,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,sDAAsD;YACtD,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,6DAA6D;gBAC7D,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;gBAC9D,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACxD,OAAO,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;gBAC9B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,IAAY;QAC/B,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAW;QACf,OAAO;YACL,GAAG;YACH,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;IACJ,CAAC"}
@@ -1,31 +0,0 @@
1
- import type { PromptOption } from './types.js';
2
- /**
3
- * Extracts numbered options from Claude Code prompt output.
4
- * Handles various formats: "1. Text", "> 1. Text", "❯ 1. Text"
5
- * Also handles TUI-style output where options may not be on separate lines.
6
- */
7
- export declare class OptionExtractor {
8
- private static readonly OPTION_PATTERN;
9
- private static readonly GLOBAL_OPTION_PATTERN;
10
- /**
11
- * Extract all options from text.
12
- * First tries line-by-line extraction, then falls back to global pattern.
13
- * @param text - Cleaned text (ANSI stripped)
14
- * @returns Array of PromptOption, empty if no options found
15
- */
16
- extract(text: string): PromptOption[];
17
- /**
18
- * Extract options line by line (original approach).
19
- */
20
- private extractFromLines;
21
- /**
22
- * Extract options using global regex (for TUI output without proper line breaks).
23
- */
24
- private extractGlobal;
25
- /**
26
- * Check if text contains any extractable options.
27
- * @param text - Cleaned text (ANSI stripped)
28
- */
29
- hasOptions(text: string): boolean;
30
- }
31
- //# sourceMappingURL=OptionExtractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OptionExtractor.d.ts","sourceRoot":"","sources":["../../src/parser/OptionExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,qBAAa,eAAe;IAG1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAKzE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CACyC;IAEtF;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE;IAWrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAWlC"}