chrometools-mcp 2.4.2 → 3.1.2
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/CHANGELOG.md +540 -0
- package/COMPONENT_MAPPING_SPEC.md +1217 -0
- package/README.md +494 -38
- package/bridge/bridge-client.js +472 -0
- package/bridge/bridge-service.js +399 -0
- package/bridge/install.js +241 -0
- package/browser/browser-manager.js +107 -2
- package/browser/page-manager.js +226 -69
- package/docs/CHROME_EXTENSION.md +219 -0
- package/docs/PAGE_OBJECT_MODEL_CONCEPT.md +1756 -0
- package/element-finder-utils.js +138 -28
- package/extension/background.js +643 -0
- package/extension/content.js +715 -0
- package/extension/icons/create-icons.js +164 -0
- package/extension/icons/icon128.png +0 -0
- package/extension/icons/icon16.png +0 -0
- package/extension/icons/icon48.png +0 -0
- package/extension/manifest.json +58 -0
- package/extension/popup/popup.css +437 -0
- package/extension/popup/popup.html +102 -0
- package/extension/popup/popup.js +415 -0
- package/extension/recorder-overlay.css +93 -0
- package/figma-tools.js +120 -0
- package/index.js +3347 -2518
- package/models/BaseInputModel.js +93 -0
- package/models/CheckboxGroupModel.js +199 -0
- package/models/CheckboxModel.js +103 -0
- package/models/ColorInputModel.js +53 -0
- package/models/DateInputModel.js +67 -0
- package/models/RadioGroupModel.js +126 -0
- package/models/RangeInputModel.js +60 -0
- package/models/SelectModel.js +97 -0
- package/models/TextInputModel.js +34 -0
- package/models/TextareaModel.js +59 -0
- package/models/TimeInputModel.js +49 -0
- package/models/index.js +122 -0
- package/package.json +3 -2
- package/pom/apom-converter.js +267 -0
- package/pom/apom-tree-converter.js +515 -0
- package/pom/element-id-generator.js +175 -0
- package/recorder/page-object-generator.js +16 -0
- package/recorder/scenario-executor.js +80 -2
- package/server/tool-definitions.js +839 -656
- package/server/tool-groups.js +3 -2
- package/server/tool-schemas.js +367 -296
- package/server/websocket-bridge.js +447 -0
- package/utils/selector-resolver.js +186 -0
- package/utils/ui-framework-detector.js +392 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# ChromeTools Chrome Extension
|
|
2
|
+
|
|
3
|
+
Chrome Extension для chrometools-mcp, обеспечивающий полное отслеживание вкладок и запись сценариев.
|
|
4
|
+
|
|
5
|
+
## Возможности
|
|
6
|
+
|
|
7
|
+
1. **Полное отслеживание вкладок** - включая вкладки, открытые пользователем вручную (Ctrl+T, контекстное меню)
|
|
8
|
+
2. **Запись сценариев** - работает на всех сайтах, состояние сохраняется при переходе между доменами
|
|
9
|
+
3. **Поддержка множественных клиентов** - до 8 MCP клиентов одновременно
|
|
10
|
+
|
|
11
|
+
## Архитектура (Bridge Architecture)
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
15
|
+
│ Chrome Browser │
|
|
16
|
+
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
17
|
+
│ │ ChromeTools Extension │ │
|
|
18
|
+
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
|
19
|
+
│ │ │ background │ │ content.js │ │ popup │ │ │
|
|
20
|
+
│ │ │ (tabs API) │ │ (recorder) │ │ (UI) │ │ │
|
|
21
|
+
│ │ └──────┬──────┘ └──────┬──────┘ └─────────────┘ │ │
|
|
22
|
+
│ │ │ │ │ │
|
|
23
|
+
│ │ └────────────────┴────────────────────────────────┼──┼──► Native Messaging
|
|
24
|
+
│ └───────────────────────────────────────────────────────────┘ │ (stdio)
|
|
25
|
+
│ │
|
|
26
|
+
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
27
|
+
│ │ Web Pages │ │
|
|
28
|
+
│ │ (content.js инъецируется автоматически) │ │
|
|
29
|
+
│ └───────────────────────────────────────────────────────────┘ │
|
|
30
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
31
|
+
│
|
|
32
|
+
▼ Native Messaging
|
|
33
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
34
|
+
│ Bridge Service (Native Messaging Host) │
|
|
35
|
+
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
36
|
+
│ │ State Store │ │
|
|
37
|
+
│ │ • tabs: Map<id, {url, title, active}> │ │
|
|
38
|
+
│ │ • recordings: Array<Action> │ │
|
|
39
|
+
│ │ • recorderState: {isRecording, isPaused, ...} │ │
|
|
40
|
+
│ └────────────────────────────────────────────────────────────┘ │
|
|
41
|
+
│ │
|
|
42
|
+
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
43
|
+
│ │ WebSocket Server (:9223) │ │
|
|
44
|
+
│ │ • Accepts 0-8 MCP clients │ │
|
|
45
|
+
│ │ • Sends full state on connect │ │
|
|
46
|
+
│ │ • Broadcasts events in real-time │ │
|
|
47
|
+
│ └────────────────────────────────────────────────────────────┘ │
|
|
48
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
49
|
+
│ │ │
|
|
50
|
+
▼ ▼ ▼
|
|
51
|
+
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
52
|
+
│ Claude │ │ Telegram │ │ Custom │
|
|
53
|
+
│ Desktop │ │ Bot │ │ Script │
|
|
54
|
+
│ (MCP) │ │ (MCP) │ │ (MCP) │
|
|
55
|
+
└──────────┘ └──────────┘ └──────────┘
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Ключевые компоненты
|
|
59
|
+
|
|
60
|
+
1. **Chrome Extension (Event Producer)**
|
|
61
|
+
- Отслеживает все вкладки через Chrome tabs API
|
|
62
|
+
- Записывает действия пользователя (клики, ввод, навигация)
|
|
63
|
+
- Отправляет ВСЕ события в Bridge через Native Messaging
|
|
64
|
+
- НЕ зависит от количества подключённых MCP клиентов
|
|
65
|
+
|
|
66
|
+
2. **Bridge Service (Persistent Intermediary)**
|
|
67
|
+
- Запускается Chrome автоматически при загрузке Extension
|
|
68
|
+
- Хранит состояние (вкладки, записи, recorder state)
|
|
69
|
+
- Живёт пока работает Chrome
|
|
70
|
+
- Принимает 0-8 MCP клиентов через WebSocket
|
|
71
|
+
|
|
72
|
+
3. **MCP Clients (Event Consumers)**
|
|
73
|
+
- Подключаются к Bridge как WebSocket клиенты
|
|
74
|
+
- Получают полное состояние сразу при подключении
|
|
75
|
+
- Получают обновления в реальном времени
|
|
76
|
+
- Могут отключаться/подключаться в любое время
|
|
77
|
+
|
|
78
|
+
## Структура файлов
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
extension/
|
|
82
|
+
├── manifest.json # Manifest V3 (со стабильным key для ID)
|
|
83
|
+
├── background.js # Service Worker (tabs API, Native Messaging)
|
|
84
|
+
├── content.js # Content script (запись событий)
|
|
85
|
+
├── recorder-overlay.css # Стили overlay при записи
|
|
86
|
+
├── popup/
|
|
87
|
+
│ ├── popup.html # UI popup расширения
|
|
88
|
+
│ ├── popup.js # Логика popup
|
|
89
|
+
│ └── popup.css # Стили popup
|
|
90
|
+
└── icons/
|
|
91
|
+
├── icon16.png
|
|
92
|
+
├── icon48.png
|
|
93
|
+
└── icon128.png
|
|
94
|
+
|
|
95
|
+
bridge/
|
|
96
|
+
├── bridge-service.js # Native Messaging Host + WebSocket server
|
|
97
|
+
├── bridge-client.js # WebSocket client для MCP
|
|
98
|
+
└── install.js # Installer для Bridge
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Установка
|
|
102
|
+
|
|
103
|
+
### 1. Установка Bridge (один раз)
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npx chrometools-mcp --install-bridge
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Это создаёт:
|
|
110
|
+
- `~/.chrometools/bridge-service.js` — Bridge Service
|
|
111
|
+
- `~/.chrometools/native-manifest.json` — манифест Native Messaging
|
|
112
|
+
- Запись в Windows Registry / Chrome config для регистрации Host
|
|
113
|
+
|
|
114
|
+
### 2. Установка Extension
|
|
115
|
+
|
|
116
|
+
**Автоматически** — Extension загружается при запуске Chrome через chrometools-mcp:
|
|
117
|
+
|
|
118
|
+
```javascript
|
|
119
|
+
// Chrome запускается с флагами:
|
|
120
|
+
--load-extension=/path/to/extension
|
|
121
|
+
--disable-extensions-except=/path/to/extension
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Вручную** — если Chrome уже запущен:
|
|
125
|
+
|
|
126
|
+
1. Открыть `chrome://extensions/`
|
|
127
|
+
2. Включить "Developer mode"
|
|
128
|
+
3. Нажать "Load unpacked"
|
|
129
|
+
4. Выбрать папку `extension/` из пакета chrometools-mcp
|
|
130
|
+
|
|
131
|
+
### 3. Проверка
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
npx chrometools-mcp --check-bridge
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Extension ID
|
|
138
|
+
|
|
139
|
+
Extension имеет **стабильный ID**: `dmehkibmncgphijnigkahhlekgajhpbl`
|
|
140
|
+
|
|
141
|
+
Это достигается через поле `key` в manifest.json:
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Стабильный ID необходим для Native Messaging — Host должен знать точный ID Extension.
|
|
149
|
+
|
|
150
|
+
## Жизненный цикл
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
1. Пользователь открывает Chrome
|
|
154
|
+
2. Extension загружается
|
|
155
|
+
3. Extension вызывает chrome.runtime.connectNative("com.chrometools.bridge")
|
|
156
|
+
4. Chrome запускает Bridge Service как child process
|
|
157
|
+
5. Bridge поднимает WebSocket сервер на :9223
|
|
158
|
+
6. Extension отправляет текущие вкладки в Bridge
|
|
159
|
+
|
|
160
|
+
7. Пользователь пишет боту → Claude Code стартует
|
|
161
|
+
8. MCP подключается к Bridge → получает полное состояние
|
|
162
|
+
9. Claude работает, получает события в реальном времени
|
|
163
|
+
10. Claude Code завершается → отключается от Bridge
|
|
164
|
+
11. Bridge продолжает работать, состояние сохранено
|
|
165
|
+
|
|
166
|
+
12. Новый запрос → новый Claude → подключается → актуальное состояние
|
|
167
|
+
|
|
168
|
+
13. Chrome закрывается → Bridge завершается (Chrome убивает child process)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Отладка
|
|
172
|
+
|
|
173
|
+
### Консоль Extension
|
|
174
|
+
|
|
175
|
+
1. Открыть `chrome://extensions/`
|
|
176
|
+
2. Найти "ChromeTools MCP"
|
|
177
|
+
3. Нажать "Service Worker" для открытия DevTools
|
|
178
|
+
4. Смотреть Console для логов
|
|
179
|
+
|
|
180
|
+
### Логи Bridge
|
|
181
|
+
|
|
182
|
+
Bridge пишет в stderr:
|
|
183
|
+
```
|
|
184
|
+
[bridge] 2026-01-26T11:00:00.000Z Starting com.chrometools.bridge
|
|
185
|
+
[bridge] 2026-01-26T11:00:00.010Z WebSocket server listening on port 9223
|
|
186
|
+
[bridge] 2026-01-26T11:00:00.020Z Extension connected
|
|
187
|
+
[bridge] 2026-01-26T11:00:05.000Z Client connected (1/8)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Проверка Native Messaging
|
|
191
|
+
|
|
192
|
+
Windows:
|
|
193
|
+
```cmd
|
|
194
|
+
reg query "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.chrometools.bridge"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Linux/macOS:
|
|
198
|
+
```bash
|
|
199
|
+
cat ~/.config/google-chrome/NativeMessagingHosts/com.chrometools.bridge.json
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Troubleshooting
|
|
203
|
+
|
|
204
|
+
### Extension показывает "Disconnected"
|
|
205
|
+
|
|
206
|
+
1. Проверить установку Bridge: `npx chrometools-mcp --check-bridge`
|
|
207
|
+
2. Переустановить: `npx chrometools-mcp --install-bridge`
|
|
208
|
+
3. Перезагрузить Extension в chrome://extensions
|
|
209
|
+
|
|
210
|
+
### "Error when communicating with the native messaging host"
|
|
211
|
+
|
|
212
|
+
- Bridge не может найти зависимости (ws пакет)
|
|
213
|
+
- Убедиться что `chrometools-mcp` установлен глобально или путь к проекту корректный
|
|
214
|
+
|
|
215
|
+
### MCP не видит вкладки
|
|
216
|
+
|
|
217
|
+
1. Проверить что Extension подключён (иконка должна быть цветной)
|
|
218
|
+
2. Проверить что Bridge работает (порт 9223)
|
|
219
|
+
3. Перезапустить Chrome
|