@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.
- package/.env.example +22 -0
- package/CHANGELOG.md +268 -0
- package/LICENSE +21 -0
- package/README.md +394 -0
- package/ccgram.service +24 -0
- package/config/channels.json +58 -0
- package/config/default.json +27 -0
- package/config/defaults/config.json +16 -0
- package/config/defaults/i18n.json +32 -0
- package/config/email-template.json +31 -0
- package/config/test-with-subagent.json +16 -0
- package/config/user.json +27 -0
- package/dist/claude-hook-notify.d.ts +7 -0
- package/dist/claude-hook-notify.d.ts.map +1 -0
- package/dist/claude-hook-notify.js +154 -0
- package/dist/claude-hook-notify.js.map +1 -0
- package/dist/claude-remote.d.ts +50 -0
- package/dist/claude-remote.d.ts.map +1 -0
- package/dist/claude-remote.js +927 -0
- package/dist/claude-remote.js.map +1 -0
- package/dist/elicitation-notify.d.ts +20 -0
- package/dist/elicitation-notify.d.ts.map +1 -0
- package/dist/elicitation-notify.js +241 -0
- package/dist/elicitation-notify.js.map +1 -0
- package/dist/enhanced-hook-notify.d.ts +23 -0
- package/dist/enhanced-hook-notify.d.ts.map +1 -0
- package/dist/enhanced-hook-notify.js +402 -0
- package/dist/enhanced-hook-notify.js.map +1 -0
- package/dist/permission-denied-notify.d.ts +11 -0
- package/dist/permission-denied-notify.d.ts.map +1 -0
- package/dist/permission-denied-notify.js +193 -0
- package/dist/permission-denied-notify.js.map +1 -0
- package/dist/permission-hook.d.ts +15 -0
- package/dist/permission-hook.d.ts.map +1 -0
- package/dist/permission-hook.js +386 -0
- package/dist/permission-hook.js.map +1 -0
- package/dist/pre-compact-notify.d.ts +13 -0
- package/dist/pre-compact-notify.d.ts.map +1 -0
- package/dist/pre-compact-notify.js +197 -0
- package/dist/pre-compact-notify.js.map +1 -0
- package/dist/prompt-bridge.d.ts +50 -0
- package/dist/prompt-bridge.d.ts.map +1 -0
- package/dist/prompt-bridge.js +173 -0
- package/dist/prompt-bridge.js.map +1 -0
- package/dist/question-notify.d.ts +17 -0
- package/dist/question-notify.d.ts.map +1 -0
- package/dist/question-notify.js +356 -0
- package/dist/question-notify.js.map +1 -0
- package/dist/setup.d.ts +10 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +649 -0
- package/dist/setup.js.map +1 -0
- package/dist/smart-monitor.d.ts +7 -0
- package/dist/smart-monitor.d.ts.map +1 -0
- package/dist/smart-monitor.js +256 -0
- package/dist/smart-monitor.js.map +1 -0
- package/dist/src/automation/clipboard-automation.d.ts +35 -0
- package/dist/src/automation/clipboard-automation.d.ts.map +1 -0
- package/dist/src/automation/clipboard-automation.js +242 -0
- package/dist/src/automation/clipboard-automation.js.map +1 -0
- package/dist/src/channels/base/channel.d.ts +60 -0
- package/dist/src/channels/base/channel.d.ts.map +1 -0
- package/dist/src/channels/base/channel.js +96 -0
- package/dist/src/channels/base/channel.js.map +1 -0
- package/dist/src/channels/email/smtp.d.ts +74 -0
- package/dist/src/channels/email/smtp.d.ts.map +1 -0
- package/dist/src/channels/email/smtp.js +605 -0
- package/dist/src/channels/email/smtp.js.map +1 -0
- package/dist/src/channels/line/line.d.ts +36 -0
- package/dist/src/channels/line/line.d.ts.map +1 -0
- package/dist/src/channels/line/line.js +180 -0
- package/dist/src/channels/line/line.js.map +1 -0
- package/dist/src/channels/line/webhook.d.ts +55 -0
- package/dist/src/channels/line/webhook.d.ts.map +1 -0
- package/dist/src/channels/line/webhook.js +191 -0
- package/dist/src/channels/line/webhook.js.map +1 -0
- package/dist/src/channels/local/desktop.d.ts +30 -0
- package/dist/src/channels/local/desktop.d.ts.map +1 -0
- package/dist/src/channels/local/desktop.js +161 -0
- package/dist/src/channels/local/desktop.js.map +1 -0
- package/dist/src/channels/telegram/telegram.d.ts +43 -0
- package/dist/src/channels/telegram/telegram.d.ts.map +1 -0
- package/dist/src/channels/telegram/telegram.js +223 -0
- package/dist/src/channels/telegram/telegram.js.map +1 -0
- package/dist/src/channels/telegram/webhook.d.ts +75 -0
- package/dist/src/channels/telegram/webhook.d.ts.map +1 -0
- package/dist/src/channels/telegram/webhook.js +278 -0
- package/dist/src/channels/telegram/webhook.js.map +1 -0
- package/dist/src/cli.d.ts +9 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +99 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +10 -0
- package/dist/src/commands/hooks.d.ts.map +1 -0
- package/dist/src/commands/hooks.js +50 -0
- package/dist/src/commands/hooks.js.map +1 -0
- package/dist/src/commands/init.d.ts +20 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +173 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/license.d.ts +15 -0
- package/dist/src/commands/license.d.ts.map +1 -0
- package/dist/src/commands/license.js +107 -0
- package/dist/src/commands/license.js.map +1 -0
- package/dist/src/commands/start.d.ts +17 -0
- package/dist/src/commands/start.d.ts.map +1 -0
- package/dist/src/commands/start.js +150 -0
- package/dist/src/commands/start.js.map +1 -0
- package/dist/src/commands/status.d.ts +8 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/src/commands/status.js +95 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/stop.d.ts +8 -0
- package/dist/src/commands/stop.d.ts.map +1 -0
- package/dist/src/commands/stop.js +64 -0
- package/dist/src/commands/stop.js.map +1 -0
- package/dist/src/config-manager.d.ts +16 -0
- package/dist/src/config-manager.d.ts.map +1 -0
- package/dist/src/config-manager.js +152 -0
- package/dist/src/config-manager.js.map +1 -0
- package/dist/src/core/config.d.ts +28 -0
- package/dist/src/core/config.d.ts.map +1 -0
- package/dist/src/core/config.js +248 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/logger.d.ts +19 -0
- package/dist/src/core/logger.d.ts.map +1 -0
- package/dist/src/core/logger.js +47 -0
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/notifier.d.ts +45 -0
- package/dist/src/core/notifier.d.ts.map +1 -0
- package/dist/src/core/notifier.js +189 -0
- package/dist/src/core/notifier.js.map +1 -0
- package/dist/src/lib/license-validator.d.ts +120 -0
- package/dist/src/lib/license-validator.d.ts.map +1 -0
- package/dist/src/lib/license-validator.js +294 -0
- package/dist/src/lib/license-validator.js.map +1 -0
- package/dist/src/lib/preflight.d.ts +28 -0
- package/dist/src/lib/preflight.d.ts.map +1 -0
- package/dist/src/lib/preflight.js +90 -0
- package/dist/src/lib/preflight.js.map +1 -0
- package/dist/src/relay/claude-command-bridge.d.ts +57 -0
- package/dist/src/relay/claude-command-bridge.d.ts.map +1 -0
- package/dist/src/relay/claude-command-bridge.js +188 -0
- package/dist/src/relay/claude-command-bridge.js.map +1 -0
- package/dist/src/relay/email-listener.d.ts +65 -0
- package/dist/src/relay/email-listener.d.ts.map +1 -0
- package/dist/src/relay/email-listener.js +460 -0
- package/dist/src/relay/email-listener.js.map +1 -0
- package/dist/src/relay/relay-pty.d.ts +21 -0
- package/dist/src/relay/relay-pty.d.ts.map +1 -0
- package/dist/src/relay/relay-pty.js +696 -0
- package/dist/src/relay/relay-pty.js.map +1 -0
- package/dist/src/relay/smart-injector.d.ts +30 -0
- package/dist/src/relay/smart-injector.d.ts.map +1 -0
- package/dist/src/relay/smart-injector.js +233 -0
- package/dist/src/relay/smart-injector.js.map +1 -0
- package/dist/src/relay/tmux-injector.d.ts +46 -0
- package/dist/src/relay/tmux-injector.d.ts.map +1 -0
- package/dist/src/relay/tmux-injector.js +413 -0
- package/dist/src/relay/tmux-injector.js.map +1 -0
- package/dist/src/tools/config-manager.d.ts +33 -0
- package/dist/src/tools/config-manager.d.ts.map +1 -0
- package/dist/src/tools/config-manager.js +448 -0
- package/dist/src/tools/config-manager.js.map +1 -0
- package/dist/src/tools/installer.d.ts +38 -0
- package/dist/src/tools/installer.d.ts.map +1 -0
- package/dist/src/tools/installer.js +222 -0
- package/dist/src/tools/installer.js.map +1 -0
- package/dist/src/types/callbacks.d.ts +53 -0
- package/dist/src/types/callbacks.d.ts.map +1 -0
- package/dist/src/types/callbacks.js +7 -0
- package/dist/src/types/callbacks.js.map +1 -0
- package/dist/src/types/config.d.ts +56 -0
- package/dist/src/types/config.d.ts.map +1 -0
- package/dist/src/types/config.js +6 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/hooks.d.ts +47 -0
- package/dist/src/types/hooks.d.ts.map +1 -0
- package/dist/src/types/hooks.js +6 -0
- package/dist/src/types/hooks.js.map +1 -0
- package/dist/src/types/index.d.ts +7 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +23 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/ipc.d.ts +43 -0
- package/dist/src/types/ipc.d.ts.map +1 -0
- package/dist/src/types/ipc.js +7 -0
- package/dist/src/types/ipc.js.map +1 -0
- package/dist/src/types/session.d.ts +87 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +9 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/telegram.d.ts +58 -0
- package/dist/src/types/telegram.d.ts.map +1 -0
- package/dist/src/types/telegram.js +6 -0
- package/dist/src/types/telegram.js.map +1 -0
- package/dist/src/utils/active-check.d.ts +20 -0
- package/dist/src/utils/active-check.d.ts.map +1 -0
- package/dist/src/utils/active-check.js +42 -0
- package/dist/src/utils/active-check.js.map +1 -0
- package/dist/src/utils/callback-parser.d.ts +23 -0
- package/dist/src/utils/callback-parser.d.ts.map +1 -0
- package/dist/src/utils/callback-parser.js +85 -0
- package/dist/src/utils/callback-parser.js.map +1 -0
- package/dist/src/utils/controller-injector.d.ts +21 -0
- package/dist/src/utils/controller-injector.d.ts.map +1 -0
- package/dist/src/utils/controller-injector.js +108 -0
- package/dist/src/utils/controller-injector.js.map +1 -0
- package/dist/src/utils/conversation-tracker.d.ts +32 -0
- package/dist/src/utils/conversation-tracker.d.ts.map +1 -0
- package/dist/src/utils/conversation-tracker.js +119 -0
- package/dist/src/utils/conversation-tracker.js.map +1 -0
- package/dist/src/utils/deep-link.d.ts +22 -0
- package/dist/src/utils/deep-link.d.ts.map +1 -0
- package/dist/src/utils/deep-link.js +43 -0
- package/dist/src/utils/deep-link.js.map +1 -0
- package/dist/src/utils/ghostty-session-manager.d.ts +81 -0
- package/dist/src/utils/ghostty-session-manager.d.ts.map +1 -0
- package/dist/src/utils/ghostty-session-manager.js +370 -0
- package/dist/src/utils/ghostty-session-manager.js.map +1 -0
- package/dist/src/utils/hook-definitions.d.ts +25 -0
- package/dist/src/utils/hook-definitions.d.ts.map +1 -0
- package/dist/src/utils/hook-definitions.js +36 -0
- package/dist/src/utils/hook-definitions.js.map +1 -0
- package/dist/src/utils/http-request.d.ts +25 -0
- package/dist/src/utils/http-request.d.ts.map +1 -0
- package/dist/src/utils/http-request.js +66 -0
- package/dist/src/utils/http-request.js.map +1 -0
- package/dist/src/utils/optional-require.d.ts +13 -0
- package/dist/src/utils/optional-require.d.ts.map +1 -0
- package/dist/src/utils/optional-require.js +37 -0
- package/dist/src/utils/optional-require.js.map +1 -0
- package/dist/src/utils/paths.d.ts +13 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +30 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/pty-session-manager.d.ts +43 -0
- package/dist/src/utils/pty-session-manager.d.ts.map +1 -0
- package/dist/src/utils/pty-session-manager.js +183 -0
- package/dist/src/utils/pty-session-manager.js.map +1 -0
- package/dist/src/utils/subagent-tracker.d.ts +64 -0
- package/dist/src/utils/subagent-tracker.d.ts.map +1 -0
- package/dist/src/utils/subagent-tracker.js +191 -0
- package/dist/src/utils/subagent-tracker.js.map +1 -0
- package/dist/src/utils/tmux-monitor.d.ts +102 -0
- package/dist/src/utils/tmux-monitor.d.ts.map +1 -0
- package/dist/src/utils/tmux-monitor.js +642 -0
- package/dist/src/utils/tmux-monitor.js.map +1 -0
- package/dist/src/utils/trace-capture.d.ts +42 -0
- package/dist/src/utils/trace-capture.d.ts.map +1 -0
- package/dist/src/utils/trace-capture.js +102 -0
- package/dist/src/utils/trace-capture.js.map +1 -0
- package/dist/src/utils/transcript-reader.d.ts +57 -0
- package/dist/src/utils/transcript-reader.d.ts.map +1 -0
- package/dist/src/utils/transcript-reader.js +229 -0
- package/dist/src/utils/transcript-reader.js.map +1 -0
- package/dist/start-all-webhooks.d.ts +7 -0
- package/dist/start-all-webhooks.d.ts.map +1 -0
- package/dist/start-all-webhooks.js +98 -0
- package/dist/start-all-webhooks.js.map +1 -0
- package/dist/start-line-webhook.d.ts +7 -0
- package/dist/start-line-webhook.d.ts.map +1 -0
- package/dist/start-line-webhook.js +59 -0
- package/dist/start-line-webhook.js.map +1 -0
- package/dist/start-relay-pty.d.ts +7 -0
- package/dist/start-relay-pty.d.ts.map +1 -0
- package/dist/start-relay-pty.js +173 -0
- package/dist/start-relay-pty.js.map +1 -0
- package/dist/start-telegram-webhook.d.ts +7 -0
- package/dist/start-telegram-webhook.d.ts.map +1 -0
- package/dist/start-telegram-webhook.js +80 -0
- package/dist/start-telegram-webhook.js.map +1 -0
- package/dist/user-prompt-hook.d.ts +13 -0
- package/dist/user-prompt-hook.d.ts.map +1 -0
- package/dist/user-prompt-hook.js +45 -0
- package/dist/user-prompt-hook.js.map +1 -0
- package/dist/workspace-router.d.ts +114 -0
- package/dist/workspace-router.d.ts.map +1 -0
- package/dist/workspace-router.js +572 -0
- package/dist/workspace-router.js.map +1 -0
- package/dist/workspace-telegram-bot.d.ts +3 -0
- package/dist/workspace-telegram-bot.d.ts.map +1 -0
- package/dist/workspace-telegram-bot.js +1847 -0
- package/dist/workspace-telegram-bot.js.map +1 -0
- package/package.json +85 -0
- package/src/types/callbacks.ts +73 -0
- package/src/types/config.ts +63 -0
- package/src/types/hooks.ts +50 -0
- package/src/types/index.ts +6 -0
- package/src/types/ipc.ts +55 -0
- package/src/types/session.ts +91 -0
- 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"}
|
package/dist/src/cli.js
ADDED
|
@@ -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"}
|