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.
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/dist/bin/cli.d.ts +2 -0
- package/dist/bin/cli.js +80 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/commands/doctor.d.ts +1 -0
- package/dist/bin/commands/doctor.js +211 -0
- package/dist/bin/commands/doctor.js.map +1 -0
- package/dist/bin/commands/open.d.ts +1 -0
- package/dist/bin/commands/open.js +187 -0
- package/dist/bin/commands/open.js.map +1 -0
- package/dist/bin/commands/setup.d.ts +1 -0
- package/dist/bin/commands/setup.js +267 -0
- package/dist/bin/commands/setup.js.map +1 -0
- package/dist/bin/commands/start.d.ts +2 -0
- package/dist/bin/commands/start.js +39 -0
- package/dist/bin/commands/start.js.map +1 -0
- package/dist/bot/index.d.ts +2 -0
- package/dist/bot/index.js +1393 -0
- package/dist/bot/index.js.map +1 -0
- package/dist/commands/chatCommandHandler.d.ts +20 -0
- package/dist/commands/chatCommandHandler.js +30 -0
- package/dist/commands/chatCommandHandler.js.map +1 -0
- package/dist/commands/cleanupCommandHandler.d.ts +21 -0
- package/dist/commands/cleanupCommandHandler.js +40 -0
- package/dist/commands/cleanupCommandHandler.js.map +1 -0
- package/dist/commands/joinCommandHandler.d.ts +19 -0
- package/dist/commands/joinCommandHandler.js +27 -0
- package/dist/commands/joinCommandHandler.js.map +1 -0
- package/dist/commands/messageParser.d.ts +7 -0
- package/dist/commands/messageParser.js +29 -0
- package/dist/commands/messageParser.js.map +1 -0
- package/dist/commands/slashCommandHandler.d.ts +21 -0
- package/dist/commands/slashCommandHandler.js +105 -0
- package/dist/commands/slashCommandHandler.js.map +1 -0
- package/dist/commands/workspaceCommandHandler.d.ts +16 -0
- package/dist/commands/workspaceCommandHandler.js +29 -0
- package/dist/commands/workspaceCommandHandler.js.map +1 -0
- package/dist/database/chatSessionRepository.d.ts +59 -0
- package/dist/database/chatSessionRepository.js +110 -0
- package/dist/database/chatSessionRepository.js.map +1 -0
- package/dist/database/scheduleRepository.d.ts +60 -0
- package/dist/database/scheduleRepository.js +106 -0
- package/dist/database/scheduleRepository.js.map +1 -0
- package/dist/database/templateRepository.d.ts +51 -0
- package/dist/database/templateRepository.js +90 -0
- package/dist/database/templateRepository.js.map +1 -0
- package/dist/database/workspaceBindingRepository.d.ts +48 -0
- package/dist/database/workspaceBindingRepository.js +92 -0
- package/dist/database/workspaceBindingRepository.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +5 -0
- package/dist/middleware/auth.js +14 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/sanitize.d.ts +1 -0
- package/dist/middleware/sanitize.js +18 -0
- package/dist/middleware/sanitize.js.map +1 -0
- package/dist/services/antigravityLauncher.d.ts +7 -0
- package/dist/services/antigravityLauncher.js +94 -0
- package/dist/services/antigravityLauncher.js.map +1 -0
- package/dist/services/approvalDetector.d.ts +97 -0
- package/dist/services/approvalDetector.js +394 -0
- package/dist/services/approvalDetector.js.map +1 -0
- package/dist/services/assistantDomExtractor.d.ts +49 -0
- package/dist/services/assistantDomExtractor.js +340 -0
- package/dist/services/assistantDomExtractor.js.map +1 -0
- package/dist/services/autoAcceptService.d.ts +14 -0
- package/dist/services/autoAcceptService.js +81 -0
- package/dist/services/autoAcceptService.js.map +1 -0
- package/dist/services/cdpBridgeManager.d.ts +50 -0
- package/dist/services/cdpBridgeManager.js +355 -0
- package/dist/services/cdpBridgeManager.js.map +1 -0
- package/dist/services/cdpConnectionPool.d.ts +88 -0
- package/dist/services/cdpConnectionPool.js +235 -0
- package/dist/services/cdpConnectionPool.js.map +1 -0
- package/dist/services/cdpService.d.ts +214 -0
- package/dist/services/cdpService.js +1423 -0
- package/dist/services/cdpService.js.map +1 -0
- package/dist/services/chatSessionService.d.ts +89 -0
- package/dist/services/chatSessionService.js +738 -0
- package/dist/services/chatSessionService.js.map +1 -0
- package/dist/services/errorPopupDetector.d.ts +89 -0
- package/dist/services/errorPopupDetector.js +274 -0
- package/dist/services/errorPopupDetector.js.map +1 -0
- package/dist/services/modeService.d.ts +44 -0
- package/dist/services/modeService.js +74 -0
- package/dist/services/modeService.js.map +1 -0
- package/dist/services/modelService.d.ts +36 -0
- package/dist/services/modelService.js +64 -0
- package/dist/services/modelService.js.map +1 -0
- package/dist/services/planningDetector.d.ts +87 -0
- package/dist/services/planningDetector.js +321 -0
- package/dist/services/planningDetector.js.map +1 -0
- package/dist/services/processManager.d.ts +18 -0
- package/dist/services/processManager.js +62 -0
- package/dist/services/processManager.js.map +1 -0
- package/dist/services/progressSender.d.ts +20 -0
- package/dist/services/progressSender.js +65 -0
- package/dist/services/progressSender.js.map +1 -0
- package/dist/services/promptDispatcher.d.ts +38 -0
- package/dist/services/promptDispatcher.js +42 -0
- package/dist/services/promptDispatcher.js.map +1 -0
- package/dist/services/quotaService.d.ts +21 -0
- package/dist/services/quotaService.js +191 -0
- package/dist/services/quotaService.js.map +1 -0
- package/dist/services/responseMonitor.d.ts +129 -0
- package/dist/services/responseMonitor.js +996 -0
- package/dist/services/responseMonitor.js.map +1 -0
- package/dist/services/scheduleService.d.ts +58 -0
- package/dist/services/scheduleService.js +135 -0
- package/dist/services/scheduleService.js.map +1 -0
- package/dist/services/screenshotService.d.ts +55 -0
- package/dist/services/screenshotService.js +86 -0
- package/dist/services/screenshotService.js.map +1 -0
- package/dist/services/telegramTopicManager.d.ts +40 -0
- package/dist/services/telegramTopicManager.js +103 -0
- package/dist/services/telegramTopicManager.js.map +1 -0
- package/dist/services/titleGeneratorService.d.ts +32 -0
- package/dist/services/titleGeneratorService.js +114 -0
- package/dist/services/titleGeneratorService.js.map +1 -0
- package/dist/services/updateCheckService.d.ts +16 -0
- package/dist/services/updateCheckService.js +148 -0
- package/dist/services/updateCheckService.js.map +1 -0
- package/dist/services/userMessageDetector.d.ts +57 -0
- package/dist/services/userMessageDetector.js +222 -0
- package/dist/services/userMessageDetector.js.map +1 -0
- package/dist/services/workspaceService.d.ts +33 -0
- package/dist/services/workspaceService.js +65 -0
- package/dist/services/workspaceService.js.map +1 -0
- package/dist/ui/autoAcceptUi.d.ts +6 -0
- package/dist/ui/autoAcceptUi.js +22 -0
- package/dist/ui/autoAcceptUi.js.map +1 -0
- package/dist/ui/modeUi.d.ts +12 -0
- package/dist/ui/modeUi.js +40 -0
- package/dist/ui/modeUi.js.map +1 -0
- package/dist/ui/modelsUi.d.ts +12 -0
- package/dist/ui/modelsUi.js +101 -0
- package/dist/ui/modelsUi.js.map +1 -0
- package/dist/ui/projectListUi.d.ts +11 -0
- package/dist/ui/projectListUi.js +59 -0
- package/dist/ui/projectListUi.js.map +1 -0
- package/dist/ui/screenshotUi.d.ts +6 -0
- package/dist/ui/screenshotUi.js +28 -0
- package/dist/ui/screenshotUi.js.map +1 -0
- package/dist/ui/sessionPickerUi.d.ts +8 -0
- package/dist/ui/sessionPickerUi.js +32 -0
- package/dist/ui/sessionPickerUi.js.map +1 -0
- package/dist/ui/templateUi.d.ts +5 -0
- package/dist/ui/templateUi.js +44 -0
- package/dist/ui/templateUi.js.map +1 -0
- package/dist/utils/cdpPorts.d.ts +2 -0
- package/dist/utils/cdpPorts.js +6 -0
- package/dist/utils/cdpPorts.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.js +12 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/configLoader.d.ts +23 -0
- package/dist/utils/configLoader.js +153 -0
- package/dist/utils/configLoader.js.map +1 -0
- package/dist/utils/htmlToTelegramMarkdown.d.ts +6 -0
- package/dist/utils/htmlToTelegramMarkdown.js +189 -0
- package/dist/utils/htmlToTelegramMarkdown.js.map +1 -0
- package/dist/utils/i18n.d.ts +3 -0
- package/dist/utils/i18n.js +78 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/imageHandler.d.ts +35 -0
- package/dist/utils/imageHandler.js +155 -0
- package/dist/utils/imageHandler.js.map +1 -0
- package/dist/utils/lockfile.d.ts +7 -0
- package/dist/utils/lockfile.js +117 -0
- package/dist/utils/lockfile.js.map +1 -0
- package/dist/utils/logger.d.ts +23 -0
- package/dist/utils/logger.js +85 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logo.d.ts +1 -0
- package/dist/utils/logo.js +14 -0
- package/dist/utils/logo.js.map +1 -0
- package/dist/utils/metadataExtractor.d.ts +5 -0
- package/dist/utils/metadataExtractor.js +16 -0
- package/dist/utils/metadataExtractor.js.map +1 -0
- package/dist/utils/pathUtils.d.ts +23 -0
- package/dist/utils/pathUtils.js +58 -0
- package/dist/utils/pathUtils.js.map +1 -0
- package/dist/utils/processLogBuffer.d.ts +17 -0
- package/dist/utils/processLogBuffer.js +108 -0
- package/dist/utils/processLogBuffer.js.map +1 -0
- package/dist/utils/streamMessageFormatter.d.ts +18 -0
- package/dist/utils/streamMessageFormatter.js +91 -0
- package/dist/utils/streamMessageFormatter.js.map +1 -0
- package/dist/utils/telegramFormatter.d.ts +37 -0
- package/dist/utils/telegramFormatter.js +445 -0
- package/dist/utils/telegramFormatter.js.map +1 -0
- package/dist/utils/voiceHandler.d.ts +23 -0
- package/dist/utils/voiceHandler.js +169 -0
- package/dist/utils/voiceHandler.js.map +1 -0
- package/locales/en.json +85 -0
- package/locales/ja.json +109 -0
- package/package.json +84 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCurrentChatTitle = getCurrentChatTitle;
|
|
4
|
+
exports.registerApprovalWorkspaceChannel = registerApprovalWorkspaceChannel;
|
|
5
|
+
exports.registerApprovalSessionChannel = registerApprovalSessionChannel;
|
|
6
|
+
exports.resolveApprovalChannelForCurrentChat = resolveApprovalChannelForCurrentChat;
|
|
7
|
+
exports.buildApprovalCustomId = buildApprovalCustomId;
|
|
8
|
+
exports.parseApprovalCustomId = parseApprovalCustomId;
|
|
9
|
+
exports.buildPlanningCustomId = buildPlanningCustomId;
|
|
10
|
+
exports.parsePlanningCustomId = parsePlanningCustomId;
|
|
11
|
+
exports.buildErrorPopupCustomId = buildErrorPopupCustomId;
|
|
12
|
+
exports.parseErrorPopupCustomId = parseErrorPopupCustomId;
|
|
13
|
+
exports.initCdpBridge = initCdpBridge;
|
|
14
|
+
exports.getCurrentCdp = getCurrentCdp;
|
|
15
|
+
exports.ensureApprovalDetector = ensureApprovalDetector;
|
|
16
|
+
exports.ensurePlanningDetector = ensurePlanningDetector;
|
|
17
|
+
exports.ensureErrorPopupDetector = ensureErrorPopupDetector;
|
|
18
|
+
exports.ensureUserMessageDetector = ensureUserMessageDetector;
|
|
19
|
+
const grammy_1 = require("grammy");
|
|
20
|
+
const i18n_1 = require("../utils/i18n");
|
|
21
|
+
const logger_1 = require("../utils/logger");
|
|
22
|
+
const telegramFormatter_1 = require("../utils/telegramFormatter");
|
|
23
|
+
const approvalDetector_1 = require("./approvalDetector");
|
|
24
|
+
const autoAcceptService_1 = require("./autoAcceptService");
|
|
25
|
+
const cdpConnectionPool_1 = require("./cdpConnectionPool");
|
|
26
|
+
const errorPopupDetector_1 = require("./errorPopupDetector");
|
|
27
|
+
const planningDetector_1 = require("./planningDetector");
|
|
28
|
+
const quotaService_1 = require("./quotaService");
|
|
29
|
+
const userMessageDetector_1 = require("./userMessageDetector");
|
|
30
|
+
const APPROVE_ACTION_PREFIX = 'approve_action';
|
|
31
|
+
const ALWAYS_ALLOW_ACTION_PREFIX = 'always_allow_action';
|
|
32
|
+
const DENY_ACTION_PREFIX = 'deny_action';
|
|
33
|
+
const PLANNING_OPEN_ACTION_PREFIX = 'planning_open_action';
|
|
34
|
+
const PLANNING_PROCEED_ACTION_PREFIX = 'planning_proceed_action';
|
|
35
|
+
const ERROR_POPUP_DISMISS_ACTION_PREFIX = 'error_popup_dismiss_action';
|
|
36
|
+
const ERROR_POPUP_COPY_DEBUG_ACTION_PREFIX = 'error_popup_copy_debug_action';
|
|
37
|
+
const ERROR_POPUP_RETRY_ACTION_PREFIX = 'error_popup_retry_action';
|
|
38
|
+
function normalizeSessionTitle(title) {
|
|
39
|
+
return title.trim().toLowerCase();
|
|
40
|
+
}
|
|
41
|
+
function buildSessionRouteKey(projectName, sessionTitle) {
|
|
42
|
+
return `${projectName}::${normalizeSessionTitle(sessionTitle)}`;
|
|
43
|
+
}
|
|
44
|
+
const GET_CURRENT_CHAT_TITLE_SCRIPT = `(() => {
|
|
45
|
+
const panel = document.querySelector('.antigravity-agent-side-panel');
|
|
46
|
+
if (!panel) return '';
|
|
47
|
+
const header = panel.querySelector('div[class*="border-b"]');
|
|
48
|
+
if (!header) return '';
|
|
49
|
+
const titleEl = header.querySelector('div[class*="text-ellipsis"]');
|
|
50
|
+
const title = titleEl ? (titleEl.textContent || '').trim() : '';
|
|
51
|
+
if (!title || title === 'Agent') return '';
|
|
52
|
+
return title;
|
|
53
|
+
})()`;
|
|
54
|
+
async function getCurrentChatTitle(cdp) {
|
|
55
|
+
const contexts = cdp.getContexts();
|
|
56
|
+
for (const ctx of contexts) {
|
|
57
|
+
try {
|
|
58
|
+
const result = await cdp.call('Runtime.evaluate', {
|
|
59
|
+
expression: GET_CURRENT_CHAT_TITLE_SCRIPT,
|
|
60
|
+
returnByValue: true,
|
|
61
|
+
contextId: ctx.id,
|
|
62
|
+
});
|
|
63
|
+
const value = result?.result?.value;
|
|
64
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
65
|
+
return value.trim();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch { /* continue */ }
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
function registerApprovalWorkspaceChannel(bridge, projectName, channel) {
|
|
73
|
+
bridge.approvalChannelByWorkspace.set(projectName, channel);
|
|
74
|
+
}
|
|
75
|
+
function registerApprovalSessionChannel(bridge, projectName, sessionTitle, channel) {
|
|
76
|
+
if (!sessionTitle || sessionTitle.trim().length === 0)
|
|
77
|
+
return;
|
|
78
|
+
bridge.approvalChannelBySession.set(buildSessionRouteKey(projectName, sessionTitle), channel);
|
|
79
|
+
bridge.approvalChannelByWorkspace.set(projectName, channel);
|
|
80
|
+
}
|
|
81
|
+
function resolveApprovalChannelForCurrentChat(bridge, projectName, currentChatTitle) {
|
|
82
|
+
if (currentChatTitle && currentChatTitle.trim().length > 0) {
|
|
83
|
+
const key = buildSessionRouteKey(projectName, currentChatTitle);
|
|
84
|
+
const sessionChannel = bridge.approvalChannelBySession.get(key);
|
|
85
|
+
if (sessionChannel)
|
|
86
|
+
return sessionChannel;
|
|
87
|
+
}
|
|
88
|
+
return bridge.approvalChannelByWorkspace.get(projectName) ?? null;
|
|
89
|
+
}
|
|
90
|
+
function buildApprovalCustomId(action, projectName, channelId) {
|
|
91
|
+
const prefix = action === 'approve'
|
|
92
|
+
? APPROVE_ACTION_PREFIX
|
|
93
|
+
: action === 'always_allow'
|
|
94
|
+
? ALWAYS_ALLOW_ACTION_PREFIX
|
|
95
|
+
: DENY_ACTION_PREFIX;
|
|
96
|
+
if (channelId && channelId.trim().length > 0) {
|
|
97
|
+
return `${prefix}:${projectName}:${channelId}`;
|
|
98
|
+
}
|
|
99
|
+
return `${prefix}:${projectName}`;
|
|
100
|
+
}
|
|
101
|
+
function parseApprovalCustomId(customId) {
|
|
102
|
+
for (const [action, prefix] of [['approve', APPROVE_ACTION_PREFIX], ['always_allow', ALWAYS_ALLOW_ACTION_PREFIX], ['deny', DENY_ACTION_PREFIX]]) {
|
|
103
|
+
if (customId === prefix)
|
|
104
|
+
return { action, projectName: null, channelId: null };
|
|
105
|
+
if (customId.startsWith(`${prefix}:`)) {
|
|
106
|
+
const rest = customId.substring(`${prefix}:`.length);
|
|
107
|
+
const [projectName, channelId] = rest.split(':');
|
|
108
|
+
return { action, projectName: projectName || null, channelId: channelId || null };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
function buildPlanningCustomId(action, projectName, channelId) {
|
|
114
|
+
const prefix = action === 'open' ? PLANNING_OPEN_ACTION_PREFIX : PLANNING_PROCEED_ACTION_PREFIX;
|
|
115
|
+
if (channelId && channelId.trim().length > 0)
|
|
116
|
+
return `${prefix}:${projectName}:${channelId}`;
|
|
117
|
+
return `${prefix}:${projectName}`;
|
|
118
|
+
}
|
|
119
|
+
function parsePlanningCustomId(customId) {
|
|
120
|
+
for (const [action, prefix] of [['open', PLANNING_OPEN_ACTION_PREFIX], ['proceed', PLANNING_PROCEED_ACTION_PREFIX]]) {
|
|
121
|
+
if (customId === prefix)
|
|
122
|
+
return { action, projectName: null, channelId: null };
|
|
123
|
+
if (customId.startsWith(`${prefix}:`)) {
|
|
124
|
+
const rest = customId.substring(`${prefix}:`.length);
|
|
125
|
+
const [projectName, channelId] = rest.split(':');
|
|
126
|
+
return { action, projectName: projectName || null, channelId: channelId || null };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
function buildErrorPopupCustomId(action, projectName, channelId) {
|
|
132
|
+
const prefix = action === 'dismiss'
|
|
133
|
+
? ERROR_POPUP_DISMISS_ACTION_PREFIX
|
|
134
|
+
: action === 'copy_debug'
|
|
135
|
+
? ERROR_POPUP_COPY_DEBUG_ACTION_PREFIX
|
|
136
|
+
: ERROR_POPUP_RETRY_ACTION_PREFIX;
|
|
137
|
+
if (channelId && channelId.trim().length > 0)
|
|
138
|
+
return `${prefix}:${projectName}:${channelId}`;
|
|
139
|
+
return `${prefix}:${projectName}`;
|
|
140
|
+
}
|
|
141
|
+
function parseErrorPopupCustomId(customId) {
|
|
142
|
+
for (const [action, prefix] of [['dismiss', ERROR_POPUP_DISMISS_ACTION_PREFIX], ['copy_debug', ERROR_POPUP_COPY_DEBUG_ACTION_PREFIX], ['retry', ERROR_POPUP_RETRY_ACTION_PREFIX]]) {
|
|
143
|
+
if (customId === prefix)
|
|
144
|
+
return { action, projectName: null, channelId: null };
|
|
145
|
+
if (customId.startsWith(`${prefix}:`)) {
|
|
146
|
+
const rest = customId.substring(`${prefix}:`.length);
|
|
147
|
+
const [projectName, channelId] = rest.split(':');
|
|
148
|
+
return { action, projectName: projectName || null, channelId: channelId || null };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
function initCdpBridge(autoApproveDefault) {
|
|
154
|
+
const pool = new cdpConnectionPool_1.CdpConnectionPool({
|
|
155
|
+
cdpCallTimeout: 15000,
|
|
156
|
+
maxReconnectAttempts: 0,
|
|
157
|
+
reconnectDelayMs: 3000,
|
|
158
|
+
});
|
|
159
|
+
const quota = new quotaService_1.QuotaService();
|
|
160
|
+
const autoAccept = new autoAcceptService_1.AutoAcceptService(autoApproveDefault);
|
|
161
|
+
return {
|
|
162
|
+
pool,
|
|
163
|
+
quota,
|
|
164
|
+
autoAccept,
|
|
165
|
+
lastActiveWorkspace: null,
|
|
166
|
+
lastActiveChannel: null,
|
|
167
|
+
approvalChannelByWorkspace: new Map(),
|
|
168
|
+
approvalChannelBySession: new Map(),
|
|
169
|
+
botApi: null,
|
|
170
|
+
botToken: '',
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function getCurrentCdp(bridge) {
|
|
174
|
+
if (!bridge.lastActiveWorkspace)
|
|
175
|
+
return null;
|
|
176
|
+
return bridge.pool.getConnected(bridge.lastActiveWorkspace);
|
|
177
|
+
}
|
|
178
|
+
async function sendTelegramMessage(api, channel, text, keyboard) {
|
|
179
|
+
try {
|
|
180
|
+
const msg = await api.sendMessage(channel.chatId, text, {
|
|
181
|
+
parse_mode: 'HTML',
|
|
182
|
+
message_thread_id: channel.threadId,
|
|
183
|
+
reply_markup: keyboard,
|
|
184
|
+
});
|
|
185
|
+
return msg.message_id;
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
logger_1.logger.error('[Telegram] Failed to send message:', err);
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function ensureApprovalDetector(bridge, cdp, projectName) {
|
|
193
|
+
const existing = bridge.pool.getApprovalDetector(projectName);
|
|
194
|
+
if (existing && existing.isActive())
|
|
195
|
+
return;
|
|
196
|
+
let lastMessageId = null;
|
|
197
|
+
let lastMessageChatId = null;
|
|
198
|
+
const detector = new approvalDetector_1.ApprovalDetector({
|
|
199
|
+
cdpService: cdp,
|
|
200
|
+
pollIntervalMs: 2000,
|
|
201
|
+
onResolved: () => {
|
|
202
|
+
if (!lastMessageId || !lastMessageChatId || !bridge.botApi)
|
|
203
|
+
return;
|
|
204
|
+
const msgId = lastMessageId;
|
|
205
|
+
const chatId = lastMessageChatId;
|
|
206
|
+
lastMessageId = null;
|
|
207
|
+
lastMessageChatId = null;
|
|
208
|
+
bridge.botApi.editMessageReplyMarkup(chatId, msgId, { reply_markup: undefined })
|
|
209
|
+
.catch(logger_1.logger.error);
|
|
210
|
+
},
|
|
211
|
+
onApprovalRequired: async (info) => {
|
|
212
|
+
logger_1.logger.debug(`[ApprovalDetector:${projectName}] Approval detected`);
|
|
213
|
+
const currentChatTitle = await getCurrentChatTitle(cdp);
|
|
214
|
+
const targetChannel = resolveApprovalChannelForCurrentChat(bridge, projectName, currentChatTitle);
|
|
215
|
+
if (!targetChannel || !bridge.botApi) {
|
|
216
|
+
logger_1.logger.warn(`[ApprovalDetector:${projectName}] Skipped — no target channel`);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const targetChannelStr = targetChannel.threadId ? String(targetChannel.threadId) : String(targetChannel.chatId);
|
|
220
|
+
if (bridge.autoAccept.isEnabled()) {
|
|
221
|
+
const accepted = await detector.alwaysAllowButton() || await detector.approveButton();
|
|
222
|
+
const text = accepted
|
|
223
|
+
? `✅ <b>Auto-approved</b>\nAn action was automatically approved.\n<b>Workspace:</b> ${(0, telegramFormatter_1.escapeHtml)(projectName)}`
|
|
224
|
+
: `⚠️ <b>Auto-approve failed</b>\nManual approval required.\n<b>Workspace:</b> ${(0, telegramFormatter_1.escapeHtml)(projectName)}`;
|
|
225
|
+
await sendTelegramMessage(bridge.botApi, targetChannel, text);
|
|
226
|
+
if (accepted)
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
let text = `🔔 <b>Approval Required</b>\n\n`;
|
|
230
|
+
if (info.description)
|
|
231
|
+
text += `${(0, telegramFormatter_1.escapeHtml)(info.description)}\n\n`;
|
|
232
|
+
text += `<b>Allow:</b> ${(0, telegramFormatter_1.escapeHtml)(info.approveText)}\n`;
|
|
233
|
+
text += `<b>Allow Chat:</b> ${(0, telegramFormatter_1.escapeHtml)(info.alwaysAllowText || 'In Dropdown')}\n`;
|
|
234
|
+
text += `<b>Deny:</b> ${(0, telegramFormatter_1.escapeHtml)(info.denyText || '(None)')}\n`;
|
|
235
|
+
text += `<b>Workspace:</b> ${(0, telegramFormatter_1.escapeHtml)(projectName)}`;
|
|
236
|
+
const keyboard = new grammy_1.InlineKeyboard()
|
|
237
|
+
.text('✅ Allow', buildApprovalCustomId('approve', projectName, targetChannelStr))
|
|
238
|
+
.text('✅ Allow Chat', buildApprovalCustomId('always_allow', projectName, targetChannelStr))
|
|
239
|
+
.text('❌ Deny', buildApprovalCustomId('deny', projectName, targetChannelStr));
|
|
240
|
+
const msgId = await sendTelegramMessage(bridge.botApi, targetChannel, text, keyboard);
|
|
241
|
+
if (msgId) {
|
|
242
|
+
lastMessageId = msgId;
|
|
243
|
+
lastMessageChatId = targetChannel.chatId;
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
detector.start();
|
|
248
|
+
bridge.pool.registerApprovalDetector(projectName, detector);
|
|
249
|
+
logger_1.logger.debug(`[ApprovalDetector:${projectName}] Started`);
|
|
250
|
+
}
|
|
251
|
+
function ensurePlanningDetector(bridge, cdp, projectName) {
|
|
252
|
+
const existing = bridge.pool.getPlanningDetector(projectName);
|
|
253
|
+
if (existing && existing.isActive())
|
|
254
|
+
return;
|
|
255
|
+
let lastMessageId = null;
|
|
256
|
+
let lastMessageChatId = null;
|
|
257
|
+
const detector = new planningDetector_1.PlanningDetector({
|
|
258
|
+
cdpService: cdp,
|
|
259
|
+
pollIntervalMs: 2000,
|
|
260
|
+
onResolved: () => {
|
|
261
|
+
if (!lastMessageId || !lastMessageChatId || !bridge.botApi)
|
|
262
|
+
return;
|
|
263
|
+
const msgId = lastMessageId;
|
|
264
|
+
const chatId = lastMessageChatId;
|
|
265
|
+
lastMessageId = null;
|
|
266
|
+
lastMessageChatId = null;
|
|
267
|
+
bridge.botApi.editMessageReplyMarkup(chatId, msgId, { reply_markup: undefined })
|
|
268
|
+
.catch(logger_1.logger.error);
|
|
269
|
+
},
|
|
270
|
+
onPlanningRequired: async (info) => {
|
|
271
|
+
logger_1.logger.debug(`[PlanningDetector:${projectName}] Planning detected`);
|
|
272
|
+
const currentChatTitle = await getCurrentChatTitle(cdp);
|
|
273
|
+
const targetChannel = resolveApprovalChannelForCurrentChat(bridge, projectName, currentChatTitle);
|
|
274
|
+
if (!targetChannel || !bridge.botApi)
|
|
275
|
+
return;
|
|
276
|
+
const targetChannelStr = targetChannel.threadId ? String(targetChannel.threadId) : String(targetChannel.chatId);
|
|
277
|
+
const descriptionText = info.description || info.planSummary || (0, i18n_1.t)('A plan has been generated and is awaiting your review.');
|
|
278
|
+
let text = `📋 <b>Planning Mode</b>\n\n`;
|
|
279
|
+
text += (0, telegramFormatter_1.escapeHtml)(descriptionText) + `\n\n`;
|
|
280
|
+
text += `<b>Plan:</b> ${(0, telegramFormatter_1.escapeHtml)(info.planTitle || 'Implementation Plan')}\n`;
|
|
281
|
+
text += `<b>Workspace:</b> ${(0, telegramFormatter_1.escapeHtml)(projectName)}`;
|
|
282
|
+
const keyboard = new grammy_1.InlineKeyboard()
|
|
283
|
+
.text('📖 Open', buildPlanningCustomId('open', projectName, targetChannelStr))
|
|
284
|
+
.text('▶ Proceed', buildPlanningCustomId('proceed', projectName, targetChannelStr));
|
|
285
|
+
const msgId = await sendTelegramMessage(bridge.botApi, targetChannel, text, keyboard);
|
|
286
|
+
if (msgId) {
|
|
287
|
+
lastMessageId = msgId;
|
|
288
|
+
lastMessageChatId = targetChannel.chatId;
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
detector.start();
|
|
293
|
+
bridge.pool.registerPlanningDetector(projectName, detector);
|
|
294
|
+
logger_1.logger.debug(`[PlanningDetector:${projectName}] Started`);
|
|
295
|
+
}
|
|
296
|
+
function ensureErrorPopupDetector(bridge, cdp, projectName) {
|
|
297
|
+
const existing = bridge.pool.getErrorPopupDetector(projectName);
|
|
298
|
+
if (existing && existing.isActive())
|
|
299
|
+
return;
|
|
300
|
+
let lastMessageId = null;
|
|
301
|
+
let lastMessageChatId = null;
|
|
302
|
+
const detector = new errorPopupDetector_1.ErrorPopupDetector({
|
|
303
|
+
cdpService: cdp,
|
|
304
|
+
pollIntervalMs: 3000,
|
|
305
|
+
onResolved: () => {
|
|
306
|
+
if (!lastMessageId || !lastMessageChatId || !bridge.botApi)
|
|
307
|
+
return;
|
|
308
|
+
const msgId = lastMessageId;
|
|
309
|
+
const chatId = lastMessageChatId;
|
|
310
|
+
lastMessageId = null;
|
|
311
|
+
lastMessageChatId = null;
|
|
312
|
+
bridge.botApi.editMessageReplyMarkup(chatId, msgId, { reply_markup: undefined })
|
|
313
|
+
.catch(logger_1.logger.error);
|
|
314
|
+
},
|
|
315
|
+
onErrorPopup: async (info) => {
|
|
316
|
+
logger_1.logger.debug(`[ErrorPopupDetector:${projectName}] Error popup detected`);
|
|
317
|
+
const currentChatTitle = await getCurrentChatTitle(cdp);
|
|
318
|
+
const targetChannel = resolveApprovalChannelForCurrentChat(bridge, projectName, currentChatTitle);
|
|
319
|
+
if (!targetChannel || !bridge.botApi)
|
|
320
|
+
return;
|
|
321
|
+
const targetChannelStr = targetChannel.threadId ? String(targetChannel.threadId) : String(targetChannel.chatId);
|
|
322
|
+
const bodyText = info.body || (0, i18n_1.t)('An error occurred in the Antigravity agent.');
|
|
323
|
+
let text = `❌ <b>${(0, telegramFormatter_1.escapeHtml)(info.title || 'Agent Error')}</b>\n\n`;
|
|
324
|
+
text += (0, telegramFormatter_1.escapeHtml)(bodyText.substring(0, 3800)) + `\n\n`;
|
|
325
|
+
text += `<b>Buttons:</b> ${(0, telegramFormatter_1.escapeHtml)(info.buttons.join(', ') || '(None)')}\n`;
|
|
326
|
+
text += `<b>Workspace:</b> ${(0, telegramFormatter_1.escapeHtml)(projectName)}`;
|
|
327
|
+
const keyboard = new grammy_1.InlineKeyboard()
|
|
328
|
+
.text('🔇 Dismiss', buildErrorPopupCustomId('dismiss', projectName, targetChannelStr))
|
|
329
|
+
.text('📋 Copy Debug', buildErrorPopupCustomId('copy_debug', projectName, targetChannelStr))
|
|
330
|
+
.text('🔄 Retry', buildErrorPopupCustomId('retry', projectName, targetChannelStr));
|
|
331
|
+
const msgId = await sendTelegramMessage(bridge.botApi, targetChannel, text, keyboard);
|
|
332
|
+
if (msgId) {
|
|
333
|
+
lastMessageId = msgId;
|
|
334
|
+
lastMessageChatId = targetChannel.chatId;
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
detector.start();
|
|
339
|
+
bridge.pool.registerErrorPopupDetector(projectName, detector);
|
|
340
|
+
logger_1.logger.debug(`[ErrorPopupDetector:${projectName}] Started`);
|
|
341
|
+
}
|
|
342
|
+
function ensureUserMessageDetector(bridge, cdp, projectName, onUserMessage) {
|
|
343
|
+
const existing = bridge.pool.getUserMessageDetector(projectName);
|
|
344
|
+
if (existing && existing.isActive())
|
|
345
|
+
return;
|
|
346
|
+
const detector = new userMessageDetector_1.UserMessageDetector({
|
|
347
|
+
cdpService: cdp,
|
|
348
|
+
pollIntervalMs: 2000,
|
|
349
|
+
onUserMessage,
|
|
350
|
+
});
|
|
351
|
+
detector.start();
|
|
352
|
+
bridge.pool.registerUserMessageDetector(projectName, detector);
|
|
353
|
+
logger_1.logger.debug(`[UserMessageDetector:${projectName}] Started`);
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=cdpBridgeManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdpBridgeManager.js","sourceRoot":"","sources":["../../src/services/cdpBridgeManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { CdpService, CdpServiceOptions } from './cdpService';
|
|
2
|
+
import { ApprovalDetector } from './approvalDetector';
|
|
3
|
+
import { ErrorPopupDetector } from './errorPopupDetector';
|
|
4
|
+
import { PlanningDetector } from './planningDetector';
|
|
5
|
+
import { UserMessageDetector } from './userMessageDetector';
|
|
6
|
+
/**
|
|
7
|
+
* Pool that manages independent CdpService instances per workspace.
|
|
8
|
+
*
|
|
9
|
+
* Each workspace owns its own WebSocket / contexts / pendingCalls, so
|
|
10
|
+
* switching to workspace B while workspace A's ResponseMonitor is polling
|
|
11
|
+
* does not destroy A's WebSocket.
|
|
12
|
+
*/
|
|
13
|
+
export declare class CdpConnectionPool {
|
|
14
|
+
private readonly connections;
|
|
15
|
+
private readonly approvalDetectors;
|
|
16
|
+
private readonly errorPopupDetectors;
|
|
17
|
+
private readonly planningDetectors;
|
|
18
|
+
private readonly userMessageDetectors;
|
|
19
|
+
private readonly connectingPromises;
|
|
20
|
+
private readonly cdpOptions;
|
|
21
|
+
constructor(cdpOptions?: CdpServiceOptions);
|
|
22
|
+
/**
|
|
23
|
+
* Get a CdpService for the given workspace path.
|
|
24
|
+
* Creates a new connection and caches it if not already connected.
|
|
25
|
+
* Prevents concurrent connections via Promise locking.
|
|
26
|
+
*
|
|
27
|
+
* @param workspacePath Full path of the workspace
|
|
28
|
+
* @returns Connected CdpService
|
|
29
|
+
*/
|
|
30
|
+
getOrConnect(workspacePath: string): Promise<CdpService>;
|
|
31
|
+
/**
|
|
32
|
+
* Get a connected CdpService (read-only).
|
|
33
|
+
* Returns null if not connected.
|
|
34
|
+
*/
|
|
35
|
+
getConnected(projectName: string): CdpService | null;
|
|
36
|
+
/**
|
|
37
|
+
* Disconnect the specified workspace.
|
|
38
|
+
*/
|
|
39
|
+
disconnectWorkspace(projectName: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Disconnect all workspace connections.
|
|
42
|
+
*/
|
|
43
|
+
disconnectAll(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Register an approval detector for a workspace.
|
|
46
|
+
*/
|
|
47
|
+
registerApprovalDetector(projectName: string, detector: ApprovalDetector): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get the approval detector for a workspace.
|
|
50
|
+
*/
|
|
51
|
+
getApprovalDetector(projectName: string): ApprovalDetector | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Register an error popup detector for a workspace.
|
|
54
|
+
*/
|
|
55
|
+
registerErrorPopupDetector(projectName: string, detector: ErrorPopupDetector): void;
|
|
56
|
+
/**
|
|
57
|
+
* Get the error popup detector for a workspace.
|
|
58
|
+
*/
|
|
59
|
+
getErrorPopupDetector(projectName: string): ErrorPopupDetector | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Register a planning detector for a workspace.
|
|
62
|
+
*/
|
|
63
|
+
registerPlanningDetector(projectName: string, detector: PlanningDetector): void;
|
|
64
|
+
/**
|
|
65
|
+
* Get the planning detector for a workspace.
|
|
66
|
+
*/
|
|
67
|
+
getPlanningDetector(projectName: string): PlanningDetector | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Register a user message detector for a workspace.
|
|
70
|
+
*/
|
|
71
|
+
registerUserMessageDetector(projectName: string, detector: UserMessageDetector): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get the user message detector for a workspace.
|
|
74
|
+
*/
|
|
75
|
+
getUserMessageDetector(projectName: string): UserMessageDetector | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Return a list of workspace names with active connections.
|
|
78
|
+
*/
|
|
79
|
+
getActiveWorkspaceNames(): string[];
|
|
80
|
+
/**
|
|
81
|
+
* Extract the project name from a workspace path.
|
|
82
|
+
*/
|
|
83
|
+
extractProjectName(workspacePath: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* Create a new CdpService and connect to the workspace.
|
|
86
|
+
*/
|
|
87
|
+
private createAndConnect;
|
|
88
|
+
}
|