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.
Files changed (41) hide show
  1. ai_docgen/__init__.py +0 -0
  2. ai_docgen/analyzer.py +59 -0
  3. ai_docgen/built_in_templates/__init__.py +0 -0
  4. ai_docgen/built_in_templates/readme/__init__.py +0 -0
  5. ai_docgen/built_in_templates/readme/default.md.j2 +30 -0
  6. ai_docgen/built_in_templates/wiki/__init__.py +0 -0
  7. ai_docgen/built_in_templates/wiki/adr.md.j2 +27 -0
  8. ai_docgen/built_in_templates/wiki/api-contracts.md.j2 +20 -0
  9. ai_docgen/built_in_templates/wiki/architecture.md.j2 +25 -0
  10. ai_docgen/built_in_templates/wiki/data-model.md.j2 +22 -0
  11. ai_docgen/built_in_templates/wiki/db-schema.md.j2 +22 -0
  12. ai_docgen/built_in_templates/wiki/development-guide.md.j2 +22 -0
  13. ai_docgen/built_in_templates/wiki/integrations.md.j2 +22 -0
  14. ai_docgen/built_in_templates/wiki/operations.md.j2 +27 -0
  15. ai_docgen/built_in_templates/wiki/security.md.j2 +22 -0
  16. ai_docgen/built_in_templates/wiki/troubleshooting.md.j2 +22 -0
  17. ai_docgen/cli.py +136 -0
  18. ai_docgen/config.py +71 -0
  19. ai_docgen/engine.py +165 -0
  20. ai_docgen/outputs/__init__.py +0 -0
  21. ai_docgen/outputs/base.py +7 -0
  22. ai_docgen/outputs/direct.py +16 -0
  23. ai_docgen/outputs/factory.py +12 -0
  24. ai_docgen/outputs/pull_request.py +69 -0
  25. ai_docgen/providers/__init__.py +0 -0
  26. ai_docgen/providers/base.py +6 -0
  27. ai_docgen/providers/claude.py +22 -0
  28. ai_docgen/providers/factory.py +26 -0
  29. ai_docgen/providers/ollama.py +25 -0
  30. ai_docgen/providers/openai.py +20 -0
  31. ai_docgen/registry.py +125 -0
  32. ai_docgen/renderer.py +104 -0
  33. ai_docgen/reporters/__init__.py +0 -0
  34. ai_docgen/reporters/html.py +54 -0
  35. ai_docgen/reporters/terminal.py +31 -0
  36. ai_docgen/scaffolder.py +163 -0
  37. docwright-0.1.0.dist-info/METADATA +188 -0
  38. docwright-0.1.0.dist-info/RECORD +41 -0
  39. docwright-0.1.0.dist-info/WHEEL +4 -0
  40. docwright-0.1.0.dist-info/entry_points.txt +3 -0
  41. 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)
@@ -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,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry-core 2.4.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ ai-docgen=ai_docgen.cli:cli
3
+
@@ -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.