diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 36e074f..807fce1 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -29,9 +29,16 @@ jobs:
docs:
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pages: write
+ id-token: write
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install uv
@@ -39,12 +46,13 @@ jobs:
- name: Sync dependencies
run: uv sync --group dev
- name: Build documentation
- run: uv run mkdocs build
- - name: Deploy to Cloudflare Pages
- uses: cloudflare/pages-action@v1
+ run: uv run build-docs
+ - name: Setup Pages
+ uses: actions/configure-pages@v4
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- projectName: intent-kit-docs
- directory: site
- gitHubToken: ${{ secrets.GH_DEPLOY_TOKEN }}
+ path: './docs-site'
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
new file mode 100644
index 0000000..fd9250a
--- /dev/null
+++ b/.github/workflows/pages.yml
@@ -0,0 +1,55 @@
+name: Deploy to GitHub Pages
+
+on:
+ push:
+ branches: [main]
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.11'
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v6
+
+ - name: Sync dependencies
+ run: uv sync --group dev
+
+ - name: Build documentation
+ run: uv run build-docs
+
+ - name: Setup Pages
+ uses: actions/configure-pages@v4
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: './docs-site'
+
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
\ No newline at end of file
diff --git a/README.md b/README.md
index 59b098a..4a704ca 100644
--- a/README.md
+++ b/README.md
@@ -8,10 +8,10 @@ Build reliable, auditable AI applications that understand user intent and take i
[](https://pepy.tech/project/intentkit-py)
[](https://github.com/Stephen-Collins-tech/intent-kit)
[](https://github.com/Stephen-Collins-tech/intent-kit/blob/main/LICENSE)
- [](https://docs.intentkit.io)
+ [](https://stephen-collins-tech.github.io/intent-kit)
- Docs
+ Docs
---
diff --git a/docs/404.md b/docs/404.md
new file mode 100644
index 0000000..c878f12
--- /dev/null
+++ b/docs/404.md
@@ -0,0 +1,10 @@
+# Page Not Found
+
+The page you're looking for doesn't exist. Here are some helpful links:
+
+- [Home](/index.html)
+- [Quickstart](/quickstart.html)
+- [API Reference](/api/api-reference.html)
+- [Examples](/examples/index.html)
+
+If you think this is an error, please [report an issue](https://github.com/Stephen-Collins-tech/intent-kit/issues) on GitHub.
\ No newline at end of file
diff --git a/docs/robots.txt b/docs/robots.txt
new file mode 100644
index 0000000..51a3067
--- /dev/null
+++ b/docs/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://stephen-collins-tech.github.io/intent-kit/sitemap.xml
\ No newline at end of file
diff --git a/mkdocs.yml b/mkdocs.yml
deleted file mode 100644
index 57d4602..0000000
--- a/mkdocs.yml
+++ /dev/null
@@ -1,67 +0,0 @@
-site_name: Intent Kit
-site_description: Open-source Python framework for intent classification and execution
-site_url: https://docs.intentkit.io
-repo_url: https://github.com/Stephen-Collins-tech/intent-kit
-
-theme:
- name: material
- features:
- - content.code.copy
-
-plugins:
- - search
- - mkdocstrings
- - literate-nav
-
-markdown_extensions:
- - admonition
- - codehilite
- - toc:
- permalink: true
- - pymdownx.highlight:
- anchor_linenums: true
- line_spans: __span
- pygments_lang_class: true
- - pymdownx.inlinehilite
- - pymdownx.snippets
- - pymdownx.superfences
-
-nav:
- - Home: index.md
- - Quickstart: quickstart.md
- - Core Concepts:
- - Overview: concepts/index.md
- - Intent Graphs: concepts/intent-graphs.md
- - Nodes and Actions: concepts/nodes-and-actions.md
- - Context Architecture: concepts/context-architecture.md
- - Context Management: concepts/context-management.md
- - DAG Validation: concepts/dag-validation.md
- - Extractor Nodes: concepts/extractor-nodes.md
- - Clarification Nodes: concepts/clarification-nodes.md
- - API Reference:
- - API Reference: api/api-reference.md
- - Configuration:
- - Overview: configuration/index.md
- - JSON Serialization: configuration/json-serialization.md
- - LLM Integration: configuration/llm-integration.md
- - Services:
- - AI Services: services/ai-services.md
- - Utilities:
- - Utilities: utils/utilities.md
- - Examples:
- - Overview: examples/index.md
- - Basic Examples: examples/basic-examples.md
- - Calculator Bot: examples/calculator-bot.md
- - Context-Aware Chatbot: examples/context-aware-chatbot.md
- - Context Memory Demo: examples/context-memory-demo.md
- - DAG Examples: examples/dag-examples.md
- - JSON Demo: examples/json-demo.md
- - Development:
- - Overview: development/index.md
- - Building: development/building.md
- - Testing: development/testing.md
- - Evaluation: development/evaluation.md
- - Evaluation Framework: development/evaluation-framework.md
- - Debugging: development/debugging.md
- - Performance Monitoring: development/performance-monitoring.md
- - Documentation Management: development/documentation-management.md
diff --git a/pyproject.toml b/pyproject.toml
index 8f85b3e..dc15728 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -26,7 +26,7 @@ classifiers = [
[project.urls]
Homepage = "https://github.com/Stephen-Collins-tech/intent-kit"
-Documentation = "https://docs.intentkit.io"
+Documentation = "https://stephen-collins-tech.github.io/intent-kit"
Repository = "https://github.com/Stephen-Collins-tech/intent-kit"
"Bug Tracker" = "https://github.com/Stephen-Collins-tech/intent-kit/issues"
@@ -64,6 +64,7 @@ example = "scripts.examples:run_single"
list-examples = "scripts.examples:list_examples"
security = "scripts.security:main"
auto-amend = "scripts.auto_amend:main"
+build-docs = "scripts.build_docs:main"
[tool.setuptools.packages.find]
where = ["."]
@@ -80,10 +81,8 @@ dev = [
"coverage>=7.0",
"intentkit-py[all]",
"ipykernel>=6.0.0",
- "mkdocs-literate-nav>=0.6.0",
- "mkdocs-material>=9.5.17",
- "mkdocs>=1.5.0",
- "mkdocstrings[python]>=0.24.0",
+ "jinja2>=3.1.0",
+ "markdown>=3.5.0",
"mypy>=1.10.0",
"pre-commit>=3.6.0",
"pytest-cov>=5.0",
diff --git a/scripts/build_docs.py b/scripts/build_docs.py
new file mode 100644
index 0000000..538392f
--- /dev/null
+++ b/scripts/build_docs.py
@@ -0,0 +1,449 @@
+#!/usr/bin/env python3
+"""
+Static documentation builder for Intent Kit.
+
+This script converts Markdown documentation to static HTML for GitHub Pages deployment.
+"""
+
+import os
+import re
+import shutil
+from pathlib import Path
+from typing import Dict, List, Optional
+
+import markdown
+from jinja2 import Environment, FileSystemLoader
+
+
+class StaticDocBuilder:
+ """Builds static documentation from Markdown files."""
+
+ def __init__(self, docs_dir: str = "docs", output_dir: str = "docs-site"):
+ self.docs_dir = Path(docs_dir)
+ self.output_dir = Path(output_dir)
+ self.template_dir = Path("scripts/templates")
+
+ # Create template environment
+ self.env = Environment(loader=FileSystemLoader(str(self.template_dir)))
+
+ # Configure markdown
+ self.md = markdown.Markdown(
+ extensions=[
+ 'markdown.extensions.toc',
+ 'markdown.extensions.codehilite',
+ 'markdown.extensions.fenced_code',
+ 'markdown.extensions.tables',
+ 'markdown.extensions.admonition',
+ ],
+ extension_configs={
+ 'markdown.extensions.codehilite': {
+ 'css_class': 'highlight',
+ 'use_pygments': True,
+ }
+ }
+ )
+
+ # Navigation structure (matching mkdocs.yml)
+ self.nav_structure = [
+ {"Home": "index.md"},
+ {"Quickstart": "quickstart.md"},
+ {
+ "Core Concepts": [
+ {"Overview": "concepts/index.md"},
+ {"Intent Graphs": "concepts/intent-graphs.md"},
+ {"Nodes and Actions": "concepts/nodes-and-actions.md"},
+ {"Context Architecture": "concepts/context-architecture.md"},
+ {"Context Management": "concepts/context-management.md"},
+ {"DAG Validation": "concepts/dag-validation.md"},
+ {"Extractor Nodes": "concepts/extractor-nodes.md"},
+ {"Clarification Nodes": "concepts/clarification-nodes.md"},
+ ]
+ },
+ {
+ "API Reference": [
+ {"API Reference": "api/api-reference.md"},
+ ]
+ },
+ {
+ "Configuration": [
+ {"Overview": "configuration/index.md"},
+ {"JSON Serialization": "configuration/json-serialization.md"},
+ {"LLM Integration": "configuration/llm-integration.md"},
+ ]
+ },
+ {
+ "Services": [
+ {"AI Services": "services/ai-services.md"},
+ ]
+ },
+ {
+ "Utilities": [
+ {"Utilities": "utils/utilities.md"},
+ ]
+ },
+ {
+ "Examples": [
+ {"Overview": "examples/index.md"},
+ {"Basic Examples": "examples/basic-examples.md"},
+ {"Calculator Bot": "examples/calculator-bot.md"},
+ {"Context-Aware Chatbot": "examples/context-aware-chatbot.md"},
+ {"Context Memory Demo": "examples/context-memory-demo.md"},
+ {"DAG Examples": "examples/dag-examples.md"},
+ {"JSON Demo": "examples/json-demo.md"},
+ ]
+ },
+ {
+ "Development": [
+ {"Overview": "development/index.md"},
+ {"Building": "development/building.md"},
+ {"Testing": "development/testing.md"},
+ {"Evaluation": "development/evaluation.md"},
+ {"Evaluation Framework": "development/evaluation-framework.md"},
+ {"Debugging": "development/debugging.md"},
+ {"Performance Monitoring": "development/performance-monitoring.md"},
+ {"Documentation Management": "development/documentation-management.md"},
+ ]
+ },
+ ]
+
+ def build(self):
+ """Build the complete static documentation site."""
+ print("Building static documentation...")
+
+ # Clean output directory
+ if self.output_dir.exists():
+ shutil.rmtree(self.output_dir)
+ self.output_dir.mkdir(parents=True)
+
+ # Copy assets
+ self._copy_assets()
+
+ # Copy robots.txt
+ self._copy_robots_txt()
+
+ # Build navigation
+ nav_data = self._build_navigation()
+
+ # Process all markdown files
+ self._process_markdown_files(nav_data)
+
+ # Process 404 page separately
+ self._process_404_page()
+
+ # Create sitemap
+ self._create_sitemap()
+
+ print(f"Documentation built successfully in {self.output_dir}")
+
+ def _copy_assets(self):
+ """Copy CSS, JS, and other assets."""
+ # Copy any existing assets from docs directory
+ assets_src = self.docs_dir / "assets"
+ if assets_src.exists():
+ assets_dest = self.output_dir / "assets"
+ shutil.copytree(assets_src, assets_dest)
+
+ # Create basic CSS if it doesn't exist
+ css_file = self.output_dir / "assets" / "style.css"
+ css_file.parent.mkdir(parents=True, exist_ok=True)
+
+ if not css_file.exists():
+ with open(css_file, "w") as f:
+ f.write(self._get_default_css())
+
+ def _copy_robots_txt(self):
+ """Copy robots.txt file."""
+ robots_src = self.docs_dir / "robots.txt"
+ if robots_src.exists():
+ robots_dest = self.output_dir / "robots.txt"
+ shutil.copy2(robots_src, robots_dest)
+ print("Copied: robots.txt")
+
+ def _get_default_css(self) -> str:
+ """Get default CSS styles."""
+ return """
+/* Intent Kit Documentation Styles */
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+ line-height: 1.6;
+ color: #333;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 20px;
+}
+
+.nav {
+ background: #f8f9fa;
+ padding: 1rem;
+ border-radius: 8px;
+ margin-bottom: 2rem;
+}
+
+.nav ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.nav li {
+ margin: 0.5rem 0;
+}
+
+.nav a {
+ text-decoration: none;
+ color: #007bff;
+}
+
+.nav a:hover {
+ text-decoration: underline;
+}
+
+.content {
+ background: white;
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #2c3e50;
+ margin-top: 2rem;
+ margin-bottom: 1rem;
+}
+
+h1 {
+ border-bottom: 3px solid #3498db;
+ padding-bottom: 0.5rem;
+}
+
+code {
+ background: #f8f9fa;
+ padding: 0.2rem 0.4rem;
+ border-radius: 4px;
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
+}
+
+pre {
+ background: #f8f9fa;
+ padding: 1rem;
+ border-radius: 8px;
+ overflow-x: auto;
+ border-left: 4px solid #3498db;
+}
+
+pre code {
+ background: none;
+ padding: 0;
+}
+
+table {
+ border-collapse: collapse;
+ width: 100%;
+ margin: 1rem 0;
+}
+
+th, td {
+ border: 1px solid #ddd;
+ padding: 0.75rem;
+ text-align: left;
+}
+
+th {
+ background: #f8f9fa;
+ font-weight: bold;
+}
+
+.admonition {
+ padding: 1rem;
+ margin: 1rem 0;
+ border-radius: 8px;
+ border-left: 4px solid;
+}
+
+.admonition.note {
+ background: #e3f2fd;
+ border-color: #2196f3;
+}
+
+.admonition.warning {
+ background: #fff3e0;
+ border-color: #ff9800;
+}
+
+.admonition.danger {
+ background: #ffebee;
+ border-color: #f44336;
+}
+
+.breadcrumb {
+ margin-bottom: 1rem;
+ color: #666;
+}
+
+.breadcrumb a {
+ color: #007bff;
+ text-decoration: none;
+}
+
+.breadcrumb a:hover {
+ text-decoration: underline;
+}
+"""
+
+ def _build_navigation(self) -> Dict:
+ """Build navigation data structure."""
+ nav_data = {"pages": []}
+
+ def process_nav_item(item, parent_path=""):
+ if isinstance(item, dict):
+ for title, content in item.items():
+ if isinstance(content, str):
+ # Single page
+ file_path = content
+ url_path = file_path.replace('.md', '.html')
+ nav_data["pages"].append({
+ "title": title,
+ "file": file_path,
+ "url": url_path,
+ "path": parent_path
+ })
+ elif isinstance(content, list):
+ # Section with subpages
+ section = {"title": title, "pages": []}
+ for subitem in content:
+ process_nav_item(subitem, f"{parent_path}/{title}" if parent_path else title)
+ nav_data["pages"].append(section)
+
+ for item in self.nav_structure:
+ process_nav_item(item)
+
+ return nav_data
+
+ def _process_markdown_files(self, nav_data: Dict):
+ """Process all markdown files and convert to HTML."""
+ for page_info in nav_data["pages"]:
+ if isinstance(page_info, dict) and "file" in page_info:
+ self._process_single_file(page_info, nav_data)
+
+ def _process_single_file(self, page_info: Dict, nav_data: Dict):
+ """Process a single markdown file."""
+ md_file = self.docs_dir / page_info["file"]
+ if not md_file.exists():
+ print(f"Warning: {md_file} not found")
+ return
+
+ # Read markdown content
+ with open(md_file, 'r', encoding='utf-8') as f:
+ md_content = f.read()
+
+ # Convert to HTML
+ html_content = self.md.convert(md_content)
+
+ # Extract title from first h1 or filename
+ title = page_info["title"]
+ title_match = re.search(r']*>(.*?)
', html_content)
+ if title_match:
+ title = title_match.group(1)
+
+ # Generate breadcrumb
+ breadcrumb = self._generate_breadcrumb(page_info["path"])
+
+ # Render with template
+ template = self.env.get_template('page.html')
+ html_output = template.render(
+ title=title,
+ content=html_content,
+ navigation=nav_data,
+ breadcrumb=breadcrumb,
+ current_page=page_info["url"]
+ )
+
+ # Write output file
+ output_file = self.output_dir / page_info["url"]
+ output_file.parent.mkdir(parents=True, exist_ok=True)
+
+ with open(output_file, 'w', encoding='utf-8') as f:
+ f.write(html_output)
+
+ print(f"Built: {page_info['url']}")
+
+ def _generate_breadcrumb(self, path: str) -> List[Dict]:
+ """Generate breadcrumb navigation."""
+ if not path:
+ return []
+
+ parts = path.split('/')
+ breadcrumb = []
+ current_path = ""
+
+ for part in parts:
+ current_path = f"{current_path}/{part}" if current_path else part
+ breadcrumb.append({
+ "title": part,
+ "url": f"{current_path.lower().replace(' ', '-')}.html"
+ })
+
+ return breadcrumb
+
+ def _process_404_page(self):
+ """Process the 404 page separately."""
+ md_file = self.docs_dir / "404.md"
+ if not md_file.exists():
+ print("Warning: 404.md not found")
+ return
+
+ # Read markdown content
+ with open(md_file, 'r', encoding='utf-8') as f:
+ md_content = f.read()
+
+ # Convert to HTML
+ html_content = self.md.convert(md_content)
+
+ # Render with template (simplified for 404)
+ template = self.env.get_template('page.html')
+ html_output = template.render(
+ title="Page Not Found",
+ content=html_content,
+ navigation={"pages": []}, # No navigation for 404
+ breadcrumb=[],
+ current_page="404.html"
+ )
+
+ # Write output file
+ output_file = self.output_dir / "404.html"
+ with open(output_file, 'w', encoding='utf-8') as f:
+ f.write(html_output)
+
+ print("Built: 404.html")
+
+ def _create_sitemap(self):
+ """Create a sitemap.xml file."""
+ sitemap_content = """
+
+"""
+
+ # Add all HTML files to sitemap
+ for html_file in self.output_dir.rglob("*.html"):
+ relative_path = html_file.relative_to(self.output_dir)
+ url = f"https://stephen-collins-tech.github.io/intent-kit/{relative_path}"
+ sitemap_content += f"""
+ {url}
+ weekly
+ 0.8
+
+"""
+
+ sitemap_content += ""
+
+ with open(self.output_dir / "sitemap.xml", 'w') as f:
+ f.write(sitemap_content)
+
+
+def main():
+ """Main entry point."""
+ builder = StaticDocBuilder()
+ builder.build()
+
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/scripts/templates/page.html b/scripts/templates/page.html
new file mode 100644
index 0000000..09e012b
--- /dev/null
+++ b/scripts/templates/page.html
@@ -0,0 +1,227 @@
+
+
+
+
+
+ {{ title }} - Intent Kit Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if breadcrumb %}
+
+ {% endif %}
+
+
+ {{ content | safe }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uv.lock b/uv.lock
index 12bf42c..180f42d 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1,5 +1,5 @@
version = 1
-revision = 2
+revision = 3
requires-python = ">=3.11"
[[package]]
@@ -61,15 +61,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" },
]
-[[package]]
-name = "babel"
-version = "2.17.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" },
-]
-
[[package]]
name = "backports-tarfile"
version = "1.2.0"
@@ -79,20 +70,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" },
]
-[[package]]
-name = "backrefs"
-version = "5.9"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" },
- { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" },
- { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" },
- { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload-time = "2025-06-22T19:34:09.68Z" },
- { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload-time = "2025-06-22T19:34:11.037Z" },
- { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" },
-]
-
[[package]]
name = "black"
version = "25.1.0"
@@ -512,18 +489,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" },
]
-[[package]]
-name = "ghp-import"
-version = "2.1.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "python-dateutil" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
-]
-
[[package]]
name = "google-auth"
version = "2.40.3"
@@ -557,18 +522,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/50/7d/201894058552d5ed810930f9483bf6be8650e3d599efab180d0510d0eea1/google_genai-1.26.0-py3-none-any.whl", hash = "sha256:a050de052ee6e68654ba7cdb97028a576ad7108d0ecc9257c69bcc555498e9a2", size = 217693, upload-time = "2025-07-16T21:51:45.797Z" },
]
-[[package]]
-name = "griffe"
-version = "1.7.3"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "colorama" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/a9/3e/5aa9a61f7c3c47b0b52a1d930302992229d191bf4bc76447b324b731510a/griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b", size = 395137, upload-time = "2025-04-23T11:29:09.147Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75", size = 129303, upload-time = "2025-04-23T11:29:07.145Z" },
-]
-
[[package]]
name = "h11"
version = "0.16.0"
@@ -693,10 +646,8 @@ dev = [
{ name = "coverage" },
{ name = "intentkit-py", extra = ["all"] },
{ name = "ipykernel" },
- { name = "mkdocs" },
- { name = "mkdocs-literate-nav" },
- { name = "mkdocs-material" },
- { name = "mkdocstrings", extra = ["python"] },
+ { name = "jinja2" },
+ { name = "markdown" },
{ name = "mypy" },
{ name = "pip-audit" },
{ name = "pre-commit" },
@@ -733,10 +684,8 @@ dev = [
{ name = "coverage", specifier = ">=7.0" },
{ name = "intentkit-py", extras = ["all"], editable = "." },
{ name = "ipykernel", specifier = ">=6.0.0" },
- { name = "mkdocs", specifier = ">=1.5.0" },
- { name = "mkdocs-literate-nav", specifier = ">=0.6.0" },
- { name = "mkdocs-material", specifier = ">=9.5.17" },
- { name = "mkdocstrings", extras = ["python"], specifier = ">=0.24.0" },
+ { name = "jinja2", specifier = ">=3.1.0" },
+ { name = "markdown", specifier = ">=3.5.0" },
{ name = "mypy", specifier = ">=1.10.0" },
{ name = "pip-audit", specifier = ">=2.9.0" },
{ name = "pre-commit", specifier = ">=3.6.0" },
@@ -1087,146 +1036,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
]
-[[package]]
-name = "mergedeep"
-version = "1.3.4"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" },
-]
-
-[[package]]
-name = "mkdocs"
-version = "1.6.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "click" },
- { name = "colorama", marker = "sys_platform == 'win32'" },
- { name = "ghp-import" },
- { name = "jinja2" },
- { name = "markdown" },
- { name = "markupsafe" },
- { name = "mergedeep" },
- { name = "mkdocs-get-deps" },
- { name = "packaging" },
- { name = "pathspec" },
- { name = "pyyaml" },
- { name = "pyyaml-env-tag" },
- { name = "watchdog" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" },
-]
-
-[[package]]
-name = "mkdocs-autorefs"
-version = "1.4.2"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "markdown" },
- { name = "markupsafe" },
- { name = "mkdocs" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload-time = "2025-05-20T13:09:09.886Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload-time = "2025-05-20T13:09:08.237Z" },
-]
-
-[[package]]
-name = "mkdocs-get-deps"
-version = "0.2.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "mergedeep" },
- { name = "platformdirs" },
- { name = "pyyaml" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" },
-]
-
-[[package]]
-name = "mkdocs-literate-nav"
-version = "0.6.2"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "mkdocs" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/f6/5f/99aa379b305cd1c2084d42db3d26f6de0ea9bf2cc1d10ed17f61aff35b9a/mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75", size = 17419, upload-time = "2025-03-18T21:53:09.711Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/8a/84/b5b14d2745e4dd1a90115186284e9ee1b4d0863104011ab46abb7355a1c3/mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630", size = 13261, upload-time = "2025-03-18T21:53:08.1Z" },
-]
-
-[[package]]
-name = "mkdocs-material"
-version = "9.6.15"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "babel" },
- { name = "backrefs" },
- { name = "colorama" },
- { name = "jinja2" },
- { name = "markdown" },
- { name = "mkdocs" },
- { name = "mkdocs-material-extensions" },
- { name = "paginate" },
- { name = "pygments" },
- { name = "pymdown-extensions" },
- { name = "requests" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836, upload-time = "2025-07-01T10:14:15.671Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840, upload-time = "2025-07-01T10:14:13.18Z" },
-]
-
-[[package]]
-name = "mkdocs-material-extensions"
-version = "1.3.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" },
-]
-
-[[package]]
-name = "mkdocstrings"
-version = "0.29.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "jinja2" },
- { name = "markdown" },
- { name = "markupsafe" },
- { name = "mkdocs" },
- { name = "mkdocs-autorefs" },
- { name = "pymdown-extensions" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686, upload-time = "2025-03-31T08:33:11.997Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075, upload-time = "2025-03-31T08:33:09.661Z" },
-]
-
-[package.optional-dependencies]
-python = [
- { name = "mkdocstrings-python" },
-]
-
-[[package]]
-name = "mkdocstrings-python"
-version = "1.16.12"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "griffe" },
- { name = "mkdocs-autorefs" },
- { name = "mkdocstrings" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065, upload-time = "2025-06-03T12:52:49.276Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287, upload-time = "2025-06-03T12:52:47.819Z" },
-]
-
[[package]]
name = "more-itertools"
version = "10.7.0"
@@ -1416,15 +1225,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
]
-[[package]]
-name = "paginate"
-version = "0.5.7"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" },
-]
-
[[package]]
name = "parso"
version = "0.8.4"
@@ -1719,19 +1519,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
]
-[[package]]
-name = "pymdown-extensions"
-version = "10.16"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "markdown" },
- { name = "pyyaml" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197, upload-time = "2025-06-21T17:56:36.974Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload-time = "2025-06-21T17:56:35.356Z" },
-]
-
[[package]]
name = "pyparsing"
version = "3.2.3"
@@ -1864,18 +1651,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
]
-[[package]]
-name = "pyyaml-env-tag"
-version = "1.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "pyyaml" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
-]
-
[[package]]
name = "pyzmq"
version = "27.0.0"
@@ -2254,33 +2029,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5c/c6/f8f28009920a736d0df434b52e9feebfb4d702ba942f15338cb4a83eafc1/virtualenv-20.32.0-py3-none-any.whl", hash = "sha256:2c310aecb62e5aa1b06103ed7c2977b81e042695de2697d01017ff0f1034af56", size = 6057761, upload-time = "2025-07-21T04:09:48.059Z" },
]
-[[package]]
-name = "watchdog"
-version = "6.0.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" },
- { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" },
- { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" },
- { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" },
- { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" },
- { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" },
- { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" },
- { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" },
- { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" },
- { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
- { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
- { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
- { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" },
- { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" },
- { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" },
- { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" },
- { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" },
- { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
- { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
-]
-
[[package]]
name = "wcwidth"
version = "0.2.13"