ccpa-telegram 1.0.3 → 1.0.5

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/README.md CHANGED
@@ -6,6 +6,7 @@ A Telegram bot that provides access to Claude Code as a personal assistant. Run
6
6
 
7
7
  - Chat with Claude Code via Telegram
8
8
  - Send images and documents for analysis
9
+ - **Voice message support** with local Whisper transcription
9
10
  - Persistent conversation sessions per user
10
11
  - Configurable Claude settings per project
11
12
  - Multi-user support with access control
@@ -28,6 +29,7 @@ For complete documentation on Claude Code configuration, see the [Claude Code do
28
29
  - Node.js 18+
29
30
  - [Claude Code CLI](https://github.com/anthropics/claude-code) installed and authenticated.
30
31
  - A Telegram bot token (from [@BotFather](https://t.me/BotFather)). See [Creating a Telegram Bot](#creating-a-telegram-bot) for instructions.
32
+ - **ffmpeg** (required for voice messages) - install with `brew install ffmpeg` on macOS
31
33
 
32
34
  ## Quick Start
33
35
 
@@ -69,29 +71,37 @@ Create a `ccpa.config.json` file in your project directory:
69
71
  },
70
72
  "logging": {
71
73
  "level": "info"
74
+ },
75
+ "transcription": {
76
+ "model": "base.en",
77
+ "showTranscription": true
72
78
  }
73
79
  }
74
80
  ```
75
81
 
76
82
  ### Configuration Options
77
83
 
78
- | Option | Description | Default |
79
- | ----------------------- | ------------------------------------------------- | ---------- |
80
- | `telegram.botToken` | Telegram bot token from BotFather | Required |
81
- | `access.allowedUserIds` | Array of Telegram user IDs allowed to use the bot | `[]` |
82
- | `claude.command` | Claude CLI command | `"claude"` |
83
- | `logging.level` | Log level: debug, info, warn, error | `"info"` |
84
+ | Option | Description | Default |
85
+ | ------------------------------- | -------------------------------------------------------------- | ---------- |
86
+ | `telegram.botToken` | Telegram bot token from BotFather | Required |
87
+ | `access.allowedUserIds` | Array of Telegram user IDs allowed to use the bot | `[]` |
88
+ | `claude.command` | Claude CLI command | `"claude"` |
89
+ | `logging.level` | Log level: debug, info, warn, error | `"info"` |
90
+ | `transcription.model` | Whisper model (see [Voice Messages](#voice-messages)) | `"base.en"`|
91
+ | `transcription.showTranscription` | Show transcribed text before Claude response | `true` |
84
92
 
85
93
  ### Environment Variables
86
94
 
87
95
  Environment variables override config file values:
88
96
 
89
- | Variable | Description |
90
- | -------------------- | ------------------------ |
91
- | `TELEGRAM_BOT_TOKEN` | Telegram bot token |
92
- | `ALLOWED_USER_IDS` | Comma-separated user IDs |
93
- | `CLAUDE_COMMAND` | Claude CLI command |
94
- | `LOG_LEVEL` | Logging level |
97
+ | Variable | Description |
98
+ | -------------------- | ------------------------------------ |
99
+ | `TELEGRAM_BOT_TOKEN` | Telegram bot token |
100
+ | `ALLOWED_USER_IDS` | Comma-separated user IDs |
101
+ | `CLAUDE_COMMAND` | Claude CLI command |
102
+ | `LOG_LEVEL` | Logging level |
103
+ | `WHISPER_MODEL` | Whisper model for voice transcription |
104
+ | `SHOW_TRANSCRIPTION` | Show transcription (true/false) |
95
105
 
96
106
  ## Directory Structure
97
107
 
@@ -152,6 +162,60 @@ To find your Telegram user ID:
152
162
  2. It will reply with your user ID
153
163
  3. Add this ID to `allowedUserIds` in your config
154
164
 
165
+ ## Voice Messages
166
+
167
+ Voice messages are transcribed locally using [Whisper](https://github.com/openai/whisper) via the `nodejs-whisper` package. No audio data is sent to external services.
168
+
169
+ ### Prerequisites for Voice Messages
170
+
171
+ Voice transcription requires additional setup:
172
+
173
+ 1. **ffmpeg** - For audio conversion
174
+ ```bash
175
+ # macOS
176
+ brew install ffmpeg
177
+
178
+ # Ubuntu/Debian
179
+ sudo apt install ffmpeg
180
+ ```
181
+
182
+ 2. **CMake** - For building the Whisper executable
183
+ ```bash
184
+ # macOS
185
+ brew install cmake
186
+
187
+ # Ubuntu/Debian
188
+ sudo apt install cmake
189
+ ```
190
+
191
+ 3. **Download and build Whisper** - Run this once after installation:
192
+ ```bash
193
+ npx nodejs-whisper download
194
+ ```
195
+ This downloads the Whisper model and compiles the `whisper-cli` executable. The build process takes a few minutes.
196
+
197
+ ### Whisper Models
198
+
199
+ | Model | Size | Speed | Quality |
200
+ | ---------------- | ------- | -------- | ------------------------------ |
201
+ | `tiny` | ~75 MB | Fastest | Basic quality |
202
+ | `tiny.en` | ~75 MB | Fastest | English-only, slightly better |
203
+ | `base` | ~142 MB | Fast | Good for clear speech |
204
+ | `base.en` | ~142 MB | Fast | English-only (default) |
205
+ | `small` | ~466 MB | Medium | Good multilingual |
206
+ | `small.en` | ~466 MB | Medium | English-only |
207
+ | `medium` | ~1.5 GB | Slower | Very good multilingual |
208
+ | `medium.en` | ~1.5 GB | Slower | English-only |
209
+ | `large-v1` | ~2.9 GB | Slowest | Best quality (v1) |
210
+ | `large` | ~2.9 GB | Slowest | Best quality (v2) |
211
+ | `large-v3-turbo` | ~1.5 GB | Fast | Near-large quality, faster |
212
+
213
+ **First run**: The selected model will be downloaded automatically. Subsequent runs use the cached model.
214
+
215
+ ### Supported Languages
216
+
217
+ Whisper supports 50+ languages including English, German, Spanish, French, and many more. Use models without `.en` suffix for multilingual support.
218
+
155
219
  ## Security Notice
156
220
 
157
221
  **Important**: Conversations with this bot are not end-to-end encrypted. Messages pass through Telegram's servers and are processed by the Claude API. Do not share sensitive information such as:
@@ -1,4 +1,5 @@
1
1
  export { documentHandler } from "./document.js";
2
2
  export { photoHandler } from "./photo.js";
3
3
  export { textHandler } from "./text.js";
4
+ export { voiceHandler } from "./voice.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { documentHandler } from "./document.js";
2
2
  export { photoHandler } from "./photo.js";
3
3
  export { textHandler } from "./text.js";
4
+ export { voiceHandler } from "./voice.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bot/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bot/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Context } from "grammy";
2
+ /**
3
+ * Handle voice messages - transcribe and route to Claude
4
+ */
5
+ export declare function voiceHandler(ctx: Context): Promise<void>;
6
+ //# sourceMappingURL=voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/voice.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAqCtC;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJ9D"}
@@ -0,0 +1,140 @@
1
+ import { exec } from "node:child_process";
2
+ import { unlink, writeFile } from "node:fs/promises";
3
+ import { join, resolve } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { executeClaudeQuery } from "../../claude/executor.js";
6
+ import { parseClaudeOutput } from "../../claude/parser.js";
7
+ import { getConfig } from "../../config.js";
8
+ import { getLogger } from "../../logger.js";
9
+ import { sendChunkedResponse } from "../../telegram/chunker.js";
10
+ import { transcribeAudio } from "../../transcription/whisper.js";
11
+ import { ensureUserSetup, getSessionId, getUploadsPath, saveSessionId, } from "../../user/setup.js";
12
+ const execAsync = promisify(exec);
13
+ /**
14
+ * Convert OGA/OGG (Opus) to WAV for Whisper compatibility
15
+ */
16
+ async function convertToWav(inputPath, outputPath) {
17
+ const logger = getLogger();
18
+ try {
19
+ await execAsync(`ffmpeg -i "${inputPath}" -ar 16000 -ac 1 -y "${outputPath}"`);
20
+ logger.debug({ inputPath, outputPath }, "Audio converted to WAV");
21
+ }
22
+ catch (error) {
23
+ logger.error({ error }, "ffmpeg conversion failed");
24
+ throw new Error("Failed to convert audio. Ensure ffmpeg is installed: brew install ffmpeg");
25
+ }
26
+ }
27
+ /**
28
+ * Handle voice messages - transcribe and route to Claude
29
+ */
30
+ export async function voiceHandler(ctx) {
31
+ const config = getConfig();
32
+ const logger = getLogger();
33
+ const userId = ctx.from?.id;
34
+ const voice = ctx.message?.voice;
35
+ if (!userId || !voice) {
36
+ return;
37
+ }
38
+ logger.debug({ userId, duration: voice.duration, fileSize: voice.file_size }, "Voice message received");
39
+ const userDir = resolve(join(config.dataDir, String(userId)));
40
+ try {
41
+ await ensureUserSetup(userDir);
42
+ // Download voice file from Telegram
43
+ const file = await ctx.api.getFile(voice.file_id);
44
+ const filePath = file.file_path;
45
+ if (!filePath) {
46
+ await ctx.reply("Could not download the voice message.");
47
+ return;
48
+ }
49
+ const fileUrl = `https://api.telegram.org/file/bot${config.telegram.botToken}/${filePath}`;
50
+ const response = await fetch(fileUrl);
51
+ const buffer = Buffer.from(await response.arrayBuffer());
52
+ // Save original OGA file
53
+ const timestamp = Date.now();
54
+ const uploadsDir = getUploadsPath(userDir);
55
+ const ogaPath = join(uploadsDir, `voice_${timestamp}.oga`);
56
+ const wavPath = join(uploadsDir, `voice_${timestamp}.wav`);
57
+ await writeFile(ogaPath, buffer);
58
+ logger.debug({ path: ogaPath }, "Voice file saved");
59
+ // Send transcribing status
60
+ const statusMsg = await ctx.reply("_Transcribing voice message..._", {
61
+ parse_mode: "Markdown",
62
+ });
63
+ // Convert to WAV (Whisper requires WAV/MP3 input)
64
+ await convertToWav(ogaPath, wavPath);
65
+ // Transcribe with local Whisper
66
+ const transcription = await transcribeAudio(wavPath);
67
+ if (!transcription.text) {
68
+ await ctx.api.deleteMessage(ctx.chat.id, statusMsg.message_id);
69
+ await ctx.reply("Could not transcribe the voice message. Please try again.");
70
+ return;
71
+ }
72
+ // Optionally show transcription to user
73
+ if (config.transcription?.showTranscription) {
74
+ try {
75
+ await ctx.api.editMessageText(ctx.chat.id, statusMsg.message_id, `_Transcribed: "${transcription.text}"_\n\n_Processing with Claude..._`, { parse_mode: "Markdown" });
76
+ }
77
+ catch {
78
+ // Ignore edit errors
79
+ }
80
+ }
81
+ else {
82
+ try {
83
+ await ctx.api.editMessageText(ctx.chat.id, statusMsg.message_id, "_Processing..._", { parse_mode: "Markdown" });
84
+ }
85
+ catch {
86
+ // Ignore edit errors
87
+ }
88
+ }
89
+ // Clean up temporary files
90
+ try {
91
+ await unlink(ogaPath);
92
+ await unlink(wavPath);
93
+ }
94
+ catch {
95
+ // Ignore cleanup errors
96
+ }
97
+ // Send transcribed text to Claude
98
+ const sessionId = await getSessionId(userDir);
99
+ let lastProgressUpdate = Date.now();
100
+ let lastProgressText = "Processing...";
101
+ const onProgress = async (message) => {
102
+ const now = Date.now();
103
+ if (now - lastProgressUpdate > 2000 && message !== lastProgressText) {
104
+ lastProgressUpdate = now;
105
+ lastProgressText = message;
106
+ try {
107
+ await ctx.api.editMessageText(ctx.chat.id, statusMsg.message_id, `_${message}_`, { parse_mode: "Markdown" });
108
+ }
109
+ catch {
110
+ // Ignore edit errors
111
+ }
112
+ }
113
+ };
114
+ logger.debug({ transcription: transcription.text }, "Executing Claude query");
115
+ const result = await executeClaudeQuery({
116
+ prompt: transcription.text,
117
+ userDir,
118
+ sessionId,
119
+ onProgress,
120
+ });
121
+ // Delete status message
122
+ try {
123
+ await ctx.api.deleteMessage(ctx.chat.id, statusMsg.message_id);
124
+ }
125
+ catch {
126
+ // Ignore delete errors
127
+ }
128
+ const parsed = parseClaudeOutput(result);
129
+ if (parsed.sessionId) {
130
+ await saveSessionId(userDir, parsed.sessionId);
131
+ }
132
+ await sendChunkedResponse(ctx, parsed.text);
133
+ }
134
+ catch (error) {
135
+ logger.error({ error }, "Voice handler error");
136
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
137
+ await ctx.reply(`An error occurred processing the voice message: ${errorMessage}`);
138
+ }
139
+ }
140
+ //# sourceMappingURL=voice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.js","sourceRoot":"","sources":["../../../src/bot/handlers/voice.ts"],"names":[],"mappings":"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"}
package/dist/bot.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAmCA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAgE9C"}
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAoCA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAmE9C"}
package/dist/bot.js CHANGED
@@ -3,7 +3,7 @@ import { Bot } from "grammy";
3
3
  import { clearHandler } from "./bot/commands/clear.js";
4
4
  import { helpHandler } from "./bot/commands/help.js";
5
5
  import { startHandler } from "./bot/commands/start.js";
6
- import { documentHandler, photoHandler, textHandler, } from "./bot/handlers/index.js";
6
+ import { documentHandler, photoHandler, textHandler, voiceHandler, } from "./bot/handlers/index.js";
7
7
  import { authMiddleware } from "./bot/middleware/auth.js";
8
8
  import { rateLimitMiddleware } from "./bot/middleware/rateLimit.js";
9
9
  import { getConfig, getWorkingDirectory } from "./config.js";
@@ -49,6 +49,8 @@ export async function startBot() {
49
49
  bot.on("message:photo", photoHandler);
50
50
  // Document handler (PDFs, etc.)
51
51
  bot.on("message:document", documentHandler);
52
+ // Voice message handler
53
+ bot.on("message:voice", voiceHandler);
52
54
  // Error handler
53
55
  bot.catch((err) => {
54
56
  logger.error({ error: err.error, ctx: err.ctx?.update }, "Bot error");
package/dist/bot.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/claude/executor.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CAmKxB"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/claude/executor.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CA2LxB"}
@@ -27,13 +27,12 @@ export async function executeClaudeQuery(options) {
27
27
  env: process.env,
28
28
  stdio: ["ignore", "pipe", "pipe"],
29
29
  });
30
- let fullOutput = "";
31
30
  let stderrOutput = "";
32
31
  let lastResult = null;
33
32
  let currentSessionId;
33
+ let lastAssistantText = ""; // Track last text response for fallback
34
34
  proc.stdout.on("data", (data) => {
35
35
  const chunk = data.toString();
36
- fullOutput += chunk;
37
36
  // Parse streaming JSON lines
38
37
  const lines = chunk.split("\n").filter((line) => line.trim());
39
38
  for (const line of lines) {
@@ -45,11 +44,14 @@ export async function executeClaudeQuery(options) {
45
44
  event.session_id) {
46
45
  currentSessionId = event.session_id;
47
46
  }
48
- // Send progress updates for tool usage
49
- if (event.type === "assistant" &&
50
- event.message?.content &&
51
- onProgress) {
47
+ // Extract text from assistant messages and send progress updates
48
+ if (event.type === "assistant" && event.message?.content) {
52
49
  for (const block of event.message.content) {
50
+ // Capture text content for fallback
51
+ if (block.type === "text" && block.text) {
52
+ lastAssistantText = block.text;
53
+ }
54
+ // Send progress updates for tool usage
53
55
  if (block.type === "tool_use") {
54
56
  const toolName = block.name || "unknown";
55
57
  let progressMsg = `Using ${toolName}...`;
@@ -79,7 +81,21 @@ export async function executeClaudeQuery(options) {
79
81
  else if (toolName === "WebFetch" && block.input?.url) {
80
82
  progressMsg = `Fetching: ${block.input.url}`;
81
83
  }
82
- onProgress(progressMsg);
84
+ logger.info({ tool: toolName, input: block.input }, progressMsg);
85
+ if (onProgress) {
86
+ onProgress(progressMsg);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ // Log tool results
92
+ if (event.type === "user" && event.message?.content) {
93
+ for (const block of event.message.content) {
94
+ if (block.type === "tool_result") {
95
+ const result = typeof block.content === "string"
96
+ ? block.content.slice(0, 500)
97
+ : JSON.stringify(block.content).slice(0, 500);
98
+ logger.info({ toolUseId: block.tool_use_id, isError: block.is_error }, `Tool result: ${result}${result.length >= 500 ? "..." : ""}`);
83
99
  }
84
100
  }
85
101
  }
@@ -124,18 +140,19 @@ export async function executeClaudeQuery(options) {
124
140
  resolve(lastResult);
125
141
  }
126
142
  else if (code === 0) {
143
+ // No result event but process succeeded - use last assistant text
127
144
  resolve({
128
145
  success: true,
129
- output: fullOutput,
146
+ output: lastAssistantText || "No response received",
130
147
  sessionId: currentSessionId,
131
148
  });
132
149
  }
133
150
  else {
134
151
  const errorMsg = stderrOutput.trim() || `Claude exited with code ${code}`;
135
- logger.error({ code, stderr: stderrOutput, output: fullOutput.slice(0, 500) }, "Claude process failed");
152
+ logger.error({ code, stderr: stderrOutput, lastText: lastAssistantText }, "Claude process failed");
136
153
  resolve({
137
154
  success: false,
138
- output: fullOutput,
155
+ output: lastAssistantText,
139
156
  error: errorMsg,
140
157
  });
141
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/claude/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/claude/executor.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -30,6 +30,22 @@ declare const ConfigSchema: z.ZodObject<{
30
30
  claude: z.ZodObject<{
31
31
  command: z.ZodDefault<z.ZodString>;
32
32
  }, z.core.$strip>;
33
+ transcription: z.ZodOptional<z.ZodObject<{
34
+ model: z.ZodDefault<z.ZodEnum<{
35
+ tiny: "tiny";
36
+ "tiny.en": "tiny.en";
37
+ base: "base";
38
+ "base.en": "base.en";
39
+ small: "small";
40
+ "small.en": "small.en";
41
+ medium: "medium";
42
+ "medium.en": "medium.en";
43
+ "large-v1": "large-v1";
44
+ large: "large";
45
+ "large-v3-turbo": "large-v3-turbo";
46
+ }>>;
47
+ showTranscription: z.ZodDefault<z.ZodBoolean>;
48
+ }, z.core.$strip>>;
33
49
  }, z.core.$strip>;
34
50
  export type Config = z.infer<typeof ConfigSchema>;
35
51
  export declare function loadConfig(): Config;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAY5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;iBAkBhB,CAAC;AAwCH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AA6ClD,wBAAgB,UAAU,IAAI,MAAM,CAgDnC;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAKlC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAY5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAgBD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBhB,CAAC;AA+CH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AA6ClD,wBAAgB,UAAU,IAAI,MAAM,CA0DnC;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAKlC"}
package/dist/config.js CHANGED
@@ -25,6 +25,19 @@ export function initConfig(cwd) {
25
25
  export function getWorkingDirectory() {
26
26
  return workingDirectory;
27
27
  }
28
+ const TranscriptionModelSchema = z.enum([
29
+ "tiny",
30
+ "tiny.en",
31
+ "base",
32
+ "base.en",
33
+ "small",
34
+ "small.en",
35
+ "medium",
36
+ "medium.en",
37
+ "large-v1",
38
+ "large",
39
+ "large-v3-turbo",
40
+ ]);
28
41
  const ConfigSchema = z.object({
29
42
  telegram: z.object({
30
43
  botToken: z.string().min(1, "telegram.botToken is required"),
@@ -43,6 +56,12 @@ const ConfigSchema = z.object({
43
56
  claude: z.object({
44
57
  command: z.string().default("claude"),
45
58
  }),
59
+ transcription: z
60
+ .object({
61
+ model: TranscriptionModelSchema.default("base.en"),
62
+ showTranscription: z.boolean().default(true),
63
+ })
64
+ .optional(),
46
65
  });
47
66
  // Schema for the config file (all fields optional)
48
67
  const ConfigFileSchema = z
@@ -79,6 +98,13 @@ const ConfigFileSchema = z
79
98
  })
80
99
  .partial()
81
100
  .optional(),
101
+ transcription: z
102
+ .object({
103
+ model: TranscriptionModelSchema.default("base.en"),
104
+ showTranscription: z.boolean(),
105
+ })
106
+ .partial()
107
+ .optional(),
82
108
  })
83
109
  .partial();
84
110
  function parseAllowedUserIds(value) {
@@ -145,6 +171,14 @@ export function loadConfig() {
145
171
  claude: {
146
172
  command: process.env.CLAUDE_COMMAND || fileConfig.claude?.command || "claude",
147
173
  },
174
+ transcription: {
175
+ model: process.env.WHISPER_MODEL ||
176
+ fileConfig.transcription?.model ||
177
+ "base.en",
178
+ showTranscription: process.env.SHOW_TRANSCRIPTION === "false"
179
+ ? false
180
+ : (fileConfig.transcription?.showTranscription ?? true),
181
+ },
148
182
  };
149
183
  const result = ConfigSchema.safeParse(rawConfig);
150
184
  if (!result.success) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface TranscriptionResult {
2
+ text: string;
3
+ language?: string;
4
+ duration?: number;
5
+ }
6
+ /**
7
+ * Transcribe audio file using local Whisper model
8
+ */
9
+ export declare function transcribeAudio(audioPath: string): Promise<TranscriptionResult>;
10
+ //# sourceMappingURL=whisper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.d.ts","sourceRoot":"","sources":["../../src/transcription/whisper.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAkD9B"}
@@ -0,0 +1,61 @@
1
+ import { existsSync } from "node:fs";
2
+ import { getConfig } from "../config.js";
3
+ import { getLogger } from "../logger.js";
4
+ // Dynamic import for optional dependency
5
+ let whisperModule = null;
6
+ async function getWhisper() {
7
+ if (!whisperModule) {
8
+ try {
9
+ whisperModule = await import("nodejs-whisper");
10
+ }
11
+ catch {
12
+ throw new Error("nodejs-whisper is not installed. Run: pnpm add nodejs-whisper");
13
+ }
14
+ }
15
+ return whisperModule;
16
+ }
17
+ /**
18
+ * Transcribe audio file using local Whisper model
19
+ */
20
+ export async function transcribeAudio(audioPath) {
21
+ const logger = getLogger();
22
+ const config = getConfig();
23
+ if (!existsSync(audioPath)) {
24
+ throw new Error(`Audio file not found: ${audioPath}`);
25
+ }
26
+ const whisper = await getWhisper();
27
+ const modelName = config.transcription?.model || "base.en";
28
+ logger.debug({ audioPath, model: modelName }, "Starting transcription");
29
+ const startTime = Date.now();
30
+ try {
31
+ const transcript = await whisper.nodewhisper(audioPath, {
32
+ modelName,
33
+ autoDownloadModelName: modelName,
34
+ removeWavFileAfterTranscription: false,
35
+ withCuda: false,
36
+ whisperOptions: {
37
+ outputInText: true,
38
+ language: "auto",
39
+ },
40
+ logger: {
41
+ debug: (message) => logger.debug(message),
42
+ error: (message) => logger.error(message),
43
+ log: (message) => logger.info(message),
44
+ },
45
+ });
46
+ const duration = (Date.now() - startTime) / 1000;
47
+ const text = Array.isArray(transcript)
48
+ ? transcript.map((t) => t.speech).join(" ")
49
+ : String(transcript);
50
+ logger.debug({ duration: `${duration.toFixed(2)}s`, textLength: text.length }, "Transcription complete");
51
+ return {
52
+ text: text.trim(),
53
+ duration,
54
+ };
55
+ }
56
+ catch (error) {
57
+ logger.error({ error, audioPath }, "Transcription failed");
58
+ throw error;
59
+ }
60
+ }
61
+ //# sourceMappingURL=whisper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.js","sourceRoot":"","sources":["../../src/transcription/whisper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,yCAAyC;AACzC,IAAI,aAAa,GAA2C,IAAI,CAAC;AAEjE,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAQD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB;IAEjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,KAAK,IAAI,SAAS,CAAC;IAE3D,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE;YACtD,SAAS;YACT,qBAAqB,EAAE,SAAS;YAChC,+BAA+B,EAAE,KAAK;YACtC,QAAQ,EAAE,KAAK;YACf,cAAc,EAAE;gBACd,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,MAAM;aACjB;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjD,GAAG,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;aAC/C;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACpC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvB,MAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,EAChE,wBAAwB,CACzB,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccpa-telegram",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -27,6 +27,7 @@
27
27
  "dependencies": {
28
28
  "dotenv": "^17.2.3",
29
29
  "grammy": "^1.39.2",
30
+ "nodejs-whisper": "^0.2.9",
30
31
  "pino": "^10.2.0",
31
32
  "zod": "^4.3.5"
32
33
  },