antigravity-telegram 0.0.0-stage → 0.2.12

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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +316 -2
  3. package/dist/bin/cli.d.ts +2 -0
  4. package/dist/bin/cli.js +82 -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 +188 -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 +320 -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 +43 -0
  17. package/dist/bin/commands/start.js.map +1 -0
  18. package/dist/bin/welcome.d.ts +1 -0
  19. package/dist/bin/welcome.js +51 -0
  20. package/dist/bin/welcome.js.map +1 -0
  21. package/dist/bot/index.d.ts +2 -0
  22. package/dist/bot/index.js +1945 -0
  23. package/dist/bot/index.js.map +1 -0
  24. package/dist/commands/chatCommandHandler.d.ts +20 -0
  25. package/dist/commands/chatCommandHandler.js +30 -0
  26. package/dist/commands/chatCommandHandler.js.map +1 -0
  27. package/dist/commands/cleanupCommandHandler.d.ts +21 -0
  28. package/dist/commands/cleanupCommandHandler.js +40 -0
  29. package/dist/commands/cleanupCommandHandler.js.map +1 -0
  30. package/dist/commands/commandInterface.d.ts +46 -0
  31. package/dist/commands/commandInterface.js +48 -0
  32. package/dist/commands/commandInterface.js.map +1 -0
  33. package/dist/commands/joinCommandHandler.d.ts +19 -0
  34. package/dist/commands/joinCommandHandler.js +27 -0
  35. package/dist/commands/joinCommandHandler.js.map +1 -0
  36. package/dist/commands/messageParser.d.ts +7 -0
  37. package/dist/commands/messageParser.js +29 -0
  38. package/dist/commands/messageParser.js.map +1 -0
  39. package/dist/commands/slashCommandHandler.d.ts +25 -0
  40. package/dist/commands/slashCommandHandler.js +111 -0
  41. package/dist/commands/slashCommandHandler.js.map +1 -0
  42. package/dist/commands/workspaceCommandHandler.d.ts +16 -0
  43. package/dist/commands/workspaceCommandHandler.js +29 -0
  44. package/dist/commands/workspaceCommandHandler.js.map +1 -0
  45. package/dist/database/baseRepository.d.ts +29 -0
  46. package/dist/database/baseRepository.js +48 -0
  47. package/dist/database/baseRepository.js.map +1 -0
  48. package/dist/database/chatSessionRepository.d.ts +59 -0
  49. package/dist/database/chatSessionRepository.js +109 -0
  50. package/dist/database/chatSessionRepository.js.map +1 -0
  51. package/dist/database/scheduleRepository.d.ts +60 -0
  52. package/dist/database/scheduleRepository.js +105 -0
  53. package/dist/database/scheduleRepository.js.map +1 -0
  54. package/dist/database/templateRepository.d.ts +52 -0
  55. package/dist/database/templateRepository.js +84 -0
  56. package/dist/database/templateRepository.js.map +1 -0
  57. package/dist/database/workspaceBindingRepository.d.ts +48 -0
  58. package/dist/database/workspaceBindingRepository.js +91 -0
  59. package/dist/database/workspaceBindingRepository.js.map +1 -0
  60. package/dist/index.d.ts +1 -0
  61. package/dist/index.js +11 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/middleware/auth.d.ts +5 -0
  64. package/dist/middleware/auth.js +14 -0
  65. package/dist/middleware/auth.js.map +1 -0
  66. package/dist/middleware/sanitize.d.ts +1 -0
  67. package/dist/middleware/sanitize.js +37 -0
  68. package/dist/middleware/sanitize.js.map +1 -0
  69. package/dist/services/antigravityLauncher.d.ts +7 -0
  70. package/dist/services/antigravityLauncher.js +94 -0
  71. package/dist/services/antigravityLauncher.js.map +1 -0
  72. package/dist/services/approvalDetector.d.ts +97 -0
  73. package/dist/services/approvalDetector.js +394 -0
  74. package/dist/services/approvalDetector.js.map +1 -0
  75. package/dist/services/assistantDomExtractor.d.ts +50 -0
  76. package/dist/services/assistantDomExtractor.js +409 -0
  77. package/dist/services/assistantDomExtractor.js.map +1 -0
  78. package/dist/services/autoAcceptService.d.ts +15 -0
  79. package/dist/services/autoAcceptService.js +83 -0
  80. package/dist/services/autoAcceptService.js.map +1 -0
  81. package/dist/services/baseService.d.ts +25 -0
  82. package/dist/services/baseService.js +49 -0
  83. package/dist/services/baseService.js.map +1 -0
  84. package/dist/services/cdpBridgeManager.d.ts +50 -0
  85. package/dist/services/cdpBridgeManager.js +360 -0
  86. package/dist/services/cdpBridgeManager.js.map +1 -0
  87. package/dist/services/cdpConnectionPool.d.ts +94 -0
  88. package/dist/services/cdpConnectionPool.js +255 -0
  89. package/dist/services/cdpConnectionPool.js.map +1 -0
  90. package/dist/services/cdpService.d.ts +240 -0
  91. package/dist/services/cdpService.js +1589 -0
  92. package/dist/services/cdpService.js.map +1 -0
  93. package/dist/services/chatSessionService.d.ts +91 -0
  94. package/dist/services/chatSessionService.js +742 -0
  95. package/dist/services/chatSessionService.js.map +1 -0
  96. package/dist/services/errorPopupDetector.d.ts +89 -0
  97. package/dist/services/errorPopupDetector.js +274 -0
  98. package/dist/services/errorPopupDetector.js.map +1 -0
  99. package/dist/services/modeService.d.ts +46 -0
  100. package/dist/services/modeService.js +78 -0
  101. package/dist/services/modeService.js.map +1 -0
  102. package/dist/services/modelService.d.ts +38 -0
  103. package/dist/services/modelService.js +68 -0
  104. package/dist/services/modelService.js.map +1 -0
  105. package/dist/services/planningDetector.d.ts +87 -0
  106. package/dist/services/planningDetector.js +321 -0
  107. package/dist/services/planningDetector.js.map +1 -0
  108. package/dist/services/processManager.d.ts +19 -0
  109. package/dist/services/processManager.js +64 -0
  110. package/dist/services/processManager.js.map +1 -0
  111. package/dist/services/progressSender.d.ts +20 -0
  112. package/dist/services/progressSender.js +65 -0
  113. package/dist/services/progressSender.js.map +1 -0
  114. package/dist/services/promptDispatcher.d.ts +38 -0
  115. package/dist/services/promptDispatcher.js +42 -0
  116. package/dist/services/promptDispatcher.js.map +1 -0
  117. package/dist/services/quotaService.d.ts +23 -0
  118. package/dist/services/quotaService.js +195 -0
  119. package/dist/services/quotaService.js.map +1 -0
  120. package/dist/services/responseMonitor.d.ts +150 -0
  121. package/dist/services/responseMonitor.js +1130 -0
  122. package/dist/services/responseMonitor.js.map +1 -0
  123. package/dist/services/scheduleService.d.ts +63 -0
  124. package/dist/services/scheduleService.js +144 -0
  125. package/dist/services/scheduleService.js.map +1 -0
  126. package/dist/services/screenshotService.d.ts +55 -0
  127. package/dist/services/screenshotService.js +86 -0
  128. package/dist/services/screenshotService.js.map +1 -0
  129. package/dist/services/telegramTopicManager.d.ts +41 -0
  130. package/dist/services/telegramTopicManager.js +105 -0
  131. package/dist/services/telegramTopicManager.js.map +1 -0
  132. package/dist/services/titleGeneratorService.d.ts +34 -0
  133. package/dist/services/titleGeneratorService.js +118 -0
  134. package/dist/services/titleGeneratorService.js.map +1 -0
  135. package/dist/services/updateCheckService.d.ts +16 -0
  136. package/dist/services/updateCheckService.js +148 -0
  137. package/dist/services/updateCheckService.js.map +1 -0
  138. package/dist/services/userMessageDetector.d.ts +57 -0
  139. package/dist/services/userMessageDetector.js +222 -0
  140. package/dist/services/userMessageDetector.js.map +1 -0
  141. package/dist/services/workspaceService.d.ts +34 -0
  142. package/dist/services/workspaceService.js +82 -0
  143. package/dist/services/workspaceService.js.map +1 -0
  144. package/dist/tools/doctorSelector.d.ts +1 -0
  145. package/dist/tools/doctorSelector.js +92 -0
  146. package/dist/tools/doctorSelector.js.map +1 -0
  147. package/dist/ui/autoAcceptUi.d.ts +6 -0
  148. package/dist/ui/autoAcceptUi.js +22 -0
  149. package/dist/ui/autoAcceptUi.js.map +1 -0
  150. package/dist/ui/modeUi.d.ts +12 -0
  151. package/dist/ui/modeUi.js +40 -0
  152. package/dist/ui/modeUi.js.map +1 -0
  153. package/dist/ui/modelsUi.d.ts +12 -0
  154. package/dist/ui/modelsUi.js +101 -0
  155. package/dist/ui/modelsUi.js.map +1 -0
  156. package/dist/ui/planUi.d.ts +27 -0
  157. package/dist/ui/planUi.js +140 -0
  158. package/dist/ui/planUi.js.map +1 -0
  159. package/dist/ui/projectListUi.d.ts +11 -0
  160. package/dist/ui/projectListUi.js +58 -0
  161. package/dist/ui/projectListUi.js.map +1 -0
  162. package/dist/ui/screenshotUi.d.ts +6 -0
  163. package/dist/ui/screenshotUi.js +28 -0
  164. package/dist/ui/screenshotUi.js.map +1 -0
  165. package/dist/ui/sessionPickerUi.d.ts +8 -0
  166. package/dist/ui/sessionPickerUi.js +31 -0
  167. package/dist/ui/sessionPickerUi.js.map +1 -0
  168. package/dist/ui/templateUi.d.ts +5 -0
  169. package/dist/ui/templateUi.js +44 -0
  170. package/dist/ui/templateUi.js.map +1 -0
  171. package/dist/utils/cdpPorts.d.ts +2 -0
  172. package/dist/utils/cdpPorts.js +6 -0
  173. package/dist/utils/cdpPorts.js.map +1 -0
  174. package/dist/utils/config.d.ts +14 -0
  175. package/dist/utils/config.js +12 -0
  176. package/dist/utils/config.js.map +1 -0
  177. package/dist/utils/configLoader.d.ts +24 -0
  178. package/dist/utils/configLoader.js +167 -0
  179. package/dist/utils/configLoader.js.map +1 -0
  180. package/dist/utils/htmlToTelegramMarkdown.d.ts +6 -0
  181. package/dist/utils/htmlToTelegramMarkdown.js +192 -0
  182. package/dist/utils/htmlToTelegramMarkdown.js.map +1 -0
  183. package/dist/utils/i18n.d.ts +3 -0
  184. package/dist/utils/i18n.js +85 -0
  185. package/dist/utils/i18n.js.map +1 -0
  186. package/dist/utils/imageHandler.d.ts +35 -0
  187. package/dist/utils/imageHandler.js +155 -0
  188. package/dist/utils/imageHandler.js.map +1 -0
  189. package/dist/utils/lockfile.d.ts +7 -0
  190. package/dist/utils/lockfile.js +117 -0
  191. package/dist/utils/lockfile.js.map +1 -0
  192. package/dist/utils/logger.d.ts +23 -0
  193. package/dist/utils/logger.js +85 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/logo.d.ts +1 -0
  196. package/dist/utils/logo.js +11 -0
  197. package/dist/utils/logo.js.map +1 -0
  198. package/dist/utils/metadataExtractor.d.ts +5 -0
  199. package/dist/utils/metadataExtractor.js +16 -0
  200. package/dist/utils/metadataExtractor.js.map +1 -0
  201. package/dist/utils/pathUtils.d.ts +25 -0
  202. package/dist/utils/pathUtils.js +72 -0
  203. package/dist/utils/pathUtils.js.map +1 -0
  204. package/dist/utils/processLogBuffer.d.ts +17 -0
  205. package/dist/utils/processLogBuffer.js +108 -0
  206. package/dist/utils/processLogBuffer.js.map +1 -0
  207. package/dist/utils/streamMessageFormatter.d.ts +18 -0
  208. package/dist/utils/streamMessageFormatter.js +91 -0
  209. package/dist/utils/streamMessageFormatter.js.map +1 -0
  210. package/dist/utils/telegramFormatter.d.ts +37 -0
  211. package/dist/utils/telegramFormatter.js +445 -0
  212. package/dist/utils/telegramFormatter.js.map +1 -0
  213. package/dist/utils/voiceHandler.d.ts +23 -0
  214. package/dist/utils/voiceHandler.js +169 -0
  215. package/dist/utils/voiceHandler.js.map +1 -0
  216. package/locales/en.json +85 -0
  217. package/locales/ja.json +109 -0
  218. package/locales/vi.json +115 -0
  219. package/package.json +93 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 denoyey (https://github.com/denoyey)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,317 @@
1
- # Temporary Holding Version
1
+ <div align="center">
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ <a href="https://github.com/denoyey/antigravity-telegram"><img src="docs/images/banner.svg" alt="Antigravity Telegram Banner" width="100%" /></a>
4
+
5
+ <br/><br/>
6
+
7
+ <h1>🚀 Antigravity Telegram</h1>
8
+
9
+ <p>
10
+ <strong>Control your Antigravity AI IDE from anywhere — directly from Telegram.</strong><br>
11
+ <em>A local-first, privacy-focused remote control gateway powered by the Chrome DevTools Protocol (CDP).</em>
12
+ </p>
13
+
14
+ <p>
15
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="License" /></a>
16
+ <img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square&logo=node.js" alt="Node.js" />
17
+ <img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey?style=flat-square" alt="Platform" />
18
+ <img src="https://img.shields.io/badge/version-0.2.12-blue?style=flat-square" alt="Version" />
19
+ <a href="docs/prd/README.md"><img src="https://img.shields.io/badge/PRD-10%20Modules-purple?style=flat-square" alt="PRD Suite" /></a>
20
+ <img src="https://img.shields.io/badge/security-Zero--Trust%20Audited-success?style=flat-square" alt="Security Audited" />
21
+ </p>
22
+
23
+ <p>
24
+ <a href="#-quick-start"><b>Quick Start</b></a> •
25
+ <a href="#-key-capabilities"><b>Key Capabilities</b></a> •
26
+ <a href="#️-command-reference"><b>Command Reference</b></a> •
27
+ <a href="#️-architecture--interaction-flow"><b>Architecture</b></a> •
28
+ <a href="#-technical-documentation-suite"><b>PRD Documentation</b></a>
29
+ </p>
30
+
31
+ </div>
32
+
33
+ ---
34
+
35
+ ## 📖 Overview
36
+
37
+ **Antigravity Telegram** is a lightweight, local-first bridge that connects your smartphone or any Telegram client directly to your desktop [Antigravity IDE](https://antigravity.dev).
38
+
39
+ Whether you are commuting, having coffee, or working away from your desk, Antigravity Telegram enables you to supervise long-running coding agents, review file edits, approve command executions, send voice notes, and receive real-time code output.
40
+
41
+ **100% Local & Private**: Unlike cloud-hosted relays, Antigravity Telegram runs entirely on your host machine. Telemetry, credentials, prompts, and source code never pass through external intermediate servers. The bot relies exclusively on outbound HTTPS long-polling to Telegram servers; zero inbound listening ports are exposed to the Internet.
42
+
43
+ ```
44
+ +-----------------------------------------------------------------------------------------+
45
+ | ANTIGRAVITY TELEGRAM TOPOLOGY |
46
+ +-----------------------------------------------------------------------------------------+
47
+ | [ Telegram App (Mobile / Desktop) ] |
48
+ | ^ |
49
+ | | Outbound HTTPS Long-Polling (getUpdates) |
50
+ | v |
51
+ | [ Local Workstation (100% Host Resident) ] |
52
+ | ├── 1. Gateway Tier : Grammy Bot Engine + Whitelist Auth Guard |
53
+ | ├── 2. Persistence Tier: SQLite Database (antigravity.db via BaseRepository) |
54
+ | ├── 3. Domain Engine : Dual-Stream ResponseMonitor + ApprovalDetector |
55
+ | └── 4. CDP Bridge : WebSocket ws://127.0.0.1 (Chrome DevTools Protocol) |
56
+ | | |
57
+ | v |
58
+ | [ Antigravity IDE (Chromium Renderer DOM) ] |
59
+ | └── Event-Driven MutationObserver (<100ms real-time updates) |
60
+ +-----------------------------------------------------------------------------------------+
61
+ ```
62
+
63
+ ---
64
+
65
+ ## ✨ Key Capabilities
66
+
67
+ - **⚡ Event-Driven Real-Time Sync (<100ms)**
68
+ Leverages native browser `MutationObserver` bindings via CDP. Assistant outputs, tool calls, and status changes are captured in real-time with sub-100ms latency and minimal host CPU overhead (<1.0% when idle).
69
+
70
+ - **📂 Smart Forum Topic Workspace Routing**
71
+ In Telegram Supergroups, each project directory is bound to its own **Forum Topic**. Messages sent in a topic automatically preserve that repository's context, session state, and concurrency locks.
72
+
73
+ - **⏱️ Dual-Stream Progress Reporting**
74
+ Intelligently separates internal reasoning/tool logs (Thinking, File Diffs, Command Runs) from final assistant code responses. Updates are smoothly throttled to avoid Telegram rate-limit penalties.
75
+
76
+ - **🎙️ On-Device Voice Transcription (Local Whisper)**
77
+ Send voice notes directly from Telegram. Transcribed locally using [whisper.cpp](https://github.com/ggerganov/whisper.cpp) via `ffmpeg-static`. Audio data is processed in memory and never sent to external speech APIs.
78
+
79
+ - **✅ Remote Interactive Approvals**
80
+ When Antigravity requests confirmation for file modifications or terminal commands, you receive a diff preview with interactive buttons (`Approve`, `Reject`, `Auto-Accept`) right on your phone.
81
+
82
+ - **🛡️ Defense-in-Depth Security (Audited)**
83
+ - **Zero-Trust Whitelist**: Only authorized Telegram user IDs are processed; all unauthorized messages are dropped silently.
84
+ - **Path Traversal Defense**: All paths are resolved with canonical `realpathSync` validation against `WORKSPACE_BASE_DIR`, preventing symlink escapes.
85
+ - **Safe DOM Injection**: Prompts are inserted using native `Input.insertText`, eliminating JavaScript evaluation and template injection risks.
86
+ - **Parameterized SQLite**: 100% prepared SQL statements, preventing SQL injection.
87
+
88
+ - **🧱 Clean Object-Oriented Architecture**
89
+ Built with reusable OOP patterns (`BaseRepository`, `BaseService`, `ICommandHandler`), making components maintainable and extensible across other developer bot projects.
90
+
91
+ ---
92
+
93
+ ## 🚀 Quick Start
94
+
95
+ ### Prerequisites
96
+
97
+ - **Node.js**: `v18.0.0` or higher
98
+ - **Antigravity IDE**: Installed on host machine
99
+ - **Telegram Bot**: Created in 1 minute via [@BotFather](https://t.me/BotFather)
100
+
101
+ > [!NOTE]
102
+ > **macOS Users**: Ensure Xcode Command Line Tools are installed (`xcode-select --install`) to compile native C++ SQLite bindings (`better-sqlite3`).
103
+
104
+ ### 1. Installation
105
+
106
+ #### Global Install via npm (Recommended)
107
+ ```bash
108
+ npm install -g antigravity-telegram
109
+ ```
110
+
111
+ #### Or Install from Source
112
+ ```bash
113
+ git clone https://github.com/denoyey/antigravity-telegram.git
114
+ cd antigravity-telegram
115
+ npm install
116
+ npm run build
117
+ ```
118
+
119
+ ### 2. Interactive Setup Wizard
120
+
121
+ Run the interactive setup wizard to configure your Telegram Bot Token, Allowed User IDs, and Workspace Root Directory:
122
+ ```bash
123
+ antigravity-telegram setup
124
+ ```
125
+
126
+ The configuration is saved securely to `.env` or `~/.config/antigravity-telegram-remote/config.json` with `600` file permissions.
127
+
128
+ ### 3. Launch Antigravity with CDP Debugging
129
+
130
+ Antigravity Telegram interacts with Antigravity through its Chrome DevTools Protocol port. Launch Antigravity with debugging enabled:
131
+ ```bash
132
+ antigravity-telegram open
133
+ ```
134
+
135
+ ### 4. Start the Telegram Bot
136
+
137
+ In your terminal, start the bot daemon:
138
+ ```bash
139
+ antigravity-telegram start
140
+ ```
141
+
142
+ > [!TIP]
143
+ > If you experience connection issues or want to verify your setup, run the diagnostic doctor:
144
+ > ```bash
145
+ > antigravity-telegram doctor
146
+ > ```
147
+
148
+ ---
149
+
150
+ ## ⌨️ Command Reference
151
+
152
+ ### CLI Commands (Terminal)
153
+
154
+ | Command | Description |
155
+ | :--- | :--- |
156
+ | `antigravity-telegram setup` | Run the interactive setup and configuration wizard. |
157
+ | `antigravity-telegram open` | Scan available ports and launch Antigravity with CDP enabled. |
158
+ | `antigravity-telegram start` | Start the Telegram bot gateway. |
159
+ | `antigravity-telegram doctor` | Diagnose environment, Node version, CDP connectivity, and database health. |
160
+ | `antigravity-telegram --verbose` | Start with verbose debug-level logging. |
161
+
162
+ *(Note: `antigravity-telegram-remote` is supported as an alias for all CLI commands).*
163
+
164
+ ### Telegram Slash Commands (Chat / Topic)
165
+
166
+ | Slash Command | Context | Description |
167
+ | :--- | :--- | :--- |
168
+ | `/project` | Topic / DM | Open interactive menu to select and bind a workspace to the current topic. |
169
+ | `/status` | Any | View active CDP connection, bound workspace, current AI model, and token quota. |
170
+ | `/new` | Topic / DM | Start a fresh conversational session in the bound workspace, clearing history. |
171
+ | `/chat` | Topic / DM | Browse and switch between previous chat sessions saved for this workspace. |
172
+ | `/screenshot` | Topic / DM | Capture an instant high-resolution PNG screenshot of the Antigravity IDE window. |
173
+ | `/model` | Any | Switch active AI model (Gemini Pro, Flash, Claude Sonnet, etc.) with 1 tap. |
174
+ | `/mode` | Any | Toggle operation modes (`Fast`, `Plan`, `Code`, `Ask`). |
175
+ | `/stop` | Topic / DM | Immediately halt the executing prompt or command in the bound workspace. |
176
+ | `/autoaccept` | Any | Configure auto-approval mode (`ALL`, `SAFE_ONLY`, `OFF`) for file edits and commands. |
177
+ | `/template` | Any | Manage and quickly inject reusable prompt templates from SQLite. |
178
+ | `/cleanup [days]`| Any | Purge inactive sessions and reclaim database storage (default: 30 days). |
179
+ | `/help` | Any | Display human-crafted cheat sheet and keyboard shortcuts. |
180
+
181
+ ---
182
+
183
+ ## 🏗️ Architecture & Interaction Flow
184
+
185
+ ```mermaid
186
+ sequenceDiagram
187
+ autonumber
188
+ actor User as Telegram Client (Phone)
189
+ participant Gateway as Grammy Bot Gateway
190
+ participant Lock as Workspace Mutex
191
+ participant Monitor as ResponseMonitor
192
+ participant CDP as CdpService (ws://127.0.0.1)
193
+ participant IDE as Antigravity IDE (DOM)
194
+
195
+ User->>Gateway: Send prompt or voice note in Project Topic
196
+ Gateway->>Gateway: Verify User ID ∈ ALLOWED_USER_IDS
197
+ Gateway->>Lock: Acquire exclusive lock for workspace
198
+ alt Workspace is busy
199
+ Lock-->>Gateway: Locked (Busy)
200
+ Gateway-->>User: "⏳ Workspace is busy. Please wait for completion."
201
+ else Lock acquired
202
+ Lock-->>Gateway: Granted
203
+ Gateway->>CDP: Focus Workspace & Insert Text via Input.insertText
204
+ CDP->>IDE: Inject text & press Enter
205
+ loop While Generation Active
206
+ IDE-->>CDP: DOM Mutation Event (window.onAntigravityDomChange)
207
+ CDP-->>Monitor: Stream delta chunk (<100ms)
208
+ Monitor-->>Gateway: Format valid Telegram HTML
209
+ Gateway-->>User: Edit status/response message (Throttled >=1.5s)
210
+ end
211
+ IDE-->>CDP: Stop button absent (3 consecutive confirmations)
212
+ CDP-->>Monitor: onComplete()
213
+ Gateway->>Lock: Release workspace lock
214
+ Gateway-->>User: Final formatted code response delivered
215
+ end
216
+ ```
217
+
218
+ ---
219
+
220
+ ## 📚 Technical Documentation Suite
221
+
222
+ Antigravity Telegram maintains an exhaustive, modular technical documentation suite:
223
+
224
+ - **[Master Agent Guide (.agents/AGENTS.md)](.agents/AGENTS.md)**: Master engineering guide, OOP standards, threat models, contributor workflows, and maintenance rules.
225
+ - **[Product Requirements Document (PRD) Suite (docs/prd/)](docs/prd/README.md)**:
226
+ - **[01. Overview & Objectives](docs/prd/01-overview-and-objectives.md)**: Vision, personas, problem statement, OKRs, and scope.
227
+ - **[02. System Architecture](docs/prd/02-system-architecture.md)**: 3-tier design, CDP WebSocket engine, and Event-Driven DOM pipeline.
228
+ - **[03. Functional Specifications](docs/prd/03-functional-specifications.md)**: Slash commands, Forum Topic isolation, streaming, and approvals.
229
+ - **[04. Security Architecture & Threat Model](docs/prd/04-security-and-threat-model.md)**: Complete CWE/OWASP defense matrix and zero-trust guidelines.
230
+ - **[05. Data Architecture & Persistence](docs/prd/05-data-design-and-storage.md)**: SQLite schemas, prepared statement caching, and lockfiles.
231
+ - **[06. UX & Non-AI-Slop Interface Design](docs/prd/06-user-experience-and-interface.md)**: Human-crafted design charter, visual hierarchy, and error UX.
232
+ - **[07. OOP Architecture & Reusability](docs/prd/07-oop-design-and-reusability.md)**: BaseRepository, BaseService, and reusable command patterns.
233
+ - **[08. Testing Strategy & QA](docs/prd/08-testing-and-quality-assurance.md)**: Jest testing pyramid, mock CDP fixtures, and verification checklist.
234
+ - **[09. Maintenance & Documentation Policy](docs/prd/09-maintenance-and-evolution-rules.md)**: Mandatory auto-update rules for code and documentation.
235
+
236
+ ---
237
+
238
+ ## ⚙️ Configuration Reference
239
+
240
+ Configuration options can be supplied via environment variables (`.env`) or JSON config (`config.json`):
241
+
242
+ | Variable | Type | Default | Description |
243
+ | :--- | :--- | :--- | :--- |
244
+ | `TELEGRAM_BOT_TOKEN` | `string` | **Required** | Secret token obtained from Telegram @BotFather. |
245
+ | `ALLOWED_USER_IDS` | `string` | **Required** | Comma-separated list of numerical Telegram User IDs allowed to access the bot. |
246
+ | `WORKSPACE_BASE_DIR` | `string` | `~/Code` | Root directory containing your development repositories. |
247
+ | `USE_TOPICS` | `boolean` | `true` | Map individual workspaces to dedicated Telegram Forum Topics. |
248
+ | `AUTO_APPROVE_FILE_EDITS` | `string`| `OFF` | Auto-approval policy (`OFF`, `SAFE_ONLY`, `ALL`). |
249
+ | `ANTIGRAVITY_PATH` | `string` | Auto-detected | Explicit path to the Antigravity executable. |
250
+ | `LOG_LEVEL` | `string` | `info` | Logging verbosity (`debug`, `info`, `warn`, `error`). |
251
+
252
+ ---
253
+
254
+ ## 🔒 Mandatory Documentation Auto-Update Policy
255
+
256
+ > [!IMPORTANT]
257
+ > **Strict Repository Rule**:
258
+ > Whenever any feature, command, configuration variable, database schema, or architectural component in this repository is modified, **the corresponding documentation in `docs/prd/` and this `README.md` MUST be updated in the exact same turn or commit**. Outdated documentation is treated as a critical regression.
259
+
260
+ ---
261
+
262
+ ## 🤝 Contributing
263
+
264
+ We welcome community contributions! Please adhere to our development standards:
265
+
266
+ 1. Fork the repository and create your feature branch (`git checkout -b feature/my-feature`).
267
+ 2. Write clean TypeScript code conforming to the OOP principles in `src/database/baseRepository.ts` and `src/services/baseService.ts`.
268
+ 3. Verify all tests pass and compilation succeeds:
269
+ ```bash
270
+ npm test
271
+ npm run build
272
+ ```
273
+ 4. Update the relevant PRD documents in `docs/prd/` and `README.md`.
274
+ 5. Submit a detailed Pull Request.
275
+
276
+ Detailed guidelines, code conventions, and our Code of Conduct are maintained in **[.agents/AGENTS.md](.agents/AGENTS.md)**.
277
+
278
+ ---
279
+
280
+ ## 📄 License
281
+
282
+ This project is licensed under the terms of the [MIT License](LICENSE).
283
+
284
+ ---
285
+
286
+ ## 🙏 Acknowledgements & Attribution
287
+
288
+ <div align="center">
289
+
290
+ > ### 💖 Special Thanks to the Original Creator
291
+ >
292
+ > This project proudly builds upon the pioneering architecture of **[optimistengineer/remoat](https://github.com/optimistengineer/remoat)**.
293
+ > We express our heartfelt gratitude to the original creators and contributors for innovating the core concept of controlling desktop AI coding assistants through the Chrome DevTools Protocol and Telegram.
294
+
295
+ </div>
296
+
297
+ ### 🌟 Lineage & Engineering Evolution
298
+
299
+ ```
300
+ [ optimistengineer/remoat ] ──► Foundational Concept: Local CDP Bridge & Telegram Gateway
301
+ │
302
+ ▼
303
+ [ Antigravity Telegram (denoyey) ] ──► Audited, Overhauled & Modular Architecture
304
+ ```
305
+
306
+ | Architecture Area | Upstream Foundation (`remoat`) | Antigravity Telegram Enhancement |
307
+ | :--- | :--- | :--- |
308
+ | **DOM Synchronization** | 2-second polling intervals | **Event-Driven `MutationObserver`** + CDP Binding (`<100ms` instant delta updates) |
309
+ | **Path Traversal Security**| Standard path normalization | **Canonical `realpathSync`** resolution (hardened defense against symlink escapes) |
310
+ | **Software Architecture** | Flat procedural handlers | **Modular OOP Architecture** (`BaseRepository`, `BaseService`, `CommandRegistry`) |
311
+ | **Audio & Voice Support** | Text only | **On-Device Whisper (`whisper.cpp`)** local voice transcription (zero cloud leakage) |
312
+ | **Visual Attachments** | Text prompts only | **Screenshot streaming** & direct image upload injection into Antigravity IDE |
313
+ | **Documentation Suite** | Basic README | **Comprehensive 10-Module PRD Suite** + Master Agent Guide (`.agents/AGENTS.md`) |
314
+ | **Internationalization** | Basic locales | **Full Multi-Language Support** (`en`, `vi`, `ja`) with unified i18n engine |
315
+
316
+ > [!TIP]
317
+ > If you find this project useful, please take a moment to also star and support the original upstream repository at **[github.com/optimistengineer/remoat](https://github.com/optimistengineer/remoat)**!
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,82 @@
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 commander_1 = require("commander");
40
+ const package_json_1 = require("../../package.json");
41
+ const start_1 = require("./commands/start");
42
+ const doctor_1 = require("./commands/doctor");
43
+ const setup_1 = require("./commands/setup");
44
+ const open_1 = require("./commands/open");
45
+ const configLoader_1 = require("../utils/configLoader");
46
+ const welcome_1 = require("./welcome");
47
+ const program = new commander_1.Command()
48
+ .name('antigravity-telegram')
49
+ .description('Control your Antigravity AI IDE remotely via Telegram')
50
+ .version(package_json_1.version)
51
+ .option('--verbose', 'Show debug-level logging')
52
+ .option('--quiet', 'Only show errors');
53
+ // Default action: no subcommand → start or setup
54
+ program.action(async () => {
55
+ const hasConfig = configLoader_1.ConfigLoader.configExists();
56
+ const hasEnv = fs.existsSync(path.resolve(process.cwd(), '.env'));
57
+ if (!hasConfig && !hasEnv) {
58
+ (0, welcome_1.printWelcome)();
59
+ return (0, setup_1.setupAction)();
60
+ }
61
+ else {
62
+ return (0, start_1.startAction)(program.opts(), program);
63
+ }
64
+ });
65
+ program
66
+ .command('start')
67
+ .description('Start the Telegram bot daemon')
68
+ .action((_opts, cmd) => (0, start_1.startAction)(cmd.parent.opts(), cmd.parent));
69
+ program
70
+ .command('doctor')
71
+ .description('Diagnose environment, Node version, and CDP connectivity')
72
+ .action(doctor_1.doctorAction);
73
+ program
74
+ .command('setup')
75
+ .description('Run interactive configuration wizard')
76
+ .action(setup_1.setupAction);
77
+ program
78
+ .command('open')
79
+ .description('Launch Antigravity IDE with CDP debugging enabled')
80
+ .action(open_1.openAction);
81
+ program.parse();
82
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,2CAA6B;AAC7B,yCAAoC;AACpC,qDAA6C;AAC7C,4CAA+C;AAC/C,8CAAiD;AACjD,4CAA+C;AAC/C,0CAA6C;AAC7C,wDAAqD;AACrD,uCAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE;KACxB,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,sBAAO,CAAC;KAChB,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAE3C,iDAAiD;AACjD,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IACtB,MAAM,SAAS,GAAG,2BAAY,CAAC,YAAY,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAA,sBAAY,GAAE,CAAC;QACf,OAAO,IAAA,mBAAW,GAAE,CAAC;IACzB,CAAC;SAAM,CAAC;QACJ,OAAO,IAAA,mBAAW,EAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAExE,OAAO;KACF,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,qBAAY,CAAC,CAAC;AAE1B,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,mBAAW,CAAC,CAAC;AAEzB,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,iBAAU,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function doctorAction(): Promise<void>;
@@ -0,0 +1,211 @@
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.doctorAction = doctorAction;
37
+ const http = __importStar(require("http"));
38
+ const fs = __importStar(require("fs"));
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const child_process_1 = require("child_process");
42
+ const cdpPorts_1 = require("../../utils/cdpPorts");
43
+ const configLoader_1 = require("../../utils/configLoader");
44
+ const pathUtils_1 = require("../../utils/pathUtils");
45
+ const logger_1 = require("../../utils/logger");
46
+ const ok = (msg) => console.log(` ${logger_1.COLORS.green}[OK]${logger_1.COLORS.reset} ${msg}`);
47
+ const warn = (msg) => console.log(` ${logger_1.COLORS.yellow}[--]${logger_1.COLORS.reset} ${msg}`);
48
+ const fail = (msg) => console.log(` ${logger_1.COLORS.red}[!!]${logger_1.COLORS.reset} ${msg}`);
49
+ const hint = (msg) => console.log(` ${logger_1.COLORS.dim}${msg}${logger_1.COLORS.reset}`);
50
+ function checkPort(port) {
51
+ return new Promise((resolve) => {
52
+ const req = http.get(`http://127.0.0.1:${port}/json/list`, (res) => {
53
+ let data = '';
54
+ res.on('data', (chunk) => (data += chunk));
55
+ res.on('end', () => {
56
+ try {
57
+ const parsed = JSON.parse(data);
58
+ resolve(Array.isArray(parsed));
59
+ }
60
+ catch {
61
+ resolve(false);
62
+ }
63
+ });
64
+ });
65
+ req.on('error', () => resolve(false));
66
+ req.setTimeout(2000, () => {
67
+ req.destroy();
68
+ resolve(false);
69
+ });
70
+ });
71
+ }
72
+ function checkEnvFile() {
73
+ const envPath = path.resolve(process.cwd(), '.env');
74
+ return { exists: fs.existsSync(envPath), path: envPath };
75
+ }
76
+ function checkRequiredEnvVars() {
77
+ const required = ['TELEGRAM_BOT_TOKEN', 'ALLOWED_USER_IDS'];
78
+ // Also check config.json values
79
+ let persisted = {};
80
+ try {
81
+ const configPath = configLoader_1.ConfigLoader.getConfigFilePath();
82
+ if (fs.existsSync(configPath)) {
83
+ persisted = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
84
+ }
85
+ }
86
+ catch { /* ignore parse errors here */ }
87
+ const configKeyMap = {
88
+ TELEGRAM_BOT_TOKEN: 'telegramBotToken',
89
+ ALLOWED_USER_IDS: 'allowedUserIds',
90
+ };
91
+ return required.map((name) => ({
92
+ name,
93
+ set: Boolean(process.env[name]) || Boolean(persisted[configKeyMap[name]]),
94
+ }));
95
+ }
96
+ async function doctorAction() {
97
+ console.log(`\n${logger_1.COLORS.cyan}antigravity-telegram doctor${logger_1.COLORS.reset}\n`);
98
+ let allOk = true;
99
+ // 1. Config directory check
100
+ const configDir = configLoader_1.ConfigLoader.getConfigDir();
101
+ if (fs.existsSync(configDir)) {
102
+ ok(`Config directory exists: ${configDir}`);
103
+ }
104
+ else {
105
+ warn(`Config directory not found: ${configDir}`);
106
+ hint('Run: antigravity-telegram setup (optional if using .env)');
107
+ }
108
+ // 2. Config file check
109
+ const configFilePath = configLoader_1.ConfigLoader.getConfigFilePath();
110
+ if (configLoader_1.ConfigLoader.configExists()) {
111
+ ok(`Config file found: ${configFilePath}`);
112
+ }
113
+ else {
114
+ warn(`Config file not found: ${configFilePath} (optional — .env fallback used)`);
115
+ }
116
+ // 3. .env file check
117
+ const env = checkEnvFile();
118
+ if (env.exists) {
119
+ // Load .env so subsequent checks can see the variables
120
+ require('dotenv').config({ path: env.path });
121
+ ok(`.env file found: ${env.path}`);
122
+ }
123
+ else {
124
+ if (!configLoader_1.ConfigLoader.configExists()) {
125
+ fail(`.env file not found: ${env.path}`);
126
+ allOk = false;
127
+ }
128
+ else {
129
+ warn(`.env file not found: ${env.path} (not needed — config.json used)`);
130
+ }
131
+ }
132
+ // 4. Required environment variables (checks both .env and config.json)
133
+ const vars = checkRequiredEnvVars();
134
+ for (const v of vars) {
135
+ if (v.set) {
136
+ ok(`${v.name} is set`);
137
+ }
138
+ else {
139
+ fail(`${v.name} is NOT set`);
140
+ allOk = false;
141
+ }
142
+ }
143
+ // 5. Node.js version check
144
+ const nodeVersion = process.versions.node;
145
+ const major = parseInt(nodeVersion.split('.')[0], 10);
146
+ if (major >= 18) {
147
+ ok(`Node.js ${nodeVersion}`);
148
+ }
149
+ else {
150
+ fail(`Node.js ${nodeVersion} (>= 18.0.0 required)`);
151
+ allOk = false;
152
+ }
153
+ // 6. Platform-specific checks
154
+ const platform = os.platform();
155
+ if (platform === 'darwin') {
156
+ // Check Xcode Command Line Tools (needed for native module compilation)
157
+ try {
158
+ (0, child_process_1.execFileSync)('xcode-select', ['-p'], { stdio: 'pipe' });
159
+ ok('Xcode Command Line Tools installed');
160
+ }
161
+ catch {
162
+ warn('Xcode Command Line Tools not found');
163
+ hint('Install with: xcode-select --install');
164
+ hint('Required for native dependencies (better-sqlite3)');
165
+ }
166
+ // Check if Antigravity.app exists
167
+ const antigravityPath = process.env.ANTIGRAVITY_PATH;
168
+ if (antigravityPath) {
169
+ if (fs.existsSync(antigravityPath)) {
170
+ ok(`Antigravity found: ${antigravityPath}`);
171
+ }
172
+ else {
173
+ fail(`ANTIGRAVITY_PATH set but not found: ${antigravityPath}`);
174
+ allOk = false;
175
+ }
176
+ }
177
+ else if (fs.existsSync('/Applications/Antigravity.app')) {
178
+ ok('Antigravity.app found in /Applications');
179
+ }
180
+ else {
181
+ warn('Antigravity.app not found in /Applications');
182
+ hint('Install Antigravity, or set ANTIGRAVITY_PATH in .env');
183
+ }
184
+ }
185
+ // 7. CDP port check
186
+ console.log(`\n ${logger_1.COLORS.dim}Checking CDP ports...${logger_1.COLORS.reset}`);
187
+ let cdpOk = false;
188
+ for (const port of cdpPorts_1.CDP_PORTS) {
189
+ const alive = await checkPort(port);
190
+ if (alive) {
191
+ ok(`CDP port ${port} is responding`);
192
+ cdpOk = true;
193
+ }
194
+ }
195
+ if (!cdpOk) {
196
+ fail('No CDP ports responding');
197
+ hint(`Run: antigravity-telegram open`);
198
+ hint(`Or manually: ${(0, pathUtils_1.getAntigravityCdpHint)(9222)}`);
199
+ allOk = false;
200
+ }
201
+ // Summary
202
+ console.log('');
203
+ if (allOk) {
204
+ console.log(` ${logger_1.COLORS.green}All checks passed!${logger_1.COLORS.reset}`);
205
+ }
206
+ else {
207
+ console.log(` ${logger_1.COLORS.red}Some checks failed. Please fix the issues above.${logger_1.COLORS.reset}`);
208
+ process.exitCode = 1;
209
+ }
210
+ }
211
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/bin/commands/doctor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,oCAgHC;AAjLD,2CAA6B;AAC7B,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,iDAA6C;AAC7C,mDAAiD;AACjD,2DAAwD;AACxD,qDAA8D;AAC9D,+CAA4C;AAE5C,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAM,CAAC,KAAK,OAAO,eAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AACvF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAM,CAAC,MAAM,OAAO,eAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AAC1F,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAM,CAAC,GAAG,OAAO,eAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AACvF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,eAAM,CAAC,GAAG,GAAG,GAAG,GAAG,eAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAEvF,SAAS,SAAS,CAAC,IAAY;IAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YAC/D,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;YACtB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,oBAAoB;IACzB,MAAM,QAAQ,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;IAE5D,gCAAgC;IAChC,IAAI,SAAS,GAA4B,EAAE,CAAC;IAC5C,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,2BAAY,CAAC,iBAAiB,EAAE,CAAC;QACpD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAE1C,MAAM,YAAY,GAA2B;QACzC,kBAAkB,EAAE,kBAAkB;QACtC,gBAAgB,EAAE,gBAAgB;KACrC,CAAC;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI;QACJ,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5E,CAAC,CAAC,CAAC;AACR,CAAC;AAEM,KAAK,UAAU,YAAY;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,eAAM,CAAC,IAAI,8BAA8B,eAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAC5E,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,4BAA4B;IAC5B,MAAM,SAAS,GAAG,2BAAY,CAAC,YAAY,EAAE,CAAC;IAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACtE,CAAC;IAED,uBAAuB;IACvB,MAAM,cAAc,GAAG,2BAAY,CAAC,iBAAiB,EAAE,CAAC;IACxD,IAAI,2BAAY,CAAC,YAAY,EAAE,EAAE,CAAC;QAC9B,EAAE,CAAC,sBAAsB,cAAc,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,0BAA0B,cAAc,kCAAkC,CAAC,CAAC;IACrF,CAAC;IAED,qBAAqB;IACrB,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,uDAAuD;QACvD,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,EAAE,CAAC,oBAAoB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,2BAAY,CAAC,YAAY,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,KAAK,GAAG,KAAK,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,kCAAkC,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACR,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;YAC7B,KAAK,GAAG,KAAK,CAAC;QAClB,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACd,EAAE,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,WAAW,WAAW,uBAAuB,CAAC,CAAC;QACpD,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxB,wEAAwE;QACxE,IAAI,CAAC;YACD,IAAA,4BAAY,EAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,EAAE,CAAC,oCAAoC,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACL,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC3C,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAC7C,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAC9D,CAAC;QAED,kCAAkC;QAClC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACrD,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjC,EAAE,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,uCAAuC,eAAe,EAAE,CAAC,CAAC;gBAC/D,KAAK,GAAG,KAAK,CAAC;YAClB,CAAC;QACL,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,+BAA+B,CAAC,EAAE,CAAC;YACxD,EAAE,CAAC,wCAAwC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACnD,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,OAAO,eAAM,CAAC,GAAG,wBAAwB,eAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,oBAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACR,EAAE,CAAC,YAAY,IAAI,gBAAgB,CAAC,CAAC;YACrC,KAAK,GAAG,IAAI,CAAC;QACjB,CAAC;IACL,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACvC,IAAI,CAAC,gBAAgB,IAAA,iCAAqB,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpD,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,KAAK,eAAM,CAAC,KAAK,qBAAqB,eAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,eAAM,CAAC,GAAG,mDAAmD,eAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function openAction(): Promise<void>;