claude-telegram-mirror 0.1.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.
Files changed (99) hide show
  1. package/README.md +331 -0
  2. package/dist/bot/commands.d.ts +41 -0
  3. package/dist/bot/commands.d.ts.map +1 -0
  4. package/dist/bot/commands.js +231 -0
  5. package/dist/bot/commands.js.map +1 -0
  6. package/dist/bot/formatting.d.ts +62 -0
  7. package/dist/bot/formatting.d.ts.map +1 -0
  8. package/dist/bot/formatting.js +295 -0
  9. package/dist/bot/formatting.js.map +1 -0
  10. package/dist/bot/telegram.d.ts +93 -0
  11. package/dist/bot/telegram.d.ts.map +1 -0
  12. package/dist/bot/telegram.js +378 -0
  13. package/dist/bot/telegram.js.map +1 -0
  14. package/dist/bot/types.d.ts +28 -0
  15. package/dist/bot/types.d.ts.map +1 -0
  16. package/dist/bot/types.js +5 -0
  17. package/dist/bot/types.js.map +1 -0
  18. package/dist/bridge/daemon.d.ts +93 -0
  19. package/dist/bridge/daemon.d.ts.map +1 -0
  20. package/dist/bridge/daemon.js +626 -0
  21. package/dist/bridge/daemon.js.map +1 -0
  22. package/dist/bridge/index.d.ts +10 -0
  23. package/dist/bridge/index.d.ts.map +1 -0
  24. package/dist/bridge/index.js +9 -0
  25. package/dist/bridge/index.js.map +1 -0
  26. package/dist/bridge/injector.d.ts +97 -0
  27. package/dist/bridge/injector.d.ts.map +1 -0
  28. package/dist/bridge/injector.js +289 -0
  29. package/dist/bridge/injector.js.map +1 -0
  30. package/dist/bridge/session.d.ts +108 -0
  31. package/dist/bridge/session.d.ts.map +1 -0
  32. package/dist/bridge/session.js +381 -0
  33. package/dist/bridge/session.js.map +1 -0
  34. package/dist/bridge/socket.d.ts +97 -0
  35. package/dist/bridge/socket.d.ts.map +1 -0
  36. package/dist/bridge/socket.js +436 -0
  37. package/dist/bridge/socket.js.map +1 -0
  38. package/dist/bridge/types.d.ts +38 -0
  39. package/dist/bridge/types.d.ts.map +1 -0
  40. package/dist/bridge/types.js +5 -0
  41. package/dist/bridge/types.js.map +1 -0
  42. package/dist/cli.d.ts +7 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +332 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/hooks/handler.d.ts +94 -0
  47. package/dist/hooks/handler.d.ts.map +1 -0
  48. package/dist/hooks/handler.js +431 -0
  49. package/dist/hooks/handler.js.map +1 -0
  50. package/dist/hooks/index.d.ts +8 -0
  51. package/dist/hooks/index.d.ts.map +1 -0
  52. package/dist/hooks/index.js +7 -0
  53. package/dist/hooks/index.js.map +1 -0
  54. package/dist/hooks/installer.d.ts +46 -0
  55. package/dist/hooks/installer.d.ts.map +1 -0
  56. package/dist/hooks/installer.js +317 -0
  57. package/dist/hooks/installer.js.map +1 -0
  58. package/dist/hooks/types.d.ts +88 -0
  59. package/dist/hooks/types.d.ts.map +1 -0
  60. package/dist/hooks/types.js +6 -0
  61. package/dist/hooks/types.js.map +1 -0
  62. package/dist/index.d.ts +19 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +20 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/service/doctor.d.ts +10 -0
  67. package/dist/service/doctor.d.ts.map +1 -0
  68. package/dist/service/doctor.js +424 -0
  69. package/dist/service/doctor.js.map +1 -0
  70. package/dist/service/manager.d.ts +48 -0
  71. package/dist/service/manager.d.ts.map +1 -0
  72. package/dist/service/manager.js +584 -0
  73. package/dist/service/manager.js.map +1 -0
  74. package/dist/service/setup.d.ts +10 -0
  75. package/dist/service/setup.d.ts.map +1 -0
  76. package/dist/service/setup.js +266 -0
  77. package/dist/service/setup.js.map +1 -0
  78. package/dist/utils/chunker.d.ts +24 -0
  79. package/dist/utils/chunker.d.ts.map +1 -0
  80. package/dist/utils/chunker.js +123 -0
  81. package/dist/utils/chunker.js.map +1 -0
  82. package/dist/utils/config.d.ts +48 -0
  83. package/dist/utils/config.d.ts.map +1 -0
  84. package/dist/utils/config.js +154 -0
  85. package/dist/utils/config.js.map +1 -0
  86. package/dist/utils/logger.d.ts +7 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +28 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/package.json +88 -0
  91. package/postinstall.cjs +76 -0
  92. package/scripts/claude-wrapper.sh +122 -0
  93. package/scripts/doctor.sh +433 -0
  94. package/scripts/get-chat-id.sh +64 -0
  95. package/scripts/global-hooks.sh +39 -0
  96. package/scripts/install.sh +831 -0
  97. package/scripts/start-daemon.sh +49 -0
  98. package/scripts/telegram-hook.sh +449 -0
  99. package/scripts/uninstall.sh +261 -0
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Doctor Command - Diagnostic tool for troubleshooting
3
+ * Checks all components and reports issues
4
+ */
5
+ import { existsSync, readFileSync, statSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { homedir, hostname, platform, arch } from 'os';
8
+ import { execSync } from 'child_process';
9
+ // ANSI color codes
10
+ const colors = {
11
+ reset: '\x1b[0m',
12
+ bold: '\x1b[1m',
13
+ dim: '\x1b[2m',
14
+ cyan: '\x1b[36m',
15
+ green: '\x1b[32m',
16
+ yellow: '\x1b[33m',
17
+ red: '\x1b[31m',
18
+ blue: '\x1b[34m',
19
+ gray: '\x1b[90m',
20
+ };
21
+ function cyan(text) { return `${colors.cyan}${text}${colors.reset}`; }
22
+ function green(text) { return `${colors.green}${text}${colors.reset}`; }
23
+ function yellow(text) { return `${colors.yellow}${text}${colors.reset}`; }
24
+ function red(text) { return `${colors.red}${text}${colors.reset}`; }
25
+ function gray(text) { return `${colors.gray}${text}${colors.reset}`; }
26
+ function bold(text) { return `${colors.bold}${text}${colors.reset}`; }
27
+ const CONFIG_DIR = join(homedir(), '.config', 'claude-telegram-mirror');
28
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
29
+ const SOCKET_PATH = join(CONFIG_DIR, 'bridge.sock');
30
+ const CLAUDE_SETTINGS = join(homedir(), '.claude', 'settings.json');
31
+ /**
32
+ * Check if systemd service is installed and running
33
+ */
34
+ function checkSystemdService() {
35
+ const serviceFile = join(homedir(), '.config', 'systemd', 'user', 'claude-telegram-mirror.service');
36
+ if (!existsSync(serviceFile)) {
37
+ return {
38
+ name: 'Systemd Service',
39
+ status: 'warn',
40
+ message: 'Service not installed',
41
+ details: 'Run: ctm service install'
42
+ };
43
+ }
44
+ try {
45
+ const status = execSync('systemctl --user is-active claude-telegram-mirror 2>/dev/null', {
46
+ encoding: 'utf8'
47
+ }).trim();
48
+ if (status === 'active') {
49
+ return {
50
+ name: 'Systemd Service',
51
+ status: 'pass',
52
+ message: 'Running'
53
+ };
54
+ }
55
+ return {
56
+ name: 'Systemd Service',
57
+ status: 'warn',
58
+ message: `Status: ${status}`,
59
+ details: 'Run: ctm service start'
60
+ };
61
+ }
62
+ catch {
63
+ return {
64
+ name: 'Systemd Service',
65
+ status: 'warn',
66
+ message: 'Installed but not running',
67
+ details: 'Run: ctm service start'
68
+ };
69
+ }
70
+ }
71
+ /**
72
+ * Check configuration file
73
+ */
74
+ function checkConfig() {
75
+ if (!existsSync(CONFIG_FILE)) {
76
+ // Check env vars
77
+ if (process.env.TELEGRAM_BOT_TOKEN && process.env.TELEGRAM_CHAT_ID) {
78
+ return {
79
+ name: 'Configuration',
80
+ status: 'pass',
81
+ message: 'Using environment variables'
82
+ };
83
+ }
84
+ return {
85
+ name: 'Configuration',
86
+ status: 'fail',
87
+ message: 'No config file or env vars found',
88
+ details: 'Run: ctm setup'
89
+ };
90
+ }
91
+ try {
92
+ const config = JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
93
+ if (!config.botToken) {
94
+ return {
95
+ name: 'Configuration',
96
+ status: 'fail',
97
+ message: 'Missing botToken in config',
98
+ details: 'Run: ctm setup'
99
+ };
100
+ }
101
+ if (!config.chatId) {
102
+ return {
103
+ name: 'Configuration',
104
+ status: 'fail',
105
+ message: 'Missing chatId in config',
106
+ details: 'Run: ctm setup'
107
+ };
108
+ }
109
+ return {
110
+ name: 'Configuration',
111
+ status: 'pass',
112
+ message: 'Valid config file',
113
+ details: CONFIG_FILE
114
+ };
115
+ }
116
+ catch (error) {
117
+ return {
118
+ name: 'Configuration',
119
+ status: 'fail',
120
+ message: 'Invalid config file',
121
+ details: error.message
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * Check Telegram connection
127
+ */
128
+ async function checkTelegram() {
129
+ let token = process.env.TELEGRAM_BOT_TOKEN;
130
+ if (!token && existsSync(CONFIG_FILE)) {
131
+ try {
132
+ const config = JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
133
+ token = config.botToken;
134
+ }
135
+ catch {
136
+ // Ignore
137
+ }
138
+ }
139
+ if (!token) {
140
+ return {
141
+ name: 'Telegram API',
142
+ status: 'fail',
143
+ message: 'No bot token configured'
144
+ };
145
+ }
146
+ try {
147
+ const response = await fetch(`https://api.telegram.org/bot${token}/getMe`);
148
+ const data = await response.json();
149
+ if (data.ok) {
150
+ return {
151
+ name: 'Telegram API',
152
+ status: 'pass',
153
+ message: `Connected as @${data.result?.username}`
154
+ };
155
+ }
156
+ return {
157
+ name: 'Telegram API',
158
+ status: 'fail',
159
+ message: 'Invalid bot token'
160
+ };
161
+ }
162
+ catch (error) {
163
+ return {
164
+ name: 'Telegram API',
165
+ status: 'fail',
166
+ message: 'Network error',
167
+ details: error.message
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Check Claude Code hooks
173
+ */
174
+ function checkHooks() {
175
+ if (!existsSync(CLAUDE_SETTINGS)) {
176
+ return {
177
+ name: 'Claude Code Hooks',
178
+ status: 'warn',
179
+ message: 'Claude settings not found',
180
+ details: 'Run: ctm install-hooks'
181
+ };
182
+ }
183
+ try {
184
+ const settings = JSON.parse(readFileSync(CLAUDE_SETTINGS, 'utf-8'));
185
+ const hooks = settings.hooks || {};
186
+ const hasPreTool = hooks.PreToolUse?.some((h) => h.command?.includes('telegram-hook'));
187
+ const hasPostTool = hooks.PostToolUse?.some((h) => h.command?.includes('telegram-hook'));
188
+ const hasNotify = hooks.Notification?.some((h) => h.command?.includes('telegram-hook'));
189
+ const installed = [hasPreTool, hasPostTool, hasNotify].filter(Boolean).length;
190
+ if (installed === 3) {
191
+ return {
192
+ name: 'Claude Code Hooks',
193
+ status: 'pass',
194
+ message: 'All hooks installed'
195
+ };
196
+ }
197
+ if (installed > 0) {
198
+ return {
199
+ name: 'Claude Code Hooks',
200
+ status: 'warn',
201
+ message: `${installed}/3 hooks installed`,
202
+ details: 'Run: ctm install-hooks -f'
203
+ };
204
+ }
205
+ return {
206
+ name: 'Claude Code Hooks',
207
+ status: 'warn',
208
+ message: 'No hooks installed',
209
+ details: 'Run: ctm install-hooks'
210
+ };
211
+ }
212
+ catch (error) {
213
+ return {
214
+ name: 'Claude Code Hooks',
215
+ status: 'fail',
216
+ message: 'Error reading Claude settings',
217
+ details: error.message
218
+ };
219
+ }
220
+ }
221
+ /**
222
+ * Check socket file
223
+ */
224
+ function checkSocket() {
225
+ if (!existsSync(SOCKET_PATH)) {
226
+ return {
227
+ name: 'Bridge Socket',
228
+ status: 'warn',
229
+ message: 'Socket not found (daemon not running?)',
230
+ details: 'Run: ctm start'
231
+ };
232
+ }
233
+ try {
234
+ const stats = statSync(SOCKET_PATH);
235
+ if (stats.isSocket()) {
236
+ return {
237
+ name: 'Bridge Socket',
238
+ status: 'pass',
239
+ message: 'Socket exists',
240
+ details: SOCKET_PATH
241
+ };
242
+ }
243
+ return {
244
+ name: 'Bridge Socket',
245
+ status: 'fail',
246
+ message: 'Path exists but is not a socket'
247
+ };
248
+ }
249
+ catch (error) {
250
+ return {
251
+ name: 'Bridge Socket',
252
+ status: 'fail',
253
+ message: 'Error checking socket',
254
+ details: error.message
255
+ };
256
+ }
257
+ }
258
+ /**
259
+ * Check tmux availability (for input injection)
260
+ */
261
+ function checkTmux() {
262
+ try {
263
+ execSync('which tmux', { stdio: 'pipe' });
264
+ // Check if TMUX env is set (running inside tmux)
265
+ if (process.env.TMUX) {
266
+ return {
267
+ name: 'Tmux',
268
+ status: 'pass',
269
+ message: 'Available and active',
270
+ details: 'Input injection will work'
271
+ };
272
+ }
273
+ // Check for any tmux sessions
274
+ try {
275
+ const sessions = execSync('tmux list-sessions 2>/dev/null', { encoding: 'utf8' });
276
+ const count = sessions.trim().split('\n').length;
277
+ return {
278
+ name: 'Tmux',
279
+ status: 'pass',
280
+ message: `Available (${count} session${count === 1 ? '' : 's'})`,
281
+ details: 'Input injection available'
282
+ };
283
+ }
284
+ catch {
285
+ return {
286
+ name: 'Tmux',
287
+ status: 'warn',
288
+ message: 'Available but no sessions',
289
+ details: 'Start Claude Code in tmux for input injection'
290
+ };
291
+ }
292
+ }
293
+ catch {
294
+ return {
295
+ name: 'Tmux',
296
+ status: 'warn',
297
+ message: 'Not installed',
298
+ details: 'Install tmux for Telegram → CLI input injection'
299
+ };
300
+ }
301
+ }
302
+ /**
303
+ * Check Node.js version
304
+ */
305
+ function checkNodeVersion() {
306
+ const version = process.version;
307
+ const major = parseInt(version.slice(1).split('.')[0], 10);
308
+ if (major >= 18) {
309
+ return {
310
+ name: 'Node.js',
311
+ status: 'pass',
312
+ message: `Version ${version}`
313
+ };
314
+ }
315
+ return {
316
+ name: 'Node.js',
317
+ status: 'fail',
318
+ message: `Version ${version} (requires >=18)`,
319
+ details: 'Update Node.js to version 18 or later'
320
+ };
321
+ }
322
+ /**
323
+ * Print check result
324
+ */
325
+ function printResult(result) {
326
+ const icons = {
327
+ pass: green('✓'),
328
+ warn: yellow('⚠'),
329
+ fail: red('✗'),
330
+ };
331
+ const statusColors = {
332
+ pass: green,
333
+ warn: yellow,
334
+ fail: red,
335
+ };
336
+ console.log(` ${icons[result.status]} ${bold(result.name)}: ${statusColors[result.status](result.message)}`);
337
+ if (result.details) {
338
+ console.log(` ${gray(result.details)}`);
339
+ }
340
+ }
341
+ /**
342
+ * Run all diagnostic checks
343
+ */
344
+ export async function runDoctor() {
345
+ console.log('');
346
+ console.log(cyan('╔════════════════════════════════════════════════════════════╗'));
347
+ console.log(cyan('║') + bold(' Claude Telegram Mirror - Diagnostics ') + cyan('║'));
348
+ console.log(cyan('╚════════════════════════════════════════════════════════════╝'));
349
+ console.log('');
350
+ // System info
351
+ console.log(gray('─'.repeat(60)));
352
+ console.log(bold('System Information'));
353
+ console.log(gray('─'.repeat(60)));
354
+ console.log(` Hostname: ${cyan(hostname())}`);
355
+ console.log(` Platform: ${cyan(`${platform()} ${arch()}`)}`);
356
+ console.log(` Node.js: ${cyan(process.version)}`);
357
+ console.log('');
358
+ // Run checks
359
+ console.log(gray('─'.repeat(60)));
360
+ console.log(bold('Checks'));
361
+ console.log(gray('─'.repeat(60)));
362
+ console.log('');
363
+ const checks = [];
364
+ // Synchronous checks
365
+ checks.push(checkNodeVersion());
366
+ checks.push(checkConfig());
367
+ checks.push(checkHooks());
368
+ checks.push(checkSocket());
369
+ checks.push(checkTmux());
370
+ if (platform() === 'linux') {
371
+ checks.push(checkSystemdService());
372
+ }
373
+ // Async checks
374
+ checks.push(await checkTelegram());
375
+ // Print all results
376
+ for (const result of checks) {
377
+ printResult(result);
378
+ }
379
+ console.log('');
380
+ // Summary
381
+ const passed = checks.filter(c => c.status === 'pass').length;
382
+ const warnings = checks.filter(c => c.status === 'warn').length;
383
+ const failed = checks.filter(c => c.status === 'fail').length;
384
+ console.log(gray('─'.repeat(60)));
385
+ console.log(bold('Summary'));
386
+ console.log(gray('─'.repeat(60)));
387
+ if (failed === 0 && warnings === 0) {
388
+ console.log(green(' ✓ All checks passed! Everything looks good.'));
389
+ }
390
+ else {
391
+ console.log(` ${green(passed.toString())} passed, ${yellow(warnings.toString())} warnings, ${red(failed.toString())} failed`);
392
+ if (failed > 0) {
393
+ console.log('');
394
+ console.log(red(' Some checks failed. Review the errors above.'));
395
+ }
396
+ }
397
+ console.log('');
398
+ // Quick actions
399
+ if (failed > 0 || warnings > 0) {
400
+ console.log(gray('─'.repeat(60)));
401
+ console.log(bold('Suggested Actions'));
402
+ console.log(gray('─'.repeat(60)));
403
+ const configCheck = checks.find(c => c.name === 'Configuration');
404
+ if (configCheck?.status === 'fail') {
405
+ console.log(` ${cyan('ctm setup')} Run interactive setup`);
406
+ }
407
+ const hooksCheck = checks.find(c => c.name === 'Claude Code Hooks');
408
+ if (hooksCheck?.status !== 'pass') {
409
+ console.log(` ${cyan('ctm install-hooks')} Install Claude Code hooks`);
410
+ }
411
+ const serviceCheck = checks.find(c => c.name === 'Systemd Service');
412
+ if (serviceCheck?.status !== 'pass') {
413
+ console.log(` ${cyan('ctm service install')} Install systemd service`);
414
+ console.log(` ${cyan('ctm service start')} Start the service`);
415
+ }
416
+ const socketCheck = checks.find(c => c.name === 'Bridge Socket');
417
+ if (socketCheck?.status !== 'pass') {
418
+ console.log(` ${cyan('ctm start')} Start the daemon`);
419
+ }
420
+ console.log('');
421
+ }
422
+ }
423
+ export default runDoctor;
424
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/service/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Service Manager
3
+ * Handles systemd (Linux) and launchd (macOS) service installation
4
+ */
5
+ /**
6
+ * Install the service
7
+ */
8
+ export declare function installService(): {
9
+ success: boolean;
10
+ message: string;
11
+ };
12
+ /**
13
+ * Uninstall the service
14
+ */
15
+ export declare function uninstallService(): {
16
+ success: boolean;
17
+ message: string;
18
+ };
19
+ /**
20
+ * Get service status
21
+ */
22
+ export declare function getServiceStatus(): {
23
+ running: boolean;
24
+ enabled: boolean;
25
+ info: string;
26
+ };
27
+ /**
28
+ * Start the service
29
+ */
30
+ export declare function startService(): {
31
+ success: boolean;
32
+ message: string;
33
+ };
34
+ /**
35
+ * Stop the service
36
+ */
37
+ export declare function stopService(): {
38
+ success: boolean;
39
+ message: string;
40
+ };
41
+ /**
42
+ * Restart the service
43
+ */
44
+ export declare function restartService(): {
45
+ success: boolean;
46
+ message: string;
47
+ };
48
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/service/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyRH;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmBtE;AAuFD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAWxE;AAgED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAYvF;AAyDD;;GAEG;AACH,wBAAgB,YAAY,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAuBpE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiBnE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CActE"}