Skip to main content

s-installerkit

Универсальный installer-kit: uv-bootstrap, self-update (модель skillery), генератор install-скриптов, прямая регистрация навыка + публикация в skillery. Тонкий слой над s-skillkit+clikit+librarykit.

Что это

Тонкий верхний слой над s-skillkit: даёт CLI-продукту установку и самообновление «под ключ», НЕ дублируя механику skillkit (ensure_uv, bootstrap_skill, manifest, линковка навыка — импортируются из него).

Dist-имя — s-installerkit; имя для импорта — installerkit.

uv add s-installerkit

Публичный API

from installerkit import (
    configure, InstallerConfig,   # единая конфигурация (прокси на skillkit + dist-имя)
    make_self_update_command,     # фабрика clikit-команды `self-update` (PyPI)
    render_install_script,        # генератор ASCII bootstrap-скриптов (sh/ps1)
    ensure_uv, run_doctor,        # окружение продукта: uv + scripts/self_check.py
    install_direct,               # прямая установка навыка (линковка + bootstrap)
    publish_to_store,             # публикация в skillery-store (с секрет-гейтом)
    run_publish_gate,             # секрет-скан + денилист (gitleaks + s-skillgate)
    build_publish_payload,        # payload POST /skills по манифесту навыка
)

Кит ставит и CLI installer:

installer install <путь-к-навыку> [--scope global|project] [--all-agents]
installer ensure-uv
installer doctor <каталог-продукта> [--no-self-check]
installer publish <путь-к-навыку> --tag v1.2.3 [--dry-run] [--force]
  • configure(InstallerConfig(app_name, dist_name, ...)) — идемпотентно проецирует брендинг/каталоги на skillkit.configure и запоминает dist_name для self-update. Каталоги — ленивыми провайдерами (кит env сам не читает).
  • make_self_update_command(dist_name) → clikit-команда: сверяет версию с PyPI JSON API (pypi.org/pypi/<dist>/json), обновляет авто-детектом менеджера (uv tool / pipx / pip), --check — только показать. На Windows апгрейд — detached-процессом (launcher .exe залочен), применяется со след. запуска. Регистрация: app.command(name="self-update")(make_self_update_command("s-myctl")).
  • render_install_script("sh"|"ps1", dist_name, cli_name) → строка ASCII-only bootstrap-скрипта (ставит uv при отсутствии → uv tool install --upgrade <dist>). ASCII гарантируется (иначе curl|sh / irm|iex ломаются).
  • install_direct(path, scope=..., all_agents=...) — прямой путь установки (без хаба): материализует навык в центральный стор и линкует junction/symlink'ом в ~/.claude/skills/<slug> (или в project-scope), гоняет skillkit.bootstrap_skill (ensure_uv → deps → бинари → self_check), для kind = "tooling" регистрирует MCP-серверы у агента. Возвращает graceful-отчёт {ok, slug, agents, bootstrap, mcp, errors} и НЕ бросает; битая ссылка в scope детектится (link_status = "broken").
  • ensure_uv() — идемпотентно найти/поставить uv: {"uv": <путь|None>, "status": "found" | "installed" | "missing"}. found — uv уже был и ничего не делалось.
  • run_doctor(product_dir) — сводная проверка окружения продукта: uv, .venv, наличие и прогон scripts/self_check.py. Возвращает {ok, uv, venv, self_check_script, self_check, problems}, не бросает; installer doctor печатает отчёт и выходит с кодом 1, если ok=False.
  • publish_to_store(path, tag=..., client=...) — публикация навыка: сначала ГЕЙТ (run_publish_gate: gitleaks, если бинарь есть в PATH, плюс s-skillgate — regex-секреты и денилист внутренней инфы), затем сборка манифеста (kind/cli/mcp/runtime_dependencies — без них хаб не поставит сам инструмент), затем отправка через client.publish_skill(payload) (sync и async-клиенты оба). Блокирующие находки → CliError (publish_gate_failed, exit 1) ДО сборки и сети; force=True — сознательный обход. dry_run=True возвращает payload, не отправляя (секретные поля в нём замаскированы). Транспорта кит не несёт — клиент инъектирует потребитель; команда installer publish без клиента умеет --dry-run.
  • Команда installer publish закрыта правом skill.publish: если задан env INSTALLER_PERMISSIONS, она регистрируется только при наличии права.

Контракт scripts/self_check.py (самопроверка продукта)

Финальный gate установки: его гоняет и skillkit.bootstrap_skill, и installer doctor. Продукт обязан положить скрипт по пути scripts/self_check.py в своём корне.

  • Вход: аргументов нет, stdin не читается (запуск неинтерактивный). Рабочий каталог — корень продукта; интерпретатор выбирается в порядке <продукт>/.venv/bin/pythonuv run python → текущий sys.executable.
  • Выход: человекочитаемый отчёт в stdout/stderr (оба потока попадают в self_check.output). Формат свободный; пишите, ЧТО именно не так.
  • Коды возврата: 0 — окружение исправно; любой ненулевой — нет (различать 1/2/3 инсталлятор не станет, коды нужны только вашим тестам).
  • Ограничения: без сети и без секретов в выводе; таймаут 300 с (skillkit убьёт зависший скрипт). Скрипта нет ⇒ это САМО ПО СЕБЕ проблема: подтвердить окружение нечем, doctor вернёт ok=False.
# scripts/self_check.py
import shutil, sys

problems = [] if shutil.which("uv") else ["нет uv в PATH"]
print("
".join(problems) or "окружение исправно")
sys.exit(1 if problems else 0)

Разработка

uv sync --extra dev
uv run --extra dev pytest -q
uv run --extra dev ruff check installerkit tests

Статус

  • Type: kit
  • Status: experiment
  • Priority: P1
  • Slug: s-installerkit
  • Prefix: si
  • Tags: —
  • Создан: 2026-07-17

Atlas

Карточка проекта в Atlas-БД (Atlas):

atlas projects get s-installerkit

Физический layout:

  • Storage: _storage/s-installerkit/
  • Junction: Products\s-installerkit_storage/s-installerkit

TODO (placeholder)

  • Заполнить README реальным контентом проекта.
  • Подключить GitLab-репозиторий (если ещё нет): atlas projects git init s-installerkit.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s_installerkit-0.1.0.tar.gz (75.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

s_installerkit-0.1.0-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

File details

Details for the file s_installerkit-0.1.0.tar.gz.

File metadata

  • Download URL: s_installerkit-0.1.0.tar.gz
  • Upload date:
  • Size: 75.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for s_installerkit-0.1.0.tar.gz
Algorithm Hash digest
SHA256 41de3fde8872b700753832442ddeb84b71e3067a6049b730c6b9d2c923cb7541
MD5 0120a714ba7f261ae87f52fa30a03900
BLAKE2b-256 e7919fe2f1b802bc7c5de8849fcb3d562781a82073dffb2ac03431683de3318a

See more details on using hashes here.

File details

Details for the file s_installerkit-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: s_installerkit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for s_installerkit-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f355c58d5df77bc36323e13f977cdf18f042dd2b2104b3c38209c49ab06767af
MD5 91aaedf7e09255754ab3b3d2cf2978d7
BLAKE2b-256 ad818d63d181fd9c848e3fd23ea7b08dfb58c1489245cc3d253927ade7cd6e8a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page