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.
- package/README.md +331 -0
- package/dist/bot/commands.d.ts +41 -0
- package/dist/bot/commands.d.ts.map +1 -0
- package/dist/bot/commands.js +231 -0
- package/dist/bot/commands.js.map +1 -0
- package/dist/bot/formatting.d.ts +62 -0
- package/dist/bot/formatting.d.ts.map +1 -0
- package/dist/bot/formatting.js +295 -0
- package/dist/bot/formatting.js.map +1 -0
- package/dist/bot/telegram.d.ts +93 -0
- package/dist/bot/telegram.d.ts.map +1 -0
- package/dist/bot/telegram.js +378 -0
- package/dist/bot/telegram.js.map +1 -0
- package/dist/bot/types.d.ts +28 -0
- package/dist/bot/types.d.ts.map +1 -0
- package/dist/bot/types.js +5 -0
- package/dist/bot/types.js.map +1 -0
- package/dist/bridge/daemon.d.ts +93 -0
- package/dist/bridge/daemon.d.ts.map +1 -0
- package/dist/bridge/daemon.js +626 -0
- package/dist/bridge/daemon.js.map +1 -0
- package/dist/bridge/index.d.ts +10 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +9 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/injector.d.ts +97 -0
- package/dist/bridge/injector.d.ts.map +1 -0
- package/dist/bridge/injector.js +289 -0
- package/dist/bridge/injector.js.map +1 -0
- package/dist/bridge/session.d.ts +108 -0
- package/dist/bridge/session.d.ts.map +1 -0
- package/dist/bridge/session.js +381 -0
- package/dist/bridge/session.js.map +1 -0
- package/dist/bridge/socket.d.ts +97 -0
- package/dist/bridge/socket.d.ts.map +1 -0
- package/dist/bridge/socket.js +436 -0
- package/dist/bridge/socket.js.map +1 -0
- package/dist/bridge/types.d.ts +38 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +5 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +332 -0
- package/dist/cli.js.map +1 -0
- package/dist/hooks/handler.d.ts +94 -0
- package/dist/hooks/handler.d.ts.map +1 -0
- package/dist/hooks/handler.js +431 -0
- package/dist/hooks/handler.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/installer.d.ts +46 -0
- package/dist/hooks/installer.d.ts.map +1 -0
- package/dist/hooks/installer.js +317 -0
- package/dist/hooks/installer.js.map +1 -0
- package/dist/hooks/types.d.ts +88 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +6 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/service/doctor.d.ts +10 -0
- package/dist/service/doctor.d.ts.map +1 -0
- package/dist/service/doctor.js +424 -0
- package/dist/service/doctor.js.map +1 -0
- package/dist/service/manager.d.ts +48 -0
- package/dist/service/manager.d.ts.map +1 -0
- package/dist/service/manager.js +584 -0
- package/dist/service/manager.js.map +1 -0
- package/dist/service/setup.d.ts +10 -0
- package/dist/service/setup.d.ts.map +1 -0
- package/dist/service/setup.js +266 -0
- package/dist/service/setup.js.map +1 -0
- package/dist/utils/chunker.d.ts +24 -0
- package/dist/utils/chunker.d.ts.map +1 -0
- package/dist/utils/chunker.js +123 -0
- package/dist/utils/chunker.js.map +1 -0
- package/dist/utils/config.d.ts +48 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +154 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +88 -0
- package/postinstall.cjs +76 -0
- package/scripts/claude-wrapper.sh +122 -0
- package/scripts/doctor.sh +433 -0
- package/scripts/get-chat-id.sh +64 -0
- package/scripts/global-hooks.sh +39 -0
- package/scripts/install.sh +831 -0
- package/scripts/start-daemon.sh +49 -0
- package/scripts/telegram-hook.sh +449 -0
- package/scripts/uninstall.sh +261 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAS9B,eAAO,MAAM,MAAM,gBAejB,CAAC;AAWH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Configuration
|
|
3
|
+
*/
|
|
4
|
+
import winston from 'winston';
|
|
5
|
+
const { combine, timestamp, printf, colorize } = winston.format;
|
|
6
|
+
const logFormat = printf(({ level, message, timestamp, ...meta }) => {
|
|
7
|
+
const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
|
|
8
|
+
return `${timestamp} [${level}]: ${message}${metaStr}`;
|
|
9
|
+
});
|
|
10
|
+
export const logger = winston.createLogger({
|
|
11
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
12
|
+
format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat),
|
|
13
|
+
transports: [
|
|
14
|
+
new winston.transports.Console({
|
|
15
|
+
format: combine(colorize(), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat)
|
|
16
|
+
})
|
|
17
|
+
]
|
|
18
|
+
});
|
|
19
|
+
// Add file transport in production
|
|
20
|
+
if (process.env.NODE_ENV === 'production') {
|
|
21
|
+
logger.add(new winston.transports.File({
|
|
22
|
+
filename: '/tmp/claude-telegram-mirror.log',
|
|
23
|
+
maxsize: 5242880, // 5MB
|
|
24
|
+
maxFiles: 3
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
export default logger;
|
|
28
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;AAEhE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,OAAO,GAAG,SAAS,KAAK,KAAK,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,OAAO,CACb,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAC5C,SAAS,CACV;IACD,UAAU,EAAE;QACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,OAAO,CACb,QAAQ,EAAE,EACV,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAC5C,SAAS,CACV;SACF,CAAC;KACH;CACF,CAAC,CAAC;AAEH,mCAAmC;AACnC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QACrC,QAAQ,EAAE,iCAAiC;QAC3C,OAAO,EAAE,OAAO,EAAE,MAAM;QACxB,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,eAAe,MAAM,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-telegram-mirror",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Bidirectional Telegram integration for Claude Code CLI - monitor and control your Claude Code sessions from Telegram",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"claude-telegram-mirror": "./dist/cli.js",
|
|
9
|
+
"ctm": "./dist/cli.js",
|
|
10
|
+
"telegram-hook": "./scripts/telegram-hook.sh"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"dev": "tsc --watch",
|
|
15
|
+
"start": "node dist/cli.js start",
|
|
16
|
+
"daemon": "node dist/cli.js start --foreground",
|
|
17
|
+
"status": "node dist/cli.js status",
|
|
18
|
+
"install-hooks": "node dist/cli.js install-hooks",
|
|
19
|
+
"uninstall-hooks": "node dist/cli.js uninstall-hooks",
|
|
20
|
+
"test": "vitest",
|
|
21
|
+
"test:coverage": "vitest --coverage",
|
|
22
|
+
"lint": "eslint src/",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"postinstall": "node postinstall.cjs",
|
|
25
|
+
"prepublishOnly": "npm run build && npm run test"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist/",
|
|
29
|
+
"scripts/",
|
|
30
|
+
"postinstall.cjs",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"keywords": [
|
|
34
|
+
"claude",
|
|
35
|
+
"telegram",
|
|
36
|
+
"cli",
|
|
37
|
+
"mirror",
|
|
38
|
+
"bot",
|
|
39
|
+
"claude-code",
|
|
40
|
+
"anthropic",
|
|
41
|
+
"ai",
|
|
42
|
+
"automation",
|
|
43
|
+
"remote-control",
|
|
44
|
+
"mobile"
|
|
45
|
+
],
|
|
46
|
+
"author": "Robert E. Lee <robert@agidreams.us>",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"homepage": "https://github.com/robertelee78/claude-telegram-mirror",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/robertelee78/claude-telegram-mirror.git"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/robertelee78/claude-telegram-mirror/issues"
|
|
55
|
+
},
|
|
56
|
+
"funding": {
|
|
57
|
+
"type": "github",
|
|
58
|
+
"url": "https://github.com/sponsors/robertelee78"
|
|
59
|
+
},
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public",
|
|
62
|
+
"provenance": true
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"grammy": "^1.21.0",
|
|
66
|
+
"better-sqlite3": "^11.0.0",
|
|
67
|
+
"commander": "^12.0.0",
|
|
68
|
+
"winston": "^3.11.0",
|
|
69
|
+
"chalk": "^4.1.2",
|
|
70
|
+
"inquirer": "^8.2.5"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
74
|
+
"@types/node": "^20.10.0",
|
|
75
|
+
"typescript": "^5.3.0",
|
|
76
|
+
"vitest": "^1.0.0",
|
|
77
|
+
"eslint": "^8.55.0",
|
|
78
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
79
|
+
"@typescript-eslint/parser": "^6.0.0"
|
|
80
|
+
},
|
|
81
|
+
"engines": {
|
|
82
|
+
"node": ">=18.0.0"
|
|
83
|
+
},
|
|
84
|
+
"os": [
|
|
85
|
+
"linux",
|
|
86
|
+
"darwin"
|
|
87
|
+
]
|
|
88
|
+
}
|
package/postinstall.cjs
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Post-install script for claude-telegram-mirror
|
|
4
|
+
* Shows helpful guidance after npm install
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const os = require('os');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
|
|
11
|
+
// Try to load chalk, fall back to plain text if not available
|
|
12
|
+
let chalk;
|
|
13
|
+
try {
|
|
14
|
+
chalk = require('chalk');
|
|
15
|
+
} catch (e) {
|
|
16
|
+
// Chalk not available, use plain text functions
|
|
17
|
+
const identity = (s) => s;
|
|
18
|
+
chalk = {
|
|
19
|
+
cyan: identity,
|
|
20
|
+
green: identity,
|
|
21
|
+
yellow: identity,
|
|
22
|
+
red: identity,
|
|
23
|
+
blue: identity,
|
|
24
|
+
gray: identity,
|
|
25
|
+
white: { bold: identity },
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Don't show guidance during CI or if TELEGRAM_BOT_TOKEN is already set
|
|
30
|
+
if (process.env.CI || process.env.TELEGRAM_BOT_TOKEN) {
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(chalk.cyan('╔════════════════════════════════════════════════════════════╗'));
|
|
36
|
+
console.log(chalk.cyan('║') + chalk.white.bold(' Claude Telegram Mirror - Installation Complete! ') + chalk.cyan('║'));
|
|
37
|
+
console.log(chalk.cyan('╚════════════════════════════════════════════════════════════╝'));
|
|
38
|
+
console.log('');
|
|
39
|
+
|
|
40
|
+
console.log(chalk.yellow('📱 Quick Setup:'));
|
|
41
|
+
console.log('');
|
|
42
|
+
console.log(' ' + chalk.white.bold('1. Run the interactive setup:'));
|
|
43
|
+
console.log(' ' + chalk.green('ctm setup'));
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(' ' + chalk.white.bold('2. Or configure manually:'));
|
|
46
|
+
console.log(' ' + chalk.gray('export TELEGRAM_BOT_TOKEN="your-bot-token"'));
|
|
47
|
+
console.log(' ' + chalk.gray('export TELEGRAM_CHAT_ID="your-chat-id"'));
|
|
48
|
+
console.log(' ' + chalk.gray('export TELEGRAM_MIRROR=true'));
|
|
49
|
+
console.log('');
|
|
50
|
+
|
|
51
|
+
console.log(chalk.yellow('🔧 Commands:'));
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(' ' + chalk.green('ctm setup') + ' Interactive configuration wizard');
|
|
54
|
+
console.log(' ' + chalk.green('ctm doctor') + ' Diagnose configuration issues');
|
|
55
|
+
console.log(' ' + chalk.green('ctm start') + ' Start the mirror daemon');
|
|
56
|
+
console.log(' ' + chalk.green('ctm status') + ' Show current status');
|
|
57
|
+
console.log(' ' + chalk.green('ctm install-hooks') + ' Install Claude Code hooks');
|
|
58
|
+
console.log(' ' + chalk.green('ctm service install') + ' Install as system service');
|
|
59
|
+
console.log('');
|
|
60
|
+
|
|
61
|
+
console.log(chalk.yellow('📚 Documentation:'));
|
|
62
|
+
console.log(' ' + chalk.blue('https://github.com/robertelee78/claude-mobile'));
|
|
63
|
+
console.log('');
|
|
64
|
+
|
|
65
|
+
// Check for existing config
|
|
66
|
+
const configDir = path.join(os.homedir(), '.config', 'claude-telegram-mirror');
|
|
67
|
+
const configFile = path.join(configDir, 'config.json');
|
|
68
|
+
|
|
69
|
+
if (fs.existsSync(configFile)) {
|
|
70
|
+
console.log(chalk.green('✓ Existing configuration found at:'));
|
|
71
|
+
console.log(' ' + chalk.gray(configFile));
|
|
72
|
+
console.log('');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
console.log(chalk.gray('Run "ctm doctor" to verify your setup.'));
|
|
76
|
+
console.log('');
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Claude Code Wrapper with Telegram Mirror
|
|
4
|
+
# Wraps existing claude command to enable Telegram mirroring
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# claude-wrapper <original-claude-args>
|
|
8
|
+
#
|
|
9
|
+
# Or create aliases:
|
|
10
|
+
# alias dsp='TELEGRAM_MIRROR=true claude-wrapper --dangerously-skip-permissions'
|
|
11
|
+
# alias dsp-c='TELEGRAM_MIRROR=true claude-wrapper --dangerously-skip-permissions -c'
|
|
12
|
+
#
|
|
13
|
+
|
|
14
|
+
set -e
|
|
15
|
+
|
|
16
|
+
# Get the directory of this script
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
PACKAGE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
19
|
+
|
|
20
|
+
# Check if Telegram mirror is enabled
|
|
21
|
+
TELEGRAM_ENABLED="${TELEGRAM_MIRROR:-false}"
|
|
22
|
+
|
|
23
|
+
# Bridge daemon socket path
|
|
24
|
+
SOCKET_PATH="${TELEGRAM_BRIDGE_SOCKET:-/tmp/claude-telegram-bridge.sock}"
|
|
25
|
+
|
|
26
|
+
# Start bridge daemon if needed
|
|
27
|
+
start_bridge() {
|
|
28
|
+
if [[ ! -S "$SOCKET_PATH" ]]; then
|
|
29
|
+
echo "🔌 Starting Telegram bridge daemon..."
|
|
30
|
+
|
|
31
|
+
# Start in background
|
|
32
|
+
if command -v node &> /dev/null && [[ -f "$PACKAGE_DIR/dist/cli.js" ]]; then
|
|
33
|
+
node "$PACKAGE_DIR/dist/cli.js" start &
|
|
34
|
+
BRIDGE_PID=$!
|
|
35
|
+
|
|
36
|
+
# Wait for socket to be created (max 5 seconds)
|
|
37
|
+
for i in {1..50}; do
|
|
38
|
+
if [[ -S "$SOCKET_PATH" ]]; then
|
|
39
|
+
echo "✅ Bridge daemon started"
|
|
40
|
+
break
|
|
41
|
+
fi
|
|
42
|
+
sleep 0.1
|
|
43
|
+
done
|
|
44
|
+
|
|
45
|
+
if [[ ! -S "$SOCKET_PATH" ]]; then
|
|
46
|
+
echo "⚠️ Bridge daemon failed to start, continuing without Telegram mirror"
|
|
47
|
+
TELEGRAM_ENABLED="false"
|
|
48
|
+
fi
|
|
49
|
+
else
|
|
50
|
+
echo "⚠️ claude-telegram-mirror not installed properly"
|
|
51
|
+
TELEGRAM_ENABLED="false"
|
|
52
|
+
fi
|
|
53
|
+
fi
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Notify session start
|
|
57
|
+
notify_start() {
|
|
58
|
+
if [[ -S "$SOCKET_PATH" ]]; then
|
|
59
|
+
local session_id="cli-$(date +%s)-$$"
|
|
60
|
+
local project_dir="$(pwd)"
|
|
61
|
+
|
|
62
|
+
echo "{\"type\":\"session_start\",\"sessionId\":\"$session_id\",\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"content\":\"Session started\",\"metadata\":{\"projectDir\":\"$project_dir\"}}" | \
|
|
63
|
+
nc -U -q0 "$SOCKET_PATH" 2>/dev/null || true
|
|
64
|
+
|
|
65
|
+
export TELEGRAM_SESSION_ID="$session_id"
|
|
66
|
+
fi
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# Notify session end
|
|
70
|
+
notify_end() {
|
|
71
|
+
if [[ -S "$SOCKET_PATH" && -n "$TELEGRAM_SESSION_ID" ]]; then
|
|
72
|
+
echo "{\"type\":\"session_end\",\"sessionId\":\"$TELEGRAM_SESSION_ID\",\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"content\":\"Session ended\"}" | \
|
|
73
|
+
nc -U -q0 "$SOCKET_PATH" 2>/dev/null || true
|
|
74
|
+
fi
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Cleanup on exit
|
|
78
|
+
cleanup() {
|
|
79
|
+
notify_end
|
|
80
|
+
|
|
81
|
+
# Kill bridge daemon if we started it
|
|
82
|
+
if [[ -n "$BRIDGE_PID" ]]; then
|
|
83
|
+
kill "$BRIDGE_PID" 2>/dev/null || true
|
|
84
|
+
fi
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Main execution
|
|
88
|
+
main() {
|
|
89
|
+
# Find the real claude command
|
|
90
|
+
CLAUDE_CMD=$(which claude 2>/dev/null || echo "")
|
|
91
|
+
|
|
92
|
+
if [[ -z "$CLAUDE_CMD" ]]; then
|
|
93
|
+
echo "❌ Claude CLI not found"
|
|
94
|
+
exit 1
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# Check if this is being called as a wrapper (avoid recursion)
|
|
98
|
+
if [[ "$CLAUDE_WRAPPER_ACTIVE" == "true" ]]; then
|
|
99
|
+
exec "$CLAUDE_CMD" "$@"
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
export CLAUDE_WRAPPER_ACTIVE="true"
|
|
103
|
+
|
|
104
|
+
if [[ "$TELEGRAM_ENABLED" == "true" || "$TELEGRAM_ENABLED" == "1" ]]; then
|
|
105
|
+
# Start bridge if needed
|
|
106
|
+
start_bridge
|
|
107
|
+
|
|
108
|
+
# Setup cleanup trap
|
|
109
|
+
trap cleanup EXIT
|
|
110
|
+
|
|
111
|
+
# Notify session start
|
|
112
|
+
notify_start
|
|
113
|
+
|
|
114
|
+
echo "📱 Telegram mirror active"
|
|
115
|
+
echo ""
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
# Execute claude with all arguments
|
|
119
|
+
exec "$CLAUDE_CMD" "$@"
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
main "$@"
|