ai-docs-gen 0.1.4__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.
- ai_docs_gen-0.1.4/PKG-INFO +197 -0
- ai_docs_gen-0.1.4/README.md +181 -0
- ai_docs_gen-0.1.4/ai_docs/__init__.py +0 -0
- ai_docs_gen-0.1.4/ai_docs/__main__.py +22 -0
- ai_docs_gen-0.1.4/ai_docs/assets/mermaid.min.js +1642 -0
- ai_docs_gen-0.1.4/ai_docs/cache.py +52 -0
- ai_docs_gen-0.1.4/ai_docs/changes.py +25 -0
- ai_docs_gen-0.1.4/ai_docs/cli.py +84 -0
- ai_docs_gen-0.1.4/ai_docs/domain.py +206 -0
- ai_docs_gen-0.1.4/ai_docs/generator.py +959 -0
- ai_docs_gen-0.1.4/ai_docs/llm.py +82 -0
- ai_docs_gen-0.1.4/ai_docs/mkdocs.py +161 -0
- ai_docs_gen-0.1.4/ai_docs/scanner.py +238 -0
- ai_docs_gen-0.1.4/ai_docs/summary.py +238 -0
- ai_docs_gen-0.1.4/ai_docs/tokenizer.py +26 -0
- ai_docs_gen-0.1.4/ai_docs/utils.py +43 -0
- ai_docs_gen-0.1.4/ai_docs_gen.egg-info/PKG-INFO +197 -0
- ai_docs_gen-0.1.4/ai_docs_gen.egg-info/SOURCES.txt +25 -0
- ai_docs_gen-0.1.4/ai_docs_gen.egg-info/dependency_links.txt +1 -0
- ai_docs_gen-0.1.4/ai_docs_gen.egg-info/entry_points.txt +2 -0
- ai_docs_gen-0.1.4/ai_docs_gen.egg-info/requires.txt +9 -0
- ai_docs_gen-0.1.4/ai_docs_gen.egg-info/top_level.txt +1 -0
- ai_docs_gen-0.1.4/pyproject.toml +31 -0
- ai_docs_gen-0.1.4/setup.cfg +4 -0
- ai_docs_gen-0.1.4/tests/test_cache.py +45 -0
- ai_docs_gen-0.1.4/tests/test_changes.py +24 -0
- ai_docs_gen-0.1.4/tests/test_scanner.py +29 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ai-docs-gen
|
|
3
|
+
Version: 0.1.4
|
|
4
|
+
Summary: CLI-инструмент для генерации технической документации по коду и конфигурациям
|
|
5
|
+
Requires-Python: >=3.8
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: requests
|
|
8
|
+
Requires-Dist: tiktoken
|
|
9
|
+
Requires-Dist: pyyaml
|
|
10
|
+
Requires-Dist: pathspec
|
|
11
|
+
Requires-Dist: tomli
|
|
12
|
+
Requires-Dist: python-dotenv
|
|
13
|
+
Requires-Dist: mkdocs
|
|
14
|
+
Requires-Dist: mkdocs-mermaid2-plugin
|
|
15
|
+
Requires-Dist: pymdown-extensions
|
|
16
|
+
|
|
17
|
+
# ai_docs — генератор технической документации
|
|
18
|
+
|
|
19
|
+
## Обзор
|
|
20
|
+
`ai_docs` — CLI‑инструмент для генерации технической документации по коду и конфигурациям.
|
|
21
|
+
Поддерживает локальные папки, локальные git‑проекты и удалённые git‑репозитории.
|
|
22
|
+
Генерирует `README.md` и MkDocs‑сайт (с автоматической сборкой).
|
|
23
|
+
|
|
24
|
+
Ключевые возможности:
|
|
25
|
+
- Автоопределение доменов инфраструктуры (Kubernetes, Helm, Terraform, Ansible, Docker, CI/CD, Observability, Service Mesh / Ingress, Data / Storage)
|
|
26
|
+
- Инкрементальная генерация и кэширование
|
|
27
|
+
- Учет `.gitignore` и фильтрация файлов
|
|
28
|
+
- Параллельная LLM‑суммаризация (`--threads` / `AI_DOCS_THREADS`)
|
|
29
|
+
- Отчёт об изменениях в `docs/changes.md`
|
|
30
|
+
|
|
31
|
+
## Быстрый старт
|
|
32
|
+
|
|
33
|
+
1) Установка зависимостей:
|
|
34
|
+
```bash
|
|
35
|
+
python3 -m venv .venv
|
|
36
|
+
. .venv/bin/activate
|
|
37
|
+
pip install -r requirements.txt
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Альтернатива (установка как пакет):
|
|
41
|
+
```bash
|
|
42
|
+
python3 -m venv .venv
|
|
43
|
+
. .venv/bin/activate
|
|
44
|
+
pip install ai-docs-gen
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Локальная установка в editable‑режиме:
|
|
48
|
+
```bash
|
|
49
|
+
python3 -m venv .venv
|
|
50
|
+
. .venv/bin/activate
|
|
51
|
+
pip install -e .
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
2) Настройка `.env` (пример — `.env.example`):
|
|
55
|
+
```env
|
|
56
|
+
OPENAI_API_KEY=your_api_key_here
|
|
57
|
+
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
58
|
+
OPENAI_MODEL=gpt-4o-mini
|
|
59
|
+
OPENAI_MAX_TOKENS=1200
|
|
60
|
+
OPENAI_CONTEXT_TOKENS=8192
|
|
61
|
+
OPENAI_TEMPERATURE=0.2
|
|
62
|
+
AI_DOCS_THREADS=1
|
|
63
|
+
AI_DOCS_LOCAL_SITE=false
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
3) Генерация README и MkDocs:
|
|
67
|
+
```bash
|
|
68
|
+
python -m ai_docs --source .
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Альтернативно:
|
|
72
|
+
```bash
|
|
73
|
+
python ai_docs --source .
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Если установлен как пакет:
|
|
77
|
+
```bash
|
|
78
|
+
ai-docs --source .
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Примеры использования
|
|
82
|
+
|
|
83
|
+
Локальная папка:
|
|
84
|
+
```bash
|
|
85
|
+
python -m ai_docs --source /path/to/project
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Локальный git‑проект:
|
|
89
|
+
```bash
|
|
90
|
+
python -m ai_docs --source ~/projects/my-repo
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Удалённый репозиторий:
|
|
94
|
+
```bash
|
|
95
|
+
python -m ai_docs --source https://github.com/org/repo.git
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Только README:
|
|
99
|
+
```bash
|
|
100
|
+
python -m ai_docs --source . --readme
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Только MkDocs:
|
|
104
|
+
```bash
|
|
105
|
+
python -m ai_docs --source . --mkdocs
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Локальный режим для MkDocs:
|
|
109
|
+
```bash
|
|
110
|
+
python -m ai_docs --source . --mkdocs --local-site
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Что генерируется
|
|
114
|
+
- `README.md` — краткое описание проекта
|
|
115
|
+
- `.ai-docs/` — страницы документации
|
|
116
|
+
- `.ai-docs/changes.md` — изменения с последней генерации
|
|
117
|
+
- `.ai-docs/modules/` — детальная документация модулей (страница на модуль, Doxygen‑подобное описание функций/классов/параметров)
|
|
118
|
+
- `.ai-docs/configs/` — документация конфигов проекта (обзор + страницы конфигов в универсальном стиле)
|
|
119
|
+
- `.ai-docs/_index.json` — навигационный индекс документации (правила маршрутизации, список секций и модулей)
|
|
120
|
+
- `mkdocs.yml` — конфиг MkDocs
|
|
121
|
+
- `ai_docs_site/` — собранный сайт MkDocs
|
|
122
|
+
- `.ai_docs_cache/` — кэш и промежуточные summary‑файлы
|
|
123
|
+
|
|
124
|
+
## Поддерживаемые языки и расширения
|
|
125
|
+
Поддержка основана на расширениях кода в `ai_docs/domain.py`:
|
|
126
|
+
`.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`.
|
|
127
|
+
|
|
128
|
+
## Индекс документации
|
|
129
|
+
Файл `.ai-docs/_index.json` строится автоматически при генерации и содержит:
|
|
130
|
+
- список секций и модулей (пути и краткие описания);
|
|
131
|
+
- правила маршрутизации: приоритет `modules/index.md → modules/* → index.md/architecture.md/conventions.md`;
|
|
132
|
+
- принцип ранжирования: частота ключевых совпадений + приоритет файла.
|
|
133
|
+
|
|
134
|
+
## .ai-docs.yaml (расширения)
|
|
135
|
+
Если в проекте есть файл `.ai-docs.yaml`, он задаёт приоритетный список расширений для сканирования.
|
|
136
|
+
Если файла нет, он создаётся автоматически на основе текущих `*_EXTENSIONS`.
|
|
137
|
+
|
|
138
|
+
Формат (поддерживаются map и list для расширений):
|
|
139
|
+
```yaml
|
|
140
|
+
code_extensions:
|
|
141
|
+
.py: Python
|
|
142
|
+
.ts: TypeScript
|
|
143
|
+
doc_extensions:
|
|
144
|
+
.md: Markdown
|
|
145
|
+
.rst: reStructuredText
|
|
146
|
+
config_extensions:
|
|
147
|
+
.yml: YAML
|
|
148
|
+
.json: JSON
|
|
149
|
+
exclude:
|
|
150
|
+
- "temp/*"
|
|
151
|
+
- "*.log"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## CLI‑параметры
|
|
155
|
+
- `--source <path|url>` — источник
|
|
156
|
+
- `--output <path>` — выходная директория (по умолчанию: source для локальных путей, `./output/<repo>` для URL)
|
|
157
|
+
|
|
158
|
+
## Тестирование
|
|
159
|
+
Тесты находятся в каталоге `tests/`:
|
|
160
|
+
- `test_cache.py`
|
|
161
|
+
- `test_changes.py`
|
|
162
|
+
- `test_scanner.py`
|
|
163
|
+
|
|
164
|
+
Запуск (из корня проекта):
|
|
165
|
+
```bash
|
|
166
|
+
python -m pytest
|
|
167
|
+
```
|
|
168
|
+
- `--readme` — генерировать только README
|
|
169
|
+
- `--mkdocs` — генерировать только MkDocs
|
|
170
|
+
- `--language ru|en` — язык документации
|
|
171
|
+
- `--include/--exclude` — фильтры
|
|
172
|
+
- `--max-size` — максимальный размер файла
|
|
173
|
+
- `--threads` — число потоков LLM
|
|
174
|
+
- `--cache-dir` — директория кэша (по умолчанию `.ai_docs_cache`)
|
|
175
|
+
- `--no-cache` — отключить LLM‑кэш
|
|
176
|
+
- `--local-site` — добавить `site_url` и `use_directory_urls` в `mkdocs.yml`
|
|
177
|
+
- `--force` — перезаписать `README.md`, если он уже существует
|
|
178
|
+
|
|
179
|
+
Поведение по умолчанию: если не указаны `--readme` и `--mkdocs`, генерируются оба артефакта.
|
|
180
|
+
|
|
181
|
+
## MkDocs
|
|
182
|
+
Сборка выполняется автоматически в конце генерации:
|
|
183
|
+
```
|
|
184
|
+
mkdocs build -f mkdocs.yml
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Исключения
|
|
188
|
+
Сканер учитывает `.gitignore`, `.build_ignore` и дефолтные исключения:
|
|
189
|
+
`.venv`, `node_modules`, `ai_docs_site`, `.ai-docs`, `.ai_docs_cache`, `dist`, `build`, т.д.
|
|
190
|
+
|
|
191
|
+
## Разработка и вклад
|
|
192
|
+
- Установите зависимости (см. «Быстрый старт»)
|
|
193
|
+
- Запускайте через `python -m ai_docs ...` для отладки
|
|
194
|
+
- PR и предложения приветствуются
|
|
195
|
+
|
|
196
|
+
## Лицензия
|
|
197
|
+
MIT
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# ai_docs — генератор технической документации
|
|
2
|
+
|
|
3
|
+
## Обзор
|
|
4
|
+
`ai_docs` — CLI‑инструмент для генерации технической документации по коду и конфигурациям.
|
|
5
|
+
Поддерживает локальные папки, локальные git‑проекты и удалённые git‑репозитории.
|
|
6
|
+
Генерирует `README.md` и MkDocs‑сайт (с автоматической сборкой).
|
|
7
|
+
|
|
8
|
+
Ключевые возможности:
|
|
9
|
+
- Автоопределение доменов инфраструктуры (Kubernetes, Helm, Terraform, Ansible, Docker, CI/CD, Observability, Service Mesh / Ingress, Data / Storage)
|
|
10
|
+
- Инкрементальная генерация и кэширование
|
|
11
|
+
- Учет `.gitignore` и фильтрация файлов
|
|
12
|
+
- Параллельная LLM‑суммаризация (`--threads` / `AI_DOCS_THREADS`)
|
|
13
|
+
- Отчёт об изменениях в `docs/changes.md`
|
|
14
|
+
|
|
15
|
+
## Быстрый старт
|
|
16
|
+
|
|
17
|
+
1) Установка зависимостей:
|
|
18
|
+
```bash
|
|
19
|
+
python3 -m venv .venv
|
|
20
|
+
. .venv/bin/activate
|
|
21
|
+
pip install -r requirements.txt
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Альтернатива (установка как пакет):
|
|
25
|
+
```bash
|
|
26
|
+
python3 -m venv .venv
|
|
27
|
+
. .venv/bin/activate
|
|
28
|
+
pip install ai-docs-gen
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Локальная установка в editable‑режиме:
|
|
32
|
+
```bash
|
|
33
|
+
python3 -m venv .venv
|
|
34
|
+
. .venv/bin/activate
|
|
35
|
+
pip install -e .
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
2) Настройка `.env` (пример — `.env.example`):
|
|
39
|
+
```env
|
|
40
|
+
OPENAI_API_KEY=your_api_key_here
|
|
41
|
+
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
42
|
+
OPENAI_MODEL=gpt-4o-mini
|
|
43
|
+
OPENAI_MAX_TOKENS=1200
|
|
44
|
+
OPENAI_CONTEXT_TOKENS=8192
|
|
45
|
+
OPENAI_TEMPERATURE=0.2
|
|
46
|
+
AI_DOCS_THREADS=1
|
|
47
|
+
AI_DOCS_LOCAL_SITE=false
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3) Генерация README и MkDocs:
|
|
51
|
+
```bash
|
|
52
|
+
python -m ai_docs --source .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Альтернативно:
|
|
56
|
+
```bash
|
|
57
|
+
python ai_docs --source .
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Если установлен как пакет:
|
|
61
|
+
```bash
|
|
62
|
+
ai-docs --source .
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Примеры использования
|
|
66
|
+
|
|
67
|
+
Локальная папка:
|
|
68
|
+
```bash
|
|
69
|
+
python -m ai_docs --source /path/to/project
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Локальный git‑проект:
|
|
73
|
+
```bash
|
|
74
|
+
python -m ai_docs --source ~/projects/my-repo
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Удалённый репозиторий:
|
|
78
|
+
```bash
|
|
79
|
+
python -m ai_docs --source https://github.com/org/repo.git
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Только README:
|
|
83
|
+
```bash
|
|
84
|
+
python -m ai_docs --source . --readme
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Только MkDocs:
|
|
88
|
+
```bash
|
|
89
|
+
python -m ai_docs --source . --mkdocs
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Локальный режим для MkDocs:
|
|
93
|
+
```bash
|
|
94
|
+
python -m ai_docs --source . --mkdocs --local-site
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Что генерируется
|
|
98
|
+
- `README.md` — краткое описание проекта
|
|
99
|
+
- `.ai-docs/` — страницы документации
|
|
100
|
+
- `.ai-docs/changes.md` — изменения с последней генерации
|
|
101
|
+
- `.ai-docs/modules/` — детальная документация модулей (страница на модуль, Doxygen‑подобное описание функций/классов/параметров)
|
|
102
|
+
- `.ai-docs/configs/` — документация конфигов проекта (обзор + страницы конфигов в универсальном стиле)
|
|
103
|
+
- `.ai-docs/_index.json` — навигационный индекс документации (правила маршрутизации, список секций и модулей)
|
|
104
|
+
- `mkdocs.yml` — конфиг MkDocs
|
|
105
|
+
- `ai_docs_site/` — собранный сайт MkDocs
|
|
106
|
+
- `.ai_docs_cache/` — кэш и промежуточные summary‑файлы
|
|
107
|
+
|
|
108
|
+
## Поддерживаемые языки и расширения
|
|
109
|
+
Поддержка основана на расширениях кода в `ai_docs/domain.py`:
|
|
110
|
+
`.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`.
|
|
111
|
+
|
|
112
|
+
## Индекс документации
|
|
113
|
+
Файл `.ai-docs/_index.json` строится автоматически при генерации и содержит:
|
|
114
|
+
- список секций и модулей (пути и краткие описания);
|
|
115
|
+
- правила маршрутизации: приоритет `modules/index.md → modules/* → index.md/architecture.md/conventions.md`;
|
|
116
|
+
- принцип ранжирования: частота ключевых совпадений + приоритет файла.
|
|
117
|
+
|
|
118
|
+
## .ai-docs.yaml (расширения)
|
|
119
|
+
Если в проекте есть файл `.ai-docs.yaml`, он задаёт приоритетный список расширений для сканирования.
|
|
120
|
+
Если файла нет, он создаётся автоматически на основе текущих `*_EXTENSIONS`.
|
|
121
|
+
|
|
122
|
+
Формат (поддерживаются map и list для расширений):
|
|
123
|
+
```yaml
|
|
124
|
+
code_extensions:
|
|
125
|
+
.py: Python
|
|
126
|
+
.ts: TypeScript
|
|
127
|
+
doc_extensions:
|
|
128
|
+
.md: Markdown
|
|
129
|
+
.rst: reStructuredText
|
|
130
|
+
config_extensions:
|
|
131
|
+
.yml: YAML
|
|
132
|
+
.json: JSON
|
|
133
|
+
exclude:
|
|
134
|
+
- "temp/*"
|
|
135
|
+
- "*.log"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## CLI‑параметры
|
|
139
|
+
- `--source <path|url>` — источник
|
|
140
|
+
- `--output <path>` — выходная директория (по умолчанию: source для локальных путей, `./output/<repo>` для URL)
|
|
141
|
+
|
|
142
|
+
## Тестирование
|
|
143
|
+
Тесты находятся в каталоге `tests/`:
|
|
144
|
+
- `test_cache.py`
|
|
145
|
+
- `test_changes.py`
|
|
146
|
+
- `test_scanner.py`
|
|
147
|
+
|
|
148
|
+
Запуск (из корня проекта):
|
|
149
|
+
```bash
|
|
150
|
+
python -m pytest
|
|
151
|
+
```
|
|
152
|
+
- `--readme` — генерировать только README
|
|
153
|
+
- `--mkdocs` — генерировать только MkDocs
|
|
154
|
+
- `--language ru|en` — язык документации
|
|
155
|
+
- `--include/--exclude` — фильтры
|
|
156
|
+
- `--max-size` — максимальный размер файла
|
|
157
|
+
- `--threads` — число потоков LLM
|
|
158
|
+
- `--cache-dir` — директория кэша (по умолчанию `.ai_docs_cache`)
|
|
159
|
+
- `--no-cache` — отключить LLM‑кэш
|
|
160
|
+
- `--local-site` — добавить `site_url` и `use_directory_urls` в `mkdocs.yml`
|
|
161
|
+
- `--force` — перезаписать `README.md`, если он уже существует
|
|
162
|
+
|
|
163
|
+
Поведение по умолчанию: если не указаны `--readme` и `--mkdocs`, генерируются оба артефакта.
|
|
164
|
+
|
|
165
|
+
## MkDocs
|
|
166
|
+
Сборка выполняется автоматически в конце генерации:
|
|
167
|
+
```
|
|
168
|
+
mkdocs build -f mkdocs.yml
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Исключения
|
|
172
|
+
Сканер учитывает `.gitignore`, `.build_ignore` и дефолтные исключения:
|
|
173
|
+
`.venv`, `node_modules`, `ai_docs_site`, `.ai-docs`, `.ai_docs_cache`, `dist`, `build`, т.д.
|
|
174
|
+
|
|
175
|
+
## Разработка и вклад
|
|
176
|
+
- Установите зависимости (см. «Быстрый старт»)
|
|
177
|
+
- Запускайте через `python -m ai_docs ...` для отладки
|
|
178
|
+
- PR и предложения приветствуются
|
|
179
|
+
|
|
180
|
+
## Лицензия
|
|
181
|
+
MIT
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _load_main():
|
|
7
|
+
try:
|
|
8
|
+
from .cli import main
|
|
9
|
+
return main
|
|
10
|
+
except ImportError:
|
|
11
|
+
# Fallback when executed as a script (e.g., `python ai_docs ...`)
|
|
12
|
+
pkg_dir = os.path.dirname(os.path.abspath(__file__))
|
|
13
|
+
parent = os.path.dirname(pkg_dir)
|
|
14
|
+
if parent not in sys.path:
|
|
15
|
+
sys.path.insert(0, parent)
|
|
16
|
+
return importlib.import_module("ai_docs.cli").main
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
main = _load_main()
|
|
20
|
+
|
|
21
|
+
if __name__ == "__main__":
|
|
22
|
+
main()
|