@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,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `cheesy init` — orchestrates the full first-run flow.
|
|
4
|
+
*
|
|
5
|
+
* 1. Preflight (Node, OS, ~/.claude/, Claude CLI).
|
|
6
|
+
* 2. Telegram setup wizard (delegates to setup.ts as a child process).
|
|
7
|
+
* 3. License activation:
|
|
8
|
+
* --dev → write a dev marker, skip activation.
|
|
9
|
+
* LICENSE_KEY env set → headless activation.
|
|
10
|
+
* otherwise → prompt for the key on stdin.
|
|
11
|
+
*
|
|
12
|
+
* License activation runs *after* the wizard so customers can fully set up
|
|
13
|
+
* Telegram before being asked for the key. If activation fails, the wizard's
|
|
14
|
+
* Telegram config remains intact — they can retry with `cheesy license activate`.
|
|
15
|
+
*/
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.runInit = runInit;
|
|
21
|
+
const child_process_1 = require("child_process");
|
|
22
|
+
const path_1 = __importDefault(require("path"));
|
|
23
|
+
const fs_1 = __importDefault(require("fs"));
|
|
24
|
+
const readline_1 = __importDefault(require("readline"));
|
|
25
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
26
|
+
const preflight_1 = require("../lib/preflight");
|
|
27
|
+
const license_validator_1 = require("../lib/license-validator");
|
|
28
|
+
function resolveSetupScript() {
|
|
29
|
+
const candidates = [
|
|
30
|
+
path_1.default.join(__dirname, '..', '..', 'setup.js'), // dist/src/commands → dist/setup.js
|
|
31
|
+
path_1.default.join(__dirname, '..', '..', '..', 'setup.js'), // alternate depth
|
|
32
|
+
];
|
|
33
|
+
for (const c of candidates) {
|
|
34
|
+
if (fs_1.default.existsSync(c))
|
|
35
|
+
return c;
|
|
36
|
+
}
|
|
37
|
+
return path_1.default.join(__dirname, '..', '..', '..', 'setup.ts');
|
|
38
|
+
}
|
|
39
|
+
/** One-shot prompt for a single line on stdin. Resolves to the trimmed input. */
|
|
40
|
+
function promptLine(question) {
|
|
41
|
+
const rl = readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
rl.question(question, (answer) => {
|
|
44
|
+
rl.close();
|
|
45
|
+
resolve(answer.trim());
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Run the Telegram setup wizard as a child process. */
|
|
50
|
+
function runWizard(env) {
|
|
51
|
+
const setupScript = resolveSetupScript();
|
|
52
|
+
if (!fs_1.default.existsSync(setupScript)) {
|
|
53
|
+
console.error(picocolors_1.default.red(`Could not find setup script at ${setupScript}.`));
|
|
54
|
+
console.error(picocolors_1.default.dim('Did you run `npm run build`? Or reinstall: npm i -g @selucas12/cheesy'));
|
|
55
|
+
return Promise.resolve(1);
|
|
56
|
+
}
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
const child = (0, child_process_1.spawn)(process.execPath, [setupScript], { stdio: 'inherit', env });
|
|
59
|
+
child.on('exit', (code) => resolve(code ?? 0));
|
|
60
|
+
child.on('error', (err) => {
|
|
61
|
+
console.error(picocolors_1.default.red(`Failed to launch setup: ${err.message}`));
|
|
62
|
+
resolve(1);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Render an activation result. Returns the exit code. */
|
|
67
|
+
function renderActivation(r) {
|
|
68
|
+
switch (r.kind) {
|
|
69
|
+
case 'ok':
|
|
70
|
+
console.log(picocolors_1.default.green('✓ License activated.'));
|
|
71
|
+
console.log(picocolors_1.default.dim(` Product: ${r.record.productName ?? '—'}`));
|
|
72
|
+
console.log(picocolors_1.default.dim(` Customer: ${r.record.customerEmail ?? '—'}`));
|
|
73
|
+
return 0;
|
|
74
|
+
case 'invalid':
|
|
75
|
+
console.error(picocolors_1.default.red(`✗ ${r.reason}`));
|
|
76
|
+
console.error(picocolors_1.default.dim(' Check the key in your email receipt from LemonSqueezy.'));
|
|
77
|
+
console.error(picocolors_1.default.dim(' Retry later with: cheesy license activate <YOUR-KEY>'));
|
|
78
|
+
return 1;
|
|
79
|
+
case 'limit':
|
|
80
|
+
console.error(picocolors_1.default.red(`✗ ${r.reason}`));
|
|
81
|
+
console.error(picocolors_1.default.dim(' Deactivate on another machine, then retry.'));
|
|
82
|
+
return 1;
|
|
83
|
+
case 'network':
|
|
84
|
+
console.error(picocolors_1.default.yellow(`⚠ Network issue: ${r.reason}`));
|
|
85
|
+
console.error(picocolors_1.default.dim(' Activate later with: cheesy license activate <YOUR-KEY>'));
|
|
86
|
+
return 2;
|
|
87
|
+
case 'bad-request':
|
|
88
|
+
console.error(picocolors_1.default.red(`✗ Request rejected: ${r.reason}`));
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Drive license activation. Returns exit code, but failure does NOT roll back
|
|
93
|
+
* the Telegram setup — customers can retry standalone with `cheesy license activate`. */
|
|
94
|
+
async function activateLicenseFlow(opts) {
|
|
95
|
+
console.log();
|
|
96
|
+
console.log(picocolors_1.default.bold(picocolors_1.default.cyan('License')));
|
|
97
|
+
if (opts.dev) {
|
|
98
|
+
(0, license_validator_1.writeDevMarker)();
|
|
99
|
+
console.log(picocolors_1.default.yellow('⚠ Dev mode marker written to ~/.ccgram/.license-dev'));
|
|
100
|
+
console.log(picocolors_1.default.dim(' `cheesy start` will run without license validation.'));
|
|
101
|
+
console.log(picocolors_1.default.dim(' To switch to a real license: cheesy license activate <KEY>'));
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
// If already activated, don't prompt again.
|
|
105
|
+
if ((0, license_validator_1.readLicenseRecord)()) {
|
|
106
|
+
console.log(picocolors_1.default.green('✓ License already activated on this machine.'));
|
|
107
|
+
console.log(picocolors_1.default.dim(' Run `cheesy license status` to verify.'));
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
// Headless: LICENSE_KEY env var.
|
|
111
|
+
const envKey = process.env.LICENSE_KEY || process.env.CHEESY_LICENSE_KEY;
|
|
112
|
+
if (envKey) {
|
|
113
|
+
console.log(picocolors_1.default.dim(`Activating with LICENSE_KEY from env on ${(0, license_validator_1.defaultInstanceName)()}…`));
|
|
114
|
+
const r = await (0, license_validator_1.activateAndStore)(envKey);
|
|
115
|
+
return renderActivation(r);
|
|
116
|
+
}
|
|
117
|
+
// Interactive.
|
|
118
|
+
console.log(picocolors_1.default.dim('Paste the license key from your LemonSqueezy email receipt.'));
|
|
119
|
+
console.log(picocolors_1.default.dim('Press Enter without a key to skip (you can run `cheesy license activate <KEY>` later).'));
|
|
120
|
+
console.log();
|
|
121
|
+
const key = await promptLine(picocolors_1.default.cyan('License key: '));
|
|
122
|
+
if (!key) {
|
|
123
|
+
console.log(picocolors_1.default.yellow('Skipped. The bot will not start until a license is activated.'));
|
|
124
|
+
console.log(picocolors_1.default.dim(' Activate later with: cheesy license activate <YOUR-KEY>'));
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
console.log(picocolors_1.default.dim(`Activating on ${(0, license_validator_1.defaultInstanceName)()}…`));
|
|
128
|
+
const r = await (0, license_validator_1.activateAndStore)(key);
|
|
129
|
+
return renderActivation(r);
|
|
130
|
+
}
|
|
131
|
+
async function runInit(opts = {}) {
|
|
132
|
+
console.log(picocolors_1.default.bold(picocolors_1.default.cyan('Cheesyboy init')));
|
|
133
|
+
console.log();
|
|
134
|
+
// 1. Preflight
|
|
135
|
+
const report = (0, preflight_1.runPreflight)();
|
|
136
|
+
console.log(picocolors_1.default.dim('Preflight:'));
|
|
137
|
+
console.log((0, preflight_1.formatPreflight)(report));
|
|
138
|
+
console.log();
|
|
139
|
+
if (!report.ok) {
|
|
140
|
+
console.error(picocolors_1.default.red('Preflight failed. Fix the hard (✗) checks above before running init.'));
|
|
141
|
+
return 1;
|
|
142
|
+
}
|
|
143
|
+
if (opts.dev) {
|
|
144
|
+
console.log(picocolors_1.default.yellow('⚠ --dev mode: license activation will be skipped (dev marker will be written).'));
|
|
145
|
+
console.log();
|
|
146
|
+
}
|
|
147
|
+
// 2. Telegram wizard
|
|
148
|
+
const env = { ...process.env };
|
|
149
|
+
if (opts.dev)
|
|
150
|
+
env.CHEESY_DEV_MODE = '1';
|
|
151
|
+
const wizardCode = await runWizard(env);
|
|
152
|
+
if (wizardCode !== 0) {
|
|
153
|
+
console.error(picocolors_1.default.red(`Setup wizard exited with code ${wizardCode}. Skipping license activation.`));
|
|
154
|
+
return wizardCode;
|
|
155
|
+
}
|
|
156
|
+
// 3. License — only if not in dev mode and no dev marker already exists.
|
|
157
|
+
// Note: if a previous --dev run wrote the marker, a re-run *without* --dev
|
|
158
|
+
// still respects the marker; the customer can explicitly activate.
|
|
159
|
+
if ((0, license_validator_1.isDevMode)() && !opts.dev) {
|
|
160
|
+
console.log();
|
|
161
|
+
console.log(picocolors_1.default.yellow('Dev marker exists — skipping license activation.'));
|
|
162
|
+
console.log(picocolors_1.default.dim(' To activate: cheesy license activate <YOUR-KEY> (will clear the marker).'));
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
const licenseCode = await activateLicenseFlow(opts);
|
|
166
|
+
// Activation failure doesn't fail init — Telegram setup is still good.
|
|
167
|
+
if (licenseCode !== 0) {
|
|
168
|
+
console.log();
|
|
169
|
+
console.log(picocolors_1.default.dim('Telegram setup completed successfully. Re-try license activation any time.'));
|
|
170
|
+
}
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cheesy license <subcommand>` — manage LemonSqueezy license activation.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* activate <key> — Activate a license key on this machine.
|
|
6
|
+
* status — Validate the cached license remotely and print details.
|
|
7
|
+
* deactivate — Release this machine's activation slot (frees a seat).
|
|
8
|
+
*/
|
|
9
|
+
import { readLicenseRecord, type LicenseRecord } from '../lib/license-validator';
|
|
10
|
+
export { readLicenseRecord as readLicense };
|
|
11
|
+
export type { LicenseRecord };
|
|
12
|
+
export declare function runLicenseActivate(key: string): Promise<number>;
|
|
13
|
+
export declare function runLicenseStatus(): Promise<number>;
|
|
14
|
+
export declare function runLicenseDeactivate(): Promise<number>;
|
|
15
|
+
//# sourceMappingURL=license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../../src/commands/license.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAIL,iBAAiB,EAIjB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,CAAC;AAoD9B,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQrE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAiBxD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS5D"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `cheesy license <subcommand>` — manage LemonSqueezy license activation.
|
|
4
|
+
*
|
|
5
|
+
* Subcommands:
|
|
6
|
+
* activate <key> — Activate a license key on this machine.
|
|
7
|
+
* status — Validate the cached license remotely and print details.
|
|
8
|
+
* deactivate — Release this machine's activation slot (frees a seat).
|
|
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.readLicense = void 0;
|
|
15
|
+
exports.runLicenseActivate = runLicenseActivate;
|
|
16
|
+
exports.runLicenseStatus = runLicenseStatus;
|
|
17
|
+
exports.runLicenseDeactivate = runLicenseDeactivate;
|
|
18
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
19
|
+
const license_validator_1 = require("../lib/license-validator");
|
|
20
|
+
Object.defineProperty(exports, "readLicense", { enumerable: true, get: function () { return license_validator_1.readLicenseRecord; } });
|
|
21
|
+
function renderResult(action, r) {
|
|
22
|
+
switch (r.kind) {
|
|
23
|
+
case 'ok':
|
|
24
|
+
console.log(picocolors_1.default.green(`✓ License ${action} succeeded.`));
|
|
25
|
+
printRecord(r.record);
|
|
26
|
+
return 0;
|
|
27
|
+
case 'invalid':
|
|
28
|
+
console.error(picocolors_1.default.red(`✗ ${r.reason}`));
|
|
29
|
+
console.error(picocolors_1.default.dim('Check your license key — it should be in the email receipt from LemonSqueezy.'));
|
|
30
|
+
return 1;
|
|
31
|
+
case 'limit':
|
|
32
|
+
console.error(picocolors_1.default.red(`✗ ${r.reason}`));
|
|
33
|
+
console.error(picocolors_1.default.dim('You\'ve hit the activation limit for this license.'));
|
|
34
|
+
console.error(picocolors_1.default.dim('Deactivate on another machine: cheesy license deactivate (run on that machine)'));
|
|
35
|
+
console.error(picocolors_1.default.dim('Or contact support to raise the limit.'));
|
|
36
|
+
return 1;
|
|
37
|
+
case 'network':
|
|
38
|
+
console.error(picocolors_1.default.yellow(`⚠ Network issue: ${r.reason}`));
|
|
39
|
+
console.error(picocolors_1.default.dim('Check your connection and try again.'));
|
|
40
|
+
return 2;
|
|
41
|
+
case 'bad-request':
|
|
42
|
+
console.error(picocolors_1.default.red(`✗ Request rejected: ${r.reason}`));
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function printRecord(rec) {
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(` Product: ${rec.productName ?? picocolors_1.default.dim('—')}`);
|
|
49
|
+
console.log(` Customer: ${rec.customerEmail ?? picocolors_1.default.dim('—')}`);
|
|
50
|
+
console.log(` Instance: ${rec.instanceName} (${picocolors_1.default.dim(rec.instanceId)})`);
|
|
51
|
+
console.log(` Status: ${rec.status ? statusColor(rec.status) : picocolors_1.default.dim('unknown')}`);
|
|
52
|
+
if (rec.activationLimit) {
|
|
53
|
+
console.log(` Slots: ${rec.activationUsage ?? 0} / ${rec.activationLimit}`);
|
|
54
|
+
}
|
|
55
|
+
if (rec.expiresAt) {
|
|
56
|
+
console.log(` Expires: ${rec.expiresAt}`);
|
|
57
|
+
}
|
|
58
|
+
if (rec.lastValidatedAt) {
|
|
59
|
+
console.log(` Validated: ${rec.lastValidatedAt}`);
|
|
60
|
+
}
|
|
61
|
+
console.log(` Key: ${picocolors_1.default.dim(rec.licenseKey.slice(0, 8) + '…' + rec.licenseKey.slice(-4))}`);
|
|
62
|
+
}
|
|
63
|
+
function statusColor(s) {
|
|
64
|
+
if (s === 'active')
|
|
65
|
+
return picocolors_1.default.green(s);
|
|
66
|
+
if (s === 'expired' || s === 'disabled')
|
|
67
|
+
return picocolors_1.default.red(s);
|
|
68
|
+
return picocolors_1.default.yellow(s);
|
|
69
|
+
}
|
|
70
|
+
async function runLicenseActivate(key) {
|
|
71
|
+
if (!key || !/^[0-9A-Fa-f-]{8,}/.test(key)) {
|
|
72
|
+
console.error(picocolors_1.default.red('License key looks malformed. Expected a UUID-like string from your email receipt.'));
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
console.log(picocolors_1.default.cyan(`Activating license on ${(0, license_validator_1.defaultInstanceName)()}…`));
|
|
76
|
+
const r = await (0, license_validator_1.activateAndStore)(key);
|
|
77
|
+
return renderResult('activation', r);
|
|
78
|
+
}
|
|
79
|
+
async function runLicenseStatus() {
|
|
80
|
+
// Dev mode short-circuit
|
|
81
|
+
if ((0, license_validator_1.isDevMode)()) {
|
|
82
|
+
console.log(picocolors_1.default.yellow('License: DEV MODE'));
|
|
83
|
+
console.log(picocolors_1.default.dim('Marker file at ~/.ccgram/.license-dev'));
|
|
84
|
+
console.log(picocolors_1.default.dim('To use a real license: cheesy license activate <KEY>'));
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
const cached = (0, license_validator_1.readLicenseRecord)();
|
|
88
|
+
if (!cached) {
|
|
89
|
+
console.log(picocolors_1.default.dim('No license activated on this machine.'));
|
|
90
|
+
console.log(picocolors_1.default.dim(`Run: ${picocolors_1.default.bold('cheesy license activate <YOUR-KEY>')}`));
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
console.log(picocolors_1.default.cyan('Validating license…'));
|
|
94
|
+
const r = await (0, license_validator_1.validateStored)();
|
|
95
|
+
return renderResult('validation', r);
|
|
96
|
+
}
|
|
97
|
+
async function runLicenseDeactivate() {
|
|
98
|
+
const cached = (0, license_validator_1.readLicenseRecord)();
|
|
99
|
+
if (!cached) {
|
|
100
|
+
console.log(picocolors_1.default.dim('No license to deactivate.'));
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
console.log(picocolors_1.default.cyan(`Deactivating ${cached.instanceName} (${cached.instanceId.slice(0, 8)}…)`));
|
|
104
|
+
const r = await (0, license_validator_1.deactivateStored)();
|
|
105
|
+
return renderResult('deactivation', r);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../../src/commands/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cheesy start` — bring the bot online.
|
|
3
|
+
*
|
|
4
|
+
* Default: bring up the OS-managed service (launchd on macOS, systemd on Linux).
|
|
5
|
+
* Falls back to a foreground spawn if no service is installed.
|
|
6
|
+
*
|
|
7
|
+
* Flags:
|
|
8
|
+
* --foreground Always run in the foreground (good for debugging).
|
|
9
|
+
* --background (default) prefer the OS service.
|
|
10
|
+
*/
|
|
11
|
+
export interface StartOptions {
|
|
12
|
+
foreground?: boolean;
|
|
13
|
+
/** Bypass license validation. Intended for CI/dev only. */
|
|
14
|
+
skipLicense?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function runStart(opts?: StartOptions): Promise<number>;
|
|
17
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqFD,wBAAsB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBvE"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `cheesy start` — bring the bot online.
|
|
4
|
+
*
|
|
5
|
+
* Default: bring up the OS-managed service (launchd on macOS, systemd on Linux).
|
|
6
|
+
* Falls back to a foreground spawn if no service is installed.
|
|
7
|
+
*
|
|
8
|
+
* Flags:
|
|
9
|
+
* --foreground Always run in the foreground (good for debugging).
|
|
10
|
+
* --background (default) prefer the OS service.
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.runStart = runStart;
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const os_1 = __importDefault(require("os"));
|
|
20
|
+
const child_process_1 = require("child_process");
|
|
21
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
22
|
+
const paths_1 = require("../utils/paths");
|
|
23
|
+
const license_validator_1 = require("../lib/license-validator");
|
|
24
|
+
/**
|
|
25
|
+
* Gate `cheesy start` on a valid license unless the user is in dev mode or
|
|
26
|
+
* explicitly skipping. Returns null on success, an exit code on refusal.
|
|
27
|
+
*/
|
|
28
|
+
async function gateLicense(opts) {
|
|
29
|
+
if (opts.skipLicense || process.env.CHEESY_SKIP_LICENSE === '1') {
|
|
30
|
+
console.log(picocolors_1.default.yellow('⚠ License check skipped (CHEESY_SKIP_LICENSE / --skip-license).'));
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
if ((0, license_validator_1.isDevMode)()) {
|
|
34
|
+
console.log(picocolors_1.default.yellow('⚠ DEV MODE — license check skipped.'));
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const cached = (0, license_validator_1.readLicenseRecord)();
|
|
38
|
+
if (!cached) {
|
|
39
|
+
console.error(picocolors_1.default.red('✗ No license activated on this machine.'));
|
|
40
|
+
console.error(picocolors_1.default.dim(' Activate with: cheesy license activate <YOUR-KEY>'));
|
|
41
|
+
console.error(picocolors_1.default.dim(' Or run `cheesy init --dev` for a no-license dev install.'));
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
const r = await (0, license_validator_1.validateStored)();
|
|
45
|
+
if (r.kind === 'ok')
|
|
46
|
+
return null;
|
|
47
|
+
// Errors render here so callers don't have to.
|
|
48
|
+
if (r.kind === 'network') {
|
|
49
|
+
console.error(picocolors_1.default.yellow(`⚠ ${r.reason}`));
|
|
50
|
+
console.error(picocolors_1.default.dim(' Refusing to start until license can be re-validated.'));
|
|
51
|
+
return 2;
|
|
52
|
+
}
|
|
53
|
+
if (r.kind === 'limit') {
|
|
54
|
+
console.error(picocolors_1.default.red(`✗ ${r.reason}`));
|
|
55
|
+
console.error(picocolors_1.default.dim(' Deactivate on another machine to free a slot, then retry.'));
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
console.error(picocolors_1.default.red(`✗ License invalid: ${r.reason}`));
|
|
59
|
+
console.error(picocolors_1.default.dim(' Run: cheesy license status'));
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
function resolveBotScript() {
|
|
63
|
+
const candidates = [
|
|
64
|
+
path_1.default.join(paths_1.CCGRAM_HOME, 'dist', 'workspace-telegram-bot.js'),
|
|
65
|
+
path_1.default.join(__dirname, '..', '..', 'workspace-telegram-bot.js'), // dist/src/commands → dist/workspace-telegram-bot.js
|
|
66
|
+
path_1.default.join(__dirname, '..', '..', '..', 'workspace-telegram-bot.js'), // alternate depth
|
|
67
|
+
];
|
|
68
|
+
for (const c of candidates) {
|
|
69
|
+
if (fs_1.default.existsSync(c))
|
|
70
|
+
return c;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function startLaunchd() {
|
|
75
|
+
const plistPath = path_1.default.join(os_1.default.homedir(), 'Library', 'LaunchAgents', 'com.ccgram.plist');
|
|
76
|
+
if (!fs_1.default.existsSync(plistPath))
|
|
77
|
+
return -1; // not installed — fall through
|
|
78
|
+
try {
|
|
79
|
+
// Bootstrap is idempotent; ignore the "already loaded" error.
|
|
80
|
+
(0, child_process_1.execSync)(`launchctl bootstrap gui/$(id -u) ${plistPath} 2>/dev/null || launchctl kickstart -k gui/$(id -u)/com.ccgram`, { stdio: 'inherit' });
|
|
81
|
+
console.log(picocolors_1.default.green('✓ launchd service started (com.ccgram)'));
|
|
82
|
+
console.log(picocolors_1.default.dim(' Logs: tail -f ~/.ccgram/logs/bot-stdout.log'));
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(picocolors_1.default.red(`launchctl failed: ${err.message}`));
|
|
87
|
+
return 1;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function startSystemd() {
|
|
91
|
+
try {
|
|
92
|
+
// Check the unit exists first
|
|
93
|
+
(0, child_process_1.execSync)('systemctl status ccgram 2>&1 | head -1', { stdio: 'pipe' });
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return -1; // not installed
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
(0, child_process_1.execSync)('sudo systemctl start ccgram', { stdio: 'inherit' });
|
|
100
|
+
console.log(picocolors_1.default.green('✓ systemd service started (ccgram)'));
|
|
101
|
+
console.log(picocolors_1.default.dim(' Logs: journalctl -u ccgram -f'));
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.error(picocolors_1.default.red(`systemctl failed: ${err.message}`));
|
|
106
|
+
return 1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function runStart(opts = {}) {
|
|
110
|
+
const refusal = await gateLicense(opts);
|
|
111
|
+
if (refusal !== null)
|
|
112
|
+
return refusal;
|
|
113
|
+
if (opts.foreground) {
|
|
114
|
+
return startForegroundAwaitable();
|
|
115
|
+
}
|
|
116
|
+
// Try the OS service first.
|
|
117
|
+
if (process.platform === 'darwin') {
|
|
118
|
+
const r = startLaunchd();
|
|
119
|
+
if (r >= 0)
|
|
120
|
+
return r;
|
|
121
|
+
console.log(picocolors_1.default.yellow('No launchd plist found — falling back to foreground.'));
|
|
122
|
+
}
|
|
123
|
+
else if (process.platform === 'linux') {
|
|
124
|
+
const r = startSystemd();
|
|
125
|
+
if (r >= 0)
|
|
126
|
+
return r;
|
|
127
|
+
console.log(picocolors_1.default.yellow('No systemd unit found — falling back to foreground.'));
|
|
128
|
+
}
|
|
129
|
+
return startForegroundAwaitable();
|
|
130
|
+
}
|
|
131
|
+
async function startForegroundAwaitable() {
|
|
132
|
+
const botScript = resolveBotScript();
|
|
133
|
+
if (!botScript) {
|
|
134
|
+
console.error(picocolors_1.default.red('Could not find workspace-telegram-bot.js.'));
|
|
135
|
+
console.error(picocolors_1.default.dim('Try `cheesy init` first, or rebuild with `npm run build`.'));
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
console.log(picocolors_1.default.cyan(`Running bot in foreground: ${botScript}`));
|
|
139
|
+
console.log(picocolors_1.default.dim('Press Ctrl+C to stop.'));
|
|
140
|
+
console.log();
|
|
141
|
+
return new Promise((resolve) => {
|
|
142
|
+
const child = (0, child_process_1.spawn)(process.execPath, [botScript], { stdio: 'inherit' });
|
|
143
|
+
child.on('exit', (code) => resolve(code ?? 0));
|
|
144
|
+
child.on('error', (err) => {
|
|
145
|
+
console.error(picocolors_1.default.red(`Failed to start bot: ${err.message}`));
|
|
146
|
+
resolve(1);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cheesy status` — show bot + session status.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the legacy root-level cli.ts. Reads the session map from the
|
|
5
|
+
* persistent install (~/.ccgram/) when present, else from the source root.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runStatus(): Promise<number>;
|
|
8
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8DH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CA0BjD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `cheesy status` — show bot + session status.
|
|
4
|
+
*
|
|
5
|
+
* Ported from the legacy root-level cli.ts. Reads the session map from the
|
|
6
|
+
* persistent install (~/.ccgram/) when present, else from the source root.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.runStatus = runStatus;
|
|
13
|
+
const fs_1 = __importDefault(require("fs"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const child_process_1 = require("child_process");
|
|
16
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
17
|
+
const paths_1 = require("../utils/paths");
|
|
18
|
+
function isBotRunning() {
|
|
19
|
+
try {
|
|
20
|
+
(0, child_process_1.execSync)('pgrep -f workspace-telegram-bot.js', { stdio: 'ignore' });
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function isServiceLoaded() {
|
|
28
|
+
// macOS launchd
|
|
29
|
+
if (process.platform === 'darwin') {
|
|
30
|
+
try {
|
|
31
|
+
(0, child_process_1.execSync)('launchctl print gui/$(id -u)/com.ccgram', { stdio: 'pipe' });
|
|
32
|
+
return { kind: 'launchd', running: true };
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return { kind: 'launchd', running: false };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Linux systemd (user or system)
|
|
39
|
+
if (process.platform === 'linux') {
|
|
40
|
+
try {
|
|
41
|
+
const out = (0, child_process_1.execSync)('systemctl is-active ccgram 2>/dev/null || true', { encoding: 'utf8' }).trim();
|
|
42
|
+
return { kind: 'systemd', running: out === 'active' };
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return { kind: 'systemd', running: false };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { kind: 'none', running: false };
|
|
49
|
+
}
|
|
50
|
+
function readSessionCount() {
|
|
51
|
+
const dataRoot = fs_1.default.existsSync(path_1.default.join(paths_1.CCGRAM_HOME, 'package.json')) ? paths_1.CCGRAM_HOME : process.cwd();
|
|
52
|
+
const sessionMapPath = path_1.default.join(dataRoot, 'src', 'data', 'session-map.json');
|
|
53
|
+
try {
|
|
54
|
+
const raw = fs_1.default.readFileSync(sessionMapPath, 'utf8');
|
|
55
|
+
return Object.keys(JSON.parse(raw)).length;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function readLicenseSummary() {
|
|
62
|
+
const licensePath = path_1.default.join(paths_1.CCGRAM_HOME, '.license.json');
|
|
63
|
+
try {
|
|
64
|
+
const raw = fs_1.default.readFileSync(licensePath, 'utf8');
|
|
65
|
+
const j = JSON.parse(raw);
|
|
66
|
+
return { exists: true, productName: j.productName, instanceName: j.instanceName };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return { exists: false };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function runStatus() {
|
|
73
|
+
console.log(picocolors_1.default.bold(picocolors_1.default.cyan('Cheesyboy status')));
|
|
74
|
+
console.log();
|
|
75
|
+
const botRunning = isBotRunning();
|
|
76
|
+
const service = isServiceLoaded();
|
|
77
|
+
const sessions = readSessionCount();
|
|
78
|
+
const license = readLicenseSummary();
|
|
79
|
+
const mark = (b) => b ? picocolors_1.default.green('●') : picocolors_1.default.red('○');
|
|
80
|
+
console.log(` ${mark(botRunning)} Bot process: ${botRunning ? picocolors_1.default.green('running') : picocolors_1.default.red('stopped')}`);
|
|
81
|
+
if (service.kind !== 'none') {
|
|
82
|
+
console.log(` ${mark(service.running)} ${service.kind === 'launchd' ? 'launchd' : 'systemd'} service: ${service.running ? picocolors_1.default.green('loaded') : picocolors_1.default.dim('not loaded')}`);
|
|
83
|
+
}
|
|
84
|
+
console.log(` ${picocolors_1.default.dim('•')} Sessions: ${sessions}`);
|
|
85
|
+
console.log(` ${picocolors_1.default.dim('•')} Install dir: ${paths_1.CCGRAM_HOME}${fs_1.default.existsSync(paths_1.CCGRAM_HOME) ? '' : picocolors_1.default.dim(' (missing — run `cheesy init`)')}`);
|
|
86
|
+
console.log(` ${license.exists ? picocolors_1.default.green('●') : picocolors_1.default.dim('○')} License: ${license.exists ? picocolors_1.default.green(license.productName || 'activated') : picocolors_1.default.dim('not activated')}`);
|
|
87
|
+
if (license.exists && license.instanceName) {
|
|
88
|
+
console.log(` ${picocolors_1.default.dim('instance:')} ${license.instanceName}`);
|
|
89
|
+
}
|
|
90
|
+
if (process.env.HEALTH_PORT) {
|
|
91
|
+
console.log(` ${picocolors_1.default.dim('•')} Health: http://127.0.0.1:${process.env.HEALTH_PORT}/health`);
|
|
92
|
+
}
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cheesy stop` — take the bot offline.
|
|
3
|
+
*
|
|
4
|
+
* Tries the OS-managed service first, then falls back to killing any
|
|
5
|
+
* workspace-telegram-bot.js process started in the foreground.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runStop(): Promise<number>;
|
|
8
|
+
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH,wBAAsB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAgB/C"}
|