docwright 0.1.0__py3-none-any.whl
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_docgen/__init__.py +0 -0
- ai_docgen/analyzer.py +59 -0
- ai_docgen/built_in_templates/__init__.py +0 -0
- ai_docgen/built_in_templates/readme/__init__.py +0 -0
- ai_docgen/built_in_templates/readme/default.md.j2 +30 -0
- ai_docgen/built_in_templates/wiki/__init__.py +0 -0
- ai_docgen/built_in_templates/wiki/adr.md.j2 +27 -0
- ai_docgen/built_in_templates/wiki/api-contracts.md.j2 +20 -0
- ai_docgen/built_in_templates/wiki/architecture.md.j2 +25 -0
- ai_docgen/built_in_templates/wiki/data-model.md.j2 +22 -0
- ai_docgen/built_in_templates/wiki/db-schema.md.j2 +22 -0
- ai_docgen/built_in_templates/wiki/development-guide.md.j2 +22 -0
- ai_docgen/built_in_templates/wiki/integrations.md.j2 +22 -0
- ai_docgen/built_in_templates/wiki/operations.md.j2 +27 -0
- ai_docgen/built_in_templates/wiki/security.md.j2 +22 -0
- ai_docgen/built_in_templates/wiki/troubleshooting.md.j2 +22 -0
- ai_docgen/cli.py +136 -0
- ai_docgen/config.py +71 -0
- ai_docgen/engine.py +165 -0
- ai_docgen/outputs/__init__.py +0 -0
- ai_docgen/outputs/base.py +7 -0
- ai_docgen/outputs/direct.py +16 -0
- ai_docgen/outputs/factory.py +12 -0
- ai_docgen/outputs/pull_request.py +69 -0
- ai_docgen/providers/__init__.py +0 -0
- ai_docgen/providers/base.py +6 -0
- ai_docgen/providers/claude.py +22 -0
- ai_docgen/providers/factory.py +26 -0
- ai_docgen/providers/ollama.py +25 -0
- ai_docgen/providers/openai.py +20 -0
- ai_docgen/registry.py +125 -0
- ai_docgen/renderer.py +104 -0
- ai_docgen/reporters/__init__.py +0 -0
- ai_docgen/reporters/html.py +54 -0
- ai_docgen/reporters/terminal.py +31 -0
- ai_docgen/scaffolder.py +163 -0
- docwright-0.1.0.dist-info/METADATA +188 -0
- docwright-0.1.0.dist-info/RECORD +41 -0
- docwright-0.1.0.dist-info/WHEEL +4 -0
- docwright-0.1.0.dist-info/entry_points.txt +3 -0
- docwright-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
from rich.table import Table
|
|
5
|
+
|
|
6
|
+
from ai_docgen.registry import Registry
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def render_dashboard(registry_path: Path) -> None:
|
|
10
|
+
console = Console()
|
|
11
|
+
registry = Registry(registry_path)
|
|
12
|
+
projects = registry.all_projects()
|
|
13
|
+
|
|
14
|
+
if not projects:
|
|
15
|
+
console.print("[yellow]No projects registered. Run 'ai-docgen init' in a project.[/yellow]")
|
|
16
|
+
return
|
|
17
|
+
|
|
18
|
+
table = Table(title="ai-docgen — Project Status", show_lines=True)
|
|
19
|
+
table.add_column("Project", style="bold")
|
|
20
|
+
table.add_column("Status")
|
|
21
|
+
table.add_column("Last Updated")
|
|
22
|
+
table.add_column("Documents")
|
|
23
|
+
|
|
24
|
+
for project in projects:
|
|
25
|
+
status_icon = (
|
|
26
|
+
"[green]✓ synced[/green]" if project.status == "synced" else "[red]✗ stale[/red]"
|
|
27
|
+
)
|
|
28
|
+
doc_targets = ", ".join(d.target for d in project.documents)
|
|
29
|
+
table.add_row(project.name, status_icon, str(project.last_updated), doc_targets)
|
|
30
|
+
|
|
31
|
+
console.print(table)
|
ai_docgen/scaffolder.py
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import re
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
|
|
10
|
+
GITHUB_ACTIONS_WORKFLOW = """\
|
|
11
|
+
name: Update Documentation
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
branches: ["**"]
|
|
16
|
+
pull_request:
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
docs:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: write
|
|
23
|
+
pull-requests: write
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 2
|
|
28
|
+
- uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
- run: pip install ai-docgen
|
|
32
|
+
- run: ai-docgen run
|
|
33
|
+
env:
|
|
34
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
35
|
+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
36
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
37
|
+
AI_DOCGEN_BASE_SHA: >-
|
|
38
|
+
${{ github.event.pull_request.base.sha || github.event.before }}
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
GITLAB_CI_BLOCK = """
|
|
42
|
+
docs:
|
|
43
|
+
stage: docs
|
|
44
|
+
image: python:3.12
|
|
45
|
+
script:
|
|
46
|
+
- pip install ai-docgen
|
|
47
|
+
- ai-docgen run
|
|
48
|
+
variables:
|
|
49
|
+
AI_DOCGEN_BASE_SHA: $CI_MERGE_REQUEST_DIFF_BASE_SHA
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
MAKEFILE_TARGETS = """
|
|
53
|
+
docs: ## init if not initialized, otherwise update
|
|
54
|
+
\tai-docgen run
|
|
55
|
+
|
|
56
|
+
docs-sync: ## force re-sync all docs against current templates
|
|
57
|
+
\tai-docgen sync
|
|
58
|
+
|
|
59
|
+
docs-check: ## dry-run: show what would change
|
|
60
|
+
\tai-docgen run --dry-run
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@dataclass
|
|
65
|
+
class ProjectProfile:
|
|
66
|
+
language: str
|
|
67
|
+
service_name: str
|
|
68
|
+
ci: str
|
|
69
|
+
package_manager: str
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class Scaffolder:
|
|
73
|
+
def __init__(self, repo_root: Path) -> None:
|
|
74
|
+
self.repo_root = repo_root
|
|
75
|
+
|
|
76
|
+
def detect_profile(self) -> ProjectProfile:
|
|
77
|
+
language, service_name, package_manager = self.detect_language()
|
|
78
|
+
ci = self.detect_ci()
|
|
79
|
+
return ProjectProfile(
|
|
80
|
+
language=language,
|
|
81
|
+
service_name=service_name,
|
|
82
|
+
ci=ci,
|
|
83
|
+
package_manager=package_manager,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
def detect_language(self) -> tuple[str, str, str]:
|
|
87
|
+
pyproject = self.repo_root / "pyproject.toml"
|
|
88
|
+
if pyproject.exists():
|
|
89
|
+
content = pyproject.read_text()
|
|
90
|
+
match = re.search(r'name\s*=\s*"([^"]+)"', content)
|
|
91
|
+
name = match.group(1) if match else self.repo_root.name
|
|
92
|
+
return "python", name, "poetry"
|
|
93
|
+
package_json = self.repo_root / "package.json"
|
|
94
|
+
if package_json.exists():
|
|
95
|
+
data = json.loads(package_json.read_text())
|
|
96
|
+
return "node", str(data.get("name", self.repo_root.name)), "npm"
|
|
97
|
+
composer = self.repo_root / "composer.json"
|
|
98
|
+
if composer.exists():
|
|
99
|
+
data = json.loads(composer.read_text())
|
|
100
|
+
name = str(data.get("name", self.repo_root.name)).split("/")[-1]
|
|
101
|
+
return "php", name, "composer"
|
|
102
|
+
return "unknown", self.repo_root.name, "unknown"
|
|
103
|
+
|
|
104
|
+
def detect_ci(self) -> str:
|
|
105
|
+
if (self.repo_root / ".github" / "workflows").exists():
|
|
106
|
+
return "github"
|
|
107
|
+
if (self.repo_root / ".gitlab-ci.yml").exists():
|
|
108
|
+
return "gitlab"
|
|
109
|
+
return "none"
|
|
110
|
+
|
|
111
|
+
def generate(self, profile: ProjectProfile, provider_type: str, output_mode: str) -> None:
|
|
112
|
+
self.write_config(provider_type, output_mode)
|
|
113
|
+
self.append_makefile_targets()
|
|
114
|
+
self.write_ci_workflow(profile)
|
|
115
|
+
|
|
116
|
+
def write_config(self, provider_type: str, output_mode: str) -> None:
|
|
117
|
+
config_dir = self.repo_root / ".ai-docgen"
|
|
118
|
+
config_dir.mkdir(parents=True, exist_ok=True)
|
|
119
|
+
config_file = config_dir / "ai-docgen.yml"
|
|
120
|
+
if config_file.exists():
|
|
121
|
+
return
|
|
122
|
+
api_key_env = {
|
|
123
|
+
"claude": "ANTHROPIC_API_KEY",
|
|
124
|
+
"openai": "OPENAI_API_KEY",
|
|
125
|
+
}.get(provider_type, "")
|
|
126
|
+
model = {
|
|
127
|
+
"claude": "claude-sonnet-4-6",
|
|
128
|
+
"openai": "gpt-4o",
|
|
129
|
+
"ollama": "llama3",
|
|
130
|
+
}.get(provider_type, "claude-sonnet-4-6")
|
|
131
|
+
config = {
|
|
132
|
+
"provider": {"type": provider_type, "model": model, "api_key_env": api_key_env},
|
|
133
|
+
"output": {"mode": output_mode},
|
|
134
|
+
"triggers": {
|
|
135
|
+
"paths": ["app/**", "src/**", "pyproject.toml", "package.json"],
|
|
136
|
+
"ignore": ["tests/**", "**/*.md"],
|
|
137
|
+
},
|
|
138
|
+
"documents": [
|
|
139
|
+
{"type": "readme", "template": "readme/default", "target": "README.md"},
|
|
140
|
+
],
|
|
141
|
+
"registry": {"path": "../.ai-docgen/registry.yml"},
|
|
142
|
+
}
|
|
143
|
+
config_file.write_text(yaml.dump(config, default_flow_style=False, allow_unicode=True))
|
|
144
|
+
|
|
145
|
+
def append_makefile_targets(self) -> None:
|
|
146
|
+
makefile = self.repo_root / "Makefile"
|
|
147
|
+
if not makefile.exists():
|
|
148
|
+
makefile.write_text(MAKEFILE_TARGETS.lstrip())
|
|
149
|
+
return
|
|
150
|
+
content = makefile.read_text()
|
|
151
|
+
if "docs:" not in content:
|
|
152
|
+
makefile.write_text(content + MAKEFILE_TARGETS)
|
|
153
|
+
|
|
154
|
+
def write_ci_workflow(self, profile: ProjectProfile) -> None:
|
|
155
|
+
if profile.ci == "github":
|
|
156
|
+
workflow_path = self.repo_root / ".github" / "workflows" / "docs.yml"
|
|
157
|
+
if not workflow_path.exists():
|
|
158
|
+
workflow_path.write_text(GITHUB_ACTIONS_WORKFLOW)
|
|
159
|
+
elif profile.ci == "gitlab":
|
|
160
|
+
gitlab_ci = self.repo_root / ".gitlab-ci.yml"
|
|
161
|
+
content = gitlab_ci.read_text() if gitlab_ci.exists() else ""
|
|
162
|
+
if "ai-docgen run" not in content:
|
|
163
|
+
gitlab_ci.write_text(content + GITLAB_CI_BLOCK)
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: docwright
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: AI-powered documentation agent: auto-generates and maintains README & wiki on every commit
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: documentation,ai,llm,claude,openai,git,automation
|
|
8
|
+
Author: Artem Gotlib
|
|
9
|
+
Author-email: gotlib.artem.m@gmail.com
|
|
10
|
+
Requires-Python: >=3.11,<4.0
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Documentation
|
|
21
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Requires-Dist: anthropic (>=0.28,<0.29)
|
|
24
|
+
Requires-Dist: click (>=8.1,<9.0)
|
|
25
|
+
Requires-Dist: gitpython (>=3.1,<4.0)
|
|
26
|
+
Requires-Dist: httpx (>=0.27,<0.28)
|
|
27
|
+
Requires-Dist: jinja2 (>=3.1,<4.0)
|
|
28
|
+
Requires-Dist: openai (>=1.30,<2.0)
|
|
29
|
+
Requires-Dist: pydantic (>=2.0,<3.0)
|
|
30
|
+
Requires-Dist: pyyaml (>=6.0,<7.0)
|
|
31
|
+
Requires-Dist: rich (>=13.0,<14.0)
|
|
32
|
+
Project-URL: Homepage, https://github.com/GotlibArtem/ai-docgen
|
|
33
|
+
Project-URL: Repository, https://github.com/GotlibArtem/ai-docgen
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# ai-docgen
|
|
37
|
+
|
|
38
|
+
AI-powered documentation agent that watches your commits and keeps README and wiki pages up to date automatically.
|
|
39
|
+
|
|
40
|
+
## How It Works
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Developer commits / pushes
|
|
44
|
+
│
|
|
45
|
+
▼
|
|
46
|
+
CI runs ai-docgen
|
|
47
|
+
│
|
|
48
|
+
├─ First run?
|
|
49
|
+
│ └─ Generates all docs from scratch via LLM
|
|
50
|
+
│
|
|
51
|
+
└─ Already initialized?
|
|
52
|
+
├─ No relevant changes → skips (fast)
|
|
53
|
+
└─ Relevant changes → updates only affected AUTO sections
|
|
54
|
+
│
|
|
55
|
+
▼
|
|
56
|
+
Direct commit OR Pull Request (configurable)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The agent only rewrites `<!-- AUTO:section -->` blocks. Anything you write manually stays untouched.
|
|
60
|
+
|
|
61
|
+
## Quick Start
|
|
62
|
+
|
|
63
|
+
Install into any repository:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install ai-docgen
|
|
67
|
+
ai-docgen install
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This asks two questions (AI provider, commit mode) and creates:
|
|
71
|
+
- `.ai-docgen/ai-docgen.yml` — config
|
|
72
|
+
- `Makefile` targets: `make docs`, `make docs-sync`
|
|
73
|
+
- CI workflow (GitHub Actions or GitLab CI)
|
|
74
|
+
|
|
75
|
+
Then generate docs for the first time:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
make docs
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
After that, docs update automatically on every push.
|
|
82
|
+
|
|
83
|
+
## CLI Commands
|
|
84
|
+
|
|
85
|
+
| Command | Description |
|
|
86
|
+
|---------|-------------|
|
|
87
|
+
| `ai-docgen install` | Bootstrap a repository (interactive or `--auto`) |
|
|
88
|
+
| `ai-docgen init` | Generate all documents from scratch |
|
|
89
|
+
| `ai-docgen run` | Update changed sections based on latest diff |
|
|
90
|
+
| `ai-docgen sync` | Force re-sync all AUTO sections |
|
|
91
|
+
| `ai-docgen dashboard` | Terminal table of all registered projects |
|
|
92
|
+
| `ai-docgen report` | Generate static HTML status report |
|
|
93
|
+
|
|
94
|
+
## Configuration
|
|
95
|
+
|
|
96
|
+
`.ai-docgen/ai-docgen.yml`:
|
|
97
|
+
|
|
98
|
+
```yaml
|
|
99
|
+
provider:
|
|
100
|
+
type: claude # claude | openai | ollama
|
|
101
|
+
model: claude-opus-4-7
|
|
102
|
+
api_key_env: ANTHROPIC_API_KEY
|
|
103
|
+
|
|
104
|
+
output:
|
|
105
|
+
mode: direct # direct | pull_request
|
|
106
|
+
|
|
107
|
+
triggers:
|
|
108
|
+
paths:
|
|
109
|
+
- "src/**"
|
|
110
|
+
- "app/**"
|
|
111
|
+
ignore:
|
|
112
|
+
- "tests/**"
|
|
113
|
+
|
|
114
|
+
documents:
|
|
115
|
+
- type: readme
|
|
116
|
+
template: readme/default
|
|
117
|
+
target: README.md
|
|
118
|
+
- type: wiki
|
|
119
|
+
template: wiki/architecture
|
|
120
|
+
target: docs/wiki/architecture.md
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Supported Providers
|
|
124
|
+
|
|
125
|
+
| Provider | When to use |
|
|
126
|
+
|----------|-------------|
|
|
127
|
+
| Claude (Anthropic) | Best output quality |
|
|
128
|
+
| OpenAI (GPT-4o) | Alternative if you have OpenAI keys |
|
|
129
|
+
| Ollama | Local model, no external API — for private projects |
|
|
130
|
+
|
|
131
|
+
## Document Templates
|
|
132
|
+
|
|
133
|
+
Built-in templates cover the full documentation surface:
|
|
134
|
+
|
|
135
|
+
| Template | AUTO sections |
|
|
136
|
+
|----------|---------------|
|
|
137
|
+
| `readme/default` | overview, getting_started, architecture, api, development |
|
|
138
|
+
| `wiki/architecture` | overview, components, data_flow, dependencies |
|
|
139
|
+
| `wiki/api-contracts` | endpoints, authentication, error_codes |
|
|
140
|
+
| `wiki/development-guide` | setup, testing, code_style |
|
|
141
|
+
| `wiki/operations` | deployment, monitoring, runbooks, incident_response |
|
|
142
|
+
| `wiki/data-model` | entities, business_rules, relationships |
|
|
143
|
+
| `wiki/db-schema` | tables, indexes, migrations |
|
|
144
|
+
| `wiki/integrations` | external_services, auth_credentials, data_exchange |
|
|
145
|
+
| `wiki/security` | access_model, sensitive_data, requirements |
|
|
146
|
+
| `wiki/troubleshooting` | common_issues, diagnostics, known_limitations |
|
|
147
|
+
| `wiki/adr` | recent_decisions, decision_index |
|
|
148
|
+
|
|
149
|
+
Custom templates go in `.ai-docgen/templates/` inside your repository.
|
|
150
|
+
|
|
151
|
+
## AUTO / MANUAL Sections
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
# README
|
|
155
|
+
|
|
156
|
+
<!-- AUTO:overview -->
|
|
157
|
+
This section is managed by ai-docgen.
|
|
158
|
+
<!-- /AUTO:overview -->
|
|
159
|
+
|
|
160
|
+
<!-- MANUAL -->
|
|
161
|
+
## Contributing
|
|
162
|
+
|
|
163
|
+
Write whatever you want here — ai-docgen never touches MANUAL blocks.
|
|
164
|
+
<!-- /MANUAL -->
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Central Registry
|
|
168
|
+
|
|
169
|
+
After `ai-docgen init`, the project is registered in a central `registry.yml`. View all projects:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
ai-docgen dashboard # terminal table
|
|
173
|
+
ai-docgen report # HTML page at ai-docgen-report.html
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Development
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
poetry install
|
|
180
|
+
poetry run pytest # 46 tests
|
|
181
|
+
poetry run ruff check . # lint
|
|
182
|
+
poetry run mypy ai_docgen # type check
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## License
|
|
186
|
+
|
|
187
|
+
MIT
|
|
188
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
ai_docgen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
ai_docgen/analyzer.py,sha256=-uFz-iihTmf1Ck1HspJS-7KtT0EryyVB9ViE0bxS3OY,1729
|
|
3
|
+
ai_docgen/built_in_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
ai_docgen/built_in_templates/readme/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
ai_docgen/built_in_templates/readme/default.md.j2,sha256=F7LGAfQlfzRJ3-dl9Uhf_ruwW-eH0Wbm5HIDKdli2hA,420
|
|
6
|
+
ai_docgen/built_in_templates/wiki/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
ai_docgen/built_in_templates/wiki/adr.md.j2,sha256=Y8oji0BV4r-rlZFU0V-1ArXBtkru1LaUrkOAoet30bk,482
|
|
8
|
+
ai_docgen/built_in_templates/wiki/api-contracts.md.j2,sha256=_mOik1RcO1dR5KoH39QNIs-mhD2k3JNkWsZelX8z0cE,295
|
|
9
|
+
ai_docgen/built_in_templates/wiki/architecture.md.j2,sha256=Sr6nRGulp7FBY0VCTg0J8-E401QPken8qtxVDsLklzE,357
|
|
10
|
+
ai_docgen/built_in_templates/wiki/data-model.md.j2,sha256=f3y7wEVJFWqhTDkQtgnbPuowo0iZGLmVzK_QU2ESRAU,309
|
|
11
|
+
ai_docgen/built_in_templates/wiki/db-schema.md.j2,sha256=CFJNNIg4GtHJoljUgKq_gaNa7xy6PA_TOp-Snr5W3Wc,316
|
|
12
|
+
ai_docgen/built_in_templates/wiki/development-guide.md.j2,sha256=b_j_sTyRdUB1AuTqzOh16KNGJ8ji0lNV1bsdYgWGZuI,294
|
|
13
|
+
ai_docgen/built_in_templates/wiki/integrations.md.j2,sha256=epfkrKbxyXptsuZW1GjHf5JCMfyKWkUUyf5Zc7hXMaE,382
|
|
14
|
+
ai_docgen/built_in_templates/wiki/operations.md.j2,sha256=M8A466WoQeyFipSuMw5seO3ntmY3ITu1dS-MonPIfY0,404
|
|
15
|
+
ai_docgen/built_in_templates/wiki/security.md.j2,sha256=eb8v1QgQ_vp_EazcWqTZh0eIUDrPTylKLEL2s-EFM98,383
|
|
16
|
+
ai_docgen/built_in_templates/wiki/troubleshooting.md.j2,sha256=vXFFiUKie6MdbSk0Wh_coizyeRe9TA8Sl29F8J3T8Vg,364
|
|
17
|
+
ai_docgen/cli.py,sha256=ZXqHILRloaj_ofYYVTFnoYywYN9N0Tt-D6TvWWvppqc,4839
|
|
18
|
+
ai_docgen/config.py,sha256=8xRhLxIKtqa95yIMVI1f6tunyeHQcnXuXSw6xiMsD0Q,2131
|
|
19
|
+
ai_docgen/engine.py,sha256=fkZStouCKONvSwxA3b5xaE0cn0LeX7YlnSYcuMWye1o,7147
|
|
20
|
+
ai_docgen/outputs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
ai_docgen/outputs/base.py,sha256=pb81eALfRvT-ELYAxFGUa9s-ifvrQLi01y-obsLH85E,176
|
|
22
|
+
ai_docgen/outputs/direct.py,sha256=EcpWwSoLVxe-ERmil1KJe7XV-r3XNuJ81mtcmpt3MpA,460
|
|
23
|
+
ai_docgen/outputs/factory.py,sha256=JtHPXnEdw6F60_fU5qtYlB4jamNdwgJrcBK9caKfn60,436
|
|
24
|
+
ai_docgen/outputs/pull_request.py,sha256=VqNh7mJa3je0ac4xJZ0nN3M1GZeuxGtuVvd_oA-R8GU,2342
|
|
25
|
+
ai_docgen/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
ai_docgen/providers/base.py,sha256=CqMem3YRj8_4nKpM3MMM18dPzKqK_Uc8gdKaK2OzlmM,147
|
|
27
|
+
ai_docgen/providers/claude.py,sha256=WQeyNrkJqF9WX6XFpTfUthLbHt4Jfd8C21IK5RU3AV8,754
|
|
28
|
+
ai_docgen/providers/factory.py,sha256=tqUaW09POy9FCYL66VpMaP7tqUxKzQPuHWVQ5AyibeU,990
|
|
29
|
+
ai_docgen/providers/ollama.py,sha256=zRMwzQGrIlTuiGcR6MSm6ciAE0HAFi1WRizgo5ApVBY,883
|
|
30
|
+
ai_docgen/providers/openai.py,sha256=TF98V9jpWRRXpiwm1A3untGgeToBhj4t4fkTLCPJq0U,645
|
|
31
|
+
ai_docgen/registry.py,sha256=ptFx2L07k_m1U7nLK9MHO2P3_H7ML2cUSHr_IMiegTs,4027
|
|
32
|
+
ai_docgen/renderer.py,sha256=pZyNGJCCjDX-0PEabCxNO1Uz2svQFPFP_3ZsHFzEseQ,3616
|
|
33
|
+
ai_docgen/reporters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
ai_docgen/reporters/html.py,sha256=KTAVnz4z0C4_SMKZC9cSFC3WJxeu-Ek6T6ctjDD-oFM,1717
|
|
35
|
+
ai_docgen/reporters/terminal.py,sha256=of5ez0gBhmjgHtIp0llbUxjubz9uTpJKLLSyh6QtE8M,990
|
|
36
|
+
ai_docgen/scaffolder.py,sha256=qj5pI6DiqOds-W7VivkEFwVjYL7cJ2ridpf9ClpCXFA,5364
|
|
37
|
+
docwright-0.1.0.dist-info/METADATA,sha256=ZYFW8RzOp5fzgQAiTXBvPIDEwt3GVLUm4ELGh62ktwY,5341
|
|
38
|
+
docwright-0.1.0.dist-info/WHEEL,sha256=EGEvSphFYqXKs23-kQBeyNoJP1nrT8ZJKQoi5p5DYL8,88
|
|
39
|
+
docwright-0.1.0.dist-info/entry_points.txt,sha256=SSRvbV_1E2dXGRbLRQUjaEFqtihMJ1HwNI_mMcIlk_M,47
|
|
40
|
+
docwright-0.1.0.dist-info/licenses/LICENSE,sha256=SeGR-IOaMfiOmXLPSpDKFSsvI0uPCiN9uHO4XePSs1k,1069
|
|
41
|
+
docwright-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Artem Gotlib
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|