@kcisoul/remotecode 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +358 -0
  2. package/dist/__tests__/config.test.d.ts +2 -0
  3. package/dist/__tests__/config.test.d.ts.map +1 -0
  4. package/dist/__tests__/config.test.js +84 -0
  5. package/dist/__tests__/config.test.js.map +1 -0
  6. package/dist/__tests__/format.test.d.ts +2 -0
  7. package/dist/__tests__/format.test.d.ts.map +1 -0
  8. package/dist/__tests__/format.test.js +62 -0
  9. package/dist/__tests__/format.test.js.map +1 -0
  10. package/dist/__tests__/sessions.test.d.ts +2 -0
  11. package/dist/__tests__/sessions.test.d.ts.map +1 -0
  12. package/dist/__tests__/sessions.test.js +51 -0
  13. package/dist/__tests__/sessions.test.js.map +1 -0
  14. package/dist/banner.d.ts +4 -0
  15. package/dist/banner.d.ts.map +1 -0
  16. package/dist/banner.js +154 -0
  17. package/dist/banner.js.map +1 -0
  18. package/dist/callbacks.d.ts +10 -0
  19. package/dist/callbacks.d.ts.map +1 -0
  20. package/dist/callbacks.js +184 -0
  21. package/dist/callbacks.js.map +1 -0
  22. package/dist/claude.d.ts +9 -0
  23. package/dist/claude.d.ts.map +1 -0
  24. package/dist/claude.js +117 -0
  25. package/dist/claude.js.map +1 -0
  26. package/dist/cli.d.ts +14 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +296 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/commands.d.ts +3 -0
  31. package/dist/commands.d.ts.map +1 -0
  32. package/dist/commands.js +107 -0
  33. package/dist/commands.js.map +1 -0
  34. package/dist/config.d.ts +24 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +153 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/context.d.ts +12 -0
  39. package/dist/context.d.ts.map +1 -0
  40. package/dist/context.js +22 -0
  41. package/dist/context.js.map +1 -0
  42. package/dist/daemon.d.ts +11 -0
  43. package/dist/daemon.d.ts.map +1 -0
  44. package/dist/daemon.js +316 -0
  45. package/dist/daemon.js.map +1 -0
  46. package/dist/format.d.ts +8 -0
  47. package/dist/format.d.ts.map +1 -0
  48. package/dist/format.js +57 -0
  49. package/dist/format.js.map +1 -0
  50. package/dist/handler.d.ts +4 -0
  51. package/dist/handler.d.ts.map +1 -0
  52. package/dist/handler.js +292 -0
  53. package/dist/handler.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +142 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/logger.d.ts +10 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +42 -0
  61. package/dist/logger.js.map +1 -0
  62. package/dist/session-ui.d.ts +17 -0
  63. package/dist/session-ui.d.ts.map +1 -0
  64. package/dist/session-ui.js +237 -0
  65. package/dist/session-ui.js.map +1 -0
  66. package/dist/sessions.d.ts +33 -0
  67. package/dist/sessions.d.ts.map +1 -0
  68. package/dist/sessions.js +341 -0
  69. package/dist/sessions.js.map +1 -0
  70. package/dist/setup.d.ts +3 -0
  71. package/dist/setup.d.ts.map +1 -0
  72. package/dist/setup.js +144 -0
  73. package/dist/setup.js.map +1 -0
  74. package/dist/stt.d.ts +11 -0
  75. package/dist/stt.d.ts.map +1 -0
  76. package/dist/stt.js +192 -0
  77. package/dist/stt.js.map +1 -0
  78. package/dist/telegram.d.ts +85 -0
  79. package/dist/telegram.d.ts.map +1 -0
  80. package/dist/telegram.js +97 -0
  81. package/dist/telegram.js.map +1 -0
  82. package/dist/watcher.d.ts +6 -0
  83. package/dist/watcher.d.ts.map +1 -0
  84. package/dist/watcher.js +230 -0
  85. package/dist/watcher.js.map +1 -0
  86. package/package.json +45 -0
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.handleMessage = handleMessage;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const child_process_1 = require("child_process");
41
+ const uuid_1 = require("uuid");
42
+ const telegram_1 = require("./telegram");
43
+ const claude_1 = require("./claude");
44
+ const format_1 = require("./format");
45
+ const logger_1 = require("./logger");
46
+ const config_1 = require("./config");
47
+ const sessions_1 = require("./sessions");
48
+ const session_ui_1 = require("./session-ui");
49
+ const commands_1 = require("./commands");
50
+ const context_1 = require("./context");
51
+ const stt_1 = require("./stt");
52
+ // ---------- unauthorized tracking ----------
53
+ const warnedUsers = new Set();
54
+ // ---------- prompt formatting ----------
55
+ function formatPrompt(prompt, imagePaths) {
56
+ if (!imagePaths || imagePaths.length === 0)
57
+ return prompt;
58
+ const parts = [prompt, "Image file path(s):"];
59
+ for (const p of imagePaths)
60
+ parts.push(`- ${p}`);
61
+ return parts.join("\n\n");
62
+ }
63
+ // ---------- image handling ----------
64
+ function ensureTempDir() {
65
+ const dir = path.join(os.tmpdir(), "remotecode_tmp");
66
+ fs.mkdirSync(dir, { recursive: true });
67
+ return dir;
68
+ }
69
+ async function downloadAndSaveImage(config, fileId) {
70
+ const { data, filePath } = await (0, telegram_1.downloadFile)(config, fileId);
71
+ const ext = path.extname(filePath) || ".jpg";
72
+ const tempDir = ensureTempDir();
73
+ const filename = `image_${(0, uuid_1.v4)().replace(/-/g, "")}${ext}`;
74
+ const savePath = path.join(tempDir, filename);
75
+ fs.writeFileSync(savePath, data);
76
+ return savePath;
77
+ }
78
+ function pickBestPhotoId(photos) {
79
+ if (photos.length === 0)
80
+ return null;
81
+ let best = photos[0];
82
+ for (const photo of photos) {
83
+ const score = (p) => (p.file_size || 0) || ((p.width || 0) * (p.height || 0));
84
+ if (score(photo) > score(best))
85
+ best = photo;
86
+ }
87
+ return best.file_id;
88
+ }
89
+ function isImageDocument(doc) {
90
+ if (!doc)
91
+ return false;
92
+ return (doc.mime_type || "").toLowerCase().startsWith("image/");
93
+ }
94
+ // ---------- whisper transcription ----------
95
+ function convertToWav(inputPath) {
96
+ const wavPath = inputPath.replace(/\.[^.]+$/, "") + ".wav";
97
+ (0, child_process_1.execSync)(`ffmpeg -y -i "${inputPath}" -ar 16000 -ac 1 -c:a pcm_s16le "${wavPath}"`, {
98
+ timeout: 30000,
99
+ stdio: ["pipe", "pipe", "pipe"],
100
+ });
101
+ return wavPath;
102
+ }
103
+ function transcribeAudio(audioPath) {
104
+ let wavPath = audioPath;
105
+ if (!audioPath.toLowerCase().endsWith(".wav")) {
106
+ wavPath = convertToWav(audioPath);
107
+ }
108
+ try {
109
+ const modelPath = (0, config_1.whisperModelPath)();
110
+ logger_1.logger.debug("whisper", `transcribing: ${wavPath}`);
111
+ const output = (0, child_process_1.execSync)(`whisper-cli -m "${modelPath}" -l auto --no-timestamps --no-prints -f "${wavPath}"`, { timeout: 60000, stdio: ["pipe", "pipe", "pipe"] });
112
+ return output.toString("utf-8").trim();
113
+ }
114
+ finally {
115
+ if (wavPath !== audioPath) {
116
+ try {
117
+ fs.unlinkSync(wavPath);
118
+ }
119
+ catch { /* ignore */ }
120
+ }
121
+ }
122
+ }
123
+ // ---------- typing indicator ----------
124
+ function startTyping(config, chatId) {
125
+ (0, telegram_1.sendChatAction)(config, chatId).catch(() => { });
126
+ const interval = setInterval(() => {
127
+ (0, telegram_1.sendChatAction)(config, chatId).catch(() => { });
128
+ }, 4000);
129
+ return () => clearInterval(interval);
130
+ }
131
+ // ---------- main handler ----------
132
+ async function handleMessage(msg, ctx) {
133
+ const user = msg.from;
134
+ if (!(0, context_1.isUserAllowed)(user?.id, user?.username, ctx.allowedIds, ctx.allowedNames)) {
135
+ const userKey = String(user?.id || user?.username || msg.chat.id);
136
+ if (warnedUsers.has(userKey)) {
137
+ logger_1.logger.debug("handler", `Blocked repeat unauthorized message from ${user?.username || user?.id || "unknown"}`);
138
+ return;
139
+ }
140
+ warnedUsers.add(userKey);
141
+ logger_1.logger.warn("handler", `Unauthorized message from ${user?.username || user?.id || "unknown"}`);
142
+ await (0, telegram_1.sendMessage)(ctx.telegram, msg.chat.id, "Not authorized.", { replyToMessageId: msg.message_id });
143
+ return;
144
+ }
145
+ if (msg.voice || msg.audio)
146
+ return handleVoiceMessage(msg, ctx);
147
+ if (msg.photo && msg.photo.length > 0)
148
+ return handleImageMessage(msg, ctx, pickBestPhotoId(msg.photo), "photo");
149
+ if (msg.document && isImageDocument(msg.document))
150
+ return handleImageMessage(msg, ctx, msg.document.file_id, "document");
151
+ if (msg.text)
152
+ return handleTextMessage(msg, ctx);
153
+ }
154
+ async function handleTextMessage(msg, ctx) {
155
+ const chatId = msg.chat.id;
156
+ const messageId = msg.message_id;
157
+ const text = (msg.text || "").trim();
158
+ if (!text)
159
+ return;
160
+ try {
161
+ logger_1.logger.debug("text", `chat_id=${chatId} message_id=${messageId} text=${text}`);
162
+ if (await (0, commands_1.handleCommand)(text, chatId, messageId, ctx))
163
+ return;
164
+ await handlePrompt(text, chatId, messageId, ctx);
165
+ }
166
+ catch (err) {
167
+ logger_1.logger.error("handler", `Error in handleTextMessage: ${(0, logger_1.errorMessage)(err)}`, err);
168
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Error: ${(0, logger_1.errorMessage)(err)}`, { replyToMessageId: messageId });
169
+ }
170
+ }
171
+ async function handleImageMessage(msg, ctx, fileId, tag) {
172
+ const chatId = msg.chat.id;
173
+ const messageId = msg.message_id;
174
+ const caption = (msg.caption || "").trim();
175
+ const prompt = caption || "User sent an image.";
176
+ if (!fileId) {
177
+ logger_1.logger.warn(tag, `No ${tag} data found chat_id=${chatId}`);
178
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Error: No ${tag} data found.`, { replyToMessageId: messageId });
179
+ return;
180
+ }
181
+ try {
182
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Processing your image...", { replyToMessageId: messageId });
183
+ logger_1.logger.debug(tag, `chat_id=${chatId} message_id=${messageId} caption=${caption}`);
184
+ const imagePath = await downloadAndSaveImage(ctx.telegram, fileId);
185
+ await handlePrompt(prompt, chatId, messageId, ctx, [imagePath]);
186
+ }
187
+ catch (err) {
188
+ logger_1.logger.error("handler", `Error in handleImageMessage: ${(0, logger_1.errorMessage)(err)}`, err);
189
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Error: ${(0, logger_1.errorMessage)(err)}`, { replyToMessageId: messageId });
190
+ }
191
+ }
192
+ async function handleVoiceMessage(msg, ctx) {
193
+ const chatId = msg.chat.id;
194
+ const messageId = msg.message_id;
195
+ const fileId = msg.voice?.file_id || msg.audio?.file_id;
196
+ if (!fileId) {
197
+ logger_1.logger.warn("voice", `No audio data found chat_id=${chatId}`);
198
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Error: No audio data found.", { replyToMessageId: messageId });
199
+ return;
200
+ }
201
+ try {
202
+ logger_1.logger.debug("voice", `chat_id=${chatId} message_id=${messageId}`);
203
+ if (!(0, stt_1.isSttReady)()) {
204
+ logger_1.logger.warn("whisper", "Speech-to-text not set up");
205
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Speech-to-text is not set up.\nRun: remotecode setup-stt", { replyToMessageId: messageId });
206
+ return;
207
+ }
208
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Transcribing audio...", { replyToMessageId: messageId });
209
+ const { data, filePath } = await (0, telegram_1.downloadFile)(ctx.telegram, fileId);
210
+ const tempDir = ensureTempDir();
211
+ const ext = path.extname(filePath) || ".oga";
212
+ const audioPath = path.join(tempDir, `voice_${(0, uuid_1.v4)().replace(/-/g, "")}${ext}`);
213
+ fs.writeFileSync(audioPath, data);
214
+ let transcription;
215
+ try {
216
+ transcription = transcribeAudio(audioPath);
217
+ }
218
+ catch (sttErr) {
219
+ try {
220
+ fs.unlinkSync(audioPath);
221
+ }
222
+ catch { /* ignore */ }
223
+ const msg = (0, logger_1.errorMessage)(sttErr);
224
+ logger_1.logger.warn("whisper", `Transcription failed chat_id=${chatId}: ${msg}`);
225
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Speech-to-text error: ${msg}`, { replyToMessageId: messageId });
226
+ return;
227
+ }
228
+ try {
229
+ fs.unlinkSync(audioPath);
230
+ }
231
+ catch { /* ignore */ }
232
+ const blankPattern = /^\[.*BLANK.*AUDIO.*\]$|^\(.*blank.*\)$|^\[.*silence.*\]$/i;
233
+ if (!transcription || blankPattern.test(transcription)) {
234
+ logger_1.logger.info("whisper", `Blank audio chat_id=${chatId} raw=${JSON.stringify(transcription)}`);
235
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "No speech detected (blank audio).", { replyToMessageId: messageId });
236
+ return;
237
+ }
238
+ logger_1.logger.debug("whisper", `Transcription: ${transcription}`);
239
+ await handlePrompt(transcription, chatId, messageId, ctx, undefined, true);
240
+ }
241
+ catch (err) {
242
+ logger_1.logger.error("handler", `Error in handleVoiceMessage: ${(0, logger_1.errorMessage)(err)}`, err);
243
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Error processing voice: ${(0, logger_1.errorMessage)(err)}`, { replyToMessageId: messageId });
244
+ }
245
+ }
246
+ // ---------- prompt handling ----------
247
+ async function handlePrompt(prompt, chatId, messageId, ctx, imagePaths, voiceMode) {
248
+ const sessionId = (0, sessions_1.getOrCreateSessionId)(ctx.sessionsFile);
249
+ const sessionCwd = (0, sessions_1.loadSessionCwd)(ctx.sessionsFile);
250
+ const formattedPrompt = formatPrompt(prompt, imagePaths);
251
+ const stopTyping = startTyping(ctx.telegram, chatId);
252
+ let busyNotified = false;
253
+ let answer;
254
+ try {
255
+ answer = await (0, context_1.withSessionLock)(sessionId, async () => {
256
+ return (0, claude_1.askClaude)(formattedPrompt, sessionId, {
257
+ imagePaths,
258
+ cwd: sessionCwd || (0, config_1.defaultCwd)(),
259
+ yolo: ctx.yolo,
260
+ onBusy: async () => {
261
+ if (!busyNotified) {
262
+ busyNotified = true;
263
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Session busy \u2014 Claude Code is active on host. Retrying...", { replyToMessageId: messageId });
264
+ }
265
+ },
266
+ });
267
+ });
268
+ }
269
+ finally {
270
+ stopTyping();
271
+ }
272
+ const cleaned = answer.trim().replace(/<thinking>[\s\S]*?<\/thinking>\s*/g, "").trim();
273
+ if (voiceMode) {
274
+ const userHtml = (0, format_1.mdToTelegramHtml)(prompt);
275
+ const botHtml = (0, format_1.mdToTelegramHtml)((0, format_1.truncateMessage)(cleaned, 3200));
276
+ const formatted = `<blockquote><b><code>You:</code></b>\n${userHtml}\n\n<b><code>Bot:</code></b>\n${botHtml}</blockquote>`;
277
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, formatted, {
278
+ replyToMessageId: messageId,
279
+ replyMarkup: (0, session_ui_1.sessionsReplyKeyboard)(ctx.sessionsFile),
280
+ parseMode: "HTML",
281
+ });
282
+ }
283
+ else {
284
+ const formatted = (0, format_1.tryMdToHtml)(cleaned);
285
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, formatted.text, {
286
+ replyToMessageId: messageId,
287
+ replyMarkup: (0, session_ui_1.sessionsReplyKeyboard)(ctx.sessionsFile),
288
+ parseMode: formatted.parseMode,
289
+ });
290
+ }
291
+ }
292
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const config_1 = require("./config");
40
+ const banner_1 = require("./banner");
41
+ const logger_1 = require("./logger");
42
+ const setup_1 = require("./setup");
43
+ const stt_1 = require("./stt");
44
+ const daemon_1 = require("./daemon");
45
+ const cli_1 = require("./cli");
46
+ async function main() {
47
+ const args = process.argv.slice(2);
48
+ // Internal flag: run as daemon process
49
+ if (args.includes("--daemon")) {
50
+ await (0, daemon_1.daemonMain)();
51
+ return;
52
+ }
53
+ // Verbose flag
54
+ if (args.includes("-v") || args.includes("--verbose")) {
55
+ process.env.REMOTECODE_VERBOSE = "1";
56
+ }
57
+ const command = args.find((a) => !a.startsWith("-")) || "";
58
+ switch (command) {
59
+ case "start":
60
+ await (0, cli_1.cmdStart)();
61
+ break;
62
+ case "stop":
63
+ await (0, cli_1.cmdStop)();
64
+ break;
65
+ case "restart":
66
+ await (0, cli_1.cmdRestart)();
67
+ break;
68
+ case "status":
69
+ (0, cli_1.cmdStatus)();
70
+ break;
71
+ case "logs": {
72
+ const levelIdx = args.indexOf("--level");
73
+ const tagIdx = args.indexOf("--tag");
74
+ const nIdx = args.indexOf("-n");
75
+ let lines = 50;
76
+ let follow = true;
77
+ if (nIdx !== -1 && args[nIdx + 1]) {
78
+ const n = parseInt(args[nIdx + 1], 10);
79
+ if (!isNaN(n) && n > 0)
80
+ lines = n;
81
+ follow = false; // -n implies static output
82
+ }
83
+ (0, cli_1.cmdLogs)({
84
+ follow,
85
+ lines,
86
+ level: levelIdx !== -1 ? (args[levelIdx + 1] || "").toUpperCase() : null,
87
+ tag: tagIdx !== -1 ? (args[tagIdx + 1] || "") : null,
88
+ });
89
+ break;
90
+ }
91
+ case "config":
92
+ await (0, cli_1.cmdConfig)();
93
+ break;
94
+ case "setup-stt":
95
+ await (0, stt_1.cmdSetupStt)();
96
+ break;
97
+ case "": {
98
+ // Default: first run -> setup + start; already running -> status; not running -> start
99
+ (0, config_1.ensureConfigDir)();
100
+ const configPath = path.join((0, config_1.globalConfigDir)(), "config");
101
+ const isFirstRun = !fs.existsSync(configPath);
102
+ if (isFirstRun) {
103
+ await (0, setup_1.runSetupIfNeeded)();
104
+ (0, banner_1.stopBannerResize)();
105
+ (0, config_1.loadConfig)();
106
+ (0, config_1.getConfig)();
107
+ await (0, daemon_1.spawnDaemon)();
108
+ (0, cli_1.cmdStatus)();
109
+ (0, cli_1.cmdLogs)({ follow: true, lines: 10, level: null, tag: null });
110
+ }
111
+ else {
112
+ const { running } = (0, daemon_1.isDaemonRunning)();
113
+ if (running) {
114
+ (0, cli_1.cmdStatus)();
115
+ }
116
+ else {
117
+ const cfgPath = (0, config_1.loadConfig)();
118
+ (0, config_1.getConfig)();
119
+ if (cfgPath)
120
+ (0, banner_1.printBanner)(["Config: " + cfgPath]);
121
+ await (0, daemon_1.spawnDaemon)();
122
+ (0, cli_1.cmdStatus)();
123
+ (0, cli_1.cmdLogs)({ follow: true, lines: 10, level: null, tag: null });
124
+ }
125
+ }
126
+ break;
127
+ }
128
+ default:
129
+ console.error(`Unknown command: ${command}`);
130
+ console.log("Usage: remotecode [start|stop|restart|status|logs|config|setup-stt]");
131
+ process.exit(1);
132
+ }
133
+ }
134
+ main().catch((err) => {
135
+ // User cancelled with Ctrl+C -- exit silently
136
+ if ((0, logger_1.errorMessage)(err).includes("User force closed the prompt")) {
137
+ process.exit(0);
138
+ }
139
+ console.error(`Fatal error: ${(0, logger_1.errorMessage)(err)}`);
140
+ process.exit(1);
141
+ });
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function parseTruthyEnv(val: string | undefined): boolean;
2
+ export declare function errorMessage(err: unknown): string;
3
+ export declare function isVerbose(): boolean;
4
+ export declare const logger: {
5
+ debug(tag: string, msg: string): void;
6
+ info(tag: string, msg: string): void;
7
+ warn(tag: string, msg: string): void;
8
+ error(tag: string, msg: string, err?: unknown): void;
9
+ };
10
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI/D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGjD;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAUD,eAAO,MAAM,MAAM;eACN,MAAM,OAAO,MAAM,GAAG,IAAI;cAK3B,MAAM,OAAO,MAAM,GAAG,IAAI;cAG1B,MAAM,OAAO,MAAM,GAAG,IAAI;eAGzB,MAAM,OAAO,MAAM,QAAQ,OAAO,GAAG,IAAI;CAIrD,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ exports.parseTruthyEnv = parseTruthyEnv;
5
+ exports.errorMessage = errorMessage;
6
+ exports.isVerbose = isVerbose;
7
+ function parseTruthyEnv(val) {
8
+ return ["1", "true", "yes", "on"].includes((val || "").trim().toLowerCase());
9
+ }
10
+ function errorMessage(err) {
11
+ if (err instanceof Error)
12
+ return err.message;
13
+ return String(err);
14
+ }
15
+ function isVerbose() {
16
+ return parseTruthyEnv(process.env.REMOTECODE_VERBOSE);
17
+ }
18
+ function formatTag(tag) {
19
+ return `[${tag}]`;
20
+ }
21
+ function formatLevel(level) {
22
+ return `[${level}]`;
23
+ }
24
+ exports.logger = {
25
+ debug(tag, msg) {
26
+ if (isVerbose()) {
27
+ console.log(`${new Date().toISOString()} ${formatLevel("DEBUG")}${formatTag(tag)} ${msg}`);
28
+ }
29
+ },
30
+ info(tag, msg) {
31
+ console.log(`${new Date().toISOString()} ${formatLevel("INFO")}${formatTag(tag)} ${msg}`);
32
+ },
33
+ warn(tag, msg) {
34
+ console.error(`${new Date().toISOString()} ${formatLevel("WARN")}${formatTag(tag)} ${msg}`);
35
+ },
36
+ error(tag, msg, err) {
37
+ console.error(`${new Date().toISOString()} ${formatLevel("ERROR")}${formatTag(tag)} ${msg}`);
38
+ if (err && isVerbose())
39
+ console.error(err);
40
+ },
41
+ };
42
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,wCAIC;AAED,oCAGC;AAED,8BAEC;AAbD,SAAgB,cAAc,CAAC,GAAuB;IACpD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CACxC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CACjC,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,IAAI,KAAK,GAAG,CAAC;AACtB,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,KAAK,CAAC,GAAW,EAAE,GAAW;QAC5B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAW,EAAE,GAAW;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,GAAW,EAAE,GAAW;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAa;QAC3C,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7F,IAAI,GAAG,IAAI,SAAS,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { SessionInfo } from "./sessions";
2
+ export declare function formatTimeAgo(mtime: number): string;
3
+ export declare function formatSessionLabel(session: SessionInfo): string;
4
+ export declare function readLastTurns(sessionId: string, maxTurns?: number): string[];
5
+ export type InlineButton = {
6
+ text: string;
7
+ callback_data: string;
8
+ };
9
+ export declare function buildSessionGrid(sessions: SessionInfo[], activeId: string | null, opts?: {
10
+ showDir?: boolean;
11
+ }): Array<Array<InlineButton>>;
12
+ export declare function buildSessionDisplay(sessions: SessionInfo[], activeId: string | null): {
13
+ text: string;
14
+ buttons: Array<Array<InlineButton>>;
15
+ };
16
+ export declare function sessionsReplyKeyboard(sessionsFile?: string): Record<string, unknown>;
17
+ //# sourceMappingURL=session-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-ui.d.ts","sourceRoot":"","sources":["../src/session-ui.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EAGZ,MAAM,YAAY,CAAC;AAGpB,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAS/D;AAoBD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,EAAE,CA6E/E;AAGD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAsB5B;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;CAAE,CAyCvD;AAED,wBAAgB,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWpF"}