From ce041dfaf7e46f74aeaeefe3906895795486164a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 18 Aug 2025 03:43:09 +0000 Subject: [PATCH] Migrate docs to GitHub Pages with custom static site generator Co-authored-by: stephenc211 --- .github/workflows/deploy.yml | 28 ++- .github/workflows/pages.yml | 55 +++++ README.md | 4 +- docs/404.md | 10 + docs/robots.txt | 4 + mkdocs.yml | 67 ------ pyproject.toml | 9 +- scripts/build_docs.py | 449 +++++++++++++++++++++++++++++++++++ scripts/templates/page.html | 227 ++++++++++++++++++ uv.lock | 262 +------------------- 10 files changed, 774 insertions(+), 341 deletions(-) create mode 100644 .github/workflows/pages.yml create mode 100644 docs/404.md create mode 100644 docs/robots.txt delete mode 100644 mkdocs.yml create mode 100644 scripts/build_docs.py create mode 100644 scripts/templates/page.html 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 [![Downloads](https://static.pepy.tech/badge/intentkit-py/month)](https://pepy.tech/project/intentkit-py) [![Versions](https://img.shields.io/pypi/pyversions/intentkit-py.svg)](https://github.com/Stephen-Collins-tech/intent-kit) [![License](https://img.shields.io/github/license/Stephen-Collins-tech/intent-kit.svg)](https://github.com/Stephen-Collins-tech/intent-kit/blob/main/LICENSE) - [![Documentation](https://img.shields.io/badge/docs-online-blue)](https://docs.intentkit.io) + [![Documentation](https://img.shields.io/badge/docs-online-blue)](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 + + + + + + + + + + + + +
+
+

+ Intent Kit +

+

Open-source Python framework for intent classification and execution

+
+
+ +
+ + +
+ {% 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"