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.
Files changed (48) hide show
  1. package/CHANGELOG.md +540 -0
  2. package/COMPONENT_MAPPING_SPEC.md +1217 -0
  3. package/README.md +494 -38
  4. package/bridge/bridge-client.js +472 -0
  5. package/bridge/bridge-service.js +399 -0
  6. package/bridge/install.js +241 -0
  7. package/browser/browser-manager.js +107 -2
  8. package/browser/page-manager.js +226 -69
  9. package/docs/CHROME_EXTENSION.md +219 -0
  10. package/docs/PAGE_OBJECT_MODEL_CONCEPT.md +1756 -0
  11. package/element-finder-utils.js +138 -28
  12. package/extension/background.js +643 -0
  13. package/extension/content.js +715 -0
  14. package/extension/icons/create-icons.js +164 -0
  15. package/extension/icons/icon128.png +0 -0
  16. package/extension/icons/icon16.png +0 -0
  17. package/extension/icons/icon48.png +0 -0
  18. package/extension/manifest.json +58 -0
  19. package/extension/popup/popup.css +437 -0
  20. package/extension/popup/popup.html +102 -0
  21. package/extension/popup/popup.js +415 -0
  22. package/extension/recorder-overlay.css +93 -0
  23. package/figma-tools.js +120 -0
  24. package/index.js +3347 -2518
  25. package/models/BaseInputModel.js +93 -0
  26. package/models/CheckboxGroupModel.js +199 -0
  27. package/models/CheckboxModel.js +103 -0
  28. package/models/ColorInputModel.js +53 -0
  29. package/models/DateInputModel.js +67 -0
  30. package/models/RadioGroupModel.js +126 -0
  31. package/models/RangeInputModel.js +60 -0
  32. package/models/SelectModel.js +97 -0
  33. package/models/TextInputModel.js +34 -0
  34. package/models/TextareaModel.js +59 -0
  35. package/models/TimeInputModel.js +49 -0
  36. package/models/index.js +122 -0
  37. package/package.json +3 -2
  38. package/pom/apom-converter.js +267 -0
  39. package/pom/apom-tree-converter.js +515 -0
  40. package/pom/element-id-generator.js +175 -0
  41. package/recorder/page-object-generator.js +16 -0
  42. package/recorder/scenario-executor.js +80 -2
  43. package/server/tool-definitions.js +839 -656
  44. package/server/tool-groups.js +3 -2
  45. package/server/tool-schemas.js +367 -296
  46. package/server/websocket-bridge.js +447 -0
  47. package/utils/selector-resolver.js +186 -0
  48. 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