Metadata-Version: 2.4
Name: s-skillgate
Version: 0.1.0
Summary: Pre-publish gate for Skills Hub skills: secrets, internal-info denylist, manifest validation
Author: Dmitry
License: MIT
License-File: LICENSE
Requires-Python: >=3.11
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == 'dev'
Description-Content-Type: text/markdown

# s-skillgate

> Pre-publish gate для навыков Skills Hub: секреты + денилист внутренней инфы + валидация манифеста (zero-deps Python)

## Что это

«Охранник» (pre-publish gate), который проверяет папку навыка перед публикацией на три вещи:

1. **Секреты/токены** — `glpat-`, `ghp_`, `sk-`, `AKIA`, JWT, приватные ключи, DSN с паролем.
2. **Внутренняя инфа** — локальные пути, публичные IP (warn) + собственная конкретика через приватный оверлей.
3. **Структура/манифест** — обязательные поля `SKILL.md`, инвариант «tooling ⇒ есть cli/mcp».

Возвращает вердикт `ok` / `warn` / `fail` и exit-code `0/1/2`. Zero-deps, только stdlib Python ≥3.11 — работает везде, включая Windows без установки бинарей.

## Установка

```sh
pip install s-skillgate
# или без установки:
uvx --from s-skillgate skillgate run path/to/skill
```

## Запуск

```sh
skillgate run path/to/skill           # человекочитаемо
skillgate run path/to/skill --json    # машинно; exit 0 ok / 1 warn / 2 fail
```

Как библиотека:

```python
from skillgate import run_gate

report = run_gate("path/to/skill")
print(report.verdict, report.exit_code)
```

## Правила

- **Общие паттерны** (токены, пути, IP) — `src/skillgate/data/denylist.toml`. Один файл, формат TOML, regex в literal-строках (одинарные кавычки). Дописал `[[rule]]` — правило работает.
- **Исключения/заглушки** (публичные домены-примеры, `__set_me__`, RFC1918) — `src/skillgate/data/allowlist.toml`. Если совпадение попало под allowlist — находка гасится.
- **Приватная конкретика** (реальные IP серверов, имена приватных git-групп, внутренние домены) — НЕ в публичном пакете. Скопируй `data/denylist.local.example.toml` → `data/denylist.local.toml` (он в `.gitignore`) и впиши свои значения; `run_gate` подхватит оверлей автоматически.

Правила покрыты golden-тестами (`tests/golden/`): `must_match.txt` (обязано ловиться) / `must_not_match.txt` (легальные заглушки). Менять правило → добавить кейс.

## Тесты

```sh
uv run --with pytest pytest -q
```

## License

MIT
