@selucas12/cheesy 2.0.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 (292) hide show
  1. package/.env.example +22 -0
  2. package/CHANGELOG.md +268 -0
  3. package/LICENSE +21 -0
  4. package/README.md +394 -0
  5. package/ccgram.service +24 -0
  6. package/config/channels.json +58 -0
  7. package/config/default.json +27 -0
  8. package/config/defaults/config.json +16 -0
  9. package/config/defaults/i18n.json +32 -0
  10. package/config/email-template.json +31 -0
  11. package/config/test-with-subagent.json +16 -0
  12. package/config/user.json +27 -0
  13. package/dist/claude-hook-notify.d.ts +7 -0
  14. package/dist/claude-hook-notify.d.ts.map +1 -0
  15. package/dist/claude-hook-notify.js +154 -0
  16. package/dist/claude-hook-notify.js.map +1 -0
  17. package/dist/claude-remote.d.ts +50 -0
  18. package/dist/claude-remote.d.ts.map +1 -0
  19. package/dist/claude-remote.js +927 -0
  20. package/dist/claude-remote.js.map +1 -0
  21. package/dist/elicitation-notify.d.ts +20 -0
  22. package/dist/elicitation-notify.d.ts.map +1 -0
  23. package/dist/elicitation-notify.js +241 -0
  24. package/dist/elicitation-notify.js.map +1 -0
  25. package/dist/enhanced-hook-notify.d.ts +23 -0
  26. package/dist/enhanced-hook-notify.d.ts.map +1 -0
  27. package/dist/enhanced-hook-notify.js +402 -0
  28. package/dist/enhanced-hook-notify.js.map +1 -0
  29. package/dist/permission-denied-notify.d.ts +11 -0
  30. package/dist/permission-denied-notify.d.ts.map +1 -0
  31. package/dist/permission-denied-notify.js +193 -0
  32. package/dist/permission-denied-notify.js.map +1 -0
  33. package/dist/permission-hook.d.ts +15 -0
  34. package/dist/permission-hook.d.ts.map +1 -0
  35. package/dist/permission-hook.js +386 -0
  36. package/dist/permission-hook.js.map +1 -0
  37. package/dist/pre-compact-notify.d.ts +13 -0
  38. package/dist/pre-compact-notify.d.ts.map +1 -0
  39. package/dist/pre-compact-notify.js +197 -0
  40. package/dist/pre-compact-notify.js.map +1 -0
  41. package/dist/prompt-bridge.d.ts +50 -0
  42. package/dist/prompt-bridge.d.ts.map +1 -0
  43. package/dist/prompt-bridge.js +173 -0
  44. package/dist/prompt-bridge.js.map +1 -0
  45. package/dist/question-notify.d.ts +17 -0
  46. package/dist/question-notify.d.ts.map +1 -0
  47. package/dist/question-notify.js +356 -0
  48. package/dist/question-notify.js.map +1 -0
  49. package/dist/setup.d.ts +10 -0
  50. package/dist/setup.d.ts.map +1 -0
  51. package/dist/setup.js +649 -0
  52. package/dist/setup.js.map +1 -0
  53. package/dist/smart-monitor.d.ts +7 -0
  54. package/dist/smart-monitor.d.ts.map +1 -0
  55. package/dist/smart-monitor.js +256 -0
  56. package/dist/smart-monitor.js.map +1 -0
  57. package/dist/src/automation/clipboard-automation.d.ts +35 -0
  58. package/dist/src/automation/clipboard-automation.d.ts.map +1 -0
  59. package/dist/src/automation/clipboard-automation.js +242 -0
  60. package/dist/src/automation/clipboard-automation.js.map +1 -0
  61. package/dist/src/channels/base/channel.d.ts +60 -0
  62. package/dist/src/channels/base/channel.d.ts.map +1 -0
  63. package/dist/src/channels/base/channel.js +96 -0
  64. package/dist/src/channels/base/channel.js.map +1 -0
  65. package/dist/src/channels/email/smtp.d.ts +74 -0
  66. package/dist/src/channels/email/smtp.d.ts.map +1 -0
  67. package/dist/src/channels/email/smtp.js +605 -0
  68. package/dist/src/channels/email/smtp.js.map +1 -0
  69. package/dist/src/channels/line/line.d.ts +36 -0
  70. package/dist/src/channels/line/line.d.ts.map +1 -0
  71. package/dist/src/channels/line/line.js +180 -0
  72. package/dist/src/channels/line/line.js.map +1 -0
  73. package/dist/src/channels/line/webhook.d.ts +55 -0
  74. package/dist/src/channels/line/webhook.d.ts.map +1 -0
  75. package/dist/src/channels/line/webhook.js +191 -0
  76. package/dist/src/channels/line/webhook.js.map +1 -0
  77. package/dist/src/channels/local/desktop.d.ts +30 -0
  78. package/dist/src/channels/local/desktop.d.ts.map +1 -0
  79. package/dist/src/channels/local/desktop.js +161 -0
  80. package/dist/src/channels/local/desktop.js.map +1 -0
  81. package/dist/src/channels/telegram/telegram.d.ts +43 -0
  82. package/dist/src/channels/telegram/telegram.d.ts.map +1 -0
  83. package/dist/src/channels/telegram/telegram.js +223 -0
  84. package/dist/src/channels/telegram/telegram.js.map +1 -0
  85. package/dist/src/channels/telegram/webhook.d.ts +75 -0
  86. package/dist/src/channels/telegram/webhook.d.ts.map +1 -0
  87. package/dist/src/channels/telegram/webhook.js +278 -0
  88. package/dist/src/channels/telegram/webhook.js.map +1 -0
  89. package/dist/src/cli.d.ts +9 -0
  90. package/dist/src/cli.d.ts.map +1 -0
  91. package/dist/src/cli.js +99 -0
  92. package/dist/src/cli.js.map +1 -0
  93. package/dist/src/commands/hooks.d.ts +10 -0
  94. package/dist/src/commands/hooks.d.ts.map +1 -0
  95. package/dist/src/commands/hooks.js +50 -0
  96. package/dist/src/commands/hooks.js.map +1 -0
  97. package/dist/src/commands/init.d.ts +20 -0
  98. package/dist/src/commands/init.d.ts.map +1 -0
  99. package/dist/src/commands/init.js +173 -0
  100. package/dist/src/commands/init.js.map +1 -0
  101. package/dist/src/commands/license.d.ts +15 -0
  102. package/dist/src/commands/license.d.ts.map +1 -0
  103. package/dist/src/commands/license.js +107 -0
  104. package/dist/src/commands/license.js.map +1 -0
  105. package/dist/src/commands/start.d.ts +17 -0
  106. package/dist/src/commands/start.d.ts.map +1 -0
  107. package/dist/src/commands/start.js +150 -0
  108. package/dist/src/commands/start.js.map +1 -0
  109. package/dist/src/commands/status.d.ts +8 -0
  110. package/dist/src/commands/status.d.ts.map +1 -0
  111. package/dist/src/commands/status.js +95 -0
  112. package/dist/src/commands/status.js.map +1 -0
  113. package/dist/src/commands/stop.d.ts +8 -0
  114. package/dist/src/commands/stop.d.ts.map +1 -0
  115. package/dist/src/commands/stop.js +64 -0
  116. package/dist/src/commands/stop.js.map +1 -0
  117. package/dist/src/config-manager.d.ts +16 -0
  118. package/dist/src/config-manager.d.ts.map +1 -0
  119. package/dist/src/config-manager.js +152 -0
  120. package/dist/src/config-manager.js.map +1 -0
  121. package/dist/src/core/config.d.ts +28 -0
  122. package/dist/src/core/config.d.ts.map +1 -0
  123. package/dist/src/core/config.js +248 -0
  124. package/dist/src/core/config.js.map +1 -0
  125. package/dist/src/core/logger.d.ts +19 -0
  126. package/dist/src/core/logger.d.ts.map +1 -0
  127. package/dist/src/core/logger.js +47 -0
  128. package/dist/src/core/logger.js.map +1 -0
  129. package/dist/src/core/notifier.d.ts +45 -0
  130. package/dist/src/core/notifier.d.ts.map +1 -0
  131. package/dist/src/core/notifier.js +189 -0
  132. package/dist/src/core/notifier.js.map +1 -0
  133. package/dist/src/lib/license-validator.d.ts +120 -0
  134. package/dist/src/lib/license-validator.d.ts.map +1 -0
  135. package/dist/src/lib/license-validator.js +294 -0
  136. package/dist/src/lib/license-validator.js.map +1 -0
  137. package/dist/src/lib/preflight.d.ts +28 -0
  138. package/dist/src/lib/preflight.d.ts.map +1 -0
  139. package/dist/src/lib/preflight.js +90 -0
  140. package/dist/src/lib/preflight.js.map +1 -0
  141. package/dist/src/relay/claude-command-bridge.d.ts +57 -0
  142. package/dist/src/relay/claude-command-bridge.d.ts.map +1 -0
  143. package/dist/src/relay/claude-command-bridge.js +188 -0
  144. package/dist/src/relay/claude-command-bridge.js.map +1 -0
  145. package/dist/src/relay/email-listener.d.ts +65 -0
  146. package/dist/src/relay/email-listener.d.ts.map +1 -0
  147. package/dist/src/relay/email-listener.js +460 -0
  148. package/dist/src/relay/email-listener.js.map +1 -0
  149. package/dist/src/relay/relay-pty.d.ts +21 -0
  150. package/dist/src/relay/relay-pty.d.ts.map +1 -0
  151. package/dist/src/relay/relay-pty.js +696 -0
  152. package/dist/src/relay/relay-pty.js.map +1 -0
  153. package/dist/src/relay/smart-injector.d.ts +30 -0
  154. package/dist/src/relay/smart-injector.d.ts.map +1 -0
  155. package/dist/src/relay/smart-injector.js +233 -0
  156. package/dist/src/relay/smart-injector.js.map +1 -0
  157. package/dist/src/relay/tmux-injector.d.ts +46 -0
  158. package/dist/src/relay/tmux-injector.d.ts.map +1 -0
  159. package/dist/src/relay/tmux-injector.js +413 -0
  160. package/dist/src/relay/tmux-injector.js.map +1 -0
  161. package/dist/src/tools/config-manager.d.ts +33 -0
  162. package/dist/src/tools/config-manager.d.ts.map +1 -0
  163. package/dist/src/tools/config-manager.js +448 -0
  164. package/dist/src/tools/config-manager.js.map +1 -0
  165. package/dist/src/tools/installer.d.ts +38 -0
  166. package/dist/src/tools/installer.d.ts.map +1 -0
  167. package/dist/src/tools/installer.js +222 -0
  168. package/dist/src/tools/installer.js.map +1 -0
  169. package/dist/src/types/callbacks.d.ts +53 -0
  170. package/dist/src/types/callbacks.d.ts.map +1 -0
  171. package/dist/src/types/callbacks.js +7 -0
  172. package/dist/src/types/callbacks.js.map +1 -0
  173. package/dist/src/types/config.d.ts +56 -0
  174. package/dist/src/types/config.d.ts.map +1 -0
  175. package/dist/src/types/config.js +6 -0
  176. package/dist/src/types/config.js.map +1 -0
  177. package/dist/src/types/hooks.d.ts +47 -0
  178. package/dist/src/types/hooks.d.ts.map +1 -0
  179. package/dist/src/types/hooks.js +6 -0
  180. package/dist/src/types/hooks.js.map +1 -0
  181. package/dist/src/types/index.d.ts +7 -0
  182. package/dist/src/types/index.d.ts.map +1 -0
  183. package/dist/src/types/index.js +23 -0
  184. package/dist/src/types/index.js.map +1 -0
  185. package/dist/src/types/ipc.d.ts +43 -0
  186. package/dist/src/types/ipc.d.ts.map +1 -0
  187. package/dist/src/types/ipc.js +7 -0
  188. package/dist/src/types/ipc.js.map +1 -0
  189. package/dist/src/types/session.d.ts +87 -0
  190. package/dist/src/types/session.d.ts.map +1 -0
  191. package/dist/src/types/session.js +9 -0
  192. package/dist/src/types/session.js.map +1 -0
  193. package/dist/src/types/telegram.d.ts +58 -0
  194. package/dist/src/types/telegram.d.ts.map +1 -0
  195. package/dist/src/types/telegram.js +6 -0
  196. package/dist/src/types/telegram.js.map +1 -0
  197. package/dist/src/utils/active-check.d.ts +20 -0
  198. package/dist/src/utils/active-check.d.ts.map +1 -0
  199. package/dist/src/utils/active-check.js +42 -0
  200. package/dist/src/utils/active-check.js.map +1 -0
  201. package/dist/src/utils/callback-parser.d.ts +23 -0
  202. package/dist/src/utils/callback-parser.d.ts.map +1 -0
  203. package/dist/src/utils/callback-parser.js +85 -0
  204. package/dist/src/utils/callback-parser.js.map +1 -0
  205. package/dist/src/utils/controller-injector.d.ts +21 -0
  206. package/dist/src/utils/controller-injector.d.ts.map +1 -0
  207. package/dist/src/utils/controller-injector.js +108 -0
  208. package/dist/src/utils/controller-injector.js.map +1 -0
  209. package/dist/src/utils/conversation-tracker.d.ts +32 -0
  210. package/dist/src/utils/conversation-tracker.d.ts.map +1 -0
  211. package/dist/src/utils/conversation-tracker.js +119 -0
  212. package/dist/src/utils/conversation-tracker.js.map +1 -0
  213. package/dist/src/utils/deep-link.d.ts +22 -0
  214. package/dist/src/utils/deep-link.d.ts.map +1 -0
  215. package/dist/src/utils/deep-link.js +43 -0
  216. package/dist/src/utils/deep-link.js.map +1 -0
  217. package/dist/src/utils/ghostty-session-manager.d.ts +81 -0
  218. package/dist/src/utils/ghostty-session-manager.d.ts.map +1 -0
  219. package/dist/src/utils/ghostty-session-manager.js +370 -0
  220. package/dist/src/utils/ghostty-session-manager.js.map +1 -0
  221. package/dist/src/utils/hook-definitions.d.ts +25 -0
  222. package/dist/src/utils/hook-definitions.d.ts.map +1 -0
  223. package/dist/src/utils/hook-definitions.js +36 -0
  224. package/dist/src/utils/hook-definitions.js.map +1 -0
  225. package/dist/src/utils/http-request.d.ts +25 -0
  226. package/dist/src/utils/http-request.d.ts.map +1 -0
  227. package/dist/src/utils/http-request.js +66 -0
  228. package/dist/src/utils/http-request.js.map +1 -0
  229. package/dist/src/utils/optional-require.d.ts +13 -0
  230. package/dist/src/utils/optional-require.d.ts.map +1 -0
  231. package/dist/src/utils/optional-require.js +37 -0
  232. package/dist/src/utils/optional-require.js.map +1 -0
  233. package/dist/src/utils/paths.d.ts +13 -0
  234. package/dist/src/utils/paths.d.ts.map +1 -0
  235. package/dist/src/utils/paths.js +30 -0
  236. package/dist/src/utils/paths.js.map +1 -0
  237. package/dist/src/utils/pty-session-manager.d.ts +43 -0
  238. package/dist/src/utils/pty-session-manager.d.ts.map +1 -0
  239. package/dist/src/utils/pty-session-manager.js +183 -0
  240. package/dist/src/utils/pty-session-manager.js.map +1 -0
  241. package/dist/src/utils/subagent-tracker.d.ts +64 -0
  242. package/dist/src/utils/subagent-tracker.d.ts.map +1 -0
  243. package/dist/src/utils/subagent-tracker.js +191 -0
  244. package/dist/src/utils/subagent-tracker.js.map +1 -0
  245. package/dist/src/utils/tmux-monitor.d.ts +102 -0
  246. package/dist/src/utils/tmux-monitor.d.ts.map +1 -0
  247. package/dist/src/utils/tmux-monitor.js +642 -0
  248. package/dist/src/utils/tmux-monitor.js.map +1 -0
  249. package/dist/src/utils/trace-capture.d.ts +42 -0
  250. package/dist/src/utils/trace-capture.d.ts.map +1 -0
  251. package/dist/src/utils/trace-capture.js +102 -0
  252. package/dist/src/utils/trace-capture.js.map +1 -0
  253. package/dist/src/utils/transcript-reader.d.ts +57 -0
  254. package/dist/src/utils/transcript-reader.d.ts.map +1 -0
  255. package/dist/src/utils/transcript-reader.js +229 -0
  256. package/dist/src/utils/transcript-reader.js.map +1 -0
  257. package/dist/start-all-webhooks.d.ts +7 -0
  258. package/dist/start-all-webhooks.d.ts.map +1 -0
  259. package/dist/start-all-webhooks.js +98 -0
  260. package/dist/start-all-webhooks.js.map +1 -0
  261. package/dist/start-line-webhook.d.ts +7 -0
  262. package/dist/start-line-webhook.d.ts.map +1 -0
  263. package/dist/start-line-webhook.js +59 -0
  264. package/dist/start-line-webhook.js.map +1 -0
  265. package/dist/start-relay-pty.d.ts +7 -0
  266. package/dist/start-relay-pty.d.ts.map +1 -0
  267. package/dist/start-relay-pty.js +173 -0
  268. package/dist/start-relay-pty.js.map +1 -0
  269. package/dist/start-telegram-webhook.d.ts +7 -0
  270. package/dist/start-telegram-webhook.d.ts.map +1 -0
  271. package/dist/start-telegram-webhook.js +80 -0
  272. package/dist/start-telegram-webhook.js.map +1 -0
  273. package/dist/user-prompt-hook.d.ts +13 -0
  274. package/dist/user-prompt-hook.d.ts.map +1 -0
  275. package/dist/user-prompt-hook.js +45 -0
  276. package/dist/user-prompt-hook.js.map +1 -0
  277. package/dist/workspace-router.d.ts +114 -0
  278. package/dist/workspace-router.d.ts.map +1 -0
  279. package/dist/workspace-router.js +572 -0
  280. package/dist/workspace-router.js.map +1 -0
  281. package/dist/workspace-telegram-bot.d.ts +3 -0
  282. package/dist/workspace-telegram-bot.d.ts.map +1 -0
  283. package/dist/workspace-telegram-bot.js +1847 -0
  284. package/dist/workspace-telegram-bot.js.map +1 -0
  285. package/package.json +85 -0
  286. package/src/types/callbacks.ts +73 -0
  287. package/src/types/config.ts +63 -0
  288. package/src/types/hooks.ts +50 -0
  289. package/src/types/index.ts +6 -0
  290. package/src/types/ipc.ts +55 -0
  291. package/src/types/session.ts +91 -0
  292. package/src/types/telegram.ts +66 -0
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ /**
3
+ * Telegram Webhook Handler
4
+ * Handles incoming Telegram messages and commands
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ const optional_require_1 = require("../../utils/optional-require");
10
+ const express = (0, optional_require_1.optionalRequire)('express', 'Telegram webhook server');
11
+ const http_request_1 = __importDefault(require("../../utils/http-request"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const logger_1 = __importDefault(require("../../core/logger"));
15
+ const controller_injector_1 = __importDefault(require("../../utils/controller-injector"));
16
+ class TelegramWebhookHandler {
17
+ config;
18
+ logger;
19
+ sessionsDir;
20
+ injector;
21
+ app;
22
+ apiBaseUrl;
23
+ botUsername;
24
+ constructor(config = {}) {
25
+ if (!express) {
26
+ throw new Error('express is required for the Telegram webhook server. Install with: npm install express');
27
+ }
28
+ this.config = config;
29
+ this.logger = new logger_1.default('TelegramWebhook');
30
+ this.sessionsDir = path_1.default.join(__dirname, '../../data/sessions');
31
+ this.injector = new controller_injector_1.default();
32
+ this.app = express();
33
+ this.apiBaseUrl = 'https://api.telegram.org';
34
+ this.botUsername = null; // Cache for bot username
35
+ this._setupMiddleware();
36
+ this._setupRoutes();
37
+ }
38
+ _setupMiddleware() {
39
+ // Parse JSON for all requests
40
+ this.app.use(express.json());
41
+ }
42
+ _setupRoutes() {
43
+ // Telegram webhook endpoint
44
+ this.app.post('/webhook/telegram', this._handleWebhook.bind(this));
45
+ // Health check endpoint
46
+ this.app.get('/health', (req, res) => {
47
+ res.json({ status: 'ok', service: 'telegram-webhook' });
48
+ });
49
+ }
50
+ /**
51
+ * Generate network options for HTTP requests
52
+ */
53
+ _getNetworkOptions() {
54
+ const options = {};
55
+ if (this.config.forceIPv4) {
56
+ options.family = 4;
57
+ }
58
+ return options;
59
+ }
60
+ async _handleWebhook(req, res) {
61
+ try {
62
+ const update = req.body;
63
+ // Handle different update types
64
+ if (update.message) {
65
+ await this._handleMessage(update.message);
66
+ }
67
+ else if (update.callback_query) {
68
+ await this._handleCallbackQuery(update.callback_query);
69
+ }
70
+ res.status(200).send('OK');
71
+ }
72
+ catch (error) {
73
+ this.logger.error('Webhook handling error:', error.message);
74
+ res.status(500).send('Internal Server Error');
75
+ }
76
+ }
77
+ async _handleMessage(message) {
78
+ const chatId = message.chat.id;
79
+ const userId = message.from.id;
80
+ const messageText = message.text?.trim();
81
+ if (!messageText)
82
+ return;
83
+ // Check if user is authorized
84
+ if (!this._isAuthorized(userId, chatId)) {
85
+ this.logger.warn(`Unauthorized user/chat: ${userId}/${chatId}`);
86
+ await this._sendMessage(chatId, 'You are not authorized to use this bot.');
87
+ return;
88
+ }
89
+ // Handle /start command
90
+ if (messageText === '/start') {
91
+ await this._sendWelcomeMessage(chatId);
92
+ return;
93
+ }
94
+ // Handle /help command
95
+ if (messageText === '/help') {
96
+ await this._sendHelpMessage(chatId);
97
+ return;
98
+ }
99
+ // Parse command
100
+ const commandMatch = messageText.match(/^\/cmd\s+([A-Z0-9]{8})\s+(.+)$/i);
101
+ if (!commandMatch) {
102
+ // Check if it's a direct command without /cmd prefix
103
+ const directMatch = messageText.match(/^([A-Z0-9]{8})\s+(.+)$/);
104
+ if (directMatch) {
105
+ await this._processCommand(chatId, directMatch[1], directMatch[2]);
106
+ }
107
+ else {
108
+ await this._sendMessage(chatId, 'Invalid format. Use:\n`/cmd <TOKEN> <command>`\n\nExample:\n`/cmd ABC12345 analyze this code`', { parse_mode: 'Markdown' });
109
+ }
110
+ return;
111
+ }
112
+ const token = commandMatch[1].toUpperCase();
113
+ const command = commandMatch[2];
114
+ await this._processCommand(chatId, token, command);
115
+ }
116
+ async _processCommand(chatId, token, command) {
117
+ // Find session by token
118
+ const session = await this._findSessionByToken(token);
119
+ if (!session) {
120
+ await this._sendMessage(chatId, 'Invalid or expired token. Please wait for a new task notification.', { parse_mode: 'Markdown' });
121
+ return;
122
+ }
123
+ // Check if session is expired
124
+ if (session.expiresAt < Math.floor(Date.now() / 1000)) {
125
+ await this._sendMessage(chatId, 'Token has expired. Please wait for a new task notification.', { parse_mode: 'Markdown' });
126
+ await this._removeSession(session.id);
127
+ return;
128
+ }
129
+ try {
130
+ // Inject command into tmux session
131
+ const tmuxSession = session.tmuxSession || 'default';
132
+ await this.injector.injectCommand(command, tmuxSession);
133
+ // Send confirmation
134
+ await this._sendMessage(chatId, `*Command sent successfully*\n\n*Command:* ${command}\n*Session:* ${tmuxSession}\n\nClaude is now processing your request...`, { parse_mode: 'Markdown' });
135
+ // Log command execution
136
+ this.logger.info(`Command injected - User: ${chatId}, Token: ${token}, Command: ${command}`);
137
+ }
138
+ catch (error) {
139
+ this.logger.error('Command injection failed:', error.message);
140
+ await this._sendMessage(chatId, `*Command execution failed:* ${error.message}`, { parse_mode: 'Markdown' });
141
+ }
142
+ }
143
+ async _handleCallbackQuery(callbackQuery) {
144
+ const chatId = callbackQuery.message.chat.id;
145
+ const data = callbackQuery.data;
146
+ // Answer callback query to remove loading state
147
+ await this._answerCallbackQuery(callbackQuery.id);
148
+ if (data.startsWith('personal:')) {
149
+ const token = data.split(':')[1];
150
+ // Send personal chat command format
151
+ await this._sendMessage(chatId, `*Personal Chat Command Format:*\n\n\`/cmd ${token} <your command>\`\n\n*Example:*\n\`/cmd ${token} please analyze this code\`\n\n*Copy and paste the format above, then add your command!*`, { parse_mode: 'Markdown' });
152
+ }
153
+ else if (data.startsWith('group:')) {
154
+ const token = data.split(':')[1];
155
+ // Send group chat command format with @bot_name
156
+ const botUsername = await this._getBotUsername();
157
+ await this._sendMessage(chatId, `*Group Chat Command Format:*\n\n\`@${botUsername} /cmd ${token} <your command>\`\n\n*Example:*\n\`@${botUsername} /cmd ${token} please analyze this code\`\n\n*Copy and paste the format above, then add your command!*`, { parse_mode: 'Markdown' });
158
+ }
159
+ else if (data.startsWith('session:')) {
160
+ const token = data.split(':')[1];
161
+ // For backward compatibility - send help message for old callback buttons
162
+ await this._sendMessage(chatId, `*How to send a command:*\n\nType:\n\`/cmd ${token} <your command>\`\n\nExample:\n\`/cmd ${token} please analyze this code\`\n\n*Tip:* New notifications have a button that auto-fills the command for you!`, { parse_mode: 'Markdown' });
163
+ }
164
+ }
165
+ async _sendWelcomeMessage(chatId) {
166
+ const message = `*Welcome to Claude Code Remote Bot!*\n\n` +
167
+ `I'll notify you when Claude completes tasks or needs input.\n\n` +
168
+ `When you receive a notification with a token, you can send commands back using:\n` +
169
+ `\`/cmd <TOKEN> <your command>\`\n\n` +
170
+ `Type /help for more information.`;
171
+ await this._sendMessage(chatId, message, { parse_mode: 'Markdown' });
172
+ }
173
+ async _sendHelpMessage(chatId) {
174
+ const message = `*Claude Code Remote Bot Help*\n\n` +
175
+ `*Commands:*\n` +
176
+ `\`/start\` - Welcome message\n` +
177
+ `\`/help\` - Show this help\n` +
178
+ `\`/cmd <TOKEN> <command>\` - Send command to Claude\n\n` +
179
+ `*Example:*\n` +
180
+ `\`/cmd ABC12345 analyze the performance of this function\`\n\n` +
181
+ `*Tips:*\n` +
182
+ `Tokens are case-insensitive\n` +
183
+ `Tokens expire after 24 hours\n` +
184
+ `You can also just type \`TOKEN command\` without /cmd`;
185
+ await this._sendMessage(chatId, message, { parse_mode: 'Markdown' });
186
+ }
187
+ _isAuthorized(userId, chatId) {
188
+ // Check whitelist
189
+ const whitelist = this.config.whitelist || [];
190
+ if (whitelist.includes(String(chatId)) || whitelist.includes(String(userId))) {
191
+ return true;
192
+ }
193
+ // If no whitelist configured, allow configured chat/user
194
+ if (whitelist.length === 0) {
195
+ const configuredChatId = this.config.chatId || this.config.groupId;
196
+ if (configuredChatId && String(chatId) === String(configuredChatId)) {
197
+ return true;
198
+ }
199
+ }
200
+ return false;
201
+ }
202
+ async _getBotUsername() {
203
+ if (this.botUsername) {
204
+ return this.botUsername;
205
+ }
206
+ try {
207
+ const response = await http_request_1.default.get(`${this.apiBaseUrl}/bot${this.config.botToken}/getMe`, this._getNetworkOptions());
208
+ if (response.data.ok && response.data.result.username) {
209
+ this.botUsername = response.data.result.username;
210
+ return this.botUsername;
211
+ }
212
+ }
213
+ catch (error) {
214
+ this.logger.error('Failed to get bot username:', error.message);
215
+ }
216
+ // Fallback to configured username or default
217
+ return this.config.botUsername || 'claude_remote_bot';
218
+ }
219
+ async _findSessionByToken(token) {
220
+ const files = fs_1.default.readdirSync(this.sessionsDir);
221
+ for (const file of files) {
222
+ if (!file.endsWith('.json'))
223
+ continue;
224
+ const sessionPath = path_1.default.join(this.sessionsDir, file);
225
+ try {
226
+ const session = JSON.parse(fs_1.default.readFileSync(sessionPath, 'utf8'));
227
+ if (session.token === token) {
228
+ return session;
229
+ }
230
+ }
231
+ catch (error) {
232
+ this.logger.error(`Failed to read session file ${file}:`, error.message);
233
+ }
234
+ }
235
+ return null;
236
+ }
237
+ async _removeSession(sessionId) {
238
+ const sessionFile = path_1.default.join(this.sessionsDir, `${sessionId}.json`);
239
+ if (fs_1.default.existsSync(sessionFile)) {
240
+ fs_1.default.unlinkSync(sessionFile);
241
+ this.logger.debug(`Session removed: ${sessionId}`);
242
+ }
243
+ }
244
+ async _sendMessage(chatId, text, options = {}) {
245
+ try {
246
+ await http_request_1.default.post(`${this.apiBaseUrl}/bot${this.config.botToken}/sendMessage`, { chat_id: chatId, text, ...options }, this._getNetworkOptions());
247
+ }
248
+ catch (error) {
249
+ this.logger.error('Failed to send message:', error.message);
250
+ }
251
+ }
252
+ async _answerCallbackQuery(callbackQueryId, text = '') {
253
+ try {
254
+ await http_request_1.default.post(`${this.apiBaseUrl}/bot${this.config.botToken}/answerCallbackQuery`, { callback_query_id: callbackQueryId, text }, this._getNetworkOptions());
255
+ }
256
+ catch (error) {
257
+ this.logger.error('Failed to answer callback query:', error.message);
258
+ }
259
+ }
260
+ async setWebhook(webhookUrl) {
261
+ try {
262
+ const response = await http_request_1.default.post(`${this.apiBaseUrl}/bot${this.config.botToken}/setWebhook`, { url: webhookUrl, allowed_updates: ['message', 'callback_query'] }, this._getNetworkOptions());
263
+ this.logger.info('Webhook set successfully:', response.data);
264
+ return response.data;
265
+ }
266
+ catch (error) {
267
+ this.logger.error('Failed to set webhook:', error.message);
268
+ throw error;
269
+ }
270
+ }
271
+ start(port = 3000) {
272
+ this.app.listen(port, () => {
273
+ this.logger.info(`Telegram webhook server started on port ${port}`);
274
+ });
275
+ }
276
+ }
277
+ module.exports = TelegramWebhookHandler;
278
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../../src/channels/telegram/webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cheesyboy CLI — entry point.
4
+ *
5
+ * Dispatches to subcommands in src/commands/. Each subcommand returns an exit
6
+ * code which we forward to the OS so shell scripts can branch on success.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Cheesyboy CLI — entry point.
5
+ *
6
+ * Dispatches to subcommands in src/commands/. Each subcommand returns an exit
7
+ * code which we forward to the OS so shell scripts can branch on success.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const commander_1 = require("commander");
14
+ const picocolors_1 = __importDefault(require("picocolors"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const init_1 = require("./commands/init");
18
+ const start_1 = require("./commands/start");
19
+ const stop_1 = require("./commands/stop");
20
+ const status_1 = require("./commands/status");
21
+ const hooks_1 = require("./commands/hooks");
22
+ const license_1 = require("./commands/license");
23
+ /** Read the bundled package.json so --version is always accurate. */
24
+ function readVersion() {
25
+ const candidates = [
26
+ path_1.default.join(__dirname, '..', 'package.json'), // dist/src → dist/package.json
27
+ path_1.default.join(__dirname, '..', '..', 'package.json'), // dist/src/.. → ../package.json
28
+ ];
29
+ for (const c of candidates) {
30
+ try {
31
+ const j = JSON.parse(fs_1.default.readFileSync(c, 'utf8'));
32
+ if (j.version)
33
+ return j.version;
34
+ }
35
+ catch { }
36
+ }
37
+ return '0.0.0';
38
+ }
39
+ /** Wrap a Promise<number> so commander hands the exit code back to the OS. */
40
+ function exitWith(p) {
41
+ p.then((code) => process.exit(code), (err) => {
42
+ console.error(picocolors_1.default.red(`Fatal: ${err instanceof Error ? err.message : String(err)}`));
43
+ process.exit(1);
44
+ });
45
+ }
46
+ const program = new commander_1.Command();
47
+ program
48
+ .name('cheesy')
49
+ .description('Control Claude Code from Telegram — Cheesyboy CLI')
50
+ .version(readVersion(), '-v, --version', 'print version and exit')
51
+ .showHelpAfterError('(run `cheesy --help` for usage)');
52
+ program
53
+ .command('init')
54
+ .description('Run the interactive setup wizard (configure Telegram + Claude hooks).')
55
+ .option('--dev', 'Skip license validation (test/dev installs).')
56
+ .action((opts) => exitWith((0, init_1.runInit)({ dev: !!opts.dev })));
57
+ program
58
+ .command('start')
59
+ .description('Start the Cheesyboy bot. Uses launchd/systemd if installed, else foreground.')
60
+ .option('-f, --foreground', 'Always run in the foreground (no background service).')
61
+ .option('--skip-license', 'Bypass license validation (intended for CI/dev only).')
62
+ .action((opts) => exitWith((0, start_1.runStart)({ foreground: !!opts.foreground, skipLicense: !!opts.skipLicense })));
63
+ program
64
+ .command('stop')
65
+ .description('Stop the Cheesyboy bot (service or foreground process).')
66
+ .action(() => exitWith((0, stop_1.runStop)()));
67
+ program
68
+ .command('status')
69
+ .description('Show bot, service, sessions, and license status.')
70
+ .action(() => exitWith((0, status_1.runStatus)()));
71
+ program
72
+ .command('hooks')
73
+ .description('Print the Claude Code settings.json hooks snippet for manual install.')
74
+ .action(() => exitWith((0, hooks_1.runHooks)()));
75
+ const license = program
76
+ .command('license')
77
+ .description('Manage LemonSqueezy license activation.');
78
+ license
79
+ .command('activate <key>')
80
+ .description('Activate a license key on this machine.')
81
+ .action((key) => exitWith((0, license_1.runLicenseActivate)(key)));
82
+ license
83
+ .command('status')
84
+ .description('Show the activated license (validates remotely when possible).')
85
+ .action(() => exitWith((0, license_1.runLicenseStatus)()));
86
+ license
87
+ .command('deactivate')
88
+ .description('Release this machine\'s activation slot.')
89
+ .action(() => exitWith((0, license_1.runLicenseDeactivate)()));
90
+ // `cheesy` with no args → show help. This is friendlier than commander's
91
+ // default (which exits 1 silently when nothing matches).
92
+ if (process.argv.length <= 2) {
93
+ program.help();
94
+ }
95
+ program.parseAsync(process.argv).catch((err) => {
96
+ console.error(picocolors_1.default.red(`Fatal: ${err instanceof Error ? err.message : String(err)}`));
97
+ process.exit(1);
98
+ });
99
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `cheesy hooks` — print the Claude Code settings.json hooks snippet.
3
+ *
4
+ * Useful for users who want to install hooks manually instead of letting the
5
+ * setup wizard merge them into ~/.claude/settings.json automatically.
6
+ *
7
+ * Ported from the legacy root-level cli.ts.
8
+ */
9
+ export declare function runHooks(): Promise<number>;
10
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBhD"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * `cheesy hooks` — print the Claude Code settings.json hooks snippet.
4
+ *
5
+ * Useful for users who want to install hooks manually instead of letting the
6
+ * setup wizard merge them into ~/.claude/settings.json automatically.
7
+ *
8
+ * Ported from the legacy root-level cli.ts.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.runHooks = runHooks;
15
+ const path_1 = __importDefault(require("path"));
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const picocolors_1 = __importDefault(require("picocolors"));
18
+ const paths_1 = require("../utils/paths");
19
+ const hook_definitions_1 = require("../utils/hook-definitions");
20
+ function resolveDistDir() {
21
+ const homeDistDir = path_1.default.join(paths_1.CCGRAM_HOME, 'dist');
22
+ if (fs_1.default.existsSync(path_1.default.join(homeDistDir, 'workspace-telegram-bot.js'))) {
23
+ return homeDistDir;
24
+ }
25
+ // dist/src/commands → dist/ (the bundled CLI's own dist)
26
+ const bundledDist = path_1.default.join(__dirname, '..', '..');
27
+ return bundledDist;
28
+ }
29
+ async function runHooks() {
30
+ const distDir = resolveDistDir();
31
+ const hooks = {};
32
+ for (const def of hook_definitions_1.HOOK_DEFINITIONS) {
33
+ const scriptPath = path_1.default.join(distDir, def.script);
34
+ const command = `node ${scriptPath}${def.args ? ' ' + def.args : ''}`;
35
+ const hook = { type: 'command', command, timeout: def.timeout };
36
+ const entry = { hooks: [hook] };
37
+ if (def.matcher)
38
+ entry.matcher = def.matcher;
39
+ if (def.if)
40
+ entry.if = def.if;
41
+ hooks[def.event] = hooks[def.event] || [];
42
+ hooks[def.event].push(entry);
43
+ }
44
+ console.log();
45
+ console.log(picocolors_1.default.bold('Add this to ~/.claude/settings.json under "hooks":'));
46
+ console.log();
47
+ console.log(JSON.stringify(hooks, null, 2));
48
+ return 0;
49
+ }
50
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/commands/hooks.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;AAkBH,4BAkBC;AAlCD,gDAAwB;AACxB,4CAAoB;AACpB,4DAA4B;AAC5B,0CAA6C;AAC7C,gEAA6D;AAE7D,SAAS,cAAc;IACrB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,mBAAW,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,0DAA0D;IAC1D,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,QAAQ;IAC5B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,KAAK,GAAmD,EAAE,CAAC;IACjE,KAAK,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,QAAQ,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtE,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChE,MAAM,KAAK,GAA4B,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC7C,IAAI,GAAG,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,oBAAE,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `cheesy init` — orchestrates the full first-run flow.
3
+ *
4
+ * 1. Preflight (Node, OS, ~/.claude/, Claude CLI).
5
+ * 2. Telegram setup wizard (delegates to setup.ts as a child process).
6
+ * 3. License activation:
7
+ * --dev → write a dev marker, skip activation.
8
+ * LICENSE_KEY env set → headless activation.
9
+ * otherwise → prompt for the key on stdin.
10
+ *
11
+ * License activation runs *after* the wizard so customers can fully set up
12
+ * Telegram before being asked for the key. If activation fails, the wizard's
13
+ * Telegram config remains intact — they can retry with `cheesy license activate`.
14
+ */
15
+ export interface InitOptions {
16
+ /** Skip license activation (dev/test installs). */
17
+ dev?: boolean;
18
+ }
19
+ export declare function runInit(opts?: InitOptions): Promise<number>;
20
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiBH,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAiHD,wBAAsB,OAAO,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CrE"}