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,261 @@
1
+ #!/bin/bash
2
+ #
3
+ # Claude Telegram Mirror - Uninstaller
4
+ #
5
+ # Usage:
6
+ # ./scripts/uninstall.sh
7
+ # ctm uninstall (if installed)
8
+ #
9
+ # Removes all installed components cleanly.
10
+ #
11
+
12
+ # Colors (respect NO_COLOR)
13
+ if [[ -z "$NO_COLOR" ]]; then
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ BOLD='\033[1m'
19
+ NC='\033[0m'
20
+ else
21
+ RED=''
22
+ GREEN=''
23
+ YELLOW=''
24
+ BLUE=''
25
+ BOLD=''
26
+ NC=''
27
+ fi
28
+
29
+ # Output helpers
30
+ info() { echo -e "${BLUE}ℹ${NC} $1"; }
31
+ success() { echo -e "${GREEN}✓${NC} $1"; }
32
+ warn() { echo -e "${YELLOW}⚠${NC} $1"; }
33
+ error() { echo -e "${RED}✗${NC} $1"; }
34
+
35
+ # Configuration paths
36
+ INSTALL_DIR="${TELEGRAM_MIRROR_INSTALL_DIR:-$HOME/.local/share/claude-telegram-mirror}"
37
+ CONFIG_DIR="$HOME/.config/claude-telegram-mirror"
38
+ ENV_FILE="$HOME/.telegram-env"
39
+ CTM_SYMLINK="$HOME/.local/bin/ctm"
40
+
41
+ # Check for alternate install locations
42
+ find_install_dir() {
43
+ for check_dir in "$INSTALL_DIR" "/opt/claude-mobile/packages/claude-telegram-mirror" "$HOME/.local/share/claude-telegram-mirror"; do
44
+ if [[ -d "$check_dir" && -f "$check_dir/package.json" ]]; then
45
+ echo "$check_dir"
46
+ return 0
47
+ fi
48
+ done
49
+ echo "$INSTALL_DIR"
50
+ }
51
+
52
+ INSTALL_DIR=$(find_install_dir)
53
+
54
+ # ============================================
55
+ # CONFIRMATION
56
+ # ============================================
57
+
58
+ echo ""
59
+ echo -e "${BOLD}Claude Telegram Mirror Uninstaller${NC}"
60
+ echo "==================================="
61
+ echo ""
62
+ echo "This will remove:"
63
+ echo " • System service (systemd/launchd)"
64
+ echo " • Claude Code hooks"
65
+ echo " • Installed files ($INSTALL_DIR)"
66
+ echo " • Runtime data ($CONFIG_DIR)"
67
+ echo " • CLI symlink ($CTM_SYMLINK)"
68
+ echo ""
69
+ echo "Configuration (~/.telegram-env) will be preserved unless you choose to remove it."
70
+ echo ""
71
+
72
+ read -p "Continue with uninstallation? [y/N]: " CONFIRM
73
+ if [[ ! "$CONFIRM" =~ ^[Yy] ]]; then
74
+ echo "Cancelled."
75
+ exit 0
76
+ fi
77
+
78
+ echo ""
79
+
80
+ # ============================================
81
+ # 1. STOP & REMOVE SERVICE
82
+ # ============================================
83
+
84
+ info "Stopping service..."
85
+
86
+ if [[ -f "$INSTALL_DIR/dist/cli.js" ]]; then
87
+ # Use CLI for clean uninstall
88
+ node "$INSTALL_DIR/dist/cli.js" service stop 2>/dev/null || true
89
+ node "$INSTALL_DIR/dist/cli.js" service uninstall 2>/dev/null || true
90
+ success "Service stopped via CLI"
91
+ else
92
+ # Manual cleanup if CLI not available
93
+ if [[ "$(uname -s)" == "Linux" ]]; then
94
+ systemctl --user stop claude-telegram-mirror 2>/dev/null || true
95
+ systemctl --user disable claude-telegram-mirror 2>/dev/null || true
96
+ rm -f "$HOME/.config/systemd/user/claude-telegram-mirror.service"
97
+ systemctl --user daemon-reload 2>/dev/null || true
98
+ success "systemd service removed"
99
+ elif [[ "$(uname -s)" == "Darwin" ]]; then
100
+ launchctl unload "$HOME/Library/LaunchAgents/com.claude.claude-telegram-mirror.plist" 2>/dev/null || true
101
+ rm -f "$HOME/Library/LaunchAgents/com.claude.claude-telegram-mirror.plist"
102
+ success "launchd agent removed"
103
+ fi
104
+ fi
105
+
106
+ # Kill any running daemon processes
107
+ if [[ -f "$CONFIG_DIR/daemon.pid" ]]; then
108
+ daemon_pid=$(cat "$CONFIG_DIR/daemon.pid")
109
+ if kill -0 "$daemon_pid" 2>/dev/null; then
110
+ info "Killing daemon process ($daemon_pid)..."
111
+ kill "$daemon_pid" 2>/dev/null || true
112
+ sleep 1
113
+ fi
114
+ fi
115
+
116
+ # ============================================
117
+ # 2. REMOVE HOOKS
118
+ # ============================================
119
+
120
+ info "Removing hooks..."
121
+
122
+ if [[ -f "$INSTALL_DIR/dist/cli.js" ]]; then
123
+ node "$INSTALL_DIR/dist/cli.js" uninstall-hooks 2>/dev/null || true
124
+ success "Hooks removed via CLI"
125
+ else
126
+ # Manual hook removal
127
+ SETTINGS="$HOME/.claude/settings.json"
128
+ if [[ -f "$SETTINGS" ]] && command -v jq &>/dev/null; then
129
+ # Create backup
130
+ cp "$SETTINGS" "$SETTINGS.backup.$(date +%s)"
131
+
132
+ # Remove telegram-hook entries from all hook types
133
+ jq 'if .hooks then .hooks |= with_entries(
134
+ .value |= map(select(
135
+ if .hooks then (.hooks | all(.command | contains("telegram-hook") | not))
136
+ elif .command then (.command | contains("telegram-hook") | not)
137
+ else true end
138
+ )) | select(length > 0)
139
+ ) | if .hooks == {} then del(.hooks) else . end else . end' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"
140
+ success "Hooks removed from settings.json"
141
+ elif [[ -f "$SETTINGS" ]]; then
142
+ warn "jq not available - edit ~/.claude/settings.json manually to remove telegram-hook entries"
143
+ fi
144
+ fi
145
+
146
+ # ============================================
147
+ # 3. REMOVE FILES
148
+ # ============================================
149
+
150
+ info "Removing files..."
151
+
152
+ # Remove installation directory
153
+ if [[ -d "$INSTALL_DIR" ]]; then
154
+ rm -rf "$INSTALL_DIR"
155
+ success "Removed $INSTALL_DIR"
156
+ else
157
+ info "Install dir not found: $INSTALL_DIR"
158
+ fi
159
+
160
+ # Remove config directory (socket, db, logs)
161
+ if [[ -d "$CONFIG_DIR" ]]; then
162
+ rm -rf "$CONFIG_DIR"
163
+ success "Removed $CONFIG_DIR"
164
+ else
165
+ info "Config dir not found: $CONFIG_DIR"
166
+ fi
167
+
168
+ # Remove CLI symlink
169
+ if [[ -L "$CTM_SYMLINK" ]]; then
170
+ rm -f "$CTM_SYMLINK"
171
+ success "Removed ctm symlink"
172
+ elif [[ -f "$CTM_SYMLINK" ]]; then
173
+ rm -f "$CTM_SYMLINK"
174
+ success "Removed ctm script"
175
+ fi
176
+
177
+ # Remove macOS logs
178
+ if [[ "$(uname -s)" == "Darwin" ]]; then
179
+ rm -f "$HOME/Library/Logs/claude-telegram-mirror."* 2>/dev/null && success "Removed macOS logs"
180
+ fi
181
+
182
+ # ============================================
183
+ # 4. OPTIONAL: REMOVE CONFIGURATION
184
+ # ============================================
185
+
186
+ echo ""
187
+ read -p "Also remove ~/.telegram-env configuration? [y/N]: " REMOVE_ENV
188
+
189
+ if [[ "$REMOVE_ENV" =~ ^[Yy] ]]; then
190
+ if [[ -f "$ENV_FILE" ]]; then
191
+ rm -f "$ENV_FILE"
192
+ success "Removed ~/.telegram-env"
193
+ fi
194
+
195
+ # Clean shell profile
196
+ info "Cleaning shell profile..."
197
+ for RC in "$HOME/.bashrc" "$HOME/.bash_profile" "$HOME/.zshrc" "$HOME/.profile"; do
198
+ if [[ -f "$RC" ]] && grep -q "telegram-env" "$RC"; then
199
+ # macOS sed requires backup extension (-i '')
200
+ if [[ "$(uname -s)" == "Darwin" ]]; then
201
+ sed -i '' '/# Claude Telegram Mirror/d' "$RC" 2>/dev/null
202
+ sed -i '' '/telegram-env/d' "$RC" 2>/dev/null
203
+ else
204
+ sed -i '/# Claude Telegram Mirror/d' "$RC" 2>/dev/null
205
+ sed -i '/telegram-env/d' "$RC" 2>/dev/null
206
+ fi
207
+ success "Cleaned $RC"
208
+ fi
209
+ done
210
+ else
211
+ info "Kept ~/.telegram-env (you can remove it manually later)"
212
+ fi
213
+
214
+ # ============================================
215
+ # 5. CLEAN UP PROJECT-LEVEL HOOKS
216
+ # ============================================
217
+
218
+ echo ""
219
+ read -p "Check for project-level hooks to remove? [y/N]: " REMOVE_PROJECT_HOOKS
220
+
221
+ if [[ "$REMOVE_PROJECT_HOOKS" =~ ^[Yy] ]]; then
222
+ info "Searching for project-level hooks..."
223
+
224
+ # Find .claude/settings.json files with telegram-hook
225
+ while IFS= read -r settings_file; do
226
+ if [[ -f "$settings_file" ]] && grep -q "telegram-hook" "$settings_file" 2>/dev/null; then
227
+ project_dir=$(dirname "$(dirname "$settings_file")")
228
+ echo ""
229
+ warn "Found hooks in: $project_dir"
230
+ read -p " Remove hooks from this project? [y/N]: " remove_this
231
+
232
+ if [[ "$remove_this" =~ ^[Yy] ]]; then
233
+ if command -v jq &>/dev/null; then
234
+ cp "$settings_file" "$settings_file.backup.$(date +%s)"
235
+ jq 'if .hooks then .hooks |= with_entries(
236
+ .value |= map(select(
237
+ if .hooks then (.hooks | all(.command | contains("telegram-hook") | not))
238
+ elif .command then (.command | contains("telegram-hook") | not)
239
+ else true end
240
+ )) | select(length > 0)
241
+ ) | if .hooks == {} then del(.hooks) else . end else . end' "$settings_file" > "$settings_file.tmp" && mv "$settings_file.tmp" "$settings_file"
242
+ success "Removed hooks from $project_dir"
243
+ else
244
+ warn "jq not available - edit $settings_file manually"
245
+ fi
246
+ fi
247
+ fi
248
+ done < <(find "$HOME" -maxdepth 5 -path "*/.claude/settings.json" -type f 2>/dev/null)
249
+ fi
250
+
251
+ # ============================================
252
+ # 6. COMPLETION
253
+ # ============================================
254
+
255
+ echo ""
256
+ echo "==================================="
257
+ success "Uninstallation complete!"
258
+ echo ""
259
+ echo "If you want to reinstall later:"
260
+ echo " curl -fsSL https://raw.githubusercontent.com/robertelee78/claude-telegram-mirror/master/scripts/install.sh | bash"
261
+ echo ""