mlspace-plugin 0.2.1__tar.gz → 0.3.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.
- mlspace_plugin-0.3.0/.agents/plugins/marketplace.json +20 -0
- mlspace_plugin-0.3.0/.claude-plugin/marketplace.json +12 -0
- mlspace_plugin-0.3.0/.gitignore +16 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/INSTALL.md +51 -21
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/INSTALL_AGENT.md +14 -8
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/PKG-INFO +20 -49
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/README.md +18 -47
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/RELEASE.md +15 -9
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/.claude-plugin/plugin.json +1 -1
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/.codex-plugin/plugin.json +1 -1
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/.mcp.json +1 -1
- mlspace_plugin-0.3.0/plugin/README.md +67 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/mcp.json +2 -5
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/plugin.json +1 -1
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/pyproject.toml +2 -1
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/build_plugin.py +9 -43
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/gen_plugin.py +26 -17
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/serve_stdio.sh +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/serve_stdio_dryrun.sh +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/__init__.py +1 -1
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/client_setup.py +76 -65
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/config.py +23 -5
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/init_cli.py +61 -11
- mlspace_plugin-0.3.0/src/mlspace_mcp/native_plugins.py +116 -0
- mlspace_plugin-0.3.0/src/mlspace_mcp/setup_verification.py +95 -0
- mlspace_plugin-0.3.0/tests/test_client_setup.py +300 -0
- mlspace_plugin-0.3.0/tests/test_credential_pointer.py +56 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_env_file.py +1 -0
- mlspace_plugin-0.3.0/tests/test_native_cli_integration.py +117 -0
- mlspace_plugin-0.3.0/tests/test_native_plugins.py +96 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_onboarding_init.py +88 -4
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_plugin_bundle.py +15 -32
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_plugin_release.py +7 -26
- mlspace_plugin-0.3.0/tests/test_setup_native_journey.py +136 -0
- mlspace_plugin-0.3.0/tests/test_setup_verification.py +54 -0
- mlspace_plugin-0.2.1/.gitignore +0 -53
- mlspace_plugin-0.2.1/plugin/README.md +0 -119
- mlspace_plugin-0.2.1/tests/test_client_setup.py +0 -233
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/.env.example +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/AGENTS.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/CONTRIBUTING.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/LICENSE +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-call-deployed-model-predict/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-deploy-inference-service/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-data-transfer/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-failed-training-job/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-job-launch-rejection/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-unhealthy-inference/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-discover-launchable-resources/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-launch-training-job/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-list-running-jobs/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-resume-notebook-and-set-autoshutdown/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-stage-s3-to-nfs/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-transfer-compute-node/SKILL.md +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/demo_multi_workspace.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/gen_body_schemas.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/mcp_call.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/__main__.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/_status.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/auth.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/bodyspec.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/client.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/errors.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/formatting.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/job_hooks.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/jsonc.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/overview.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/registry.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/resource_refs.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/server.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/setup_ui.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/spec/body_schemas.json +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/spec/openapi.json +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tls.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/__init__.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/allocations.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/async_inference.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/build_image.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/dalle.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/data_transfer.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/docker_registry.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/inference.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/jobs.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/notebooks.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/queues.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/resources.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/tensorboards.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/workspaces.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/workspace_context.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/conftest.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/specutil.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_allocations.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_artifact_sync.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_async_inference.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_auth.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_autofill.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_bodyspec.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_build_image.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_client.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_configs_shrink.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_dalle.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_data_transfer.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_docker_registry.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_drift.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_dry_run.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_dry_run_fidelity.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_errors.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_false_success.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_formatting.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_init_cli.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_integration.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_job_status.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_jobs.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_log_normalisation.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_mcp_error_contract.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_notebooks.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_onboarding_tls.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_overview.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_plugin_cli.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_preflight.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_queue_scope.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_queues.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_registry.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_resource_refs.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_resources.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_route_confusion.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_setup_ui.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_skills.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_tensorboards.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_workspace_context.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_workspaces.py +0 -0
- {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_wrapper_hardening.py +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mlspace",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "MLSpace"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "mlspace",
|
|
9
|
+
"source": {
|
|
10
|
+
"source": "local",
|
|
11
|
+
"path": "./plugin"
|
|
12
|
+
},
|
|
13
|
+
"policy": {
|
|
14
|
+
"installation": "AVAILABLE",
|
|
15
|
+
"authentication": "ON_INSTALL"
|
|
16
|
+
},
|
|
17
|
+
"category": "Productivity"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Установка MLSpace MCP: macOS и Linux
|
|
2
2
|
|
|
3
|
-
Нужны Python 3.10+, `uv
|
|
3
|
+
Нужны Python 3.10+, `uv` (команда `uvx`), Git для нативных плагинов,
|
|
4
|
+
актуальный Claude Code, Codex или OpenCode,
|
|
4
5
|
Cloud.ru Key ID и Key Secret. Windows пока не поддерживаем.
|
|
5
6
|
|
|
6
7
|
Первая установка из PyPI выполняется одной командой:
|
|
@@ -20,8 +21,11 @@ mlspace-plugin setup
|
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
Если пакет уже установлен: `uv tool install --force .`.
|
|
23
|
-
При установке из wheel: `uv tool install /путь/к/mlspace_plugin-0.
|
|
24
|
+
При установке из wheel: `uv tool install /путь/к/mlspace_plugin-0.3.0-py3-none-any.whl`.
|
|
24
25
|
Не используйте editable-установку из `/tmp` для постоянной работы.
|
|
26
|
+
Далее команды показаны для PyPI. После установки исходников или wheel через
|
|
27
|
+
`uv tool install` заменяйте `uvx mlspace-plugin@latest` на `mlspace-plugin`,
|
|
28
|
+
чтобы использовать именно установленную сборку.
|
|
25
29
|
|
|
26
30
|
Мастер:
|
|
27
31
|
|
|
@@ -31,7 +35,15 @@ mlspace-plugin setup
|
|
|
31
35
|
звёздочки показывают ввод. Ключи создаются в консоли Cloud.ru в профиле, «Ключи доступа».
|
|
32
36
|
3. Загрузит воркспейсы. Печатайте имя, проект или ID для поиска. Стрелки перемещают
|
|
33
37
|
курсор, пробел отмечает, Enter завершает выбор. Ctrl-U очищает поиск; выбор сохраняется.
|
|
34
|
-
4. Проверит выбранные
|
|
38
|
+
4. Проверит выбранные воркспейсы и сохранит настройки.
|
|
39
|
+
5. Для Claude Code и Codex добавит marketplace этого GitHub-репозитория и установит
|
|
40
|
+
`mlspace@mlspace`. Для OpenCode запишет MCP-подключение и скиллы в
|
|
41
|
+
`~/.config/opencode/skills` (учитывается `XDG_CONFIG_HOME`).
|
|
42
|
+
6. Сверит скиллы, запустит MCP и проверит инструменты и выбранные воркспейсы.
|
|
43
|
+
|
|
44
|
+
Если настройка клиента не завершилась, проверенные ключи остаются сохранёнными.
|
|
45
|
+
Мастер перечислит установленные клиенты; устраните причину и выполните напечатанную
|
|
46
|
+
команду `Retry`. Она сохраняет выбор клиентов, включая незавершённые подключения.
|
|
35
47
|
|
|
36
48
|
Откройте новую сессию выбранного клиента; если MCP не появился, перезапустите клиент.
|
|
37
49
|
Сервер запускается клиентом автоматически. Первый запрос:
|
|
@@ -41,7 +53,7 @@ mlspace-plugin setup
|
|
|
41
53
|
## Stage и корпоративные сертификаты
|
|
42
54
|
|
|
43
55
|
```bash
|
|
44
|
-
mlspace-plugin setup --base-url https://mlspace-stage.example.com
|
|
56
|
+
uvx mlspace-plugin@latest setup --base-url https://mlspace-stage.example.com
|
|
45
57
|
```
|
|
46
58
|
|
|
47
59
|
Настройка и работа сервера используют системные доверенные сертификаты: Keychain
|
|
@@ -49,7 +61,7 @@ mlspace-plugin setup --base-url https://mlspace-stage.example.com
|
|
|
49
61
|
попросит путь к PEM, полученному у администратора. Можно указать заранее:
|
|
50
62
|
|
|
51
63
|
```bash
|
|
52
|
-
mlspace-plugin setup --ca-file /путь/к/corporate-ca.pem
|
|
64
|
+
uvx mlspace-plugin@latest setup --ca-file /путь/к/corporate-ca.pem
|
|
53
65
|
```
|
|
54
66
|
|
|
55
67
|
Мастер сохранит копию CA рядом с настройками. Переменные текущего терминала и
|
|
@@ -63,10 +75,10 @@ mlspace-plugin setup --ca-file /путь/к/corporate-ca.pem
|
|
|
63
75
|
## Повторная настройка
|
|
64
76
|
|
|
65
77
|
```bash
|
|
66
|
-
mlspace-plugin setup --force
|
|
67
|
-
mlspace-plugin setup --force --replace-credentials
|
|
68
|
-
mlspace-plugin setup --client opencode
|
|
69
|
-
mlspace-plugin setup --client-path opencode=/полный/путь/opencode
|
|
78
|
+
uvx mlspace-plugin@latest setup --force
|
|
79
|
+
uvx mlspace-plugin@latest setup --force --replace-credentials
|
|
80
|
+
uvx mlspace-plugin@latest setup --force --client opencode
|
|
81
|
+
uvx mlspace-plugin@latest setup --force --client-path opencode=/полный/путь/opencode
|
|
70
82
|
```
|
|
71
83
|
|
|
72
84
|
`--force` повторяет настройку с сохранёнными ключами на прежнем endpoint.
|
|
@@ -74,13 +86,18 @@ mlspace-plugin setup --client-path opencode=/полный/путь/opencode
|
|
|
74
86
|
заново, если источник явно не выбран. `--client` можно повторять.
|
|
75
87
|
Существующие посторонние MCP, комментарии JSONC и изменённые пользователем скиллы
|
|
76
88
|
не перезаписываются молча; конфликт показывает путь для разбора.
|
|
77
|
-
|
|
78
|
-
|
|
89
|
+
Уже установленный `mlspace@mlspace` из этого репозитория переиспользуется.
|
|
90
|
+
Если имя marketplace занято другим источником или есть отдельная прямая регистрация
|
|
91
|
+
MLSpace в Claude/Codex, мастер остановится до ввода ключей. Разберите указанное
|
|
92
|
+
подключение; мастер не удаляет его автоматически.
|
|
79
93
|
|
|
80
94
|
## Где ключи
|
|
81
95
|
|
|
82
96
|
`~/.config/mlspace-plugin/.env` (или каталог из `XDG_CONFIG_HOME`): права файла `0600`,
|
|
83
97
|
каталога MLSpace `0700`. В конфиге клиента — только путь и команда запуска.
|
|
98
|
+
Несекретный указатель `~/.config/mlspace-plugin/credentials-path.json` хранит путь
|
|
99
|
+
к выбранному файлу. Поэтому `--path` и нестандартный `XDG_CONFIG_HOME` не требуют
|
|
100
|
+
wrapper или экспорта переменных перед каждым запуском клиента.
|
|
84
101
|
Это не шифрование: процессы того же пользователя и администратор могут прочитать
|
|
85
102
|
файл. Не отправляйте его в чат и не добавляйте в Git. x-api-key получается автоматически
|
|
86
103
|
и не сохраняется. Доступ к каждому выбранному workspace проверяется, но это не
|
|
@@ -88,7 +105,7 @@ mlspace-plugin setup --client-path opencode=/полный/путь/opencode
|
|
|
88
105
|
|
|
89
106
|
## Linux по SSH / установка агентом
|
|
90
107
|
|
|
91
|
-
Запустите `mlspace-plugin setup` в своей SSH-сессии. Браузер и графическая среда не нужны.
|
|
108
|
+
Запустите `uvx mlspace-plugin@latest setup` в своей SSH-сессии. Браузер и графическая среда не нужны.
|
|
92
109
|
Если установкой занимается агент, он готовит пакет, а ключи вы вводите сами в своём
|
|
93
110
|
терминале. После завершения сообщите агенту «готово», без ключей и содержимого `.env`.
|
|
94
111
|
|
|
@@ -99,12 +116,25 @@ mlspace-plugin setup --client-path opencode=/полный/путь/opencode
|
|
|
99
116
|
|
|
100
117
|
## Обновление пакета и скиллов
|
|
101
118
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
119
|
+
```bash
|
|
120
|
+
uvx mlspace-plugin@latest setup --force
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Мастер переиспользует ключи, предложит выбор workspace и обновит все сохранившиеся
|
|
124
|
+
подключения, созданные им ранее. `--client` добавляет новые подключения.
|
|
125
|
+
Удалённые подключения не восстанавливаются автоматически.
|
|
126
|
+
|
|
127
|
+
Claude Code и Codex обновляют нативный плагин через свой менеджер; MCP и скиллы
|
|
128
|
+
приходят из одного релиза. OpenCode обновляет команду MCP и свои скиллы.
|
|
129
|
+
Изменённые вручную конфиги и скиллы OpenCode вызывают конфликт, а не перезапись.
|
|
130
|
+
Кеш нативного плагина принадлежит менеджеру клиента: свои правки храните отдельно.
|
|
131
|
+
|
|
132
|
+
Для постоянной установки сначала `uv tool upgrade mlspace-plugin`, затем
|
|
133
|
+
`mlspace-plugin setup --force`. Сборка из исходников должна соответствовать
|
|
134
|
+
версии публичного marketplace; для разработки используйте `--config-only`
|
|
135
|
+
или изолированную тестовую установку.
|
|
136
|
+
|
|
137
|
+
Собственного фонового обновления нет. Настройки автообновления Claude/Codex
|
|
138
|
+
мастер не меняет. Установка и проверка конкретной версии требуют доступа к GitHub
|
|
139
|
+
и PyPI. Если публикация релиза ещё не завершена, setup сообщает об ошибке;
|
|
140
|
+
повторите его после завершения публикации.
|
|
@@ -9,26 +9,32 @@
|
|
|
9
9
|
При установке из исходников установите пакет в постоянное окружение: `uv tool install .` из checkout или `uv tool install /path/package.whl`.
|
|
10
10
|
Для уже установленного пакета добавьте `--force` только в рамках запрошенного обновления.
|
|
11
11
|
Не оставляйте постоянный запуск на editable-исходниках в `/tmp`.
|
|
12
|
+
Далее команды показаны для PyPI. Если установили исходники/wheel через `uv tool install`,
|
|
13
|
+
заменяйте префикс `uvx mlspace-plugin@latest` на `mlspace-plugin`, чтобы использовать именно эту сборку.
|
|
12
14
|
2. Не просите Key ID/Secret в чате, не читайте `.env`, не печатайте окружение и
|
|
13
15
|
не вставляйте ключи в аргументы shell/CLI. Не запускайте интерактивный ввод
|
|
14
16
|
ключей в терминале, который видите только вы.
|
|
15
|
-
3. Дайте человеку одну команду `mlspace-plugin setup` для его собственного терминала
|
|
17
|
+
3. Дайте человеку одну команду `uvx mlspace-plugin@latest setup` для его собственного терминала
|
|
16
18
|
(по SSH — на целевой машине). Для stage добавьте согласованный `--base-url`.
|
|
17
19
|
Объясните: два ключа под звёздочками → поиск и выбор workspace → подключение.
|
|
18
20
|
Дождитесь сообщения о завершении. Человек не должен присылать секреты или файл.
|
|
19
|
-
4. Мастер сам обнаруживает клиентов, проверяет TLS и API
|
|
20
|
-
|
|
21
|
+
4. Мастер сам обнаруживает клиентов, проверяет TLS и API. В Claude Code/Codex
|
|
22
|
+
он добавляет GitHub marketplace и устанавливает нативный плагин; в OpenCode
|
|
23
|
+
записывает MCP и скиллы в собственный каталог клиента. Если клиентов несколько, человек выбирает нужные. Для известного
|
|
21
24
|
клиента можно заранее дать `--client claude-code`, `--client codex` или `--client opencode`.
|
|
22
25
|
Сбой TLS исправляется системным CA или PEM от администратора через `--ca-file`.
|
|
23
26
|
Никогда не отключайте TLS и не подставляйте сертификат с недоверенного сервера.
|
|
24
|
-
5.
|
|
25
|
-
|
|
27
|
+
5. Успешный setup уже проверяет установленные скиллы, MCP initialize, список
|
|
28
|
+
инструментов и выбранные workspace. Это проверка процесса MCP, а не открытой
|
|
29
|
+
сессии агента. `--list-tools` само по себе не подтверждает подключение.
|
|
26
30
|
Попросите открыть новую сессию клиента (при необходимости перезапустить).
|
|
27
31
|
После появления MCP выполните read-only запрос списка выбранных workspace.
|
|
28
32
|
До этого не заявляйте, что клиент уже загрузил MCP и скиллы.
|
|
29
33
|
6. Если возник конфликт с существующим плагином или изменённым скиллом,
|
|
30
34
|
разберите названный несекретный путь. Не удаляйте чужую интеграцию автоматически.
|
|
31
|
-
При частичном успехе сообщите, какие этапы завершены,
|
|
35
|
+
При частичном успехе сообщите, какие этапы завершены, и используйте команду `Retry`
|
|
36
|
+
из ошибки: она сохраняет выбор незавершённых подключений. Для автоматизации
|
|
37
|
+
добавьте прежние `--non-interactive` и `--workspace`.
|
|
32
38
|
|
|
33
39
|
## Автоматизация с уже подготовленными credentials
|
|
34
40
|
|
|
@@ -36,7 +42,7 @@
|
|
|
36
42
|
файл, передавайте **путь**, не читайте содержимое. Для поиска нужных workspace:
|
|
37
43
|
|
|
38
44
|
```bash
|
|
39
|
-
mlspace-plugin setup --non-interactive --credentials-file /path/credentials.env \
|
|
45
|
+
uvx mlspace-plugin@latest setup --non-interactive --credentials-file /path/credentials.env \
|
|
40
46
|
--base-url https://api.ai.cloud.ru --list-workspaces --search project --limit 20
|
|
41
47
|
```
|
|
42
48
|
|
|
@@ -45,7 +51,7 @@ mlspace-plugin setup --non-interactive --credentials-file /path/credentials.env
|
|
|
45
51
|
Установка с точными ID, без интерактивных вопросов:
|
|
46
52
|
|
|
47
53
|
```bash
|
|
48
|
-
mlspace-plugin setup --non-interactive --credentials-file /path/credentials.env \
|
|
54
|
+
uvx mlspace-plugin@latest setup --non-interactive --credentials-file /path/credentials.env \
|
|
49
55
|
--client opencode --workspace WORKSPACE_UUID
|
|
50
56
|
```
|
|
51
57
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: mlspace-plugin
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Cloud.ru MLSpace plugin: MCP server, agent skills and setup
|
|
5
5
|
Project-URL: Repository, https://github.com/noesskeetit/mlspace-plugin
|
|
6
6
|
Project-URL: Issues, https://github.com/noesskeetit/mlspace-plugin/issues
|
|
@@ -107,25 +107,27 @@ mlspace-plugin setup
|
|
|
107
107
|
Мастер обнаруживает Claude Code, Codex и OpenCode, просит только Key ID и Key Secret
|
|
108
108
|
с маской `*****`, предлагает поиск воркспейсов по имени/проекту/ID и множественный
|
|
109
109
|
выбор. Проверяет API, сохраняет credentials в пользовательский `.env` с правами
|
|
110
|
-
`0600
|
|
111
|
-
|
|
110
|
+
`0600`. Для Claude Code и Codex мастер добавляет marketplace этого репозитория
|
|
111
|
+
и устанавливает нативный плагин с MCP и скиллами. OpenCode получает MCP и скиллы
|
|
112
|
+
в собственном каталоге. Мастер проверяет запуск MCP; затем откройте новую сессию
|
|
113
|
+
клиента — сервер запускается автоматически.
|
|
112
114
|
|
|
113
115
|
TLS использует системные доверенные CA. Для корпоративного PEM есть `--ca-file`:
|
|
114
116
|
мастер сохраняет копию для последующих запусков. Ошибка TLS/сети останавливает
|
|
115
117
|
настройку без перезаписи прежнего файла и без запроса ручного x-api-key.
|
|
116
118
|
|
|
117
|
-
Повторная настройка — `mlspace-plugin setup --force`: сохранённые ключи на прежнем
|
|
119
|
+
Повторная настройка — `uvx mlspace-plugin@latest setup --force`: сохранённые ключи на прежнем
|
|
118
120
|
endpoint переиспользуются. Для замены ключей добавьте `--replace-credentials`.
|
|
119
121
|
Для stage укажите `--base-url https://mlspace-stage.example.com`.
|
|
120
122
|
Только credentials без подключения клиентов — `--config-only`.
|
|
121
|
-
|
|
123
|
+
Уже установленный нативный плагин из этого репозитория переиспользуется.
|
|
122
124
|
|
|
123
125
|
Подробнее: [установка, SSH, сертификаты и повторная настройка](https://github.com/noesskeetit/mlspace-plugin/blob/main/INSTALL.md).
|
|
124
126
|
Для разработки: `uv sync --extra dev` и `uv run pytest`.
|
|
125
127
|
|
|
126
128
|
**Порядок поиска кредов** — от общего к частному, побеждает более конкретное:
|
|
127
129
|
|
|
128
|
-
1. `~/.config/mlspace-plugin/.env`
|
|
130
|
+
1. Файл, сохранённый `setup` (по умолчанию `~/.config/mlspace-plugin/.env`)
|
|
129
131
|
2. файл из `MLSPACE_ENV_FILE` — выбран явно
|
|
130
132
|
3. настоящие переменные окружения — бьют любой файл
|
|
131
133
|
|
|
@@ -133,8 +135,10 @@ endpoint переиспользуются. Для замены ключей до
|
|
|
133
135
|
укажите его явно через `MLSPACE_ENV_FILE`, чтобы чужой репозиторий не мог
|
|
134
136
|
подменить адрес API при использовании сохранённых ключей.
|
|
135
137
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
+
`~/.config/mlspace-plugin/credentials-path.json` хранит только путь к выбранному
|
|
139
|
+
файлу: настройка через `--path` или `XDG_CONFIG_HOME` работает и после перезапуска
|
|
140
|
+
клиента с другим окружением. Повреждённый указатель или отсутствующий целевой файл
|
|
141
|
+
дают ошибку; другой аккаунт молча не подставляется.
|
|
138
142
|
|
|
139
143
|
| Переменная | Обяз. | По умолчанию | Назначение |
|
|
140
144
|
|---|:---:|---|---|
|
|
@@ -274,13 +278,14 @@ write-запросов подаются параметром `body: dict`; об
|
|
|
274
278
|
## Плагин: Codex, Claude Code и совместимые агенты
|
|
275
279
|
|
|
276
280
|
[Поставка MLSpace](plugin/README.md) объединяет MCP-сервер и 12 скиллов.
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
281
|
+
Обычная установка — `uvx mlspace-plugin@latest setup`: marketplace подключается
|
|
282
|
+
автоматически. Нативные клиенты управляют плагином `mlspace@mlspace` сами.
|
|
283
|
+
Манифест фиксирует точную версию runtime из PyPI вместе со скиллами.
|
|
284
|
+
Ключи и CA остаются в пользовательском конфиге вне кеша плагина.
|
|
280
285
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
286
|
+
Повторный `setup --force` обновляет сохранившиеся подключения мастера.
|
|
287
|
+
Собственного фонового обновления нет; политики автообновления клиентов мастер
|
|
288
|
+
не меняет. ZIP релиза содержит те же манифесты и скиллы, без вложенного wheel.
|
|
284
289
|
|
|
285
290
|
Для других агентов предусмотрены Agent Plugins 1.0, Agent Skills и обычное
|
|
286
291
|
MCP-подключение; поддержку конкретного загрузчика нужно проверять отдельно.
|
|
@@ -318,40 +323,6 @@ MCP-подключение; поддержку конкретного загру
|
|
|
318
323
|
|
|
319
324
|
---
|
|
320
325
|
|
|
321
|
-
## Защиты от дефектов API
|
|
322
|
-
|
|
323
|
-
Обёртка гасит несколько особенностей MLSpace API, на которых агент иначе спотыкается.
|
|
324
|
-
API-ловушки ниже проверялись на живом API: основная часть — 03.08.2026,
|
|
325
|
-
региональность `/home/jovyan` — 12.08.2026. Допустимость binary-команд подтверждена
|
|
326
|
-
[официальной CLI-документацией](https://cloud.ru/docs/aicloud/mlspace-cli/topics/references__job-submit)
|
|
327
|
-
и локальной схемой; проверка доступности команды в образе остаётся отдельным шагом.
|
|
328
|
-
|
|
329
|
-
- **Тип entrypoint и регион проверяются до отправки.** Явный `region` обязателен для
|
|
330
|
-
каждого типа задачи. Для `type=binary` поле `script` — непустая команда или путь к
|
|
331
|
-
исполняемому файлу (`ls -lah`, `python /home/jovyan/launch.py -f script.py`); MCP
|
|
332
|
-
передаёт строку без изменений и не заявляет, что команда существует в выбранном
|
|
333
|
-
образе. Для остальных типов сохраняется проверка абсолютного пути под
|
|
334
|
-
`/home/jovyan`. Это NFS конкретного региона: одинаковый путь в notebook `SR006` и
|
|
335
|
-
job `A100-MT` может указывать на разные данные. Public API не умеет сделать `stat`
|
|
336
|
-
на целевом NFS, поэтому наличие файла подтверждается same-region notebook'ом или
|
|
337
|
-
transfer'ом. Локальная проверка формы пути или dry-run не проверяет наличие файла.
|
|
338
|
-
- **Порядок лога восстанавливается.** `logs?tail=N` возвращает строки в обратном
|
|
339
|
-
порядке — трейсбэк переворачивается, и причина оказывается ниже следствия. MCP
|
|
340
|
-
сортирует обратно и помечает это в ответе, чтобы модель знала, что порядку можно
|
|
341
|
-
доверять. Без `tail` порядок правильный и не трогается.
|
|
342
|
-
- **Состояния вместо прозы.** Строки `"No such job"` (логи протухли по retention) и
|
|
343
|
-
`Job … in queue. Try later` (задача в очереди) приходят внутри `HTTP 200`. MCP
|
|
344
|
-
распознаёт их и выдаёт понятную типизированную пометку, чтобы «логи устарели» не
|
|
345
|
-
читалось как «задачи не существует».
|
|
346
|
-
- **Ретрай не уходит в бесконечность.** Часть ручек отдаёт `500` детерминированно
|
|
347
|
-
(например, assignments на 6 из 7 аллокаций). Совет при `5xx` — повторить один раз,
|
|
348
|
-
дальше считать отказ постоянным.
|
|
349
|
-
- **Каталог образов сжимается.** `configs` отдаёт ~200 КБ (≈51k токенов), дублируя
|
|
350
|
-
образы под каждым `instance_type`; MCP дедуплицирует их без потери данных и умеет
|
|
351
|
-
отфильтровать один регион.
|
|
352
|
-
|
|
353
|
-
---
|
|
354
|
-
|
|
355
326
|
## Разработка
|
|
356
327
|
|
|
357
328
|
```bash
|
|
@@ -56,25 +56,27 @@ mlspace-plugin setup
|
|
|
56
56
|
Мастер обнаруживает Claude Code, Codex и OpenCode, просит только Key ID и Key Secret
|
|
57
57
|
с маской `*****`, предлагает поиск воркспейсов по имени/проекту/ID и множественный
|
|
58
58
|
выбор. Проверяет API, сохраняет credentials в пользовательский `.env` с правами
|
|
59
|
-
`0600
|
|
60
|
-
|
|
59
|
+
`0600`. Для Claude Code и Codex мастер добавляет marketplace этого репозитория
|
|
60
|
+
и устанавливает нативный плагин с MCP и скиллами. OpenCode получает MCP и скиллы
|
|
61
|
+
в собственном каталоге. Мастер проверяет запуск MCP; затем откройте новую сессию
|
|
62
|
+
клиента — сервер запускается автоматически.
|
|
61
63
|
|
|
62
64
|
TLS использует системные доверенные CA. Для корпоративного PEM есть `--ca-file`:
|
|
63
65
|
мастер сохраняет копию для последующих запусков. Ошибка TLS/сети останавливает
|
|
64
66
|
настройку без перезаписи прежнего файла и без запроса ручного x-api-key.
|
|
65
67
|
|
|
66
|
-
Повторная настройка — `mlspace-plugin setup --force`: сохранённые ключи на прежнем
|
|
68
|
+
Повторная настройка — `uvx mlspace-plugin@latest setup --force`: сохранённые ключи на прежнем
|
|
67
69
|
endpoint переиспользуются. Для замены ключей добавьте `--replace-credentials`.
|
|
68
70
|
Для stage укажите `--base-url https://mlspace-stage.example.com`.
|
|
69
71
|
Только credentials без подключения клиентов — `--config-only`.
|
|
70
|
-
|
|
72
|
+
Уже установленный нативный плагин из этого репозитория переиспользуется.
|
|
71
73
|
|
|
72
74
|
Подробнее: [установка, SSH, сертификаты и повторная настройка](https://github.com/noesskeetit/mlspace-plugin/blob/main/INSTALL.md).
|
|
73
75
|
Для разработки: `uv sync --extra dev` и `uv run pytest`.
|
|
74
76
|
|
|
75
77
|
**Порядок поиска кредов** — от общего к частному, побеждает более конкретное:
|
|
76
78
|
|
|
77
|
-
1. `~/.config/mlspace-plugin/.env`
|
|
79
|
+
1. Файл, сохранённый `setup` (по умолчанию `~/.config/mlspace-plugin/.env`)
|
|
78
80
|
2. файл из `MLSPACE_ENV_FILE` — выбран явно
|
|
79
81
|
3. настоящие переменные окружения — бьют любой файл
|
|
80
82
|
|
|
@@ -82,8 +84,10 @@ endpoint переиспользуются. Для замены ключей до
|
|
|
82
84
|
укажите его явно через `MLSPACE_ENV_FILE`, чтобы чужой репозиторий не мог
|
|
83
85
|
подменить адрес API при использовании сохранённых ключей.
|
|
84
86
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
`~/.config/mlspace-plugin/credentials-path.json` хранит только путь к выбранному
|
|
88
|
+
файлу: настройка через `--path` или `XDG_CONFIG_HOME` работает и после перезапуска
|
|
89
|
+
клиента с другим окружением. Повреждённый указатель или отсутствующий целевой файл
|
|
90
|
+
дают ошибку; другой аккаунт молча не подставляется.
|
|
87
91
|
|
|
88
92
|
| Переменная | Обяз. | По умолчанию | Назначение |
|
|
89
93
|
|---|:---:|---|---|
|
|
@@ -223,13 +227,14 @@ write-запросов подаются параметром `body: dict`; об
|
|
|
223
227
|
## Плагин: Codex, Claude Code и совместимые агенты
|
|
224
228
|
|
|
225
229
|
[Поставка MLSpace](plugin/README.md) объединяет MCP-сервер и 12 скиллов.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
230
|
+
Обычная установка — `uvx mlspace-plugin@latest setup`: marketplace подключается
|
|
231
|
+
автоматически. Нативные клиенты управляют плагином `mlspace@mlspace` сами.
|
|
232
|
+
Манифест фиксирует точную версию runtime из PyPI вместе со скиллами.
|
|
233
|
+
Ключи и CA остаются в пользовательском конфиге вне кеша плагина.
|
|
229
234
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
Повторный `setup --force` обновляет сохранившиеся подключения мастера.
|
|
236
|
+
Собственного фонового обновления нет; политики автообновления клиентов мастер
|
|
237
|
+
не меняет. ZIP релиза содержит те же манифесты и скиллы, без вложенного wheel.
|
|
233
238
|
|
|
234
239
|
Для других агентов предусмотрены Agent Plugins 1.0, Agent Skills и обычное
|
|
235
240
|
MCP-подключение; поддержку конкретного загрузчика нужно проверять отдельно.
|
|
@@ -267,40 +272,6 @@ MCP-подключение; поддержку конкретного загру
|
|
|
267
272
|
|
|
268
273
|
---
|
|
269
274
|
|
|
270
|
-
## Защиты от дефектов API
|
|
271
|
-
|
|
272
|
-
Обёртка гасит несколько особенностей MLSpace API, на которых агент иначе спотыкается.
|
|
273
|
-
API-ловушки ниже проверялись на живом API: основная часть — 03.08.2026,
|
|
274
|
-
региональность `/home/jovyan` — 12.08.2026. Допустимость binary-команд подтверждена
|
|
275
|
-
[официальной CLI-документацией](https://cloud.ru/docs/aicloud/mlspace-cli/topics/references__job-submit)
|
|
276
|
-
и локальной схемой; проверка доступности команды в образе остаётся отдельным шагом.
|
|
277
|
-
|
|
278
|
-
- **Тип entrypoint и регион проверяются до отправки.** Явный `region` обязателен для
|
|
279
|
-
каждого типа задачи. Для `type=binary` поле `script` — непустая команда или путь к
|
|
280
|
-
исполняемому файлу (`ls -lah`, `python /home/jovyan/launch.py -f script.py`); MCP
|
|
281
|
-
передаёт строку без изменений и не заявляет, что команда существует в выбранном
|
|
282
|
-
образе. Для остальных типов сохраняется проверка абсолютного пути под
|
|
283
|
-
`/home/jovyan`. Это NFS конкретного региона: одинаковый путь в notebook `SR006` и
|
|
284
|
-
job `A100-MT` может указывать на разные данные. Public API не умеет сделать `stat`
|
|
285
|
-
на целевом NFS, поэтому наличие файла подтверждается same-region notebook'ом или
|
|
286
|
-
transfer'ом. Локальная проверка формы пути или dry-run не проверяет наличие файла.
|
|
287
|
-
- **Порядок лога восстанавливается.** `logs?tail=N` возвращает строки в обратном
|
|
288
|
-
порядке — трейсбэк переворачивается, и причина оказывается ниже следствия. MCP
|
|
289
|
-
сортирует обратно и помечает это в ответе, чтобы модель знала, что порядку можно
|
|
290
|
-
доверять. Без `tail` порядок правильный и не трогается.
|
|
291
|
-
- **Состояния вместо прозы.** Строки `"No such job"` (логи протухли по retention) и
|
|
292
|
-
`Job … in queue. Try later` (задача в очереди) приходят внутри `HTTP 200`. MCP
|
|
293
|
-
распознаёт их и выдаёт понятную типизированную пометку, чтобы «логи устарели» не
|
|
294
|
-
читалось как «задачи не существует».
|
|
295
|
-
- **Ретрай не уходит в бесконечность.** Часть ручек отдаёт `500` детерминированно
|
|
296
|
-
(например, assignments на 6 из 7 аллокаций). Совет при `5xx` — повторить один раз,
|
|
297
|
-
дальше считать отказ постоянным.
|
|
298
|
-
- **Каталог образов сжимается.** `configs` отдаёт ~200 КБ (≈51k токенов), дублируя
|
|
299
|
-
образы под каждым `instance_type`; MCP дедуплицирует их без потери данных и умеет
|
|
300
|
-
отфильтровать один регион.
|
|
301
|
-
|
|
302
|
-
---
|
|
303
|
-
|
|
304
275
|
## Разработка
|
|
305
276
|
|
|
306
277
|
```bash
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
`uv lock` и `uv run python scripts/gen_plugin.py`. Обновите примеры имён wheel/ZIP
|
|
8
8
|
в инструкциях, если версия присутствует в имени файла.
|
|
9
9
|
2. Выполните проверки из `CONTRIBUTING.md` на Linux и macOS.
|
|
10
|
-
3. Соберите пакет (в командах ниже замените 0.
|
|
10
|
+
3. Соберите пакет (в командах ниже замените 0.3.0 на выпускаемую версию):
|
|
11
11
|
|
|
12
12
|
```sh
|
|
13
|
-
uv build --out-dir dist/release-0.
|
|
14
|
-
uv run python scripts/build_plugin.py --
|
|
13
|
+
uv build --out-dir dist/release-0.3.0
|
|
14
|
+
uv run python scripts/build_plugin.py --output dist/plugin-release-0.3.0
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
4. Просмотрите содержимое wheel, sdist и ZIP. В них не должно быть credentials,
|
|
@@ -23,18 +23,24 @@ uv run python scripts/build_plugin.py --wheel dist/release-0.2.1/mlspace_plugin-
|
|
|
23
23
|
`UV_PUBLISH_TOKEN` средствами вашего хранилища секретов, не аргументом команды:
|
|
24
24
|
|
|
25
25
|
```sh
|
|
26
|
-
uv publish --trusted-publishing never dist/release-0.
|
|
26
|
+
uv publish --trusted-publishing never dist/release-0.3.0/mlspace_plugin-0.3.0-py3-none-any.whl dist/release-0.3.0/mlspace_plugin-0.3.0.tar.gz
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
6. Проверьте версию и SHA256 обоих файлов через PyPI JSON API; проверьте установку
|
|
30
|
-
`uvx --from mlspace-plugin==0.
|
|
31
|
-
|
|
30
|
+
`uvx --from mlspace-plugin==0.3.0 mlspace-plugin --version` из нового кеша.
|
|
31
|
+
7. Только после проверки точной версии в PyPI обновите рабочую ветку GitHub
|
|
32
|
+
marketplace и создайте тег релиза. До этого проверяйте изменения на отдельной
|
|
33
|
+
release-ветке или локальном Git marketplace: main не должен ссылаться на
|
|
34
|
+
отсутствующий пакет. ZIP и SHA256SUMS приложите к тому же релизу.
|
|
35
|
+
8. В чистом HOME выполните публичный setup, проверьте source/version нативных
|
|
36
|
+
плагинов, MCP handshake и загрузку скиллов клиентами. Используйте тестовые
|
|
37
|
+
credentials и локальный HTTPS-стенд; не выполняйте записи в реальном tenant.
|
|
32
38
|
|
|
33
39
|
Пакет не проверяет обновления в фоне. Для PyPI пользователь повторяет
|
|
34
40
|
`uvx mlspace-plugin@latest setup --force`: обновляются сервер и неизменённые скиллы.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
Claude Code и Codex получают нативный плагин через marketplace этого репозитория;
|
|
42
|
+
OpenCode — MCP и скиллы в собственном каталоге. Политики автообновления клиентов
|
|
43
|
+
не меняются. Не обещайте одинаковое фоновое обновление во всех клиентах.
|
|
38
44
|
|
|
39
45
|
Перед открытием существующего приватного Git-репозитория проверьте также его
|
|
40
46
|
историю. Проверка wheel и sdist не является проверкой старых Git-коммитов.
|