@jsayubi/ccgram 1.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 +19 -0
- package/LICENSE +21 -0
- package/README.md +338 -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/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +110 -0
- package/dist/cli.js.map +1 -0
- package/dist/enhanced-hook-notify.d.ts +16 -0
- package/dist/enhanced-hook-notify.d.ts.map +1 -0
- package/dist/enhanced-hook-notify.js +288 -0
- package/dist/enhanced-hook-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 +357 -0
- package/dist/permission-hook.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 +16 -0
- package/dist/question-notify.d.ts.map +1 -0
- package/dist/question-notify.js +272 -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/claude-automation.d.ts +45 -0
- package/dist/src/automation/claude-automation.d.ts.map +1 -0
- package/dist/src/automation/claude-automation.js +367 -0
- package/dist/src/automation/claude-automation.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/automation/simple-automation.d.ts +56 -0
- package/dist/src/automation/simple-automation.d.ts.map +1 -0
- package/dist/src/automation/simple-automation.js +283 -0
- package/dist/src/automation/simple-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/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/daemon/taskping-daemon.d.ts +38 -0
- package/dist/src/daemon/taskping-daemon.d.ts.map +1 -0
- package/dist/src/daemon/taskping-daemon.js +306 -0
- package/dist/src/daemon/taskping-daemon.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/command-relay.d.ts +94 -0
- package/dist/src/relay/command-relay.d.ts.map +1 -0
- package/dist/src/relay/command-relay.js +463 -0
- package/dist/src/relay/command-relay.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 +29 -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 +70 -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 +19 -0
- package/dist/src/utils/active-check.d.ts.map +1 -0
- package/dist/src/utils/active-check.js +41 -0
- package/dist/src/utils/active-check.js.map +1 -0
- package/dist/src/utils/callback-parser.d.ts +21 -0
- package/dist/src/utils/callback-parser.d.ts.map +1 -0
- package/dist/src/utils/callback-parser.js +58 -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/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 +11 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +28 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/pty-session-manager.d.ts +42 -0
- package/dist/src/utils/pty-session-manager.d.ts.map +1 -0
- package/dist/src/utils/pty-session-manager.js +182 -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/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 +78 -0
- package/dist/workspace-router.d.ts.map +1 -0
- package/dist/workspace-router.js +408 -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 +1172 -0
- package/dist/workspace-telegram-bot.js.map +1 -0
- package/package.json +80 -0
- package/src/types/callbacks.ts +39 -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 +72 -0
- package/src/types/telegram.ts +66 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CCGram Configuration Manager
|
|
4
|
+
* Interactive configuration tool for managing settings
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
const readline_1 = __importDefault(require("readline"));
|
|
10
|
+
const logger_1 = __importDefault(require("../core/logger"));
|
|
11
|
+
class ConfigurationManager {
|
|
12
|
+
config;
|
|
13
|
+
logger;
|
|
14
|
+
rl;
|
|
15
|
+
constructor(configManager) {
|
|
16
|
+
this.config = configManager;
|
|
17
|
+
this.logger = new logger_1.default('ConfigManager');
|
|
18
|
+
this.rl = readline_1.default.createInterface({
|
|
19
|
+
input: process.stdin,
|
|
20
|
+
output: process.stdout
|
|
21
|
+
});
|
|
22
|
+
// Enable keypress events
|
|
23
|
+
if (process.stdin.isTTY) {
|
|
24
|
+
process.stdin.setRawMode(true);
|
|
25
|
+
}
|
|
26
|
+
readline_1.default.emitKeypressEvents(process.stdin, this.rl);
|
|
27
|
+
}
|
|
28
|
+
async run(args = []) {
|
|
29
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
30
|
+
this.showHelp();
|
|
31
|
+
this.rl.close();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (args.includes('--show')) {
|
|
35
|
+
this.displayCurrentConfig();
|
|
36
|
+
this.rl.close();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
await this.showMainMenu();
|
|
40
|
+
}
|
|
41
|
+
async question(prompt) {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
this.rl.question(prompt, resolve);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
displayCurrentConfig() {
|
|
47
|
+
console.log('\nCurrent configuration:');
|
|
48
|
+
console.log('โโ Language:', this.config.get('language'));
|
|
49
|
+
console.log('โโ Enabled status:', this.config.get('enabled') ? 'Enabled' : 'Disabled');
|
|
50
|
+
console.log('โโ Timeout:', this.config.get('timeout') + ' seconds');
|
|
51
|
+
console.log('โโ Completion sound:', this.config.get('sound.completed'));
|
|
52
|
+
console.log('โโ Waiting sound:', this.config.get('sound.waiting'));
|
|
53
|
+
console.log();
|
|
54
|
+
}
|
|
55
|
+
async showMainMenu() {
|
|
56
|
+
while (true) {
|
|
57
|
+
console.log('\n=== CCGram Configuration Manager ===');
|
|
58
|
+
this.displayCurrentConfig();
|
|
59
|
+
console.log('Options:');
|
|
60
|
+
console.log('1. Basic Settings');
|
|
61
|
+
console.log('2. Sound Configuration');
|
|
62
|
+
console.log('3. Notification Channels');
|
|
63
|
+
console.log('4. Command Relay');
|
|
64
|
+
console.log('5. Test Notifications');
|
|
65
|
+
console.log('6. Save and Exit');
|
|
66
|
+
console.log('7. Exit (without saving)');
|
|
67
|
+
const choice = await this.question('\nPlease select (1-7): ');
|
|
68
|
+
switch (choice) {
|
|
69
|
+
case '1':
|
|
70
|
+
await this.configureBasicSettings();
|
|
71
|
+
break;
|
|
72
|
+
case '2':
|
|
73
|
+
await this.configureSounds();
|
|
74
|
+
break;
|
|
75
|
+
case '3':
|
|
76
|
+
await this.configureChannels();
|
|
77
|
+
break;
|
|
78
|
+
case '4':
|
|
79
|
+
await this.configureRelay();
|
|
80
|
+
break;
|
|
81
|
+
case '5':
|
|
82
|
+
await this.testNotifications();
|
|
83
|
+
break;
|
|
84
|
+
case '6':
|
|
85
|
+
if (this.config.save()) {
|
|
86
|
+
console.log('โ
Configuration saved');
|
|
87
|
+
this.rl.close();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log('โ Save failed');
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
case '7':
|
|
95
|
+
console.log('Exit (changes not saved)');
|
|
96
|
+
this.rl.close();
|
|
97
|
+
return;
|
|
98
|
+
default:
|
|
99
|
+
console.log('โ Invalid selection');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async configureBasicSettings() {
|
|
104
|
+
console.log('\n=== Basic Settings ===');
|
|
105
|
+
console.log('1. Configure Language');
|
|
106
|
+
console.log('2. Toggle Enabled Status');
|
|
107
|
+
console.log('3. Configure Timeout');
|
|
108
|
+
console.log('4. Custom Messages');
|
|
109
|
+
console.log('0. Return to Main Menu');
|
|
110
|
+
const choice = await this.question('\n Please select (0-4): ');
|
|
111
|
+
switch (choice) {
|
|
112
|
+
case '1':
|
|
113
|
+
await this.configureLanguage();
|
|
114
|
+
break;
|
|
115
|
+
case '2':
|
|
116
|
+
await this.toggleEnabled();
|
|
117
|
+
break;
|
|
118
|
+
case '3':
|
|
119
|
+
await this.configureTimeout();
|
|
120
|
+
break;
|
|
121
|
+
case '4':
|
|
122
|
+
await this.configureCustomMessages();
|
|
123
|
+
break;
|
|
124
|
+
case '0':
|
|
125
|
+
return;
|
|
126
|
+
default:
|
|
127
|
+
console.log('โ Invalid selection');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async configureLanguage() {
|
|
131
|
+
const languages = ['zh-CN', 'en', 'ja'];
|
|
132
|
+
console.log('\nAvailable languages:');
|
|
133
|
+
languages.forEach((lang, index) => {
|
|
134
|
+
console.log(`${index + 1}. ${lang}`);
|
|
135
|
+
});
|
|
136
|
+
const choice = await this.question(`Select language (1-${languages.length}): `);
|
|
137
|
+
const index = parseInt(choice) - 1;
|
|
138
|
+
if (index >= 0 && index < languages.length) {
|
|
139
|
+
this.config.set('language', languages[index]);
|
|
140
|
+
console.log(`โ
Language set to: ${languages[index]}`);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.log('โ Invalid selection');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async toggleEnabled() {
|
|
147
|
+
const current = this.config.get('enabled', true);
|
|
148
|
+
this.config.set('enabled', !current);
|
|
149
|
+
console.log(`โ
Notifications ${!current ? 'enabled' : 'disabled'}`);
|
|
150
|
+
}
|
|
151
|
+
async configureTimeout() {
|
|
152
|
+
const timeout = await this.question('Set timeout (seconds): ');
|
|
153
|
+
const timeoutNum = parseInt(timeout);
|
|
154
|
+
if (timeoutNum > 0 && timeoutNum <= 30) {
|
|
155
|
+
this.config.set('timeout', timeoutNum);
|
|
156
|
+
console.log(`โ
Timeout set to: ${timeoutNum} seconds`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log('โ Invalid timeout (1-30 seconds)');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async configureSounds() {
|
|
163
|
+
// Load desktop channel to get available sounds
|
|
164
|
+
const DesktopChannel = require('../channels/local/desktop');
|
|
165
|
+
const desktop = new DesktopChannel();
|
|
166
|
+
const soundCategories = desktop.getAvailableSounds();
|
|
167
|
+
console.log('\n=== Sound Configuration ===');
|
|
168
|
+
// Configure completed sound
|
|
169
|
+
console.log('\n--- Configure Task Completion Sound ---');
|
|
170
|
+
const completedSound = await this.selectSoundFromCategories(soundCategories, 'task completion');
|
|
171
|
+
if (completedSound) {
|
|
172
|
+
this.config.set('sound.completed', completedSound);
|
|
173
|
+
console.log(`โ
Task completion sound set to: ${completedSound}`);
|
|
174
|
+
}
|
|
175
|
+
// Configure waiting sound
|
|
176
|
+
console.log('\n--- Configure Waiting Input Sound ---');
|
|
177
|
+
const waitingSound = await this.selectSoundFromCategories(soundCategories, 'waiting input');
|
|
178
|
+
if (waitingSound) {
|
|
179
|
+
this.config.set('sound.waiting', waitingSound);
|
|
180
|
+
console.log(`โ
Waiting input sound set to: ${waitingSound}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async selectSoundFromCategories(soundCategories, type) {
|
|
184
|
+
const categories = Object.keys(soundCategories);
|
|
185
|
+
console.log(`\nSelect ${type} sound category:`);
|
|
186
|
+
categories.forEach((category, index) => {
|
|
187
|
+
const count = soundCategories[category].length;
|
|
188
|
+
console.log(`${index + 1}. ${category} (${count} sounds)`);
|
|
189
|
+
});
|
|
190
|
+
console.log('0. Skip');
|
|
191
|
+
const choice = await this.question(`\nPlease select category (0-${categories.length}): `);
|
|
192
|
+
const index = parseInt(choice) - 1;
|
|
193
|
+
if (choice === '0') {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
if (index >= 0 && index < categories.length) {
|
|
197
|
+
const category = categories[index];
|
|
198
|
+
const sounds = soundCategories[category];
|
|
199
|
+
return await this.selectSoundFromList(sounds, type);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
console.log('โ Invalid selection');
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async selectSoundFromList(sounds, type) {
|
|
207
|
+
console.log(`\nSelect ${type} sound:`);
|
|
208
|
+
sounds.forEach((sound, index) => {
|
|
209
|
+
console.log(`${index + 1}. ${sound}`);
|
|
210
|
+
});
|
|
211
|
+
console.log('0. Return to category selection');
|
|
212
|
+
const choice = await this.question(`\nPlease select (0-${sounds.length}): `);
|
|
213
|
+
const index = parseInt(choice) - 1;
|
|
214
|
+
if (choice === '0') {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
if (index >= 0 && index < sounds.length) {
|
|
218
|
+
const selectedSound = sounds[index];
|
|
219
|
+
// Play sound preview
|
|
220
|
+
try {
|
|
221
|
+
const DesktopChannel = require('../channels/local/desktop');
|
|
222
|
+
const desktop = new DesktopChannel();
|
|
223
|
+
desktop._playSound(selectedSound);
|
|
224
|
+
console.log(`Playing sound: ${selectedSound}`);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
// Ignore playback errors
|
|
228
|
+
}
|
|
229
|
+
const confirm = await this.question('Confirm using this sound? (y/n): ');
|
|
230
|
+
if (confirm.toLowerCase() === 'y' || confirm.toLowerCase() === 'yes') {
|
|
231
|
+
return selectedSound;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
console.log('โ Invalid selection');
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
async configureChannels() {
|
|
240
|
+
console.log('\n=== Notification Channel Configuration ===');
|
|
241
|
+
console.log('1. Desktop Notifications (Enabled)');
|
|
242
|
+
console.log('2. Email Notifications');
|
|
243
|
+
console.log('3. Discord Notifications (Coming Soon)');
|
|
244
|
+
console.log('4. Telegram Notifications (Coming Soon)');
|
|
245
|
+
console.log('5. WhatsApp Notifications (Coming Soon)');
|
|
246
|
+
console.log('6. Feishu Notifications (Coming Soon)');
|
|
247
|
+
console.log('0. Return to Main Menu');
|
|
248
|
+
const choice = await this.question('\nPlease select channel to configure (0-6): ');
|
|
249
|
+
switch (choice) {
|
|
250
|
+
case '1':
|
|
251
|
+
console.log('\nDesktop notifications are enabled and working properly!');
|
|
252
|
+
break;
|
|
253
|
+
case '2':
|
|
254
|
+
await this.configureEmailChannel();
|
|
255
|
+
break;
|
|
256
|
+
case '3':
|
|
257
|
+
case '4':
|
|
258
|
+
case '5':
|
|
259
|
+
case '6':
|
|
260
|
+
console.log('\nThis channel will be supported in future versions!');
|
|
261
|
+
break;
|
|
262
|
+
case '0':
|
|
263
|
+
return;
|
|
264
|
+
default:
|
|
265
|
+
console.log('โ Invalid selection');
|
|
266
|
+
}
|
|
267
|
+
if (choice !== '0') {
|
|
268
|
+
await this.question('\nPress Enter to continue...');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
async configureRelay() {
|
|
272
|
+
console.log('\n=== Command Relay Configuration ===');
|
|
273
|
+
console.log('(This feature will be implemented in future versions)');
|
|
274
|
+
console.log('Will support sending commands via notification channels and auto-executing in Claude Code');
|
|
275
|
+
await this.question('\nPress Enter to continue...');
|
|
276
|
+
}
|
|
277
|
+
async configureCustomMessages() {
|
|
278
|
+
console.log('\n=== Custom Message Configuration ===');
|
|
279
|
+
console.log('Tip: Use {project} as project name placeholder');
|
|
280
|
+
console.log('Example: [{project}] Task completed!\n');
|
|
281
|
+
// Configure completed message
|
|
282
|
+
const currentCompleted = this.config.get('customMessages.completed') || 'Use default text';
|
|
283
|
+
console.log(`Current task completion text: ${currentCompleted}`);
|
|
284
|
+
const completedMsg = await this.question('New task completion text (Enter to skip): ');
|
|
285
|
+
if (completedMsg.trim()) {
|
|
286
|
+
this.config.set('customMessages.completed', completedMsg.trim());
|
|
287
|
+
console.log('โ
Updated task completion text');
|
|
288
|
+
}
|
|
289
|
+
// Configure waiting message
|
|
290
|
+
const currentWaiting = this.config.get('customMessages.waiting') || 'Use default text';
|
|
291
|
+
console.log(`\nCurrent waiting input text: ${currentWaiting}`);
|
|
292
|
+
const waitingMsg = await this.question('New waiting input text (Enter to skip): ');
|
|
293
|
+
if (waitingMsg.trim()) {
|
|
294
|
+
this.config.set('customMessages.waiting', waitingMsg.trim());
|
|
295
|
+
console.log('โ
Updated waiting input text');
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
async testNotifications() {
|
|
299
|
+
console.log('\n=== Test Notifications ===');
|
|
300
|
+
try {
|
|
301
|
+
const Notifier = require('../core/notifier');
|
|
302
|
+
const notifier = new Notifier(this.config);
|
|
303
|
+
await notifier.initializeChannels();
|
|
304
|
+
console.log('Sending task completion notification...');
|
|
305
|
+
await notifier.notify('completed', { test: true });
|
|
306
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
307
|
+
console.log('Sending waiting input notification...');
|
|
308
|
+
await notifier.notify('waiting', { test: true });
|
|
309
|
+
console.log('โ
Test completed');
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
console.error('โ Test failed:', error.message);
|
|
313
|
+
}
|
|
314
|
+
await this.question('\nPress Enter to continue...');
|
|
315
|
+
}
|
|
316
|
+
async configureEmailChannel() {
|
|
317
|
+
console.log('\n=== Email Notification Configuration ===');
|
|
318
|
+
// Get current email configuration
|
|
319
|
+
const currentEmailConfig = this.config.getChannel('email') || { enabled: false, config: {} };
|
|
320
|
+
const emailConfig = currentEmailConfig.config || {};
|
|
321
|
+
console.log(`Current status: ${currentEmailConfig.enabled ? 'โ
Enabled' : 'โ Disabled'}`);
|
|
322
|
+
console.log('\n๐ง SMTP Sending Configuration:');
|
|
323
|
+
// SMTP host configuration
|
|
324
|
+
const currentHost = emailConfig.smtp?.host || '';
|
|
325
|
+
console.log(`Current SMTP host: ${currentHost || 'Not configured'}`);
|
|
326
|
+
const smtpHost = await this.question('SMTP host (e.g., smtp.gmail.com): ');
|
|
327
|
+
// SMTP port configuration
|
|
328
|
+
const currentPort = emailConfig.smtp?.port || 587;
|
|
329
|
+
console.log(`Current SMTP port: ${currentPort}`);
|
|
330
|
+
const smtpPortInput = await this.question('SMTP port (default 587): ');
|
|
331
|
+
const smtpPort = parseInt(smtpPortInput) || 587;
|
|
332
|
+
// Security connection configuration
|
|
333
|
+
const currentSecure = emailConfig.smtp?.secure || false;
|
|
334
|
+
console.log(`Current secure connection: ${currentSecure ? 'SSL/TLS' : 'STARTTLS'}`);
|
|
335
|
+
const secureInput = await this.question('Use SSL/TLS? (y/n, default n): ');
|
|
336
|
+
const secure = secureInput.toLowerCase() === 'y';
|
|
337
|
+
// Username configuration
|
|
338
|
+
const currentUser = emailConfig.smtp?.auth?.user || '';
|
|
339
|
+
console.log(`Current username: ${currentUser || 'Not configured'}`);
|
|
340
|
+
const smtpUser = await this.question('SMTP username (email address): ');
|
|
341
|
+
// Password configuration
|
|
342
|
+
console.log('SMTP password: [Hidden]');
|
|
343
|
+
const smtpPass = await this.question('SMTP password (app password): ');
|
|
344
|
+
console.log('\n๐ฅ IMAP Receiving Configuration (for receiving replies):');
|
|
345
|
+
// IMAP host configuration
|
|
346
|
+
const currentImapHost = emailConfig.imap?.host || '';
|
|
347
|
+
console.log(`Current IMAP host: ${currentImapHost || 'Not configured'}`);
|
|
348
|
+
const imapHost = await this.question('IMAP host (e.g., imap.gmail.com): ');
|
|
349
|
+
// IMAP port configuration
|
|
350
|
+
const currentImapPort = emailConfig.imap?.port || 993;
|
|
351
|
+
console.log(`Current IMAP port: ${currentImapPort}`);
|
|
352
|
+
const imapPortInput = await this.question('IMAP port (default 993): ');
|
|
353
|
+
const imapPort = parseInt(imapPortInput) || 993;
|
|
354
|
+
// IMAP secure connection
|
|
355
|
+
const currentImapSecure = emailConfig.imap?.secure !== false;
|
|
356
|
+
const imapSecureInput = await this.question('IMAP use SSL? (y/n, default y): ');
|
|
357
|
+
const imapSecure = imapSecureInput.toLowerCase() !== 'n';
|
|
358
|
+
// Recipient configuration
|
|
359
|
+
console.log('\n๐ฌ Recipient Configuration:');
|
|
360
|
+
const currentTo = emailConfig.to || '';
|
|
361
|
+
console.log(`Current recipient: ${currentTo || 'Not configured'}`);
|
|
362
|
+
const toEmail = await this.question('Recipient email: ');
|
|
363
|
+
// Sender configuration
|
|
364
|
+
const currentFrom = emailConfig.from || '';
|
|
365
|
+
console.log(`Current sender: ${currentFrom || 'Not configured'}`);
|
|
366
|
+
const fromEmail = await this.question(`Sender display name (default: CCGram <${smtpUser}>): `);
|
|
367
|
+
// Build email configuration
|
|
368
|
+
const newEmailConfig = {
|
|
369
|
+
enabled: true,
|
|
370
|
+
config: {
|
|
371
|
+
smtp: {
|
|
372
|
+
host: smtpHost || currentHost,
|
|
373
|
+
port: smtpPort,
|
|
374
|
+
secure: secure,
|
|
375
|
+
auth: {
|
|
376
|
+
user: smtpUser || currentUser,
|
|
377
|
+
pass: smtpPass || emailConfig.smtp?.auth?.pass || ''
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
imap: {
|
|
381
|
+
host: imapHost || currentImapHost,
|
|
382
|
+
port: imapPort,
|
|
383
|
+
secure: imapSecure,
|
|
384
|
+
auth: {
|
|
385
|
+
user: smtpUser || currentUser,
|
|
386
|
+
pass: smtpPass || emailConfig.imap?.auth?.pass || ''
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
from: fromEmail || `CCGram <${smtpUser || currentUser}>`,
|
|
390
|
+
to: toEmail || currentTo
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
// Save configuration
|
|
394
|
+
this.config.setChannel('email', newEmailConfig);
|
|
395
|
+
console.log('\nโ
Email configuration saved');
|
|
396
|
+
// Ask whether to test
|
|
397
|
+
const testChoice = await this.question('\nTest email sending? (y/n): ');
|
|
398
|
+
if (testChoice.toLowerCase() === 'y') {
|
|
399
|
+
await this.testEmailChannel();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
async testEmailChannel() {
|
|
403
|
+
console.log('\n๐งช Testing email sending...');
|
|
404
|
+
try {
|
|
405
|
+
const EmailChannel = require('../channels/email/smtp');
|
|
406
|
+
const emailConfig = this.config.getChannel('email');
|
|
407
|
+
if (!emailConfig || !emailConfig.enabled) {
|
|
408
|
+
console.log('โ Email channel not enabled');
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
const emailChannel = new EmailChannel(emailConfig.config);
|
|
412
|
+
const testResult = await emailChannel.test();
|
|
413
|
+
if (testResult) {
|
|
414
|
+
console.log('โ
Email sending test successful!');
|
|
415
|
+
console.log('๐ง Please check your inbox, you should receive a test email');
|
|
416
|
+
console.log('๐ก You can try replying to that email to test the command relay feature');
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
console.log('โ Email sending test failed');
|
|
420
|
+
console.log('Please check if your SMTP configuration is correct');
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
console.log('โ Email test failed:', error.message);
|
|
425
|
+
console.log('Please check your network connection and email configuration');
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
showHelp() {
|
|
429
|
+
console.log(`
|
|
430
|
+
CCGram Configuration Manager
|
|
431
|
+
|
|
432
|
+
Usage: claude-remote config [options]
|
|
433
|
+
|
|
434
|
+
Options:
|
|
435
|
+
--show Show current configuration
|
|
436
|
+
--help Show help information
|
|
437
|
+
|
|
438
|
+
Interactive Commands:
|
|
439
|
+
1. Basic Settings - Language, enabled status, timeout, etc.
|
|
440
|
+
2. Sound Configuration - Configure task completion and waiting input sounds
|
|
441
|
+
3. Notification Channels - Configure email, Discord, Telegram and other notification channels
|
|
442
|
+
4. Command Relay - Configure remote command execution features
|
|
443
|
+
5. Test Notifications - Test all configured notification channels
|
|
444
|
+
`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
module.exports = ConfigurationManager;
|
|
448
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/tools/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCGram Installer
|
|
3
|
+
* Handles installation and configuration of Claude Code hooks
|
|
4
|
+
*/
|
|
5
|
+
import readline from 'readline';
|
|
6
|
+
import Logger from '../core/logger';
|
|
7
|
+
import ConfigManager from '../core/config';
|
|
8
|
+
interface HooksConfig {
|
|
9
|
+
hooks: {
|
|
10
|
+
[hookName: string]: Array<{
|
|
11
|
+
matcher: string;
|
|
12
|
+
hooks: Array<{
|
|
13
|
+
type: string;
|
|
14
|
+
command: string;
|
|
15
|
+
timeout: number;
|
|
16
|
+
}>;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
declare class Installer {
|
|
21
|
+
config: ConfigManager;
|
|
22
|
+
logger: Logger;
|
|
23
|
+
projectDir: string;
|
|
24
|
+
claudeConfigDir: string;
|
|
25
|
+
rl: readline.Interface;
|
|
26
|
+
constructor(configManager: ConfigManager);
|
|
27
|
+
getClaudeConfigDir(): string;
|
|
28
|
+
question(prompt: string): Promise<string>;
|
|
29
|
+
run(args?: string[]): Promise<void>;
|
|
30
|
+
checkDependencies(): boolean;
|
|
31
|
+
createHooksConfig(): HooksConfig;
|
|
32
|
+
installHooks(): Promise<boolean>;
|
|
33
|
+
initializeConfig(): Promise<void>;
|
|
34
|
+
testInstallation(): Promise<boolean>;
|
|
35
|
+
displayUsage(): void;
|
|
36
|
+
}
|
|
37
|
+
export = Installer;
|
|
38
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/tools/installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAE3C,UAAU,WAAW;IACjB,KAAK,EAAE;QACH,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,KAAK,CAAC;gBACT,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC;gBAChB,OAAO,EAAE,MAAM,CAAC;aACnB,CAAC,CAAC;SACN,CAAC,CAAC;KACN,CAAC;CACL;AAED,cAAM,SAAS;IACX,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC;gBAEX,aAAa,EAAE,aAAa;IAYxC,kBAAkB,IAAI,MAAM;IAqBtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMzC,GAAG,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC7C,iBAAiB,IAAI,OAAO;IA+B5B,iBAAiB,IAAI,WAAW;IAiC1B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IA2ChC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB1C,YAAY,IAAI,IAAI;CAcvB;AAED,SAAS,SAAS,CAAC"}
|