Observed since 21 Oct, 10:32 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
CLI-инструмент для генерации технической документации по коду и конфигурациям
English version | Русская версия
ai_docs — CLI‑инструмент для генерации технической документации по коду и конфигурациям.
Поддерживает локальные папки, локальные git‑проекты и удалённые git‑репозитории.
Генерирует README.md и MkDocs‑сайт (с автоматической сборкой).
Ключевые возможности:
.gitignore и фильтрация файлов--threads / AI_DOCS_THREADS)docs/changes.mdpython3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
Альтернатива (установка как пакет):
python3 -m venv .venv
. .venv/bin/activate
pip install ai-docs-gen
Локальная установка в editable‑режиме:
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
.env.example):OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=
OPENAI_MODEL=gpt-4o-mini
OPENAI_MAX_TOKENS=1200
OPENAI_CONTEXT_TOKENS=8192
OPENAI_TEMPERATURE=0.2
AI_DOCS_THREADS=5
AI_DOCS_LOCAL_SITE=false
Если инструмент установлен как пакет, можно задать переменные окружения так:
export OPENAI_API_KEY="your_api_key_here"
export OPENAI_BASE_URL=""
export OPENAI_MODEL="gpt-4o-mini"
export OPENAI_MAX_TOKENS="1200"
export OPENAI_CONTEXT_TOKENS="8192"
export OPENAI_TEMPERATURE="0.2"
export AI_DOCS_THREADS="5"
export AI_DOCS_LOCAL_SITE="false"
python -m ai_docs --source .
Альтернативно:
python ai_docs --source .
Если установлен как пакет:
ai-docs --source .
Примечание для Windows:
/.python -m venv .venv
.\\.venv\\Scripts\\Activate.ps1
$env:OPENAI_API_KEY="your_api_key_here"
$env:OPENAI_BASE_URL=""
$env:OPENAI_MODEL="gpt-4o-mini"
$env:OPENAI_MAX_TOKENS="1200"
$env:OPENAI_CONTEXT_TOKENS="8192"
$env:OPENAI_TEMPERATURE="0.2"
$env:AI_DOCS_THREADS="5"
$env:AI_DOCS_LOCAL_SITE="false"
ai-docs предоставляет несколько подкоманд:
| Команда | Назначение |
|---|---|
gen | Сгенерировать/обновить документацию (поведение по умолчанию) |
lint | Проверить, есть ли файлы с изменениями без обновления документации. Завершается с ненулевым кодом, если есть stale‑файлы |
watch | Следить за изменениями в исходниках и автоматически регенерировать документацию (требует пакет watchdog) |
pr-diff | Регенерировать документацию только для файлов, изменённых относительно базовой ветки (--base) |
Примеры:
ai-docs gen --source . --mkdocs
ai-docs lint --source .
ai-docs watch --source . --mkdocs --debounce 3.0
ai-docs pr-diff --source . --base main
Вызов ai-docs --source . (без явной подкоманды) сохраняет обратную совместимость и эквивалентен ai-docs gen --source ..
Локальная папка:
python -m ai_docs /path/to/project
или явно:
python -m ai_docs --source /path/to/project
Локальный git‑проект:
python -m ai_docs --source ~/projects/my-repo
Удалённый репозиторий:
python -m ai_docs --source https://github.com/org/repo.git
Только README:
python -m ai_docs --source . --readme
Только MkDocs:
python -m ai_docs --source . --mkdocs
Локальный режим для MkDocs:
python -m ai_docs --source . --mkdocs --local-site
Готовые шаблоны пайплайнов лежат в examples/ci/:
examples/ci/github-actions.yml — GitHub Actions: lint на PR, gen на push в main, автокоммит обновлённой документации.examples/ci/gitlab-ci.yml — GitLab CI: отдельные stages lint и docs.Минимальный пример для GitHub Actions:
- name: Generate Docs
run: |
pip install ai-docs-gen
ai-docs gen --source . --mkdocs --readme --language en --force
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
В репозитории есть .pre-commit-hooks.yaml с двумя хуками:
ai-docs-lint — запускается на pre-commit и падает, если документация устарела.ai-docs-regen — запускается на pre-push и перегенерирует документацию.Подключение в чужом проекте:
repos:
- repo: https://github.com/<your>/ai-docs
rev: main
hooks:
- id: ai-docs-lint
- id: ai-docs-regen
README.md — краткое описание проекта.ai-docs/ — страницы документации.ai-docs/overview.md — сохранённый обзор проекта (используется для README и MkDocs).ai-docs/changes.md — изменения с последней генерации.ai-docs/modules/ — детальная документация модулей (страница на модуль, Doxygen‑подобное описание функций/классов/параметров).ai-docs/configs/ — документация конфигов проекта (обзор + страницы конфигов в универсальном стиле).ai-docs/_index.json — навигационный индекс документации (правила маршрутизации, список секций и модулей)mkdocs.yml — конфиг MkDocsai_docs_site/ — собранный сайт MkDocs.ai_docs_cache/ — кэш и промежуточные summary‑файлыПоддержка основана на расширениях кода в ai_docs/domain.py:
.py, .pyi, .pyx, .js, .jsx, .ts, .tsx, .go, .java, .c, .cc, .cpp, .h, .hpp, .rs, .rb, .php, .cs, .kt, .kts, .swift, .m, .mm, .vb, .bas, .sql, .pas, .dpr, .pp, .r, .pl, .pm, .f, .for, .f90, .f95, .f03, .f08, .sb3, .adb, .ads, .asm, .s, .ino, .htm, .html, .css.
Файл .ai-docs/_index.json строится автоматически при генерации и содержит:
modules/index.md → modules/* → index.md/architecture.md/conventions.md;Если в проекте есть файл .ai-docs.yaml, он задаёт приоритетный список расширений для сканирования.
Если файла нет, он создаётся автоматически на основе текущих *_EXTENSIONS.
Формат (поддерживаются map и list для расширений):
code_extensions:
.py: Python
.ts: TypeScript
doc_extensions:
.md: Markdown
.rst: reStructuredText
config_extensions:
.yml: YAML
.json: JSON
exclude:
- "temp/*"
- "*.log"
# Базовый URL для ссылок на исходники в сгенерированных страницах модулей/конфигов.
# Если задан, в начале каждой страницы модуля появится строка вида
# *Источник:* [`path/to/file.py`](<source_url>/path/to/file.py)
source_url: https://github.com/your-org/your-repo/blob/main
# Пользовательские промпты. Переопределяют встроенные шаблоны; неуказанные
# ключи берутся из значений по умолчанию. Доступные ключи:
# summary, summary_combine,
# module_summary, module_summary_reformat,
# config_summary, config_summary_reformat
prompts:
summary: |
Ты эксперт по технической документации. Сформируй краткое описание файла
в нашем корпоративном стиле. Одно‑два предложения, без заголовков и списков.
--source <path|url> — источник--output <path> — выходная директория (по умолчанию: source для локальных путей, ./output/<repo> для URL)Тесты находятся в каталоге tests/:
test_cache.pytest_changes.pytest_cli.pytest_performance.pytest_prompts.pytest_scanner.pytest_site_config.pytest_summary.pyЗапуск (из корня проекта):
python -m pytest
--readme — генерировать только README--mkdocs — генерировать только MkDocs--language ru|en — язык документации--include/--exclude — фильтры--max-size — максимальный размер файла--threads — число параллельных воркеров для сканирования и глобальный лимит одновременных запросов к LLM (см. раздел «Параллельность»)--cache-dir — директория кэша (по умолчанию .ai_docs_cache)--no-cache — отключить LLM‑кэш--local-site — добавить site_url и use_directory_urls в mkdocs.yml--force — перезаписать README.md, если он уже существует--regen — перечень разделов для принудительной перегенерации (через запятую, например architecture,configs,changes, либо all)Поведение по умолчанию: если не указаны --readme и --mkdocs, генерируются оба артефакта.
Разделы в .ai-docs/*.md (включая overview.md) не перегенерируются, если файл уже существует, кроме указанных в --regen.
Если количество модулей меньше порога AI_DOCS_REGEN_ALL_THRESHOLD (по умолчанию 50), все разделы перегенерируются автоматически (в том числе overview.md).
При запуске без параметров для разделов выводится подсказка с примером --regen.
Если модулей больше 100, modules/index.md автоматически разбивается на страницы по 100 элементов с навигацией «←/→».
Если конфигов больше 100, configs/index.md также разбивается на страницы по 100 элементов с навигацией «←/→».
Параметр --threads N (или переменная окружения AI_DOCS_THREADS=N, по умолчанию 5)
задаёт глобальный верхний предел числа одновременных запросов к LLM по всему пайплайну.
Лимит реализован как общий asyncio.Semaphore в LLMClient и гарантированно действует на:
_summarize_chunks);overview, architecture, runtime, conventions,
доменные контексты Kubernetes/Helm/…, index, modules, changes);Cache‑hit'ы слоты семафора не занимают — параллельные повторные запросы с тем же payload отдаются из кэша, не дожидаясь свободного слота.
Тот же --threads используется и для пула потоков при сканировании файлов.
Рекомендации по подбору значения:
429 Too Many Requests от провайдера понизьте до 2–3.10–20.--threads 1 сериализует все LLM‑вызовы (удобно для отладки и детерминированных прогонов).При запуске в логе выводится строка вида:
[ai-docs] llm: model=gpt-4o-mini context=8192 max_tokens=1200 concurrency=5
где concurrency — фактически применяемый глобальный лимит.
Сборка выполняется автоматически в конце генерации:
mkdocs build -f mkdocs.yml
Сканер учитывает .gitignore, .build_ignore и дефолтные исключения:
.venv, node_modules, ai_docs_site, .ai-docs, .ai_docs_cache, dist, build, т.д.
python -m ai_docs ... для отладкиMIT
pypistats · 53 observations shown. Missing days are unknown. Source category: overall: without mirrors.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-20 – 2026-10-20 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-18 – 2026-10-18 | 3 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-17 – 2026-10-17 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-14 – 2026-10-14 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-13 – 2026-10-13 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-12 – 2026-10-12 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-11 – 2026-10-11 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-10 – 2026-10-10 | 17 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-09 – 2026-10-09 | 7 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-06 – 2026-10-06 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-05 – 2026-10-05 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-04 – 2026-10-04 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-03 – 2026-10-03 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-02 – 2026-10-02 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-10-01 – 2026-10-01 | 35 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-30 – 2026-09-30 | 6 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-28 – 2026-09-28 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-27 – 2026-09-27 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-26 – 2026-09-26 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-25 – 2026-09-25 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-23 – 2026-09-23 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-22 – 2026-09-22 | 27 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-21 – 2026-09-21 | 15 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-15 – 2026-09-15 | 7 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-14 – 2026-09-14 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-13 – 2026-09-13 | 3 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-12 – 2026-09-12 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-11 – 2026-09-11 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-09 – 2026-09-09 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-08 – 2026-09-08 | 3 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-07 – 2026-09-07 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-06 – 2026-09-06 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-09-01 – 2026-09-01 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-31 – 2026-08-31 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-27 – 2026-08-27 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-26 – 2026-08-26 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-25 – 2026-08-25 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-24 – 2026-08-24 | 5 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-23 – 2026-08-23 | 3 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-22 – 2026-08-22 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-21 – 2026-08-21 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-17 – 2026-08-17 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-15 – 2026-08-15 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-14 – 2026-08-14 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-09 – 2026-08-09 | 9 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-06 – 2026-08-06 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-02 – 2026-08-02 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-08-01 – 2026-08-01 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-07-28 – 2026-07-28 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-07-27 – 2026-07-27 | 2 | 2026-10-21T15:10:54.4870200Z |
| 2026-07-26 – 2026-07-26 | 1 | 2026-10-21T15:10:54.4870200Z |
| 2026-07-25 – 2026-07-25 | 23 | 2026-10-21T15:10:54.4870200Z |
| 2026-07-23 – 2026-07-23 | 4 | 2026-10-21T15:10:54.4870200Z |
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.11 | 30 Apr 2026 | 10 |
This describes our collected data; it is not a security assessment.
Observed since 21 Oct, 10:32 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:2a975d5fe7aa58196aa6a1169dcb57a95d39371e4aa7c1d569111dae406aecc8