answer42 0.6.0__tar.gz → 0.7.0__tar.gz
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.
- {answer42-0.6.0 → answer42-0.7.0}/PKG-INFO +9 -5
- {answer42-0.6.0 → answer42-0.7.0}/README.md +8 -4
- {answer42-0.6.0 → answer42-0.7.0}/docs/agent-installation.md +1 -1
- {answer42-0.6.0 → answer42-0.7.0}/docs/architecture.md +6 -2
- {answer42-0.6.0 → answer42-0.7.0}/pyproject.toml +1 -1
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/html_agent.py +278 -109
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/platform.py +22 -16
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/runtime.py +6 -2
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/server.py +47 -8
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/tool_groups.py +5 -2
- answer42-0.7.0/src/mcp_1c/webkit_patch.py +356 -0
- {answer42-0.6.0 → answer42-0.7.0}/.gitignore +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/LICENSE +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/credentials.example.json +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/docs/assets/answer42-logo.png +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/docs/assets/platform42-logo.svg +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/docs/installation.md +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/scripts/build_cf.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/scripts/e2e_http_smoke.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/scripts/e2e_stable.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/scripts/openclaw_mcp_autoreload.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/scripts/rag_cli.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/scripts/read_webclient_start_info.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/Configuration.xml +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Catalogs//320/237/320/241_/320/222/320/273/320/260/320/264/320/265/320/273/320/265/321/206.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Catalogs//320/237/320/241_/320/241/320/277/321/200/320/260/320/262/320/276/321/207/320/275/320/270/320/2721.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Configuration.xml +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Ext/ManagerModule.bsl" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Ext/ObjectModule.bsl" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Templates//320/236/321/201/320/275/320/276/320/262/320/275/320/260/321/217/320/241/321/205/320/265/320/274/320/260/320/232/320/276/320/274/320/277/320/276/320/275/320/276/320/262/320/272/320/270/320/224/320/260/320/275/320/275/321/213/321/205/Ext/Template.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Templates//320/236/321/201/320/275/320/276/320/262/320/275/320/260/321/217/320/241/321/205/320/265/320/274/320/260/320/232/320/276/320/274/320/277/320/276/320/275/320/276/320/262/320/272/320/270/320/224/320/260/320/275/320/275/321/213/321/205.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262.xml" +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/__init__.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/assets/__init__.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/auth.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/bridge.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/credentials.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/credentials_cli.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/os_support.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/protocol.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/__init__.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/detect.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/dump.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/model.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/parsers.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/service.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/store.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/summary_backend.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/rag/summary_vector.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/recorder.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/release_helper.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/skill_installer.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/webclient_probe.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/win_desktop.py +0 -0
- {answer42-0.6.0 → answer42-0.7.0}/src/mcp_1c/window_control.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: answer42
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Answer42 — The Answer to Life, Universe, and 1C — UI Driver. MCP-powered 1C:Enterprise UI automation: click, fill, navigate, test, and introspect managed forms through the test-client API
|
|
5
5
|
Author: Marvin (AI Assistant), 42Clouds, and contributors
|
|
6
6
|
Author-email: "Kosolapov Stanislav (proDOOMman)" <prodoomman@gmail.com>
|
|
@@ -211,7 +211,7 @@ answer42
|
|
|
211
211
|
| `ui_snapshots` | работа с сохранённым большим `ui_tree` (включается сама, когда `ui_tree` сохранил результат в ресурс) |
|
|
212
212
|
| `metadata` | метаданные конфигурации из живого интерфейса |
|
|
213
213
|
| `rag` | RAG по исходникам конфигурации — **только пока RAG активен** (`start_session(rag_enabled=true)`) |
|
|
214
|
-
| `html` | живые веб-страницы в HTML-полях: текст, поиск элементов, клик, ввод, ожидание,
|
|
214
|
+
| `html` | живые веб-страницы в HTML-полях: текст, поиск элементов, клик, ввод, ожидание, ошибки консоли (включается сама после `start_session`); произвольный JavaScript `html_eval` — только с `--dev-tools` |
|
|
215
215
|
| `recording` | запись доказательств (скриншоты, слайды, PDF) |
|
|
216
216
|
| `credentials` | сохранённые учётные данные баз |
|
|
217
217
|
|
|
@@ -239,17 +239,21 @@ answer42
|
|
|
239
239
|
| `html_click` | нажать элемент |
|
|
240
240
|
| `html_type` | ввести значение в поле (`submit=true` — отправить Enter) |
|
|
241
241
|
| `html_wait` | дождаться появления или исчезновения текста / элемента |
|
|
242
|
-
| `html_eval` | выполнить JavaScript в странице |
|
|
242
|
+
| `html_eval` | выполнить произвольный JavaScript в странице — **только с `--dev-tools`** (см. ниже) |
|
|
243
243
|
| `html_console` | ошибки и предупреждения консоли страницы и скрипты, которые эта сборка WebKit не разбирает (например `?.`) |
|
|
244
|
+
| `html_inspector_patch` | Windows: встроить мост в Web Inspector установленных платформ 1С или убрать его (необязательно, см. ниже) |
|
|
244
245
|
|
|
245
246
|
Если живых страниц несколько, нужная выбирается параметром `page` (id из `html_pages` или часть URL / заголовка).
|
|
246
247
|
|
|
248
|
+
**Произвольный код.** Инструменты, которые выполняют произвольный код, по умолчанию не регистрируются: `html_eval` (JavaScript в странице HTML-поля) и `dev_eval` (выражение BSL в менеджере тестирования). Их включают флагом `answer42 --dev-tools` или переменной `ONEC_MCP_DEV_TOOLS=1`; тогда `html_eval` видна вместе с группой `html`. Остальные инструменты `html_*` выполняют в странице только фиксированные операции Answer42.
|
|
249
|
+
|
|
247
250
|
Как это устроено:
|
|
248
251
|
|
|
249
|
-
- **Windows.** Встроенный WebKit клиента 1С не имеет сервера удалённой отладки, но его Web Inspector открывается по Ctrl+Alt+Shift+F12. При первом вызове `html_*` Answer42 открывает инспектор поля (он встраивается в нижнюю часть формы),
|
|
252
|
+
- **Windows.** Встроенный WebKit клиента 1С не имеет сервера удалённой отладки, но его Web Inspector открывается по Ctrl+Alt+Shift+F12. При первом вызове `html_*` Answer42 открывает инспектор поля (он встраивается в нижнюю часть формы), переключает его на вкладку Console и вводит в консоль короткий загрузчик. Загрузчик подключается к локальному WebSocket Answer42 по одноразовому токену, получает мост и выполняет операции в странице. Подключение к странице занимает около 2–3 секунд. После перезагрузки страницы загрузчик вводится заново. Платформа используется как установлена.
|
|
253
|
+
- **Windows, мост в инспекторе платформы (необязательно).** `answer42 webkit-inspector install` (или инструмент `html_inspector_patch(action="install")`) встраивает мост в Web Inspector установленной платформы: `bin\WebKit.resources\WebInspectorUI\Main.html` подключает `Answer42Bridge.js`. Каталог платформы доступен на запись только администратору, поэтому команда сама запрашивает права через UAC — одно подтверждение на все выбранные платформы — и разрешает текущему пользователю менять файл с портом сессии; сессиям права администратора больше не нужны. Если процесс Answer42 запущен из среды, которая не может показать запрос UAC (например, из песочницы агента), через 90 секунд команда вернёт ошибку с готовой командой для PowerShell, запущенного от имени администратора. После этого интерфейс инспектора подключается к Answer42 сам: в консоль ничего не вводится, мост переживает перезагрузку страницы, а `html_console` видит сообщения с момента её загрузки. Если инспектор открывает человек, мост ничего не делает. `answer42 webkit-inspector status` показывает состояние платформ, `uninstall` возвращает исходные файлы; без моста (или после обновления платформы) Answer42 вводит загрузчик, как обычно. Ключ `--version` выбирает платформу, без него — все установленные.
|
|
250
254
|
- **Linux.** HTML-поля рисует системный WebKitGTK. Answer42 запускает тест-клиент с `WEBKIT_INSPECTOR_SERVER=127.0.0.1:<порт>` и подключается к удалённому отладчику WebKitGTK напрямую: окна инспектора и ввода с клавиатуры нет.
|
|
251
255
|
|
|
252
|
-
Ограничения: на Windows инспектор остаётся встроенным в форму и попадает на
|
|
256
|
+
Ограничения: на Windows инспектор остаётся встроенным в форму и попадает на скриншоты. `html_console` на Linux и с мостом в инспекторе платформы отдаёт сообщения с момента загрузки страницы, а с загрузчиком в консоли — с момента подключения (`collected_since`); неподдержанный синтаксис в скриптах страницы находит проверка скриптов (`check_scripts`). Встроенный WebKit Windows-клиента 1С не поддерживает часть современного JavaScript (например `?.`), а WebKitGTK на Linux — поддерживает: одна и та же страница может работать в одном клиенте и ломаться в другом.
|
|
253
257
|
|
|
254
258
|
## Безопасное хранение логинов и паролей
|
|
255
259
|
|
|
@@ -169,7 +169,7 @@ answer42
|
|
|
169
169
|
| `ui_snapshots` | работа с сохранённым большим `ui_tree` (включается сама, когда `ui_tree` сохранил результат в ресурс) |
|
|
170
170
|
| `metadata` | метаданные конфигурации из живого интерфейса |
|
|
171
171
|
| `rag` | RAG по исходникам конфигурации — **только пока RAG активен** (`start_session(rag_enabled=true)`) |
|
|
172
|
-
| `html` | живые веб-страницы в HTML-полях: текст, поиск элементов, клик, ввод, ожидание,
|
|
172
|
+
| `html` | живые веб-страницы в HTML-полях: текст, поиск элементов, клик, ввод, ожидание, ошибки консоли (включается сама после `start_session`); произвольный JavaScript `html_eval` — только с `--dev-tools` |
|
|
173
173
|
| `recording` | запись доказательств (скриншоты, слайды, PDF) |
|
|
174
174
|
| `credentials` | сохранённые учётные данные баз |
|
|
175
175
|
|
|
@@ -197,17 +197,21 @@ answer42
|
|
|
197
197
|
| `html_click` | нажать элемент |
|
|
198
198
|
| `html_type` | ввести значение в поле (`submit=true` — отправить Enter) |
|
|
199
199
|
| `html_wait` | дождаться появления или исчезновения текста / элемента |
|
|
200
|
-
| `html_eval` | выполнить JavaScript в странице |
|
|
200
|
+
| `html_eval` | выполнить произвольный JavaScript в странице — **только с `--dev-tools`** (см. ниже) |
|
|
201
201
|
| `html_console` | ошибки и предупреждения консоли страницы и скрипты, которые эта сборка WebKit не разбирает (например `?.`) |
|
|
202
|
+
| `html_inspector_patch` | Windows: встроить мост в Web Inspector установленных платформ 1С или убрать его (необязательно, см. ниже) |
|
|
202
203
|
|
|
203
204
|
Если живых страниц несколько, нужная выбирается параметром `page` (id из `html_pages` или часть URL / заголовка).
|
|
204
205
|
|
|
206
|
+
**Произвольный код.** Инструменты, которые выполняют произвольный код, по умолчанию не регистрируются: `html_eval` (JavaScript в странице HTML-поля) и `dev_eval` (выражение BSL в менеджере тестирования). Их включают флагом `answer42 --dev-tools` или переменной `ONEC_MCP_DEV_TOOLS=1`; тогда `html_eval` видна вместе с группой `html`. Остальные инструменты `html_*` выполняют в странице только фиксированные операции Answer42.
|
|
207
|
+
|
|
205
208
|
Как это устроено:
|
|
206
209
|
|
|
207
|
-
- **Windows.** Встроенный WebKit клиента 1С не имеет сервера удалённой отладки, но его Web Inspector открывается по Ctrl+Alt+Shift+F12. При первом вызове `html_*` Answer42 открывает инспектор поля (он встраивается в нижнюю часть формы),
|
|
210
|
+
- **Windows.** Встроенный WebKit клиента 1С не имеет сервера удалённой отладки, но его Web Inspector открывается по Ctrl+Alt+Shift+F12. При первом вызове `html_*` Answer42 открывает инспектор поля (он встраивается в нижнюю часть формы), переключает его на вкладку Console и вводит в консоль короткий загрузчик. Загрузчик подключается к локальному WebSocket Answer42 по одноразовому токену, получает мост и выполняет операции в странице. Подключение к странице занимает около 2–3 секунд. После перезагрузки страницы загрузчик вводится заново. Платформа используется как установлена.
|
|
211
|
+
- **Windows, мост в инспекторе платформы (необязательно).** `answer42 webkit-inspector install` (или инструмент `html_inspector_patch(action="install")`) встраивает мост в Web Inspector установленной платформы: `bin\WebKit.resources\WebInspectorUI\Main.html` подключает `Answer42Bridge.js`. Каталог платформы доступен на запись только администратору, поэтому команда сама запрашивает права через UAC — одно подтверждение на все выбранные платформы — и разрешает текущему пользователю менять файл с портом сессии; сессиям права администратора больше не нужны. Если процесс Answer42 запущен из среды, которая не может показать запрос UAC (например, из песочницы агента), через 90 секунд команда вернёт ошибку с готовой командой для PowerShell, запущенного от имени администратора. После этого интерфейс инспектора подключается к Answer42 сам: в консоль ничего не вводится, мост переживает перезагрузку страницы, а `html_console` видит сообщения с момента её загрузки. Если инспектор открывает человек, мост ничего не делает. `answer42 webkit-inspector status` показывает состояние платформ, `uninstall` возвращает исходные файлы; без моста (или после обновления платформы) Answer42 вводит загрузчик, как обычно. Ключ `--version` выбирает платформу, без него — все установленные.
|
|
208
212
|
- **Linux.** HTML-поля рисует системный WebKitGTK. Answer42 запускает тест-клиент с `WEBKIT_INSPECTOR_SERVER=127.0.0.1:<порт>` и подключается к удалённому отладчику WebKitGTK напрямую: окна инспектора и ввода с клавиатуры нет.
|
|
209
213
|
|
|
210
|
-
Ограничения: на Windows инспектор остаётся встроенным в форму и попадает на
|
|
214
|
+
Ограничения: на Windows инспектор остаётся встроенным в форму и попадает на скриншоты. `html_console` на Linux и с мостом в инспекторе платформы отдаёт сообщения с момента загрузки страницы, а с загрузчиком в консоли — с момента подключения (`collected_since`); неподдержанный синтаксис в скриптах страницы находит проверка скриптов (`check_scripts`). Встроенный WebKit Windows-клиента 1С не поддерживает часть современного JavaScript (например `?.`), а WebKitGTK на Linux — поддерживает: одна и та же страница может работать в одном клиенте и ломаться в другом.
|
|
211
215
|
|
|
212
216
|
## Безопасное хранение логинов и паролей
|
|
213
217
|
|
|
@@ -227,7 +227,7 @@ stop_session(session_id="smoke")
|
|
|
227
227
|
- Работайте через first-class MCP tools Answer42, а не через X11/WinAPI-клики.
|
|
228
228
|
- Не запускайте обычный клиент 1С вместо `/TESTMANAGER`, если пользователь явно не просил диагностику вне Answer42.
|
|
229
229
|
- Для ссылочных полей предпочитайте стандартные формы выбора 1С.
|
|
230
|
-
- Веб-страницы в HTML-полях (чаты, встроенные веб-приложения) читайте и меняйте инструментами группы `html` (`html_pages`, `html_text`, `html_query`, `html_click`, `html_type`, `html_wait`, `
|
|
230
|
+
- Веб-страницы в HTML-полях (чаты, встроенные веб-приложения) читайте и меняйте инструментами группы `html` (`html_pages`, `html_text`, `html_query`, `html_click`, `html_type`, `html_wait`, `html_console`); статический HTML поля — `html_field_content`. Произвольный JavaScript (`html_eval`) доступен, только если пользователь запустил сервер с `--dev-tools`.
|
|
231
231
|
- После действий проверяйте user messages, error info и фактическое состояние формы.
|
|
232
232
|
- Не заявляйте выполнение UI-задачи без реального состояния, скриншота или PDF evidence.
|
|
233
233
|
- Завершайте сессии через `stop_session`.
|
|
@@ -91,7 +91,7 @@ class SessionState:
|
|
|
91
91
|
|
|
92
92
|
`dynamic_list_sort_by_column` — отдельный быстрый tool для сортировки уже открытого динамического списка по видимой колонке через API списка. Он не является fallback-веткой `dynamic_list_set_settings`.
|
|
93
93
|
- табличные документы: `tabular_documents` (список или ячейки одного документа по `name`/`title`), `tabular_document_save`;
|
|
94
|
-
- HTML-поля: `html_field_content`, `html_field_click_link`, `html_field_input` (API тест-клиента) и живые страницы `html_pages`, `html_text`, `html_query`, `html_click`, `html_type`, `html_wait`, `
|
|
94
|
+
- HTML-поля: `html_field_content`, `html_field_click_link`, `html_field_input` (API тест-клиента) и живые страницы `html_pages`, `html_text`, `html_query`, `html_click`, `html_type`, `html_wait`, `html_console` (через `mcp_1c.html_agent`); `html_eval` (произвольный JavaScript) и `dev_eval` (произвольный BSL) регистрируются только с `--dev-tools` / `ONEC_MCP_DEV_TOOLS=1` (`DEV_TOOL_NAMES`, `_register_dev_tools`);
|
|
95
95
|
- доказательная запись: `recording_start`, `recording_capture`, `recording_stop`;
|
|
96
96
|
- RAG: `rag_source_add`, `rag_sources_add_from_directory`, `rag_source_roots_list`, `rag_sources_list`, `rag_available_configurations`, `rag_snapshot_create`, `rag_snapshots_list`, `rag_index_build`, `rag_lookup_object`, `rag_query`, `rag_session_autoconfigure`.
|
|
97
97
|
|
|
@@ -136,7 +136,11 @@ flowchart LR
|
|
|
136
136
|
end
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
**Windows.** Встроенный WebKit (старый Windows-порт WebKit1) не имеет сервера удалённой отладки, но в нём включены developer extras. `find_webviews` перечисляет окна `WebViewWindowClass` процесса тест-клиента (на скрытом рабочем столе — через `EnumDesktopWindows`). Для каждого нового WebView Answer42 отправляет Ctrl+Alt+Shift+F12
|
|
139
|
+
**Windows.** Встроенный WebKit (старый Windows-порт WebKit1) не имеет сервера удалённой отладки, но в нём включены developer extras. `find_webviews` перечисляет окна `WebViewWindowClass` процесса тест-клиента (на скрытом рабочем столе — через `EnumDesktopWindows`). Для каждого нового WebView Answer42 отправляет Ctrl+Alt+Shift+F12. Модификаторы попадают в состояние клавиатуры потока окна (`AttachThreadInput` + `SetKeyboardState`), а сами клавиши отправляются `SendMessageTimeout`: вызов возвращается, когда окно обработало сообщение, поэтому паузы не нужны (`SendInput` на скрытый рабочий стол не доходит). 1С встраивает интерфейс инспектора в форму ещё одним WebView; всё, что появилось после горячей клавиши, запоминается как интерфейс инспектора и само не инспектируется. Признак того, что интерфейс загрузился, — заголовок скрытого окна `WebInspectorWindowClass`: WebKit меняет его на «Web Inspector — <адрес>», когда интерфейс сообщает адрес страницы (около 1,4 с после горячей клавиши).
|
|
140
|
+
|
|
141
|
+
Дальше `_type_into_console`: `WM_SETFOCUS` делает интерфейс инспектора активным для WebKit, не трогая фокус внутри его документа; Ctrl+Alt+C открывает вкладку Console, которая сама ставит фокус в строку ввода (инспектор запоминает вкладку). На вкладку Elements ввод попадать не должен: её дерево DOM забирает фокус, когда догружается, и набранные в нём клавиши, особенно Enter, правят DOM страницы. Esc тоже нельзя — его первой обрабатывает 1С и закрывает форму. Загрузчик `loader_js` (около 110 символов) вводится за комментарием `//`: автодополнение консоли асинхронно отвечает на набранный код и может заменить набранное после него, но внутри комментария не срабатывает. Home и два Delete снимают `//`, Enter выполняет строку. Загрузчик открывает WebSocket с одноразовым токеном в адресе, сервер в ответ присылает `PAGE_BRIDGE_JS`, который выполняет присланные выражения через `eval`. Подключение к странице занимает около 2–3 секунд; время по этапам — в `last_connect` статуса моста. Мост живёт в странице: после перезагрузки следующий вызов вводит загрузчик заново.
|
|
142
|
+
|
|
143
|
+
**Windows, мост в инспекторе платформы** (`mcp_1c.webkit_patch`, необязательно). `install` дописывает в `WebKit.resources\WebInspectorUI\Main.html` платформы `Answer42BridgeConfig.js` и `Answer42Bridge.js` (исходный `Main.html` сохраняется рядом). Каталог в Program Files доступен на запись только администратору, поэтому модуль перезапускает себя с повышением прав (`ShellExecuteEx` с `runas`, одно подтверждение UAC на все платформы) и выдаёт текущему пользователю право менять `Answer42BridgeConfig.js` (`icacls`). Перед тем как открыть инспектор, сессия записывает в этот файл свой порт и одноразовый токен (под файловой блокировкой: платформу могут делить несколько сессий) и очищает его сразу после. Мост в интерфейсе инспектора подключается к `HtmlInspector` по пути `/answer42-inspector/<токен>`, отправляет в бэкенд сообщения протокола с id от `BRIDGE_BASE_ID` и возвращает ответы на них, а также копии `Console.messageAdded`; остальное идёт в обычный интерфейс инспектора. Операции над страницей — `Runtime.evaluate` с `returnByValue`; мост переживает перезагрузку страницы, а сообщения консоли видны с её загрузки. Если платформа не пропатчена, патч устарел или инспектор уже открыт, используется ввод в консоль.
|
|
140
144
|
|
|
141
145
|
**Linux.** HTML-поля рисует системный WebKitGTK (`libwebkit2gtk-4.0`). `HtmlInspector.client_env()` добавляет тест-клиенту `WEBKIT_INSPECTOR_SERVER=127.0.0.1:<свободный порт>` (`runtime.start_test_client(extra_env=...)`). `RemoteInspectorClient` подключается к этому серверу как фронтенд: сообщения — размер (uint32 BE), флаг порядка байт, имя и параметры GVariant (`SetupInspectorClient`, `SetTargetList (ta(tsssb))`, `Setup (tt)`, `SendMessageToBackend (tts)`, `SendMessageToFrontend (tts)`). Каждая страница — цель `WebPage`; протокол инспектора мультиплексирован доменом `Target`, поэтому `Runtime.evaluate` уходит в `Target.sendMessageToTarget` текущей page-цели (она меняется при навигации, `Target.didCommitProvisionalTarget`). Домен `Console` включается на каждой page-цели, и WebKit отдаёт сообщения с момента загрузки страницы. Пустые скрытые страницы `about:blank` пропускаются. Некорректное сообщение может уронить клиент 1С, поэтому отправляются только перечисленные формы сообщений.
|
|
142
146
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "answer42"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.7.0"
|
|
4
4
|
description = "Answer42 — The Answer to Life, Universe, and 1C — UI Driver. MCP-powered 1C:Enterprise UI automation: click, fill, navigate, test, and introspect managed forms through the test-client API"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
Binary file
|
|
Binary file
|