remoat 0.2.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.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +297 -0
  3. package/dist/bin/cli.d.ts +2 -0
  4. package/dist/bin/cli.js +80 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/bin/commands/doctor.d.ts +1 -0
  7. package/dist/bin/commands/doctor.js +211 -0
  8. package/dist/bin/commands/doctor.js.map +1 -0
  9. package/dist/bin/commands/open.d.ts +1 -0
  10. package/dist/bin/commands/open.js +187 -0
  11. package/dist/bin/commands/open.js.map +1 -0
  12. package/dist/bin/commands/setup.d.ts +1 -0
  13. package/dist/bin/commands/setup.js +267 -0
  14. package/dist/bin/commands/setup.js.map +1 -0
  15. package/dist/bin/commands/start.d.ts +2 -0
  16. package/dist/bin/commands/start.js +39 -0
  17. package/dist/bin/commands/start.js.map +1 -0
  18. package/dist/bot/index.d.ts +2 -0
  19. package/dist/bot/index.js +1393 -0
  20. package/dist/bot/index.js.map +1 -0
  21. package/dist/commands/chatCommandHandler.d.ts +20 -0
  22. package/dist/commands/chatCommandHandler.js +30 -0
  23. package/dist/commands/chatCommandHandler.js.map +1 -0
  24. package/dist/commands/cleanupCommandHandler.d.ts +21 -0
  25. package/dist/commands/cleanupCommandHandler.js +40 -0
  26. package/dist/commands/cleanupCommandHandler.js.map +1 -0
  27. package/dist/commands/joinCommandHandler.d.ts +19 -0
  28. package/dist/commands/joinCommandHandler.js +27 -0
  29. package/dist/commands/joinCommandHandler.js.map +1 -0
  30. package/dist/commands/messageParser.d.ts +7 -0
  31. package/dist/commands/messageParser.js +29 -0
  32. package/dist/commands/messageParser.js.map +1 -0
  33. package/dist/commands/slashCommandHandler.d.ts +21 -0
  34. package/dist/commands/slashCommandHandler.js +105 -0
  35. package/dist/commands/slashCommandHandler.js.map +1 -0
  36. package/dist/commands/workspaceCommandHandler.d.ts +16 -0
  37. package/dist/commands/workspaceCommandHandler.js +29 -0
  38. package/dist/commands/workspaceCommandHandler.js.map +1 -0
  39. package/dist/database/chatSessionRepository.d.ts +59 -0
  40. package/dist/database/chatSessionRepository.js +110 -0
  41. package/dist/database/chatSessionRepository.js.map +1 -0
  42. package/dist/database/scheduleRepository.d.ts +60 -0
  43. package/dist/database/scheduleRepository.js +106 -0
  44. package/dist/database/scheduleRepository.js.map +1 -0
  45. package/dist/database/templateRepository.d.ts +51 -0
  46. package/dist/database/templateRepository.js +90 -0
  47. package/dist/database/templateRepository.js.map +1 -0
  48. package/dist/database/workspaceBindingRepository.d.ts +48 -0
  49. package/dist/database/workspaceBindingRepository.js +92 -0
  50. package/dist/database/workspaceBindingRepository.js.map +1 -0
  51. package/dist/index.d.ts +1 -0
  52. package/dist/index.js +11 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/middleware/auth.d.ts +5 -0
  55. package/dist/middleware/auth.js +14 -0
  56. package/dist/middleware/auth.js.map +1 -0
  57. package/dist/middleware/sanitize.d.ts +1 -0
  58. package/dist/middleware/sanitize.js +18 -0
  59. package/dist/middleware/sanitize.js.map +1 -0
  60. package/dist/services/antigravityLauncher.d.ts +7 -0
  61. package/dist/services/antigravityLauncher.js +94 -0
  62. package/dist/services/antigravityLauncher.js.map +1 -0
  63. package/dist/services/approvalDetector.d.ts +97 -0
  64. package/dist/services/approvalDetector.js +394 -0
  65. package/dist/services/approvalDetector.js.map +1 -0
  66. package/dist/services/assistantDomExtractor.d.ts +49 -0
  67. package/dist/services/assistantDomExtractor.js +340 -0
  68. package/dist/services/assistantDomExtractor.js.map +1 -0
  69. package/dist/services/autoAcceptService.d.ts +14 -0
  70. package/dist/services/autoAcceptService.js +81 -0
  71. package/dist/services/autoAcceptService.js.map +1 -0
  72. package/dist/services/cdpBridgeManager.d.ts +50 -0
  73. package/dist/services/cdpBridgeManager.js +355 -0
  74. package/dist/services/cdpBridgeManager.js.map +1 -0
  75. package/dist/services/cdpConnectionPool.d.ts +88 -0
  76. package/dist/services/cdpConnectionPool.js +235 -0
  77. package/dist/services/cdpConnectionPool.js.map +1 -0
  78. package/dist/services/cdpService.d.ts +214 -0
  79. package/dist/services/cdpService.js +1423 -0
  80. package/dist/services/cdpService.js.map +1 -0
  81. package/dist/services/chatSessionService.d.ts +89 -0
  82. package/dist/services/chatSessionService.js +738 -0
  83. package/dist/services/chatSessionService.js.map +1 -0
  84. package/dist/services/errorPopupDetector.d.ts +89 -0
  85. package/dist/services/errorPopupDetector.js +274 -0
  86. package/dist/services/errorPopupDetector.js.map +1 -0
  87. package/dist/services/modeService.d.ts +44 -0
  88. package/dist/services/modeService.js +74 -0
  89. package/dist/services/modeService.js.map +1 -0
  90. package/dist/services/modelService.d.ts +36 -0
  91. package/dist/services/modelService.js +64 -0
  92. package/dist/services/modelService.js.map +1 -0
  93. package/dist/services/planningDetector.d.ts +87 -0
  94. package/dist/services/planningDetector.js +321 -0
  95. package/dist/services/planningDetector.js.map +1 -0
  96. package/dist/services/processManager.d.ts +18 -0
  97. package/dist/services/processManager.js +62 -0
  98. package/dist/services/processManager.js.map +1 -0
  99. package/dist/services/progressSender.d.ts +20 -0
  100. package/dist/services/progressSender.js +65 -0
  101. package/dist/services/progressSender.js.map +1 -0
  102. package/dist/services/promptDispatcher.d.ts +38 -0
  103. package/dist/services/promptDispatcher.js +42 -0
  104. package/dist/services/promptDispatcher.js.map +1 -0
  105. package/dist/services/quotaService.d.ts +21 -0
  106. package/dist/services/quotaService.js +191 -0
  107. package/dist/services/quotaService.js.map +1 -0
  108. package/dist/services/responseMonitor.d.ts +129 -0
  109. package/dist/services/responseMonitor.js +996 -0
  110. package/dist/services/responseMonitor.js.map +1 -0
  111. package/dist/services/scheduleService.d.ts +58 -0
  112. package/dist/services/scheduleService.js +135 -0
  113. package/dist/services/scheduleService.js.map +1 -0
  114. package/dist/services/screenshotService.d.ts +55 -0
  115. package/dist/services/screenshotService.js +86 -0
  116. package/dist/services/screenshotService.js.map +1 -0
  117. package/dist/services/telegramTopicManager.d.ts +40 -0
  118. package/dist/services/telegramTopicManager.js +103 -0
  119. package/dist/services/telegramTopicManager.js.map +1 -0
  120. package/dist/services/titleGeneratorService.d.ts +32 -0
  121. package/dist/services/titleGeneratorService.js +114 -0
  122. package/dist/services/titleGeneratorService.js.map +1 -0
  123. package/dist/services/updateCheckService.d.ts +16 -0
  124. package/dist/services/updateCheckService.js +148 -0
  125. package/dist/services/updateCheckService.js.map +1 -0
  126. package/dist/services/userMessageDetector.d.ts +57 -0
  127. package/dist/services/userMessageDetector.js +222 -0
  128. package/dist/services/userMessageDetector.js.map +1 -0
  129. package/dist/services/workspaceService.d.ts +33 -0
  130. package/dist/services/workspaceService.js +65 -0
  131. package/dist/services/workspaceService.js.map +1 -0
  132. package/dist/ui/autoAcceptUi.d.ts +6 -0
  133. package/dist/ui/autoAcceptUi.js +22 -0
  134. package/dist/ui/autoAcceptUi.js.map +1 -0
  135. package/dist/ui/modeUi.d.ts +12 -0
  136. package/dist/ui/modeUi.js +40 -0
  137. package/dist/ui/modeUi.js.map +1 -0
  138. package/dist/ui/modelsUi.d.ts +12 -0
  139. package/dist/ui/modelsUi.js +101 -0
  140. package/dist/ui/modelsUi.js.map +1 -0
  141. package/dist/ui/projectListUi.d.ts +11 -0
  142. package/dist/ui/projectListUi.js +59 -0
  143. package/dist/ui/projectListUi.js.map +1 -0
  144. package/dist/ui/screenshotUi.d.ts +6 -0
  145. package/dist/ui/screenshotUi.js +28 -0
  146. package/dist/ui/screenshotUi.js.map +1 -0
  147. package/dist/ui/sessionPickerUi.d.ts +8 -0
  148. package/dist/ui/sessionPickerUi.js +32 -0
  149. package/dist/ui/sessionPickerUi.js.map +1 -0
  150. package/dist/ui/templateUi.d.ts +5 -0
  151. package/dist/ui/templateUi.js +44 -0
  152. package/dist/ui/templateUi.js.map +1 -0
  153. package/dist/utils/cdpPorts.d.ts +2 -0
  154. package/dist/utils/cdpPorts.js +6 -0
  155. package/dist/utils/cdpPorts.js.map +1 -0
  156. package/dist/utils/config.d.ts +14 -0
  157. package/dist/utils/config.js +12 -0
  158. package/dist/utils/config.js.map +1 -0
  159. package/dist/utils/configLoader.d.ts +23 -0
  160. package/dist/utils/configLoader.js +153 -0
  161. package/dist/utils/configLoader.js.map +1 -0
  162. package/dist/utils/htmlToTelegramMarkdown.d.ts +6 -0
  163. package/dist/utils/htmlToTelegramMarkdown.js +189 -0
  164. package/dist/utils/htmlToTelegramMarkdown.js.map +1 -0
  165. package/dist/utils/i18n.d.ts +3 -0
  166. package/dist/utils/i18n.js +78 -0
  167. package/dist/utils/i18n.js.map +1 -0
  168. package/dist/utils/imageHandler.d.ts +35 -0
  169. package/dist/utils/imageHandler.js +155 -0
  170. package/dist/utils/imageHandler.js.map +1 -0
  171. package/dist/utils/lockfile.d.ts +7 -0
  172. package/dist/utils/lockfile.js +117 -0
  173. package/dist/utils/lockfile.js.map +1 -0
  174. package/dist/utils/logger.d.ts +23 -0
  175. package/dist/utils/logger.js +85 -0
  176. package/dist/utils/logger.js.map +1 -0
  177. package/dist/utils/logo.d.ts +1 -0
  178. package/dist/utils/logo.js +14 -0
  179. package/dist/utils/logo.js.map +1 -0
  180. package/dist/utils/metadataExtractor.d.ts +5 -0
  181. package/dist/utils/metadataExtractor.js +16 -0
  182. package/dist/utils/metadataExtractor.js.map +1 -0
  183. package/dist/utils/pathUtils.d.ts +23 -0
  184. package/dist/utils/pathUtils.js +58 -0
  185. package/dist/utils/pathUtils.js.map +1 -0
  186. package/dist/utils/processLogBuffer.d.ts +17 -0
  187. package/dist/utils/processLogBuffer.js +108 -0
  188. package/dist/utils/processLogBuffer.js.map +1 -0
  189. package/dist/utils/streamMessageFormatter.d.ts +18 -0
  190. package/dist/utils/streamMessageFormatter.js +91 -0
  191. package/dist/utils/streamMessageFormatter.js.map +1 -0
  192. package/dist/utils/telegramFormatter.d.ts +37 -0
  193. package/dist/utils/telegramFormatter.js +445 -0
  194. package/dist/utils/telegramFormatter.js.map +1 -0
  195. package/dist/utils/voiceHandler.d.ts +23 -0
  196. package/dist/utils/voiceHandler.js +169 -0
  197. package/dist/utils/voiceHandler.js.map +1 -0
  198. package/locales/en.json +85 -0
  199. package/locales/ja.json +109 -0
  200. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageHandler.js","sourceRoot":"","sources":["../../src/utils/imageHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Acquire a lockfile to prevent duplicate bot instances.
3
+ * If another process is already running, stop it before starting.
4
+ *
5
+ * @returns A function to release the lock
6
+ */
7
+ export declare function acquireLock(): () => void;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.acquireLock = acquireLock;
7
+ const logger_1 = require("./logger");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const LOCK_FILE = path_1.default.join(os_1.default.homedir(), '.remoat', '.bot.lock');
12
+ /**
13
+ * Check if a process with the given PID is running
14
+ */
15
+ function isProcessRunning(pid) {
16
+ try {
17
+ process.kill(pid, 0);
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ /**
25
+ * Stop an existing process and wait for it to exit
26
+ */
27
+ function sleepSync(ms) {
28
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
29
+ }
30
+ function killExistingProcess(pid) {
31
+ logger_1.logger.info(`🔄 Stopping existing Bot process (PID: ${pid})...`);
32
+ try {
33
+ process.kill(pid, 'SIGTERM');
34
+ }
35
+ catch {
36
+ // Ignore if already terminated
37
+ return;
38
+ }
39
+ // Wait up to 5 seconds for process to exit
40
+ const deadline = Date.now() + 5000;
41
+ while (Date.now() < deadline) {
42
+ if (!isProcessRunning(pid)) {
43
+ logger_1.logger.info(`✅ Existing process (PID: ${pid}) stopped`);
44
+ return;
45
+ }
46
+ sleepSync(50);
47
+ }
48
+ // Timeout: force kill with SIGKILL
49
+ logger_1.logger.warn(`⚠️ Process did not exit with SIGTERM, force killing (SIGKILL)`);
50
+ try {
51
+ process.kill(pid, 'SIGKILL');
52
+ }
53
+ catch {
54
+ // ignore
55
+ }
56
+ }
57
+ /**
58
+ * Acquire a lockfile to prevent duplicate bot instances.
59
+ * If another process is already running, stop it before starting.
60
+ *
61
+ * @returns A function to release the lock
62
+ */
63
+ function acquireLock() {
64
+ // Check existing lock file
65
+ if (fs_1.default.existsSync(LOCK_FILE)) {
66
+ const content = fs_1.default.readFileSync(LOCK_FILE, 'utf-8').trim();
67
+ const existingPid = parseInt(content, 10);
68
+ if (!isNaN(existingPid) && existingPid !== process.pid && isProcessRunning(existingPid)) {
69
+ // Stop existing process and restart
70
+ killExistingProcess(existingPid);
71
+ }
72
+ else if (!isNaN(existingPid) && !isProcessRunning(existingPid)) {
73
+ logger_1.logger.warn(`⚠️ Stale lock file detected (PID: ${existingPid} has exited). Cleaning up.`);
74
+ }
75
+ // Remove stale lock file
76
+ try {
77
+ fs_1.default.unlinkSync(LOCK_FILE);
78
+ }
79
+ catch { /* ignore */ }
80
+ }
81
+ // Create new lock file (ensure directory exists)
82
+ fs_1.default.mkdirSync(path_1.default.dirname(LOCK_FILE), { recursive: true });
83
+ fs_1.default.writeFileSync(LOCK_FILE, String(process.pid), 'utf-8');
84
+ logger_1.logger.info(`🔒 Lock acquired (PID: ${process.pid})`);
85
+ // Cleanup function
86
+ const releaseLock = () => {
87
+ try {
88
+ if (fs_1.default.existsSync(LOCK_FILE)) {
89
+ const content = fs_1.default.readFileSync(LOCK_FILE, 'utf-8').trim();
90
+ if (parseInt(content, 10) === process.pid) {
91
+ fs_1.default.unlinkSync(LOCK_FILE);
92
+ logger_1.logger.info(`🔓 Lock released (PID: ${process.pid})`);
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // Ignore errors during cleanup
98
+ }
99
+ };
100
+ // Auto cleanup on process exit
101
+ process.on('exit', releaseLock);
102
+ process.on('SIGINT', () => {
103
+ releaseLock();
104
+ process.exit(0);
105
+ });
106
+ process.on('SIGTERM', () => {
107
+ releaseLock();
108
+ process.exit(0);
109
+ });
110
+ process.on('uncaughtException', (err) => {
111
+ logger_1.logger.error('Uncaught exception:', err);
112
+ releaseLock();
113
+ process.exit(1);
114
+ });
115
+ return releaseLock;
116
+ }
117
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/utils/lockfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export declare const COLORS: {
2
+ readonly red: "\u001B[31m";
3
+ readonly yellow: "\u001B[33m";
4
+ readonly cyan: "\u001B[36m";
5
+ readonly green: "\u001B[32m";
6
+ readonly magenta: "\u001B[35m";
7
+ readonly dim: "\u001B[2m";
8
+ readonly reset: "\u001B[0m";
9
+ };
10
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';
11
+ export interface Logger {
12
+ info(...args: any[]): void;
13
+ warn(...args: any[]): void;
14
+ error(...args: any[]): void;
15
+ debug(...args: any[]): void;
16
+ phase(...args: any[]): void;
17
+ done(...args: any[]): void;
18
+ divider(label?: string): void;
19
+ setLogLevel(level: LogLevel): void;
20
+ getLogLevel(): LogLevel;
21
+ }
22
+ export declare function createLogger(initialLevel?: LogLevel): Logger;
23
+ export declare const logger: Logger;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = exports.COLORS = void 0;
4
+ exports.createLogger = createLogger;
5
+ exports.COLORS = {
6
+ red: '\x1b[31m',
7
+ yellow: '\x1b[33m',
8
+ cyan: '\x1b[36m',
9
+ green: '\x1b[32m',
10
+ magenta: '\x1b[35m',
11
+ dim: '\x1b[2m',
12
+ reset: '\x1b[0m',
13
+ };
14
+ const LEVEL_PRIORITY = {
15
+ debug: 0,
16
+ info: 1,
17
+ warn: 2,
18
+ error: 3,
19
+ none: 4,
20
+ };
21
+ const getTimestamp = () => {
22
+ const now = new Date();
23
+ const timeString = now.toLocaleTimeString('ja-JP', { hour12: false });
24
+ return `${exports.COLORS.dim}[${timeString}]${exports.COLORS.reset}`;
25
+ };
26
+ function createLogger(initialLevel = 'info') {
27
+ let currentLevel = initialLevel;
28
+ function shouldLog(methodLevel) {
29
+ return LEVEL_PRIORITY[methodLevel] >= LEVEL_PRIORITY[currentLevel];
30
+ }
31
+ return {
32
+ info(...args) {
33
+ if (shouldLog('info')) {
34
+ console.info(`${getTimestamp()} ${exports.COLORS.cyan}[INFO]${exports.COLORS.reset}`, ...args);
35
+ }
36
+ },
37
+ warn(...args) {
38
+ if (shouldLog('warn')) {
39
+ console.warn(`${getTimestamp()} ${exports.COLORS.yellow}[WARN]${exports.COLORS.reset}`, ...args);
40
+ }
41
+ },
42
+ error(...args) {
43
+ if (shouldLog('error')) {
44
+ console.error(`${getTimestamp()} ${exports.COLORS.red}[ERROR]${exports.COLORS.reset}`, ...args);
45
+ }
46
+ },
47
+ debug(...args) {
48
+ if (shouldLog('debug')) {
49
+ console.debug(`${getTimestamp()} ${exports.COLORS.dim}[DEBUG]${exports.COLORS.reset}`, ...args);
50
+ }
51
+ },
52
+ /** Important state transitions - stands out in logs */
53
+ phase(...args) {
54
+ if (shouldLog('info')) {
55
+ console.info(`${getTimestamp()} ${exports.COLORS.magenta}[PHASE]${exports.COLORS.reset}`, ...args);
56
+ }
57
+ },
58
+ /** Completion-related events - green for success */
59
+ done(...args) {
60
+ if (shouldLog('info')) {
61
+ console.info(`${getTimestamp()} ${exports.COLORS.green}[DONE]${exports.COLORS.reset}`, ...args);
62
+ }
63
+ },
64
+ /** Section divider with optional label for structured output */
65
+ divider(label) {
66
+ if (shouldLog('info')) {
67
+ if (label) {
68
+ const pad = Math.max(4, 50 - label.length - 4);
69
+ console.info(`${exports.COLORS.green}[DONE]${exports.COLORS.reset} ${exports.COLORS.dim}── ${label} ${'─'.repeat(pad)}${exports.COLORS.reset}`);
70
+ }
71
+ else {
72
+ console.info(`${exports.COLORS.green}[DONE]${exports.COLORS.reset} ${exports.COLORS.dim}${'─'.repeat(50)}${exports.COLORS.reset}`);
73
+ }
74
+ }
75
+ },
76
+ setLogLevel(level) {
77
+ currentLevel = level;
78
+ },
79
+ getLogLevel() {
80
+ return currentLevel;
81
+ },
82
+ };
83
+ }
84
+ exports.logger = createLogger('info');
85
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const LOGO = "\n . * .\n /\\___/\\ z Z\n * ( - . - )____________z *\n \\_ __)\n \\_ \\________/ / .\n \\__) \\__)\n\n ~ Booting... Remoat ~\n";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LOGO = void 0;
4
+ exports.LOGO = `
5
+ . * .
6
+ /\\___/\\ z Z
7
+ * ( - . - )____________z *
8
+ \\_ __)
9
+ \\_ \\________/ / .
10
+ \\__) \\__)
11
+
12
+ ~ Booting... Remoat ~
13
+ `;
14
+ //# sourceMappingURL=logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/utils/logo.ts"],"names":[],"mappings":";;;AAAa,QAAA,IAAI,GAAG;;;;;;;;;CASnB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface TaskMetadata {
2
+ taskId?: string;
3
+ directory?: string;
4
+ }
5
+ export declare function extractMetadataFromFooter(footerText: string): TaskMetadata;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractMetadataFromFooter = extractMetadataFromFooter;
4
+ function extractMetadataFromFooter(footerText) {
5
+ const result = {};
6
+ const taskIdMatch = footerText.match(/TaskID:\s*([^\s|]+)/i);
7
+ if (taskIdMatch && taskIdMatch[1]) {
8
+ result.taskId = taskIdMatch[1];
9
+ }
10
+ const dirMatch = footerText.match(/Dir:\s*([^\s|]+)/i);
11
+ if (dirMatch && dirMatch[1]) {
12
+ result.directory = dirMatch[1];
13
+ }
14
+ return result;
15
+ }
16
+ //# sourceMappingURL=metadataExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadataExtractor.js","sourceRoot":"","sources":["../../src/utils/metadataExtractor.ts"],"names":[],"mappings":";;AAKA,8DAcC;AAdD,SAAgB,yBAAyB,CAAC,UAAkB;IACxD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,IAAI,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Helper to resolve the correct Antigravity CLI executable path based on the operating system
3
+ * and environment variables.
4
+ *
5
+ * Precedence:
6
+ * 1. process.env.ANTIGRAVITY_PATH (Explicit override)
7
+ * 2. OS-specific default paths (Mac: /Applications/..., Windows: %LOCALAPPDATA%\..., Linux: 'antigravity')
8
+ */
9
+ export declare function getAntigravityCliPath(): string;
10
+ /**
11
+ * Helper to extract the project name from a full workspace path.
12
+ * Handles both Windows (backslash) and POSIX (forward slash) paths.
13
+ *
14
+ * @param workspacePath The full path to the workspace directory
15
+ * @returns The final folder name
16
+ */
17
+ export declare function extractProjectNameFromPath(workspacePath: string): string;
18
+ /**
19
+ * Get a platform-appropriate hint for starting Antigravity with CDP.
20
+ *
21
+ * Used in user-facing messages (Telegram messages, CLI doctor, logs).
22
+ */
23
+ export declare function getAntigravityCdpHint(port?: number): string;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAntigravityCliPath = getAntigravityCliPath;
4
+ exports.extractProjectNameFromPath = extractProjectNameFromPath;
5
+ exports.getAntigravityCdpHint = getAntigravityCdpHint;
6
+ /**
7
+ * Helper to resolve the correct Antigravity CLI executable path based on the operating system
8
+ * and environment variables.
9
+ *
10
+ * Precedence:
11
+ * 1. process.env.ANTIGRAVITY_PATH (Explicit override)
12
+ * 2. OS-specific default paths (Mac: /Applications/..., Windows: %LOCALAPPDATA%\..., Linux: 'antigravity')
13
+ */
14
+ function getAntigravityCliPath() {
15
+ // Allow user to set explicit path via ANTIGRAVITY_PATH (especially useful for Linux AppImages)
16
+ if (process.env.ANTIGRAVITY_PATH) {
17
+ return process.env.ANTIGRAVITY_PATH;
18
+ }
19
+ if (process.platform === 'darwin') {
20
+ return '/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity';
21
+ }
22
+ if (process.platform === 'win32') {
23
+ const localAppData = process.env.LOCALAPPDATA;
24
+ if (localAppData) {
25
+ return `${localAppData}\\Programs\\Antigravity\\Antigravity.exe`;
26
+ }
27
+ return 'Antigravity.exe'; // Fallback if LOCALAPPDATA is undefined
28
+ }
29
+ // Default for Linux or any unknown OS, assuming 'antigravity' is in the system PATH
30
+ return 'antigravity';
31
+ }
32
+ /**
33
+ * Helper to extract the project name from a full workspace path.
34
+ * Handles both Windows (backslash) and POSIX (forward slash) paths.
35
+ *
36
+ * @param workspacePath The full path to the workspace directory
37
+ * @returns The final folder name
38
+ */
39
+ function extractProjectNameFromPath(workspacePath) {
40
+ return workspacePath.split(/[/\\]/).filter(Boolean).pop() || '';
41
+ }
42
+ /**
43
+ * Get a platform-appropriate hint for starting Antigravity with CDP.
44
+ *
45
+ * Used in user-facing messages (Telegram messages, CLI doctor, logs).
46
+ */
47
+ function getAntigravityCdpHint(port = 9222) {
48
+ const APP_NAME = 'Antigravity';
49
+ switch (process.platform) {
50
+ case 'darwin':
51
+ return `open -a ${APP_NAME} --args --remote-debugging-port=${port}`;
52
+ case 'win32':
53
+ return `${APP_NAME}.exe --remote-debugging-port=${port}`;
54
+ default:
55
+ return `${APP_NAME.toLowerCase()} --remote-debugging-port=${port}`;
56
+ }
57
+ }
58
+ //# sourceMappingURL=pathUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../../src/utils/pathUtils.ts"],"names":[],"mappings":";;AAQA,sDAoBC;AASD,gEAEC;AAOD,sDAUC;AAxDD;;;;;;;GAOG;AACH,SAAgB,qBAAqB;IACjC,+FAA+F;IAC/F,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,sEAAsE,CAAC;IAClF,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9C,IAAI,YAAY,EAAE,CAAC;YACf,OAAO,GAAG,YAAY,0CAA0C,CAAC;QACrE,CAAC;QACD,OAAO,iBAAiB,CAAC,CAAC,wCAAwC;IACtE,CAAC;IAED,oFAAoF;IACpF,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,aAAqB;IAC5D,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,OAAe,IAAI;IACrD,MAAM,QAAQ,GAAG,aAAa,CAAC;IAC/B,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,QAAQ;YACT,OAAO,WAAW,QAAQ,mCAAmC,IAAI,EAAE,CAAC;QACxE,KAAK,OAAO;YACR,OAAO,GAAG,QAAQ,gCAAgC,IAAI,EAAE,CAAC;QAC7D;YACI,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,4BAA4B,IAAI,EAAE,CAAC;IAC3E,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface ProcessLogBufferOptions {
2
+ maxChars?: number;
3
+ maxEntries?: number;
4
+ maxEntryLength?: number;
5
+ }
6
+ export declare class ProcessLogBuffer {
7
+ private readonly maxChars;
8
+ private readonly maxEntries;
9
+ private readonly maxEntryLength;
10
+ private readonly entries;
11
+ private readonly seen;
12
+ constructor(options?: ProcessLogBufferOptions);
13
+ append(raw: string): string;
14
+ snapshot(): string;
15
+ private trim;
16
+ private dropOldest;
17
+ }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessLogBuffer = void 0;
4
+ const DEFAULT_MAX_CHARS = 3500;
5
+ const DEFAULT_MAX_ENTRIES = 120;
6
+ const DEFAULT_MAX_ENTRY_LENGTH = 260;
7
+ function collapseWhitespace(text) {
8
+ return (text || '').replace(/\r/g, '').replace(/\s+/g, ' ').trim();
9
+ }
10
+ function parseBlocks(raw) {
11
+ const normalized = (raw || '').replace(/\r/g, '').trim();
12
+ if (!normalized)
13
+ return [];
14
+ const blocks = normalized
15
+ .split(/\n{2,}/)
16
+ .map((chunk) => collapseWhitespace(chunk))
17
+ .filter((chunk) => chunk.length > 0);
18
+ if (blocks.length > 0)
19
+ return blocks;
20
+ return normalized
21
+ .split('\n')
22
+ .map((line) => collapseWhitespace(line))
23
+ .filter((line) => line.length > 0);
24
+ }
25
+ function pickEmoji(entry) {
26
+ const lower = entry.toLowerCase();
27
+ if (/^thought for\b/.test(lower) || /^thinking\b/.test(lower))
28
+ return '🧠';
29
+ if (/^initiating\b/.test(lower) || /^starting\b/.test(lower))
30
+ return '🚀';
31
+ if (/^[a-z0-9._-]+\s*\/\s*[a-z0-9._-]+$/i.test(entry))
32
+ return '🛠️';
33
+ if (/^(?:analy[sz]ed|read|wrote|created|updated|deleted|built|compiled|installed|resolved|downloaded|connected|fetched)\b/i.test(entry))
34
+ return '📄';
35
+ if (/^(?:analy[sz]ing|reading|writing|running|searching|fetching|checking|scanning|creating|updating|deleting|building|compiling|deploying|parsing|resolving|downloading|uploading|connecting|installing|executing|testing|debugging|processing|loading)\b/i.test(entry))
36
+ return '🔍';
37
+ if (/^title:\s/.test(lower) && /\surl:\s/.test(lower))
38
+ return '🔎';
39
+ if (/^(json|javascript|typescript|python|bash|sh|html|css|xml|yaml|yml|toml|sql|graphql|markdown|text|plaintext|log)$/i.test(entry))
40
+ return '📦';
41
+ return '•';
42
+ }
43
+ function toDisplayEntry(rawEntry, maxEntryLength) {
44
+ const trimmed = collapseWhitespace(rawEntry);
45
+ if (!trimmed)
46
+ return '';
47
+ const clipped = trimmed.length > maxEntryLength
48
+ ? `${trimmed.slice(0, Math.max(0, maxEntryLength - 3))}...`
49
+ : trimmed;
50
+ return `${pickEmoji(clipped)} ${clipped}`;
51
+ }
52
+ class ProcessLogBuffer {
53
+ maxChars;
54
+ maxEntries;
55
+ maxEntryLength;
56
+ entries = [];
57
+ seen = new Set();
58
+ constructor(options = {}) {
59
+ this.maxChars = options.maxChars ?? DEFAULT_MAX_CHARS;
60
+ this.maxEntries = options.maxEntries ?? DEFAULT_MAX_ENTRIES;
61
+ this.maxEntryLength = options.maxEntryLength ?? DEFAULT_MAX_ENTRY_LENGTH;
62
+ }
63
+ append(raw) {
64
+ const blocks = parseBlocks(raw);
65
+ for (const block of blocks) {
66
+ const display = toDisplayEntry(block, this.maxEntryLength);
67
+ if (!display)
68
+ continue;
69
+ const key = display.toLowerCase();
70
+ if (this.seen.has(key))
71
+ continue;
72
+ this.entries.push(display);
73
+ this.seen.add(key);
74
+ }
75
+ this.trim();
76
+ return this.snapshot();
77
+ }
78
+ snapshot() {
79
+ return this.entries.join('\n');
80
+ }
81
+ trim() {
82
+ while (this.entries.length > this.maxEntries) {
83
+ this.dropOldest();
84
+ }
85
+ // Track total length incrementally instead of calling snapshot() per iteration
86
+ let totalLen = this.entries.reduce((sum, e) => sum + e.length, 0)
87
+ + Math.max(0, this.entries.length - 1); // newline separators
88
+ while (this.entries.length > 1 && totalLen > this.maxChars) {
89
+ const removed = this.entries[0];
90
+ this.dropOldest();
91
+ totalLen -= removed.length + 1; // entry + newline separator
92
+ }
93
+ if (this.entries.length === 1 && this.entries[0].length > this.maxChars) {
94
+ const only = this.entries[0];
95
+ this.entries[0] = `${only.slice(0, Math.max(0, this.maxChars - 3))}...`;
96
+ this.seen.clear();
97
+ this.seen.add(this.entries[0].toLowerCase());
98
+ }
99
+ }
100
+ dropOldest() {
101
+ const removed = this.entries.shift();
102
+ if (!removed)
103
+ return;
104
+ this.seen.delete(removed.toLowerCase());
105
+ }
106
+ }
107
+ exports.ProcessLogBuffer = ProcessLogBuffer;
108
+ //# sourceMappingURL=processLogBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processLogBuffer.js","sourceRoot":"","sources":["../../src/utils/processLogBuffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Generate mode/model lines for initial status display.
3
+ * Consolidates into a single line if Fast and Plan models are the same.
4
+ */
5
+ export declare function buildModeModelLines(modeName: string, fastModel: string, planModel: string): string[];
6
+ /**
7
+ * Filter out activity logs that tend to be noise in message display.
8
+ */
9
+ export declare function shouldSkipActivityLog(activity: string, modeName: string, modelName: string): boolean;
10
+ /**
11
+ * Split text into multiple chunks for Embed description.
12
+ */
13
+ export declare function splitForEmbedDescription(text: string, maxLength?: number): string[];
14
+ /**
15
+ * Fit text within the limit for a single Embed description.
16
+ * When exceeding the limit, truncate the beginning and prioritize displaying the tail (most recent part).
17
+ */
18
+ export declare function fitForSingleEmbedDescription(text: string, maxLength?: number): string;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildModeModelLines = buildModeModelLines;
4
+ exports.shouldSkipActivityLog = shouldSkipActivityLog;
5
+ exports.splitForEmbedDescription = splitForEmbedDescription;
6
+ exports.fitForSingleEmbedDescription = fitForSingleEmbedDescription;
7
+ /**
8
+ * Generate mode/model lines for initial status display.
9
+ * Consolidates into a single line if Fast and Plan models are the same.
10
+ */
11
+ function buildModeModelLines(modeName, fastModel, planModel) {
12
+ const lines = [`Current Mode: ${modeName}`];
13
+ if (fastModel.trim().toLowerCase() === planModel.trim().toLowerCase()) {
14
+ lines.push(`Model: ${fastModel}`);
15
+ return lines;
16
+ }
17
+ lines.push(`Fast Model: ${fastModel}`);
18
+ lines.push(`Plan Model: ${planModel}`);
19
+ return lines;
20
+ }
21
+ /**
22
+ * Filter out activity logs that tend to be noise in message display.
23
+ */
24
+ function shouldSkipActivityLog(activity, modeName, modelName) {
25
+ const normalized = activity.trim().toLowerCase();
26
+ if (!normalized)
27
+ return true;
28
+ const modeLower = modeName.trim().toLowerCase();
29
+ const modelLower = modelName.trim().toLowerCase();
30
+ if (normalized === modeLower || normalized === modelLower)
31
+ return true;
32
+ if (/^(?:fast|planning|plan|generating\.*|thinking\.*|processing\.*|working\.*)$/.test(normalized)) {
33
+ return true;
34
+ }
35
+ // Single-word logs that tend to be noise (create / ready / pull. etc.)
36
+ if (/^[a-z][a-z0-9_-]{1,24}[.!…]?$/.test(normalized)) {
37
+ return true;
38
+ }
39
+ // Detailed trace for file reading operations (Analyzed....)
40
+ if (/^analyzed/.test(normalized)) {
41
+ return true;
42
+ }
43
+ return false;
44
+ }
45
+ /**
46
+ * Split text into multiple chunks for Embed description.
47
+ */
48
+ function splitForEmbedDescription(text, maxLength = 3500) {
49
+ if (text.length <= maxLength)
50
+ return [text];
51
+ const lines = text.split('\n');
52
+ const chunks = [];
53
+ let current = '';
54
+ const flush = () => {
55
+ if (!current)
56
+ return;
57
+ chunks.push(current);
58
+ current = '';
59
+ };
60
+ for (const line of lines) {
61
+ const candidate = current ? `${current}\n${line}` : line;
62
+ if (candidate.length <= maxLength) {
63
+ current = candidate;
64
+ continue;
65
+ }
66
+ flush();
67
+ if (line.length <= maxLength) {
68
+ current = line;
69
+ continue;
70
+ }
71
+ let cursor = 0;
72
+ while (cursor < line.length) {
73
+ chunks.push(line.slice(cursor, cursor + maxLength));
74
+ cursor += maxLength;
75
+ }
76
+ }
77
+ flush();
78
+ return chunks.length > 0 ? chunks : [''];
79
+ }
80
+ /**
81
+ * Fit text within the limit for a single Embed description.
82
+ * When exceeding the limit, truncate the beginning and prioritize displaying the tail (most recent part).
83
+ */
84
+ function fitForSingleEmbedDescription(text, maxLength = 3500) {
85
+ if (text.length <= maxLength)
86
+ return text;
87
+ const prefix = '... (beginning truncated)\n';
88
+ const tailLength = Math.max(0, maxLength - prefix.length);
89
+ return `${prefix}${text.slice(-tailLength)}`;
90
+ }
91
+ //# sourceMappingURL=streamMessageFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamMessageFormatter.js","sourceRoot":"","sources":["../../src/utils/streamMessageFormatter.ts"],"names":[],"mappings":"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"}