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.
Files changed (132) hide show
  1. mlspace_plugin-0.3.0/.agents/plugins/marketplace.json +20 -0
  2. mlspace_plugin-0.3.0/.claude-plugin/marketplace.json +12 -0
  3. mlspace_plugin-0.3.0/.gitignore +16 -0
  4. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/INSTALL.md +51 -21
  5. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/INSTALL_AGENT.md +14 -8
  6. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/PKG-INFO +20 -49
  7. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/README.md +18 -47
  8. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/RELEASE.md +15 -9
  9. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/.claude-plugin/plugin.json +1 -1
  10. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/.codex-plugin/plugin.json +1 -1
  11. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/.mcp.json +1 -1
  12. mlspace_plugin-0.3.0/plugin/README.md +67 -0
  13. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/mcp.json +2 -5
  14. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/plugin.json +1 -1
  15. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/pyproject.toml +2 -1
  16. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/build_plugin.py +9 -43
  17. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/gen_plugin.py +26 -17
  18. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/serve_stdio.sh +0 -0
  19. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/serve_stdio_dryrun.sh +0 -0
  20. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/__init__.py +1 -1
  21. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/client_setup.py +76 -65
  22. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/config.py +23 -5
  23. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/init_cli.py +61 -11
  24. mlspace_plugin-0.3.0/src/mlspace_mcp/native_plugins.py +116 -0
  25. mlspace_plugin-0.3.0/src/mlspace_mcp/setup_verification.py +95 -0
  26. mlspace_plugin-0.3.0/tests/test_client_setup.py +300 -0
  27. mlspace_plugin-0.3.0/tests/test_credential_pointer.py +56 -0
  28. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_env_file.py +1 -0
  29. mlspace_plugin-0.3.0/tests/test_native_cli_integration.py +117 -0
  30. mlspace_plugin-0.3.0/tests/test_native_plugins.py +96 -0
  31. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_onboarding_init.py +88 -4
  32. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_plugin_bundle.py +15 -32
  33. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_plugin_release.py +7 -26
  34. mlspace_plugin-0.3.0/tests/test_setup_native_journey.py +136 -0
  35. mlspace_plugin-0.3.0/tests/test_setup_verification.py +54 -0
  36. mlspace_plugin-0.2.1/.gitignore +0 -53
  37. mlspace_plugin-0.2.1/plugin/README.md +0 -119
  38. mlspace_plugin-0.2.1/tests/test_client_setup.py +0 -233
  39. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/.env.example +0 -0
  40. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/AGENTS.md +0 -0
  41. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/CONTRIBUTING.md +0 -0
  42. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/LICENSE +0 -0
  43. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-call-deployed-model-predict/SKILL.md +0 -0
  44. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-deploy-inference-service/SKILL.md +0 -0
  45. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-data-transfer/SKILL.md +0 -0
  46. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-failed-training-job/SKILL.md +0 -0
  47. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-job-launch-rejection/SKILL.md +0 -0
  48. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-diagnose-unhealthy-inference/SKILL.md +0 -0
  49. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-discover-launchable-resources/SKILL.md +0 -0
  50. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-launch-training-job/SKILL.md +0 -0
  51. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-list-running-jobs/SKILL.md +0 -0
  52. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-resume-notebook-and-set-autoshutdown/SKILL.md +0 -0
  53. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-stage-s3-to-nfs/SKILL.md +0 -0
  54. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/plugin/skills/mlspace-transfer-compute-node/SKILL.md +0 -0
  55. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/demo_multi_workspace.py +0 -0
  56. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/gen_body_schemas.py +0 -0
  57. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/scripts/mcp_call.py +0 -0
  58. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/__main__.py +0 -0
  59. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/_status.py +0 -0
  60. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/auth.py +0 -0
  61. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/bodyspec.py +0 -0
  62. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/client.py +0 -0
  63. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/errors.py +0 -0
  64. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/formatting.py +0 -0
  65. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/job_hooks.py +0 -0
  66. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/jsonc.py +0 -0
  67. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/overview.py +0 -0
  68. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/registry.py +0 -0
  69. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/resource_refs.py +0 -0
  70. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/server.py +0 -0
  71. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/setup_ui.py +0 -0
  72. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/spec/body_schemas.json +0 -0
  73. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/spec/openapi.json +0 -0
  74. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tls.py +0 -0
  75. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/__init__.py +0 -0
  76. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/allocations.py +0 -0
  77. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/async_inference.py +0 -0
  78. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/build_image.py +0 -0
  79. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/dalle.py +0 -0
  80. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/data_transfer.py +0 -0
  81. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/docker_registry.py +0 -0
  82. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/inference.py +0 -0
  83. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/jobs.py +0 -0
  84. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/notebooks.py +0 -0
  85. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/queues.py +0 -0
  86. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/resources.py +0 -0
  87. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/tensorboards.py +0 -0
  88. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/tools/workspaces.py +0 -0
  89. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/src/mlspace_mcp/workspace_context.py +0 -0
  90. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/conftest.py +0 -0
  91. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/specutil.py +0 -0
  92. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_allocations.py +0 -0
  93. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_artifact_sync.py +0 -0
  94. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_async_inference.py +0 -0
  95. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_auth.py +0 -0
  96. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_autofill.py +0 -0
  97. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_bodyspec.py +0 -0
  98. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_build_image.py +0 -0
  99. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_client.py +0 -0
  100. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_configs_shrink.py +0 -0
  101. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_dalle.py +0 -0
  102. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_data_transfer.py +0 -0
  103. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_docker_registry.py +0 -0
  104. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_drift.py +0 -0
  105. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_dry_run.py +0 -0
  106. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_dry_run_fidelity.py +0 -0
  107. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_errors.py +0 -0
  108. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_false_success.py +0 -0
  109. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_formatting.py +0 -0
  110. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_init_cli.py +0 -0
  111. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_integration.py +0 -0
  112. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_job_status.py +0 -0
  113. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_jobs.py +0 -0
  114. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_log_normalisation.py +0 -0
  115. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_mcp_error_contract.py +0 -0
  116. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_notebooks.py +0 -0
  117. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_onboarding_tls.py +0 -0
  118. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_overview.py +0 -0
  119. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_plugin_cli.py +0 -0
  120. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_preflight.py +0 -0
  121. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_queue_scope.py +0 -0
  122. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_queues.py +0 -0
  123. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_registry.py +0 -0
  124. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_resource_refs.py +0 -0
  125. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_resources.py +0 -0
  126. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_route_confusion.py +0 -0
  127. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_setup_ui.py +0 -0
  128. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_skills.py +0 -0
  129. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_tensorboards.py +0 -0
  130. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_workspace_context.py +0 -0
  131. {mlspace_plugin-0.2.1 → mlspace_plugin-0.3.0}/tests/test_workspaces.py +0 -0
  132. {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
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "mlspace",
3
+ "owner": {
4
+ "name": "Cloud.ru"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "mlspace",
9
+ "source": "./plugin"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,16 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .venv/
5
+ build/
6
+ dist/
7
+ .pytest_cache/
8
+ .mypy_cache/
9
+ .ruff_cache/
10
+ .coverage
11
+ htmlcov/
12
+ .env
13
+ .env.*
14
+ !.env.example
15
+ *.secret
16
+ .DS_Store
@@ -1,6 +1,7 @@
1
1
  # Установка MLSpace MCP: macOS и Linux
2
2
 
3
- Нужны Python 3.10+, `uv`, установленный Claude Code, Codex или OpenCode,
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.2.1-py3-none-any.whl`.
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. Проверит выбранные воркспейсы, сохранит настройки и подключит MCP вместе со скиллами.
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
- Если уже установлен MLSpace native plugin, используйте его и `--config-only`
78
- либо сначала удалите старую интеграцию, чтобы не создавать второй MCP.
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
- Для установки через PyPI повторите `uvx mlspace-plugin@latest setup --force`.
103
- Мастер сохранит ключи, предложит выбор workspace и обновит скиллы без локальных
104
- изменений. Изменённые вручную скиллы вызовут конфликт с указанием файла.
105
- Регистрация MCP, созданная мастером и не изменённая вручную, обновляется
106
- автоматически. Посторонние и изменённые регистрации требуют разбора конфликта.
107
- Для постоянной установки: `uv tool upgrade mlspace-plugin`, затем
108
- `mlspace-plugin setup --force`. Для установки из checkout: `uv tool install --force .`.
109
- Автоматического обновления в фоне нет. Native plugin из архива обновляйте
110
- через менеджер плагинов клиента; инструкции находятся в `plugin/README.md`.
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, устанавливает MCP и
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. Проверьте `mlspace-plugin --list-tools`. Эта команда проверяет только состав
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
- При частичном успехе сообщите, какие этапы завершены, затем повторите setup с `--force`.
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.4
1
+ Metadata-Version: 2.5
2
2
  Name: mlspace-plugin
3
- Version: 0.2.1
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`, подключает MCP и устанавливает все скиллы из пакета. Откройте новую сессию
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
- Если уже используете native plugin, выбирайте этот режим, чтобы не дублировать MCP.
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` — пользовательский конфиг, сюда пишет `setup`
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
- Внутренний релиз `mlspace-plugin-<версия>.zip` содержит точную версию сервера,
278
- общие скиллы и манифесты для загрузчиков Codex и Claude Code. Его установка
279
- не зависит от публикации `mlspace-plugin` в публичном PyPI.
281
+ Обычная установка — `uvx mlspace-plugin@latest setup`: marketplace подключается
282
+ автоматически. Нативные клиенты управляют плагином `mlspace@mlspace` сами.
283
+ Манифест фиксирует точную версию runtime из PyPI вместе со скиллами.
284
+ Ключи и CA остаются в пользовательском конфиге вне кеша плагина.
280
285
 
281
- После распаковки и однократного `mlspace-plugin setup` добавьте каталог релиза как
282
- marketplace клиента. [Команды установки и сборки](plugin/README.md).
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`, подключает MCP и устанавливает все скиллы из пакета. Откройте новую сессию
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
- Если уже используете native plugin, выбирайте этот режим, чтобы не дублировать MCP.
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` — пользовательский конфиг, сюда пишет `setup`
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
- Внутренний релиз `mlspace-plugin-<версия>.zip` содержит точную версию сервера,
227
- общие скиллы и манифесты для загрузчиков Codex и Claude Code. Его установка
228
- не зависит от публикации `mlspace-plugin` в публичном PyPI.
230
+ Обычная установка — `uvx mlspace-plugin@latest setup`: marketplace подключается
231
+ автоматически. Нативные клиенты управляют плагином `mlspace@mlspace` сами.
232
+ Манифест фиксирует точную версию runtime из PyPI вместе со скиллами.
233
+ Ключи и CA остаются в пользовательском конфиге вне кеша плагина.
229
234
 
230
- После распаковки и однократного `mlspace-plugin setup` добавьте каталог релиза как
231
- marketplace клиента. [Команды установки и сборки](plugin/README.md).
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.2.1 на выпускаемую версию):
10
+ 3. Соберите пакет (в командах ниже замените 0.3.0 на выпускаемую версию):
11
11
 
12
12
  ```sh
13
- uv build --out-dir dist/release-0.2.1
14
- uv run python scripts/build_plugin.py --wheel dist/release-0.2.1/mlspace_plugin-0.2.1-py3-none-any.whl --output dist/plugin-release-0.2.1
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.2.1/mlspace_plugin-0.2.1-py3-none-any.whl dist/release-0.2.1/mlspace_plugin-0.2.1.tar.gz
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.2.1 mlspace-plugin --version` из нового кеша.
31
- ZIP и SHA256SUMS приложите к тому же релизу публичного Git-репозитория.
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
- Native plugin из ZIP устанавливается отдельно через менеджер плагинов клиента;
36
- текущий `setup` регистрирует MCP напрямую и копирует скиллы. Не обещайте ему
37
- автоматическое подключение marketplace или одинаковое автообновление во всех клиентах.
41
+ Claude Code и Codex получают нативный плагин через marketplace этого репозитория;
42
+ OpenCode — MCP и скиллы в собственном каталоге. Политики автообновления клиентов
43
+ не меняются. Не обещайте одинаковое фоновое обновление во всех клиентах.
38
44
 
39
45
  Перед открытием существующего приватного Git-репозитория проверьте также его
40
46
  историю. Проверка wheel и sdist не является проверкой старых Git-коммитов.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mlspace",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Cloud.ru MLSpace: training jobs, inference, notebooks, data transfer, registry and compute catalog — an MCP server plus skills.",
5
5
  "author": {
6
6
  "name": "Cloud.ru"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mlspace",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Cloud.ru MLSpace: training jobs, inference, notebooks, data transfer, registry and compute catalog — an MCP server plus skills.",
5
5
  "author": {
6
6
  "name": "Cloud.ru"
@@ -5,7 +5,7 @@
5
5
  "command": "uvx",
6
6
  "args": [
7
7
  "--from",
8
- "${CLAUDE_PLUGIN_ROOT}/server/mlspace_plugin-0.2.1-py3-none-any.whl",
8
+ "mlspace-plugin==0.3.0",
9
9
  "mlspace-plugin",
10
10
  "--transport",
11
11
  "stdio"