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":"chatSessionService.js","sourceRoot":"","sources":["../../src/services/chatSessionService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { CdpService } from './cdpService';
2
+ /** Error popup information */
3
+ export interface ErrorPopupInfo {
4
+ /** Error popup title text */
5
+ title: string;
6
+ /** Error popup body/description text */
7
+ body: string;
8
+ /** Button labels found in the popup */
9
+ buttons: string[];
10
+ }
11
+ export interface ErrorPopupDetectorOptions {
12
+ /** CDP service instance */
13
+ cdpService: CdpService;
14
+ /** Poll interval in milliseconds (default: 3000ms) */
15
+ pollIntervalMs?: number;
16
+ /** Callback when an error popup is detected */
17
+ onErrorPopup: (info: ErrorPopupInfo) => void;
18
+ /** Callback when a previously detected error popup is resolved (popup disappeared) */
19
+ onResolved?: () => void;
20
+ }
21
+ /**
22
+ * Detects error popup dialogs (e.g. "Agent terminated due to error") in the
23
+ * Antigravity UI via polling.
24
+ *
25
+ * Follows the same polling pattern as PlanningDetector / ApprovalDetector:
26
+ * - start()/stop() lifecycle
27
+ * - Duplicate notification prevention via lastDetectedKey
28
+ * - Cooldown to suppress rapid re-detection
29
+ * - CDP error tolerance (continues polling on error)
30
+ */
31
+ export declare class ErrorPopupDetector {
32
+ private cdpService;
33
+ private pollIntervalMs;
34
+ private onErrorPopup;
35
+ private onResolved?;
36
+ private pollTimer;
37
+ private isRunning;
38
+ /** Key of the last detected error popup (for duplicate notification prevention) */
39
+ private lastDetectedKey;
40
+ /** Full ErrorPopupInfo from the last detection */
41
+ private lastDetectedInfo;
42
+ /** Timestamp of last notification (for cooldown-based dedup) */
43
+ private lastNotifiedAt;
44
+ /** Cooldown period in ms to suppress duplicate notifications (10s for error popups) */
45
+ private static readonly COOLDOWN_MS;
46
+ constructor(options: ErrorPopupDetectorOptions);
47
+ /** Start monitoring. */
48
+ start(): void;
49
+ /** Stop monitoring. */
50
+ stop(): Promise<void>;
51
+ /** Return the last detected error popup info. Returns null if nothing has been detected. */
52
+ getLastDetectedInfo(): ErrorPopupInfo | null;
53
+ /** Returns whether monitoring is currently active. */
54
+ isActive(): boolean;
55
+ /**
56
+ * Click the Dismiss button via CDP.
57
+ * @returns true if click succeeded
58
+ */
59
+ clickDismissButton(): Promise<boolean>;
60
+ /**
61
+ * Click the "Copy debug info" button via CDP.
62
+ * @returns true if click succeeded
63
+ */
64
+ clickCopyDebugInfoButton(): Promise<boolean>;
65
+ /**
66
+ * Click the Retry button via CDP.
67
+ * @returns true if click succeeded
68
+ */
69
+ clickRetryButton(): Promise<boolean>;
70
+ /**
71
+ * Read clipboard content from the browser via navigator.clipboard.readText().
72
+ * Should be called after clickCopyDebugInfoButton() with a short delay.
73
+ * @returns Clipboard text or null if unavailable
74
+ */
75
+ readClipboard(): Promise<string | null>;
76
+ /** Schedule the next poll. */
77
+ private schedulePoll;
78
+ /**
79
+ * Single poll iteration:
80
+ * 1. Detect error popup from DOM (with contextId)
81
+ * 2. Notify via callback only on new detection (prevent duplicates)
82
+ * 3. Reset lastDetectedKey / lastDetectedInfo when popup disappears
83
+ */
84
+ private poll;
85
+ /** Internal click handler using buildClickScript from approvalDetector. */
86
+ private clickButton;
87
+ /** Execute Runtime.evaluate with contextId and return result.value. */
88
+ private runEvaluateScript;
89
+ }
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorPopupDetector = void 0;
4
+ const logger_1 = require("../utils/logger");
5
+ const approvalDetector_1 = require("./approvalDetector");
6
+ /**
7
+ * Detection script for the Antigravity UI error popup.
8
+ *
9
+ * Looks for dialog/modal containers containing error-related text patterns
10
+ * like "agent terminated", "error", "failed", etc. and extracts popup info.
11
+ */
12
+ const DETECT_ERROR_POPUP_SCRIPT = `(() => {
13
+ const ERROR_PATTERNS = [
14
+ 'agent terminated',
15
+ 'terminated due to error',
16
+ 'unexpected error',
17
+ 'something went wrong',
18
+ 'an error occurred',
19
+ ];
20
+
21
+ const normalize = (text) => (text || '').toLowerCase().replace(/\\s+/g, ' ').trim();
22
+
23
+ // Try dialog/modal first
24
+ const dialogs = Array.from(document.querySelectorAll(
25
+ '[role="dialog"], [role="alertdialog"], .modal, .dialog'
26
+ )).filter(el => el.offsetParent !== null || el.getAttribute('aria-modal') === 'true');
27
+
28
+ // Fallback: look for fixed/absolute positioned overlays
29
+ if (dialogs.length === 0) {
30
+ const overlays = Array.from(document.querySelectorAll('div[class*="fixed"], div[class*="absolute"]'))
31
+ .filter(el => {
32
+ const style = window.getComputedStyle(el);
33
+ return (style.position === 'fixed' || style.position === 'absolute')
34
+ && style.zIndex && parseInt(style.zIndex, 10) > 10
35
+ && el.querySelector('button');
36
+ });
37
+ dialogs.push(...overlays);
38
+ }
39
+
40
+ for (const dialog of dialogs) {
41
+ const fullText = normalize(dialog.textContent || '');
42
+ const isError = ERROR_PATTERNS.some(p => fullText.includes(p));
43
+ if (!isError) continue;
44
+
45
+ // Extract title from heading elements or first prominent text
46
+ const headingEl = dialog.querySelector('h1, h2, h3, h4, [class*="title"], [class*="heading"]');
47
+ const title = headingEl ? (headingEl.textContent || '').trim() : '';
48
+
49
+ // Extract body text (excluding button text and title)
50
+ const allButtons = Array.from(dialog.querySelectorAll('button'))
51
+ .filter(btn => btn.offsetParent !== null);
52
+ const buttonTexts = new Set(allButtons.map(btn => (btn.textContent || '').trim()));
53
+
54
+ const bodyParts = [];
55
+ const walker = document.createTreeWalker(dialog, NodeFilter.SHOW_TEXT);
56
+ let node;
57
+ while ((node = walker.nextNode())) {
58
+ const text = (node.textContent || '').trim();
59
+ if (!text) continue;
60
+ if (buttonTexts.has(text)) continue;
61
+ if (text === title) continue;
62
+ bodyParts.push(text);
63
+ }
64
+ const body = bodyParts.join(' ').slice(0, 1000);
65
+
66
+ const buttons = allButtons.map(btn => (btn.textContent || '').trim()).filter(t => t.length > 0);
67
+
68
+ if (buttons.length === 0) continue;
69
+
70
+ return { title: title || 'Error', body, buttons };
71
+ }
72
+
73
+ return null;
74
+ })()`;
75
+ /**
76
+ * Read clipboard content via navigator.clipboard.readText().
77
+ * Requires awaitPromise=true since clipboard API returns a Promise.
78
+ */
79
+ const READ_CLIPBOARD_SCRIPT = `(async () => {
80
+ try {
81
+ const text = await navigator.clipboard.readText();
82
+ return text || null;
83
+ } catch (e) {
84
+ return null;
85
+ }
86
+ })()`;
87
+ /**
88
+ * Detects error popup dialogs (e.g. "Agent terminated due to error") in the
89
+ * Antigravity UI via polling.
90
+ *
91
+ * Follows the same polling pattern as PlanningDetector / ApprovalDetector:
92
+ * - start()/stop() lifecycle
93
+ * - Duplicate notification prevention via lastDetectedKey
94
+ * - Cooldown to suppress rapid re-detection
95
+ * - CDP error tolerance (continues polling on error)
96
+ */
97
+ class ErrorPopupDetector {
98
+ cdpService;
99
+ pollIntervalMs;
100
+ onErrorPopup;
101
+ onResolved;
102
+ pollTimer = null;
103
+ isRunning = false;
104
+ /** Key of the last detected error popup (for duplicate notification prevention) */
105
+ lastDetectedKey = null;
106
+ /** Full ErrorPopupInfo from the last detection */
107
+ lastDetectedInfo = null;
108
+ /** Timestamp of last notification (for cooldown-based dedup) */
109
+ lastNotifiedAt = 0;
110
+ /** Cooldown period in ms to suppress duplicate notifications (10s for error popups) */
111
+ static COOLDOWN_MS = 10000;
112
+ constructor(options) {
113
+ this.cdpService = options.cdpService;
114
+ this.pollIntervalMs = options.pollIntervalMs ?? 3000;
115
+ this.onErrorPopup = options.onErrorPopup;
116
+ this.onResolved = options.onResolved;
117
+ }
118
+ /** Start monitoring. */
119
+ start() {
120
+ if (this.isRunning)
121
+ return;
122
+ this.isRunning = true;
123
+ this.lastDetectedKey = null;
124
+ this.lastDetectedInfo = null;
125
+ this.lastNotifiedAt = 0;
126
+ this.schedulePoll();
127
+ }
128
+ /** Stop monitoring. */
129
+ async stop() {
130
+ this.isRunning = false;
131
+ if (this.pollTimer) {
132
+ clearTimeout(this.pollTimer);
133
+ this.pollTimer = null;
134
+ }
135
+ }
136
+ /** Return the last detected error popup info. Returns null if nothing has been detected. */
137
+ getLastDetectedInfo() {
138
+ return this.lastDetectedInfo;
139
+ }
140
+ /** Returns whether monitoring is currently active. */
141
+ isActive() {
142
+ return this.isRunning;
143
+ }
144
+ /**
145
+ * Click the Dismiss button via CDP.
146
+ * @returns true if click succeeded
147
+ */
148
+ async clickDismissButton() {
149
+ return this.clickButton('Dismiss');
150
+ }
151
+ /**
152
+ * Click the "Copy debug info" button via CDP.
153
+ * @returns true if click succeeded
154
+ */
155
+ async clickCopyDebugInfoButton() {
156
+ return this.clickButton('Copy debug info');
157
+ }
158
+ /**
159
+ * Click the Retry button via CDP.
160
+ * @returns true if click succeeded
161
+ */
162
+ async clickRetryButton() {
163
+ return this.clickButton('Retry');
164
+ }
165
+ /**
166
+ * Read clipboard content from the browser via navigator.clipboard.readText().
167
+ * Should be called after clickCopyDebugInfoButton() with a short delay.
168
+ * @returns Clipboard text or null if unavailable
169
+ */
170
+ async readClipboard() {
171
+ try {
172
+ const result = await this.runEvaluateScript(READ_CLIPBOARD_SCRIPT, true);
173
+ return typeof result === 'string' ? result : null;
174
+ }
175
+ catch (error) {
176
+ logger_1.logger.error('[ErrorPopupDetector] Error reading clipboard:', error);
177
+ return null;
178
+ }
179
+ }
180
+ /** Schedule the next poll. */
181
+ schedulePoll() {
182
+ if (!this.isRunning)
183
+ return;
184
+ this.pollTimer = setTimeout(async () => {
185
+ await this.poll();
186
+ if (this.isRunning) {
187
+ this.schedulePoll();
188
+ }
189
+ }, this.pollIntervalMs);
190
+ }
191
+ /**
192
+ * Single poll iteration:
193
+ * 1. Detect error popup from DOM (with contextId)
194
+ * 2. Notify via callback only on new detection (prevent duplicates)
195
+ * 3. Reset lastDetectedKey / lastDetectedInfo when popup disappears
196
+ */
197
+ async poll() {
198
+ try {
199
+ const contextId = this.cdpService.getPrimaryContextId();
200
+ const callParams = {
201
+ expression: DETECT_ERROR_POPUP_SCRIPT,
202
+ returnByValue: true,
203
+ awaitPromise: false,
204
+ };
205
+ if (contextId !== null) {
206
+ callParams.contextId = contextId;
207
+ }
208
+ const result = await this.cdpService.call('Runtime.evaluate', callParams);
209
+ const info = result?.result?.value ?? null;
210
+ if (info) {
211
+ // Duplicate prevention: use title + body snippet as key
212
+ const key = `${info.title}::${info.body.slice(0, 100)}`;
213
+ const now = Date.now();
214
+ const withinCooldown = (now - this.lastNotifiedAt) < ErrorPopupDetector.COOLDOWN_MS;
215
+ if (key !== this.lastDetectedKey && !withinCooldown) {
216
+ this.lastDetectedKey = key;
217
+ this.lastDetectedInfo = info;
218
+ this.lastNotifiedAt = now;
219
+ Promise.resolve(this.onErrorPopup(info)).catch((err) => {
220
+ logger_1.logger.error('[ErrorPopupDetector] onErrorPopup callback failed:', err);
221
+ });
222
+ }
223
+ else if (key === this.lastDetectedKey) {
224
+ // Same key -- update stored info silently
225
+ this.lastDetectedInfo = info;
226
+ }
227
+ }
228
+ else {
229
+ // Reset when popup disappears (prepare for next detection)
230
+ const wasDetected = this.lastDetectedKey !== null;
231
+ this.lastDetectedKey = null;
232
+ this.lastDetectedInfo = null;
233
+ if (wasDetected && this.onResolved) {
234
+ this.onResolved();
235
+ }
236
+ }
237
+ }
238
+ catch (error) {
239
+ // Ignore CDP errors and continue monitoring
240
+ const message = error instanceof Error ? error.message : String(error);
241
+ if (message.includes('WebSocket is not connected')) {
242
+ return;
243
+ }
244
+ logger_1.logger.error('[ErrorPopupDetector] Error during polling:', error);
245
+ }
246
+ }
247
+ /** Internal click handler using buildClickScript from approvalDetector. */
248
+ async clickButton(buttonText) {
249
+ try {
250
+ const result = await this.runEvaluateScript((0, approvalDetector_1.buildClickScript)(buttonText));
251
+ return result?.ok === true;
252
+ }
253
+ catch (error) {
254
+ logger_1.logger.error('[ErrorPopupDetector] Error while clicking button:', error);
255
+ return false;
256
+ }
257
+ }
258
+ /** Execute Runtime.evaluate with contextId and return result.value. */
259
+ async runEvaluateScript(expression, awaitPromise = false) {
260
+ const contextId = this.cdpService.getPrimaryContextId();
261
+ const callParams = {
262
+ expression,
263
+ returnByValue: true,
264
+ awaitPromise,
265
+ };
266
+ if (contextId !== null) {
267
+ callParams.contextId = contextId;
268
+ }
269
+ const result = await this.cdpService.call('Runtime.evaluate', callParams);
270
+ return result?.result?.value;
271
+ }
272
+ }
273
+ exports.ErrorPopupDetector = ErrorPopupDetector;
274
+ //# sourceMappingURL=errorPopupDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorPopupDetector.js","sourceRoot":"","sources":["../../src/services/errorPopupDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Available execution modes
3
+ * fast: Fast response mode (for simple tasks)
4
+ * plan: Planning mode (execute complex tasks step by step)
5
+ */
6
+ export declare const AVAILABLE_MODES: readonly ["fast", "plan"];
7
+ /** Mode display name mapping */
8
+ export declare const MODE_DISPLAY_NAMES: Record<string, string>;
9
+ /** Mode description mapping */
10
+ export declare const MODE_DESCRIPTIONS: Record<string, string>;
11
+ /** Antigravity UI display name mapping (internal name -> UI display name) */
12
+ export declare const MODE_UI_NAMES: Record<string, string>;
13
+ /** Reverse mapping from UI display name -> internal name */
14
+ export declare const MODE_UI_NAME_REVERSE: Record<string, string>;
15
+ /** Default execution mode */
16
+ export declare const DEFAULT_MODE: Mode;
17
+ /** Mode type definition */
18
+ export type Mode = typeof AVAILABLE_MODES[number];
19
+ /** Mode set result type definition */
20
+ export interface ModeSetResult {
21
+ success: boolean;
22
+ mode?: Mode;
23
+ error?: string;
24
+ }
25
+ /**
26
+ * Service class for managing execution modes.
27
+ * Handles mode switching via the /mode command.
28
+ */
29
+ export declare class ModeService {
30
+ private currentMode;
31
+ /**
32
+ * Get the current execution mode
33
+ */
34
+ getCurrentMode(): Mode;
35
+ /**
36
+ * Switch execution mode
37
+ * @param modeName Mode name to set (case-insensitive)
38
+ */
39
+ setMode(modeName: string): ModeSetResult;
40
+ /**
41
+ * Get the list of available modes
42
+ */
43
+ getAvailableModes(): readonly string[];
44
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModeService = exports.DEFAULT_MODE = exports.MODE_UI_NAME_REVERSE = exports.MODE_UI_NAMES = exports.MODE_DESCRIPTIONS = exports.MODE_DISPLAY_NAMES = exports.AVAILABLE_MODES = void 0;
4
+ const i18n_1 = require("../utils/i18n");
5
+ /**
6
+ * Available execution modes
7
+ * fast: Fast response mode (for simple tasks)
8
+ * plan: Planning mode (execute complex tasks step by step)
9
+ */
10
+ exports.AVAILABLE_MODES = ['fast', 'plan'];
11
+ /** Mode display name mapping */
12
+ exports.MODE_DISPLAY_NAMES = {
13
+ fast: '⚡ Fast',
14
+ plan: '📋 Plan',
15
+ };
16
+ /** Mode description mapping */
17
+ exports.MODE_DESCRIPTIONS = {
18
+ fast: (0, i18n_1.t)('Fast Mode — for simple tasks'),
19
+ plan: (0, i18n_1.t)('Plan Mode — for complex step-by-step tasks'),
20
+ };
21
+ /** Antigravity UI display name mapping (internal name -> UI display name) */
22
+ exports.MODE_UI_NAMES = {
23
+ fast: 'Fast',
24
+ plan: 'Planning',
25
+ };
26
+ /** Reverse mapping from UI display name -> internal name */
27
+ exports.MODE_UI_NAME_REVERSE = Object.fromEntries(Object.entries(exports.MODE_UI_NAMES).map(([k, v]) => [v.toLowerCase(), k]));
28
+ /** Default execution mode */
29
+ exports.DEFAULT_MODE = 'fast';
30
+ /**
31
+ * Service class for managing execution modes.
32
+ * Handles mode switching via the /mode command.
33
+ */
34
+ class ModeService {
35
+ currentMode = exports.DEFAULT_MODE;
36
+ /**
37
+ * Get the current execution mode
38
+ */
39
+ getCurrentMode() {
40
+ return this.currentMode;
41
+ }
42
+ /**
43
+ * Switch execution mode
44
+ * @param modeName Mode name to set (case-insensitive)
45
+ */
46
+ setMode(modeName) {
47
+ if (!modeName || modeName.trim() === '') {
48
+ return {
49
+ success: false,
50
+ error: (0, i18n_1.t)('⚠️ Mode name not specified. Available modes: ') + exports.AVAILABLE_MODES.join(', '),
51
+ };
52
+ }
53
+ const normalized = modeName.trim().toLowerCase();
54
+ if (!exports.AVAILABLE_MODES.includes(normalized)) {
55
+ return {
56
+ success: false,
57
+ error: (0, i18n_1.t)(`⚠️ Invalid mode "${modeName}". Available modes: ${exports.AVAILABLE_MODES.join(', ')}`),
58
+ };
59
+ }
60
+ this.currentMode = normalized;
61
+ return {
62
+ success: true,
63
+ mode: this.currentMode,
64
+ };
65
+ }
66
+ /**
67
+ * Get the list of available modes
68
+ */
69
+ getAvailableModes() {
70
+ return exports.AVAILABLE_MODES;
71
+ }
72
+ }
73
+ exports.ModeService = ModeService;
74
+ //# sourceMappingURL=modeService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modeService.js","sourceRoot":"","sources":["../../src/services/modeService.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC;;;;GAIG;AACU,QAAA,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAEzD,gCAAgC;AACnB,QAAA,kBAAkB,GAA2B;IACtD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,SAAS;CAClB,CAAC;AAEF,+BAA+B;AAClB,QAAA,iBAAiB,GAA2B;IACrD,IAAI,EAAE,IAAA,QAAC,EAAC,8BAA8B,CAAC;IACvC,IAAI,EAAE,IAAA,QAAC,EAAC,4CAA4C,CAAC;CACxD,CAAC;AAEF,6EAA6E;AAChE,QAAA,aAAa,GAA2B;IACjD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,UAAU;CACnB,CAAC;AAEF,4DAA4D;AAC/C,QAAA,oBAAoB,GAA2B,MAAM,CAAC,WAAW,CAC1E,MAAM,CAAC,OAAO,CAAC,qBAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CACtE,CAAC;AAEF,6BAA6B;AAChB,QAAA,YAAY,GAAS,MAAM,CAAC;AAYzC;;;GAGG;AACH,MAAa,WAAW;IACZ,WAAW,GAAS,oBAAY,CAAC;IAEzC;;OAEG;IACI,cAAc;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,QAAgB;QAC3B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACtC,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAA,QAAC,EAAC,+CAA+C,CAAC,GAAG,uBAAe,CAAC,IAAI,CAAC,IAAI,CAAC;aACzF,CAAC;QACN,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAU,CAAC;QAEzD,IAAI,CAAC,uBAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAA,QAAC,EAAC,oBAAoB,QAAQ,uBAAuB,uBAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5F,CAAC;QACN,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,OAAO;YACH,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI,CAAC,WAAW;SACzB,CAAC;IACN,CAAC;IAED;;OAEG;IACI,iBAAiB;QACpB,OAAO,uBAAe,CAAC;IAC3B,CAAC;CACJ;AA5CD,kCA4CC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Available LLM models
3
+ * Aligned with models selectable in the Antigravity (Cursor fork) UI
4
+ * Note: Models may change with Antigravity version updates
5
+ */
6
+ export declare const AVAILABLE_MODELS: readonly ["gemini-3.1-pro-high", "gemini-3.1-pro-low", "gemini-3-flash", "claude-sonnet-4.6-thinking", "claude-opus-4.6-thinking", "gpt-oss-120b-medium"];
7
+ /** Default LLM model */
8
+ export declare const DEFAULT_MODEL: Model;
9
+ /** Model type definition */
10
+ export type Model = typeof AVAILABLE_MODELS[number];
11
+ /** Model set result type definition */
12
+ export interface ModelSetResult {
13
+ success: boolean;
14
+ model?: Model;
15
+ error?: string;
16
+ }
17
+ /**
18
+ * Service class for managing LLM models.
19
+ * Handles model switching via the /model command.
20
+ */
21
+ export declare class ModelService {
22
+ private currentModel;
23
+ /**
24
+ * Get the current LLM model
25
+ */
26
+ getCurrentModel(): Model;
27
+ /**
28
+ * Switch LLM model
29
+ * @param modelName Model name to set (case-insensitive)
30
+ */
31
+ setModel(modelName: string): ModelSetResult;
32
+ /**
33
+ * Get the list of available models
34
+ */
35
+ getAvailableModels(): readonly string[];
36
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelService = exports.DEFAULT_MODEL = exports.AVAILABLE_MODELS = void 0;
4
+ const i18n_1 = require("../utils/i18n");
5
+ /**
6
+ * Available LLM models
7
+ * Aligned with models selectable in the Antigravity (Cursor fork) UI
8
+ * Note: Models may change with Antigravity version updates
9
+ */
10
+ exports.AVAILABLE_MODELS = [
11
+ 'gemini-3.1-pro-high',
12
+ 'gemini-3.1-pro-low',
13
+ 'gemini-3-flash',
14
+ 'claude-sonnet-4.6-thinking',
15
+ 'claude-opus-4.6-thinking',
16
+ 'gpt-oss-120b-medium'
17
+ ];
18
+ /** Default LLM model */
19
+ exports.DEFAULT_MODEL = 'gemini-3-flash';
20
+ /**
21
+ * Service class for managing LLM models.
22
+ * Handles model switching via the /model command.
23
+ */
24
+ class ModelService {
25
+ currentModel = exports.DEFAULT_MODEL;
26
+ /**
27
+ * Get the current LLM model
28
+ */
29
+ getCurrentModel() {
30
+ return this.currentModel;
31
+ }
32
+ /**
33
+ * Switch LLM model
34
+ * @param modelName Model name to set (case-insensitive)
35
+ */
36
+ setModel(modelName) {
37
+ if (!modelName || modelName.trim() === '') {
38
+ return {
39
+ success: false,
40
+ error: (0, i18n_1.t)('⚠️ Model name not specified. Available models: ') + exports.AVAILABLE_MODELS.join(', '),
41
+ };
42
+ }
43
+ const normalized = modelName.trim().toLowerCase();
44
+ if (!exports.AVAILABLE_MODELS.includes(normalized)) {
45
+ return {
46
+ success: false,
47
+ error: (0, i18n_1.t)(`⚠️ Invalid model "${modelName}". Available models: ${exports.AVAILABLE_MODELS.join(', ')}`),
48
+ };
49
+ }
50
+ this.currentModel = normalized;
51
+ return {
52
+ success: true,
53
+ model: this.currentModel,
54
+ };
55
+ }
56
+ /**
57
+ * Get the list of available models
58
+ */
59
+ getAvailableModels() {
60
+ return exports.AVAILABLE_MODELS;
61
+ }
62
+ }
63
+ exports.ModelService = ModelService;
64
+ //# sourceMappingURL=modelService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelService.js","sourceRoot":"","sources":["../../src/services/modelService.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAElC;;;;GAIG;AACU,QAAA,gBAAgB,GAAG;IAC5B,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,4BAA4B;IAC5B,0BAA0B;IAC1B,qBAAqB;CACf,CAAC;AAEX,wBAAwB;AACX,QAAA,aAAa,GAAU,gBAAgB,CAAC;AAYrD;;;GAGG;AACH,MAAa,YAAY;IACb,YAAY,GAAU,qBAAa,CAAC;IAE5C;;OAEG;IACI,eAAe;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,SAAiB;QAC7B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxC,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAA,QAAC,EAAC,iDAAiD,CAAC,GAAG,wBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;aAC5F,CAAC;QACN,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAW,CAAC;QAE3D,IAAI,CAAC,wBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAA,QAAC,EAAC,qBAAqB,SAAS,wBAAwB,wBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aAChG,CAAC;QACN,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/B,OAAO;YACH,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI,CAAC,YAAY;SAC3B,CAAC;IACN,CAAC;IAED;;OAEG;IACI,kBAAkB;QACrB,OAAO,wBAAgB,CAAC;IAC5B,CAAC;CACJ;AA5CD,oCA4CC"}