Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
1bb2a6f
feat(config): initialize local project config
alkoleft May 11, 2026
368da80
feat(config): remove public basePath setting
alkoleft May 11, 2026
3e4d57e
feat(config): use master schema URLs
alkoleft May 11, 2026
608ad24
docs(spec): update latest config spec
alkoleft May 11, 2026
6469256
feat(tools): add tools download command
alkoleft May 11, 2026
11b87be
feat(tools): split tools download commands
alkoleft May 11, 2026
9212d13
feat(cli): clarify init import and marker paths
alkoleft May 11, 2026
5b486da
fix(init): report step status live
alkoleft May 11, 2026
04f089c
fix(tools): harden download publication
alkoleft May 11, 2026
43674ee
chore(release): bump version to 0.5.0
alkoleft May 11, 2026
b465d01
feat(build): add --dynamic flag and infobase.unlock_code config
May 12, 2026
68acc8f
fix(mcp): rename local transport mode to mcp
SteelMorgan May 13, 2026
cbaf405
fix(mcp): address transport review notes
SteelMorgan May 13, 2026
e4b5845
fix(build): address dynamic update review notes
SteelMorgan May 13, 2026
20db539
docs(config): clarify unlock code empty value
SteelMorgan May 13, 2026
19ac7a5
fix(partial-load): include metadata XML descriptor and full object tree
SteelMorgan May 13, 2026
5ae566c
Merge feat/mcp-ws-mode: WS transport + session-manager pairing
SteelMorgan May 13, 2026
3258cb7
Merge feat/dynamic-and-unlock-code: --dynamic flag + infobase.unlock_…
SteelMorgan May 13, 2026
c813e57
Merge agent/partial-load-designer-xml: Hierarchical Designer XML desc…
SteelMorgan May 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 98 additions & 16 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "v8-runner"
version = "0.4.2"
version = "0.5.0"
edition = "2021"

[[bin]]
Expand Down Expand Up @@ -28,17 +28,18 @@ chrono = { version = "0.4", features = ["serde"] }
libc = "0.2"
regex = "1"
uuid = { version = "1", features = ["v4"] }
zip = { version = "2", default-features = false, features = ["deflate"] }
rmcp = { version = "1.2.0", default-features = false, features = ["client", "macros", "server", "transport-child-process", "transport-io", "transport-streamable-http-server"] }
tokio = { version = "1", features = ["io-std", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "sync", "time"] }
tokio-util = "0.7"
reqwest = { version = "0.12", default-features = false, features = ["blocking", "rustls-tls"] }

[dev-dependencies]
assert_cmd = "2"
jsonschema = "0.33"
predicates = "3"
insta = "1"
quote = "1"
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"] }
syn = { version = "2", features = ["full"] }

[profile.release]
Expand Down
24 changes: 19 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,26 @@ cargo build --release
v8-runner config init
```

Команда анализирует структуру проекта, находит поддержанные `source-set` (наборы исходников) и
создает `v8project.yaml`.
Команда анализирует структуру проекта, находит поддержанные `source-set` (наборы исходников),
создает `v8project.yaml`, пустой `v8project.local.yaml` со schema modeline и добавляет local
overlay в `.gitignore`, если он еще не указан.

Machine-local пути, credentials и настройки инструментов можно вынести в `v8project.local.yaml`
рядом с основным конфигом. Этот файл применяется автоматически и должен оставаться вне Git.

### Загрузите тестовые и MCP-инструменты:

```bash
v8-runner tools download yaxunit --sources
v8-runner tools download vanessa
v8-runner tools download client-mcp --sources
```

Команды берут latest releases выбранного инструмента. Для YAxUnit и onec-client-mcp-devkit
`--sources` выбирает source install; без него скачивается `.cfe` artifact в `build/tools`.
Vanessa Automation single всегда скачивается как EPF в `build/tools` и прописывается в
`v8project.local.yaml`.

### Подготовьте рабочую информационную базу:

```bash
Expand Down Expand Up @@ -93,10 +107,10 @@ v8-runner launch mcp va
### Подключение к session-manager (WS-режим)

`launch mcp`, `launch mcp va`, `test yaxunit ...` и `test va ...` поддерживают подключение
1С-клиента к [`v8-client-session-manager`](../v8-client-session-manager/) вместо запуска
1С-клиента к [`v8-client-session-manager`](https://github.com/SteelMorgan/v8-client-session-manager) вместо запуска
локального HTTP MCP. По умолчанию — `auto`: TCP-probe адреса менеджера, при успехе
собирается `/C"mcpMode=ws;manager_url=...;client_uid=...;kind=...;..."`, иначе используется
legacy `/C"runMcp;..."`. Полный список ключей `/C` и CLI-флагов см. в
MCP `/C"runMcp;..."`. Полный список ключей `/C` и CLI-флагов см. в
[docs/CONFIGURATION.md](docs/CONFIGURATION.md#tools-client_mcp).

### Поднимите MCP transport (MCP-транспорт) для AI-агентов:
Expand All @@ -115,7 +129,7 @@ v8-runner mcp serve stdio

| Зона | Команды | Что делает |
| --- | --- | --- |
| Project setup (настройка проекта) | `config init`, `init`, `extensions`, `build` | Создает config, готовит ИБ, обновляет расширения и загружает исходники |
| Project setup (настройка проекта) | `config init`, `tools download`, `init`, `extensions`, `build` | Создает config, скачивает инструменты, готовит ИБ, обновляет расширения и загружает исходники |
| Verification (проверка) | `syntax`, `test` | Запускает syntax checks, YAxUnit и Vanessa Automation |
| File materialization (материализация файлов) | `dump`, `convert`, `load`, `make`, `artifacts` | Выгружает, конвертирует, загружает и публикует `.cf`, `.cfe`, `.epf`, `.erf` |
| Direct launch (прямой запуск) | `launch <designer|thin|thick|ordinary>`, `launch mcp [va]` | Запускает 1C clients (клиенты 1С), Designer и MCP/Vanessa сценарии |
Expand Down
46 changes: 41 additions & 5 deletions docs/CAPABILITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ CLI help, доверяйте текущему коду и затем синхр

| Сценарий | Поддерживаемые комбинации | Примечания |
| --- | --- | --- |
| `config init` | Работает без существующего конфига | Создаёт `v8project.yaml`, autodetect-ит supported `source-set` и aggregate external roots |
| `config init` | Работает без существующего конфига | Создаёт `v8project.yaml`, sibling `v8project.local.yaml`, `.gitignore` entry, autodetect-ит supported `source-set` и aggregate external roots |
| `tools download <tool>` | CLI-only загрузка latest releases | Загружает выбранный YAxUnit, Vanessa Automation single или onec-client-mcp-devkit; обновляет local overlay для Vanessa/client MCP и при `yaxunit --sources` добавляет YAxUnit как `source-set` `tests` |
| `init` | `format=DESIGNER` + `builder=DESIGNER` | Создаёт файловую ИБ через Designer; server connection остаётся manual prerequisite |
| `init` | `format=DESIGNER` + `builder=IBCMD` | Выполняет `ensure` файловой или серверной ИБ через `ibcmd infobase create` |
| `init` | `format=EDT` + `builder=DESIGNER|IBCMD` | Готовит ИБ по правилам builder и импортирует EDT workspace |
Expand Down Expand Up @@ -74,6 +75,8 @@ v8-runner config init [--force] [--output <FILE>] [--connection <CONNECTION>] [-

- Не требует существующего `v8project.yaml`.
- Пишет результат в текущий каталог или в `--output`.
- Рядом с primary config создает/обновляет пустой `v8project.local.yaml` со schema modeline и
добавляет `v8project.local.yaml` в `.gitignore`, если подходящий pattern еще не указан.
- Не использует глобальный `--config` как shortcut output path.
- Ищет supported `DESIGNER` / `EDT` `source-set` по marker files и их содержимому.
- Для external roots создаёт aggregate `source-set` только при однородной классификации каталога.
Expand All @@ -96,6 +99,33 @@ v8-runner init
- Если настроен `tools.client_mcp.extension.source.format=EDT`, импортирует этот tool extension
project в EDT workspace, не добавляя его в project `source-set`.

### `tools download`

```bash
v8-runner tools download yaxunit [--sources] [--force]
v8-runner tools download vanessa [--force]
v8-runner tools download client-mcp [--sources] [--force]
```

- CLI-only; не публикуется как MCP tool.
- Берёт latest release из GitHub для выбранного инструмента: `bia-technologies/yaxunit`,
`Pr-Mex/vanessa-automation-single` или `1c-neurofish/onec-client-mcp-devkit`.
- `yaxunit --sources` распаковывает source subtree в `tests` и добавляет в primary
`v8project.yaml` `source-set` с именем `tests`; без `--sources` скачивает `.cfe` в
`build/tools`.
- `client-mcp --sources` распаковывает source subtree в
`build/tools/onec-client-mcp-devkit/exts/client-mcp`; без `--sources` требует
`builder=DESIGNER` и скачивает `.cfe` в `build/tools`.
- `vanessa` всегда скачивает `build/tools/vanessa-automation-single.epf`.
- `v8project.local.yaml` обновляется только для команд, которым нужны machine-local пути:
`vanessa` заполняет `tools.va.epf_path`, `client-mcp` заполняет
`tools.client_mcp.extension`; повторный запуск переиспользует уже скачанные файлы, а
`--force` перезаписывает только managed targets, созданные `tools download`.
- Managed target определяется sidecar marker-файлом `tools download`; если публикация файла или
каталога не завершилась, новый marker очищается и target не считается управляемым.
- Каждый HTTP response body ограничен 512 MiB; превышение лимита возвращает ошибку до публикации
target.

### `extensions`

```bash
Expand All @@ -109,10 +139,14 @@ v8-runner extensions [--name <SOURCE_SET>...]
### `build`

```bash
v8-runner build [--source-set <NAME>] [--full-rebuild]
v8-runner build [--source-set <NAME>] [--full-rebuild] [--dynamic]
```

- Без `--source-set` обрабатывает все configured `source-set` в canonical order.
- `--dynamic` (или `build.dynamicUpdate: true` в `v8project.yaml`) добавляет к
`/UpdateDBCfg` флаг `-Dynamic+`. Платформа применяет изменения без захвата
исключительной блокировки; на изменениях, требующих реструктуризации, DESIGNER возвращает
ошибку — fallback на статический режим не выполняется.
- С `--source-set` project stage анализирует и строит только указанный `source-set`; неизвестное
имя отклоняется как validation error.
- Для `DESIGNER` выбирает incremental, partial или full path по изменённым файлам выбранного scope.
Expand Down Expand Up @@ -141,7 +175,9 @@ v8-runner test va
v8-runner test va --feature login --filter-tag @smoke
```

- Всегда сначала запускает `build`.
- Всегда сначала запускает `build` со статическим `/UpdateDBCfg`, даже если
`build.dynamicUpdate: true`. Для динамической подготовки перед тестами выполните отдельный
`v8-runner build --dynamic`.
- `test yaxunit module <NAME>` требует непустое имя модуля.
- `test va` использует профиль из `tests.va.profile`; `--feature`, `--filter-tag`,
`--ignore-tag` и `--scenario-filter` переопределяют соответствующие списки выбранного профиля
Expand Down Expand Up @@ -199,7 +235,7 @@ v8-runner convert [--source-set <NAME>] [--output <DIR>]
- Работает от текущего `v8project.yaml`, а не по arbitrary source/target paths.
- Направление определяется только из `format`.
- Без `--output` публикует результат под `workPath/convert/out/<sourceSetName>/<designer|edt>/`.
- `--output` задаёт только target root и зеркалит `source-set.path` относительно `basePath`.
- `--output` задаёт только target root и зеркалит `source-set.path` относительно каталога primary config.
- Публикация остаётся staged full replacement с overlap guardrails.

### `load`
Expand Down Expand Up @@ -278,7 +314,7 @@ v8-runner mcp serve http

| Инструмент | Основные поля запроса | Примечания |
| --- | --- | --- |
| `build_project` | `fullRebuild`, `sourceSet` | `fullRebuild=false`; `sourceSet` omitted значит все source-set |
| `build_project` | `fullRebuild`, `sourceSet`, `dynamicUpdate` | `fullRebuild=false`; `sourceSet` omitted значит все source-set; `dynamicUpdate` (опц.) переопределяет `build.dynamicUpdate` для одного вызова |
| `run_all_tests` | `full` | Компактный вывод по умолчанию |
| `run_module_tests` | `moduleName`, `full` | Отклоняет пустой `moduleName` |
| `dump_config` | `mode`, `extension`, `objects` | Пустой `mode` нормализуется в `INCREMENTAL` |
Expand Down
Loading