From c46a8e75a0986bba40b265ecbc673a3d2a784cb4 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:17:53 +0800 Subject: [PATCH 01/59] =?UTF-8?q?=E2=9C=A8=20(config):=20Update=20project?= =?UTF-8?q?=20name=20to=20agent-assembly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5bac7fb..a527c1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "test-python-uv-project-template" +name = "agent-assembly" version = "0.0.3" description = "๐Ÿ Just a template of Python project be managed by UV." authors = [{ name = "Chisanan232", email = "chi10211201@cycu.org.tw" }] From b2df771b87c3f29a21f234d9dc94a489f272341f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:18:49 +0800 Subject: [PATCH 02/59] =?UTF-8?q?=F0=9F=94=A7=20(config):=20Reset=20projec?= =?UTF-8?q?t=20version=20to=200.0.0=20for=20initial=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a527c1b..2e55d45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "agent-assembly" -version = "0.0.3" +version = "0.0.0" description = "๐Ÿ Just a template of Python project be managed by UV." authors = [{ name = "Chisanan232", email = "chi10211201@cycu.org.tw" }] requires-python = ">=3.12,<4.0" From 93222b6f46c869d9714d11848f75370ef1420322 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:20:56 +0800 Subject: [PATCH 03/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(config):=20Update?= =?UTF-8?q?=20project=20description=20for=20AI=20Agent=20Assembly=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2e55d45..07541c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "hatchling.build" [project] name = "agent-assembly" version = "0.0.0" -description = "๐Ÿ Just a template of Python project be managed by UV." +description = "Python SDK for AI Agent Assembly - A governance-native runtime for AI agents" authors = [{ name = "Chisanan232", email = "chi10211201@cycu.org.tw" }] requires-python = ">=3.12,<4.0" readme = "README.md" From 561ec60ceebc04a404de320aaaca0475d5537574 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:22:43 +0800 Subject: [PATCH 04/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(config):=20Update?= =?UTF-8?q?=20project=20authors=20and=20email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 07541c3..7d0a916 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "agent-assembly" version = "0.0.0" description = "Python SDK for AI Agent Assembly - A governance-native runtime for AI agents" -authors = [{ name = "Chisanan232", email = "chi10211201@cycu.org.tw" }] +authors = [{ name = "Agent Assembly Team", email = "team@agent-assembly.dev" }] requires-python = ">=3.12,<4.0" readme = "README.md" license = { file = "LICENSE" } From f43fab9217ab0085018271e5a3091c85712c8c30 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:24:30 +0800 Subject: [PATCH 05/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(config):=20Update?= =?UTF-8?q?=20project=20repository=20and=20homepage=20URLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7d0a916..beb2ae1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ dependencies = [] [project.urls] -Homepage = "https://github.com/Chisanan232/Template-Python-UV-Project" -Repository = "https://github.com/Chisanan232/Template-Python-UV-Project" +Homepage = "https://github.com/agent-assembly/python-sdk" +Repository = "https://github.com/agent-assembly/python-sdk" [dependency-groups] dev = [ From 53b4f125e8994e26a000b3c3c8b692da3c271d46 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:25:26 +0800 Subject: [PATCH 06/59] =?UTF-8?q?=E2=9C=A8=20(config):=20Add=20relevant=20?= =?UTF-8?q?keywords=20for=20AI=20agent=20governance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index beb2ae1..3b2da22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ authors = [{ name = "Agent Assembly Team", email = "team@agent-assembly.dev" }] requires-python = ">=3.12,<4.0" readme = "README.md" license = { file = "LICENSE" } -keywords = [] +keywords = ["ai-agent", "governance", "mcp", "assembly", "runtime", "policy"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", From d0477f4c0abcdc786d71142a64b713cc7b3044af Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:27:32 +0800 Subject: [PATCH 07/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(config):=20Update?= =?UTF-8?q?=20project=20classifiers=20for=20AI=20agent=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3b2da22..1bb2e0a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,8 +14,8 @@ keywords = ["ai-agent", "governance", "mcp", "assembly", "runtime", "policy"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", - "Topic :: Utilities", "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Artificial Intelligence", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", From b45f93545ef002267e564755d80fd0a15f8a53a5 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:28:41 +0800 Subject: [PATCH 08/59] =?UTF-8?q?=E2=9C=A8=20(deps):=20Add=20core=20SDK=20?= =?UTF-8?q?dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1bb2e0a..51c9618 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,11 @@ classifiers = [ "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", ] -dependencies = [] +dependencies = [ + "pydantic>=2.0.0,<3.0.0", + "httpx>=0.27.0,<1.0.0", + "typing-extensions>=4.0.0", +] [project.urls] Homepage = "https://github.com/agent-assembly/python-sdk" From c41ff78a475f20a3e034a97dce0587fd03a1dc83 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:31:16 +0800 Subject: [PATCH 09/59] =?UTF-8?q?=E2=9C=A8=20(deps):=20Add=20development?= =?UTF-8?q?=20dependencies=20for=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 51c9618..9d59f7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,6 @@ dev = [ "pytest-cov>=5.0.0,<8", "coverage~=7.10", "pytest-rerunfailures>=14.0,<17", - "aiohttp>=3.12.13", "pytest-asyncio>=0.23.0,<2", "python-dotenv>=1.0.1,<2", ] From 24346d49c5cc2947fb3db8c87cb32397379912c0 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:32:48 +0800 Subject: [PATCH 10/59] =?UTF-8?q?=E2=9C=A8=20(deps):=20Add=20Ruff=20linter?= =?UTF-8?q?=20to=20development=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 9d59f7c..2cf0326 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ dev = [ "pytest-rerunfailures>=14.0,<17", "pytest-asyncio>=0.23.0,<2", "python-dotenv>=1.0.1,<2", + "ruff>=0.1.0", ] pre-commit-ci = [ "pre-commit>=3.5.0,<5", From 3da173f6302255c1f55c4bda405509126158f49d Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:51:38 +0800 Subject: [PATCH 11/59] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(package):=20Rename?= =?UTF-8?q?=20source=20folder=20from=20src=20to=20agent=5Fassembly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {src => agent_assembly}/__init__.py | 0 {src => agent_assembly}/py.typed | 0 {src => agent_assembly}/types.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {src => agent_assembly}/__init__.py (100%) rename {src => agent_assembly}/py.typed (100%) rename {src => agent_assembly}/types.py (100%) diff --git a/src/__init__.py b/agent_assembly/__init__.py similarity index 100% rename from src/__init__.py rename to agent_assembly/__init__.py diff --git a/src/py.typed b/agent_assembly/py.typed similarity index 100% rename from src/py.typed rename to agent_assembly/py.typed diff --git a/src/types.py b/agent_assembly/types.py similarity index 100% rename from src/types.py rename to agent_assembly/types.py From 348275de865f6c5a919c0c9a4cfbdd4ec386dcd1 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:53:03 +0800 Subject: [PATCH 12/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(config):=20Update?= =?UTF-8?q?=20build=20configuration=20to=20use=20agent=5Fassembly=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2cf0326..ba11b12 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,11 +56,11 @@ default-groups = [ ] [tool.hatch.build.targets.sdist] -include = ["src/"] -packages = ["src"] -#artifacts = ["slack_mcp/py.typed"] +include = ["agent_assembly/"] +packages = ["agent_assembly"] +#artifacts = ["agent_assembly/py.typed"] [tool.hatch.build.targets.wheel] -include = ["src/"] -packages = ["src"] -#artifacts = ["slack_mcp/py.typed"] +include = ["agent_assembly/"] +packages = ["agent_assembly"] +#artifacts = ["agent_assembly/py.typed"] From ccdf173f665e16aab1848ccdab17508dcd29c838 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:55:22 +0800 Subject: [PATCH 13/59] =?UTF-8?q?=E2=9C=A8=20(package):=20Add=20version=20?= =?UTF-8?q?export=20to=20package=20=5F=5Finit=5F=5F.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/agent_assembly/__init__.py b/agent_assembly/__init__.py index e69de29..7f8846c 100644 --- a/agent_assembly/__init__.py +++ b/agent_assembly/__init__.py @@ -0,0 +1,3 @@ +"""Agent Assembly Python SDK.""" + +__version__ = "0.0.0" \ No newline at end of file From a6f0d191c1eae21573bbaf50243512fe3779d0c6 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 13:58:07 +0800 Subject: [PATCH 14/59] =?UTF-8?q?=E2=9C=A8=20(package):=20Create=20core=20?= =?UTF-8?q?module=20for=20assembly=20initialization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/core/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 agent_assembly/core/__init__.py diff --git a/agent_assembly/core/__init__.py b/agent_assembly/core/__init__.py new file mode 100644 index 0000000..492b428 --- /dev/null +++ b/agent_assembly/core/__init__.py @@ -0,0 +1 @@ +"""Core module for Agent Assembly initialization.""" From 5d9be496d13433183c4371b5fbdf280e1371b024 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:02:09 +0800 Subject: [PATCH 15/59] =?UTF-8?q?=E2=9C=A8=20(package):=20Create=20client?= =?UTF-8?q?=20module=20for=20gateway=20communication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/client/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 agent_assembly/client/__init__.py diff --git a/agent_assembly/client/__init__.py b/agent_assembly/client/__init__.py new file mode 100644 index 0000000..a10c86c --- /dev/null +++ b/agent_assembly/client/__init__.py @@ -0,0 +1 @@ +"""Client module for gateway communication.""" From 5222278cccedd4a7191f973594b8e26abb0caa2f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:02:55 +0800 Subject: [PATCH 16/59] =?UTF-8?q?=E2=9C=A8=20(types):=20Add=20core=20type?= =?UTF-8?q?=20definitions=20for=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/types.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/agent_assembly/types.py b/agent_assembly/types.py index fed1cd1..2a9709d 100644 --- a/agent_assembly/types.py +++ b/agent_assembly/types.py @@ -1,5 +1,5 @@ """ -Type definitions for the Python package. +Type definitions for the Agent Assembly Python SDK. This module provides centralized type aliases and type definitions following PEP 561, PEP 484, PEP 585, and PEP 695 standards for static type checking with MyPy. @@ -8,10 +8,10 @@ which provides better type inference and cleaner syntax compared to TypeAlias. Type Hierarchy: - - JSON types: Basic JSON-compatible types - - Slack types: Slack-specific type definitions - - Event types: Event handling type definitions - - Handler types: Handler function signatures + - Agent types: Agent identity and configuration types + - Policy types: Policy enforcement and governance types + - Event types: Audit logging and event handling types + - Gateway types: Communication with governance gateway """ from __future__ import annotations @@ -32,4 +32,8 @@ ) __all__ = [ + "AgentId", + "PolicyId", + "AssemblyId", + "ConfigDict", ] From 6c0e7c0f4bf053df0076a9ddf0d6a3592e827470 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:04:53 +0800 Subject: [PATCH 17/59] =?UTF-8?q?=E2=9C=A8=20(package):=20Create=20excepti?= =?UTF-8?q?ons=20module=20for=20SDK=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/exceptions/__init__.py | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 agent_assembly/exceptions/__init__.py diff --git a/agent_assembly/exceptions/__init__.py b/agent_assembly/exceptions/__init__.py new file mode 100644 index 0000000..14886a3 --- /dev/null +++ b/agent_assembly/exceptions/__init__.py @@ -0,0 +1,28 @@ +"""Exception hierarchy for SDK errors.""" + +from __future__ import annotations + + +class AssemblyError(Exception): + """Base exception for Agent Assembly SDK errors.""" + pass + + +class AgentError(AssemblyError): + """Exception raised for agent-related errors.""" + pass + + +class PolicyError(AssemblyError): + """Exception raised for policy-related errors.""" + pass + + +class GatewayError(AssemblyError): + """Exception raised for gateway communication errors.""" + pass + + +class ConfigurationError(AssemblyError): + """Exception raised for configuration errors.""" + pass From 6595ac8f964896dc87599566720b14e3c0edf0cd Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:18:27 +0800 Subject: [PATCH 18/59] =?UTF-8?q?=E2=9C=A8=20(package):=20Create=20models?= =?UTF-8?q?=20module=20for=20data=20structures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/models/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 agent_assembly/models/__init__.py diff --git a/agent_assembly/models/__init__.py b/agent_assembly/models/__init__.py new file mode 100644 index 0000000..9d3bd7b --- /dev/null +++ b/agent_assembly/models/__init__.py @@ -0,0 +1 @@ +"""Data models for Agent Assembly SDK.""" From 7421ee88be21dbda9c975113c66f403be7d784b0 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:21:25 +0800 Subject: [PATCH 19/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(package):=20Update?= =?UTF-8?q?=20package=20exports=20in=20=5F=5Finit=5F=5F.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/__init__.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/agent_assembly/__init__.py b/agent_assembly/__init__.py index 7f8846c..f5e6087 100644 --- a/agent_assembly/__init__.py +++ b/agent_assembly/__init__.py @@ -1,3 +1,20 @@ """Agent Assembly Python SDK.""" -__version__ = "0.0.0" \ No newline at end of file +from agent_assembly.exceptions import ( + AgentError, + AssemblyError, + ConfigurationError, + GatewayError, + PolicyError, +) + +__version__ = "0.0.0" + +__all__ = [ + "__version__", + "AssemblyError", + "AgentError", + "PolicyError", + "GatewayError", + "ConfigurationError", +] \ No newline at end of file From ea078d4c03615b579ee2d15b70769bc7c8142bf0 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:24:57 +0800 Subject: [PATCH 20/59] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(docs):=20Rename=20d?= =?UTF-8?q?ocs=5Fwith=5Fdocusarus=20to=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {docs_with_docusarus => docs}/.gitignore | 0 {docs_with_docusarus => docs}/README.md | 0 .../contents/blog/2025-09-01-project-origin.md | 0 .../contents/blog/authors.yml | 0 .../contents/blog/tags.yml | 0 .../contents/development/architecture.mdx | 0 .../contents/development/architecture/index.mdx | 0 .../development/architecture/project-structure.mdx | 0 .../development/ci-cd/additional-ci-workflows.mdx | 0 .../development/ci-cd/continuous-integration.mdx | 0 .../contents/development/ci-cd/developer-guide.mdx | 0 .../development/ci-cd/documentation-deployment.mdx | 0 .../contents/development/ci-cd/index.mdx | 0 .../contents/development/ci-cd/release-system.mdx | 0 .../development/ci-cd/reusable-workflows.mdx | 0 .../development/ci-cd/type-checking-workflow.mdx | 0 .../contents/development/coding-style.mdx | 0 .../contents/development/index.mdx | 0 .../contents/development/requirements.mdx | 0 .../contents/development/sidebars.ts | 0 .../contents/development/type-checking.mdx | 0 .../contents/development/workflow.mdx | 0 .../contents/document/api-references/index.mdx | 0 .../contents/document/changelog.mdx | 0 .../contents/document/contribute/discuss.mdx | 0 .../contents/document/contribute/index.mdx | 0 .../contents/document/contribute/report-bug.mdx | 0 .../document/contribute/request-changes.mdx | 0 .../contents/document/introduction.mdx | 0 .../contents/document/quick-start/how-to-run.mdx | 0 .../contents/document/quick-start/index.mdx | 0 .../contents/document/quick-start/installation.mdx | 0 .../contents/document/quick-start/requirements.mdx | 0 .../contents/document/sidebars.ts | 0 {docs_with_docusarus => docs}/docusaurus.config.ts | 0 {docs_with_docusarus => docs}/package.json | 0 {docs_with_docusarus => docs}/pnpm-lock.yaml | 0 .../src/components/HomepageFeatures/index.tsx | 0 .../components/HomepageFeatures/styles.module.css | 0 .../src/components/MDXContent.js | 0 .../src/components/VersionsArchived/index.tsx | 0 .../components/VersionsArchived/styles.module.css | 0 {docs_with_docusarus => docs}/src/css/custom.css | 0 .../src/pages/index.module.css | 0 {docs_with_docusarus => docs}/src/pages/index.tsx | 0 .../src/pages/markdown-page.mdx | 0 .../src/pages/versions.mdx | 0 .../src/theme/NavbarItem/ComponentTypes.tsx | 0 .../UnifiedVersionsDropdownNavbarItem/index.tsx | 0 .../styles.module.css | 0 .../static/img/easy_to_use.png | Bin .../static/img/python_base.png | Bin .../static/img/python_logo_icon.png | Bin {docs_with_docusarus => docs}/tsconfig.json | 0 54 files changed, 0 insertions(+), 0 deletions(-) rename {docs_with_docusarus => docs}/.gitignore (100%) rename {docs_with_docusarus => docs}/README.md (100%) rename {docs_with_docusarus => docs}/contents/blog/2025-09-01-project-origin.md (100%) rename {docs_with_docusarus => docs}/contents/blog/authors.yml (100%) rename {docs_with_docusarus => docs}/contents/blog/tags.yml (100%) rename {docs_with_docusarus => docs}/contents/development/architecture.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/architecture/index.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/architecture/project-structure.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/additional-ci-workflows.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/continuous-integration.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/developer-guide.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/documentation-deployment.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/index.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/release-system.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/reusable-workflows.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/ci-cd/type-checking-workflow.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/coding-style.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/index.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/requirements.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/sidebars.ts (100%) rename {docs_with_docusarus => docs}/contents/development/type-checking.mdx (100%) rename {docs_with_docusarus => docs}/contents/development/workflow.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/api-references/index.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/changelog.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/contribute/discuss.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/contribute/index.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/contribute/report-bug.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/contribute/request-changes.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/introduction.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/quick-start/how-to-run.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/quick-start/index.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/quick-start/installation.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/quick-start/requirements.mdx (100%) rename {docs_with_docusarus => docs}/contents/document/sidebars.ts (100%) rename {docs_with_docusarus => docs}/docusaurus.config.ts (100%) rename {docs_with_docusarus => docs}/package.json (100%) rename {docs_with_docusarus => docs}/pnpm-lock.yaml (100%) rename {docs_with_docusarus => docs}/src/components/HomepageFeatures/index.tsx (100%) rename {docs_with_docusarus => docs}/src/components/HomepageFeatures/styles.module.css (100%) rename {docs_with_docusarus => docs}/src/components/MDXContent.js (100%) rename {docs_with_docusarus => docs}/src/components/VersionsArchived/index.tsx (100%) rename {docs_with_docusarus => docs}/src/components/VersionsArchived/styles.module.css (100%) rename {docs_with_docusarus => docs}/src/css/custom.css (100%) rename {docs_with_docusarus => docs}/src/pages/index.module.css (100%) rename {docs_with_docusarus => docs}/src/pages/index.tsx (100%) rename {docs_with_docusarus => docs}/src/pages/markdown-page.mdx (100%) rename {docs_with_docusarus => docs}/src/pages/versions.mdx (100%) rename {docs_with_docusarus => docs}/src/theme/NavbarItem/ComponentTypes.tsx (100%) rename {docs_with_docusarus => docs}/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/index.tsx (100%) rename {docs_with_docusarus => docs}/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/styles.module.css (100%) rename {docs_with_docusarus => docs}/static/img/easy_to_use.png (100%) rename {docs_with_docusarus => docs}/static/img/python_base.png (100%) rename {docs_with_docusarus => docs}/static/img/python_logo_icon.png (100%) rename {docs_with_docusarus => docs}/tsconfig.json (100%) diff --git a/docs_with_docusarus/.gitignore b/docs/.gitignore similarity index 100% rename from docs_with_docusarus/.gitignore rename to docs/.gitignore diff --git a/docs_with_docusarus/README.md b/docs/README.md similarity index 100% rename from docs_with_docusarus/README.md rename to docs/README.md diff --git a/docs_with_docusarus/contents/blog/2025-09-01-project-origin.md b/docs/contents/blog/2025-09-01-project-origin.md similarity index 100% rename from docs_with_docusarus/contents/blog/2025-09-01-project-origin.md rename to docs/contents/blog/2025-09-01-project-origin.md diff --git a/docs_with_docusarus/contents/blog/authors.yml b/docs/contents/blog/authors.yml similarity index 100% rename from docs_with_docusarus/contents/blog/authors.yml rename to docs/contents/blog/authors.yml diff --git a/docs_with_docusarus/contents/blog/tags.yml b/docs/contents/blog/tags.yml similarity index 100% rename from docs_with_docusarus/contents/blog/tags.yml rename to docs/contents/blog/tags.yml diff --git a/docs_with_docusarus/contents/development/architecture.mdx b/docs/contents/development/architecture.mdx similarity index 100% rename from docs_with_docusarus/contents/development/architecture.mdx rename to docs/contents/development/architecture.mdx diff --git a/docs_with_docusarus/contents/development/architecture/index.mdx b/docs/contents/development/architecture/index.mdx similarity index 100% rename from docs_with_docusarus/contents/development/architecture/index.mdx rename to docs/contents/development/architecture/index.mdx diff --git a/docs_with_docusarus/contents/development/architecture/project-structure.mdx b/docs/contents/development/architecture/project-structure.mdx similarity index 100% rename from docs_with_docusarus/contents/development/architecture/project-structure.mdx rename to docs/contents/development/architecture/project-structure.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/additional-ci-workflows.mdx b/docs/contents/development/ci-cd/additional-ci-workflows.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/additional-ci-workflows.mdx rename to docs/contents/development/ci-cd/additional-ci-workflows.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/continuous-integration.mdx b/docs/contents/development/ci-cd/continuous-integration.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/continuous-integration.mdx rename to docs/contents/development/ci-cd/continuous-integration.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/developer-guide.mdx b/docs/contents/development/ci-cd/developer-guide.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/developer-guide.mdx rename to docs/contents/development/ci-cd/developer-guide.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/documentation-deployment.mdx b/docs/contents/development/ci-cd/documentation-deployment.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/documentation-deployment.mdx rename to docs/contents/development/ci-cd/documentation-deployment.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/index.mdx b/docs/contents/development/ci-cd/index.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/index.mdx rename to docs/contents/development/ci-cd/index.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/release-system.mdx b/docs/contents/development/ci-cd/release-system.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/release-system.mdx rename to docs/contents/development/ci-cd/release-system.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/reusable-workflows.mdx b/docs/contents/development/ci-cd/reusable-workflows.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/reusable-workflows.mdx rename to docs/contents/development/ci-cd/reusable-workflows.mdx diff --git a/docs_with_docusarus/contents/development/ci-cd/type-checking-workflow.mdx b/docs/contents/development/ci-cd/type-checking-workflow.mdx similarity index 100% rename from docs_with_docusarus/contents/development/ci-cd/type-checking-workflow.mdx rename to docs/contents/development/ci-cd/type-checking-workflow.mdx diff --git a/docs_with_docusarus/contents/development/coding-style.mdx b/docs/contents/development/coding-style.mdx similarity index 100% rename from docs_with_docusarus/contents/development/coding-style.mdx rename to docs/contents/development/coding-style.mdx diff --git a/docs_with_docusarus/contents/development/index.mdx b/docs/contents/development/index.mdx similarity index 100% rename from docs_with_docusarus/contents/development/index.mdx rename to docs/contents/development/index.mdx diff --git a/docs_with_docusarus/contents/development/requirements.mdx b/docs/contents/development/requirements.mdx similarity index 100% rename from docs_with_docusarus/contents/development/requirements.mdx rename to docs/contents/development/requirements.mdx diff --git a/docs_with_docusarus/contents/development/sidebars.ts b/docs/contents/development/sidebars.ts similarity index 100% rename from docs_with_docusarus/contents/development/sidebars.ts rename to docs/contents/development/sidebars.ts diff --git a/docs_with_docusarus/contents/development/type-checking.mdx b/docs/contents/development/type-checking.mdx similarity index 100% rename from docs_with_docusarus/contents/development/type-checking.mdx rename to docs/contents/development/type-checking.mdx diff --git a/docs_with_docusarus/contents/development/workflow.mdx b/docs/contents/development/workflow.mdx similarity index 100% rename from docs_with_docusarus/contents/development/workflow.mdx rename to docs/contents/development/workflow.mdx diff --git a/docs_with_docusarus/contents/document/api-references/index.mdx b/docs/contents/document/api-references/index.mdx similarity index 100% rename from docs_with_docusarus/contents/document/api-references/index.mdx rename to docs/contents/document/api-references/index.mdx diff --git a/docs_with_docusarus/contents/document/changelog.mdx b/docs/contents/document/changelog.mdx similarity index 100% rename from docs_with_docusarus/contents/document/changelog.mdx rename to docs/contents/document/changelog.mdx diff --git a/docs_with_docusarus/contents/document/contribute/discuss.mdx b/docs/contents/document/contribute/discuss.mdx similarity index 100% rename from docs_with_docusarus/contents/document/contribute/discuss.mdx rename to docs/contents/document/contribute/discuss.mdx diff --git a/docs_with_docusarus/contents/document/contribute/index.mdx b/docs/contents/document/contribute/index.mdx similarity index 100% rename from docs_with_docusarus/contents/document/contribute/index.mdx rename to docs/contents/document/contribute/index.mdx diff --git a/docs_with_docusarus/contents/document/contribute/report-bug.mdx b/docs/contents/document/contribute/report-bug.mdx similarity index 100% rename from docs_with_docusarus/contents/document/contribute/report-bug.mdx rename to docs/contents/document/contribute/report-bug.mdx diff --git a/docs_with_docusarus/contents/document/contribute/request-changes.mdx b/docs/contents/document/contribute/request-changes.mdx similarity index 100% rename from docs_with_docusarus/contents/document/contribute/request-changes.mdx rename to docs/contents/document/contribute/request-changes.mdx diff --git a/docs_with_docusarus/contents/document/introduction.mdx b/docs/contents/document/introduction.mdx similarity index 100% rename from docs_with_docusarus/contents/document/introduction.mdx rename to docs/contents/document/introduction.mdx diff --git a/docs_with_docusarus/contents/document/quick-start/how-to-run.mdx b/docs/contents/document/quick-start/how-to-run.mdx similarity index 100% rename from docs_with_docusarus/contents/document/quick-start/how-to-run.mdx rename to docs/contents/document/quick-start/how-to-run.mdx diff --git a/docs_with_docusarus/contents/document/quick-start/index.mdx b/docs/contents/document/quick-start/index.mdx similarity index 100% rename from docs_with_docusarus/contents/document/quick-start/index.mdx rename to docs/contents/document/quick-start/index.mdx diff --git a/docs_with_docusarus/contents/document/quick-start/installation.mdx b/docs/contents/document/quick-start/installation.mdx similarity index 100% rename from docs_with_docusarus/contents/document/quick-start/installation.mdx rename to docs/contents/document/quick-start/installation.mdx diff --git a/docs_with_docusarus/contents/document/quick-start/requirements.mdx b/docs/contents/document/quick-start/requirements.mdx similarity index 100% rename from docs_with_docusarus/contents/document/quick-start/requirements.mdx rename to docs/contents/document/quick-start/requirements.mdx diff --git a/docs_with_docusarus/contents/document/sidebars.ts b/docs/contents/document/sidebars.ts similarity index 100% rename from docs_with_docusarus/contents/document/sidebars.ts rename to docs/contents/document/sidebars.ts diff --git a/docs_with_docusarus/docusaurus.config.ts b/docs/docusaurus.config.ts similarity index 100% rename from docs_with_docusarus/docusaurus.config.ts rename to docs/docusaurus.config.ts diff --git a/docs_with_docusarus/package.json b/docs/package.json similarity index 100% rename from docs_with_docusarus/package.json rename to docs/package.json diff --git a/docs_with_docusarus/pnpm-lock.yaml b/docs/pnpm-lock.yaml similarity index 100% rename from docs_with_docusarus/pnpm-lock.yaml rename to docs/pnpm-lock.yaml diff --git a/docs_with_docusarus/src/components/HomepageFeatures/index.tsx b/docs/src/components/HomepageFeatures/index.tsx similarity index 100% rename from docs_with_docusarus/src/components/HomepageFeatures/index.tsx rename to docs/src/components/HomepageFeatures/index.tsx diff --git a/docs_with_docusarus/src/components/HomepageFeatures/styles.module.css b/docs/src/components/HomepageFeatures/styles.module.css similarity index 100% rename from docs_with_docusarus/src/components/HomepageFeatures/styles.module.css rename to docs/src/components/HomepageFeatures/styles.module.css diff --git a/docs_with_docusarus/src/components/MDXContent.js b/docs/src/components/MDXContent.js similarity index 100% rename from docs_with_docusarus/src/components/MDXContent.js rename to docs/src/components/MDXContent.js diff --git a/docs_with_docusarus/src/components/VersionsArchived/index.tsx b/docs/src/components/VersionsArchived/index.tsx similarity index 100% rename from docs_with_docusarus/src/components/VersionsArchived/index.tsx rename to docs/src/components/VersionsArchived/index.tsx diff --git a/docs_with_docusarus/src/components/VersionsArchived/styles.module.css b/docs/src/components/VersionsArchived/styles.module.css similarity index 100% rename from docs_with_docusarus/src/components/VersionsArchived/styles.module.css rename to docs/src/components/VersionsArchived/styles.module.css diff --git a/docs_with_docusarus/src/css/custom.css b/docs/src/css/custom.css similarity index 100% rename from docs_with_docusarus/src/css/custom.css rename to docs/src/css/custom.css diff --git a/docs_with_docusarus/src/pages/index.module.css b/docs/src/pages/index.module.css similarity index 100% rename from docs_with_docusarus/src/pages/index.module.css rename to docs/src/pages/index.module.css diff --git a/docs_with_docusarus/src/pages/index.tsx b/docs/src/pages/index.tsx similarity index 100% rename from docs_with_docusarus/src/pages/index.tsx rename to docs/src/pages/index.tsx diff --git a/docs_with_docusarus/src/pages/markdown-page.mdx b/docs/src/pages/markdown-page.mdx similarity index 100% rename from docs_with_docusarus/src/pages/markdown-page.mdx rename to docs/src/pages/markdown-page.mdx diff --git a/docs_with_docusarus/src/pages/versions.mdx b/docs/src/pages/versions.mdx similarity index 100% rename from docs_with_docusarus/src/pages/versions.mdx rename to docs/src/pages/versions.mdx diff --git a/docs_with_docusarus/src/theme/NavbarItem/ComponentTypes.tsx b/docs/src/theme/NavbarItem/ComponentTypes.tsx similarity index 100% rename from docs_with_docusarus/src/theme/NavbarItem/ComponentTypes.tsx rename to docs/src/theme/NavbarItem/ComponentTypes.tsx diff --git a/docs_with_docusarus/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/index.tsx b/docs/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/index.tsx similarity index 100% rename from docs_with_docusarus/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/index.tsx rename to docs/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/index.tsx diff --git a/docs_with_docusarus/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/styles.module.css b/docs/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/styles.module.css similarity index 100% rename from docs_with_docusarus/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/styles.module.css rename to docs/src/theme/NavbarItem/UnifiedVersionsDropdownNavbarItem/styles.module.css diff --git a/docs_with_docusarus/static/img/easy_to_use.png b/docs/static/img/easy_to_use.png similarity index 100% rename from docs_with_docusarus/static/img/easy_to_use.png rename to docs/static/img/easy_to_use.png diff --git a/docs_with_docusarus/static/img/python_base.png b/docs/static/img/python_base.png similarity index 100% rename from docs_with_docusarus/static/img/python_base.png rename to docs/static/img/python_base.png diff --git a/docs_with_docusarus/static/img/python_logo_icon.png b/docs/static/img/python_logo_icon.png similarity index 100% rename from docs_with_docusarus/static/img/python_logo_icon.png rename to docs/static/img/python_logo_icon.png diff --git a/docs_with_docusarus/tsconfig.json b/docs/tsconfig.json similarity index 100% rename from docs_with_docusarus/tsconfig.json rename to docs/tsconfig.json From fd7bd1f35b105e49d3faaf2b31bcb8aeb93ffdc5 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:27:55 +0800 Subject: [PATCH 21/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(docs):=20Update=20R?= =?UTF-8?q?EADME=20title=20to=20Agent=20Assembly=20Python=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0d61aa..1007f8e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Your lib name +# Agent Assembly Python SDK ## Overview From a0c0027a2f47676925135fe205c497bb3d8d54af Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:28:06 +0800 Subject: [PATCH 22/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(docs):=20Update=20R?= =?UTF-8?q?EADME=20overview=20section?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1007f8e..24e141a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Overview -๐Ÿšง Clear brief of your lib +The Agent Assembly Python SDK provides a governance-native runtime for AI agents. This SDK enables developers to integrate AI agent lifecycle management, policy enforcement, and audit logging into their applications. It follows a WebAssembly-like pattern with a Rust core runtime and Python client interface. ## Python versions support From 0d2084b4dfe0297268aaeae6d9bdbca202ff463f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:29:51 +0800 Subject: [PATCH 23/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(docs):=20Update=20R?= =?UTF-8?q?EADME=20quick=20start=20section?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 24e141a..b2da0e5 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,17 @@ The Agent Assembly Python SDK provides a governance-native runtime for AI agents ## Quickly Start -๐Ÿšง The details of quickly start as simple demonstration for users +```python +from agent_assembly import init_assembly + +# Initialize the agent assembly +assembly = init_assembly( + gateway_url="https://gateway.agent-assembly.dev", + agent_id="my-agent-001" +) + +# Your agent is now ready with governance enabled +``` ## Documentation From e9ab252d6a17144174ef5c6afe2da6811b54e0a9 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:30:56 +0800 Subject: [PATCH 24/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(docs):=20Update=20R?= =?UTF-8?q?EADME=20badges=20with=20actual=20package=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b2da0e5..907a9e2 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ The Agent Assembly Python SDK provides a governance-native runtime for AI agents ## Python versions support -๐Ÿšง The required Python versions of this library +This library requires Python 3.12+ -[![Supported Versions](https://img.shields.io/pypi/pyversions/.svg?logo=python&logoColor=FBE072)](https://pypi.org/project/) +[![Supported Versions](https://img.shields.io/pypi/pyversions/agent-assembly.svg?logo=python&logoColor=FBE072)](https://pypi.org/project/agent-assembly) ## Quickly Start From b4784209085a9fabd2bf3f43c11062d6bee600d8 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:33:14 +0800 Subject: [PATCH 25/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20PUL?= =?UTF-8?q?L=5FREQUEST=5FTEMPLATE.md=20for=20SDK=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 82 +++++++++++--------------------- 1 file changed, 29 insertions(+), 53 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ecbe64b..fb05f3d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,65 +1,41 @@ -[//]: # (The target why you modify something.) -## _Target_ +## Description -[//]: # (The summary what you did or your target.) -* ### Task summary: +Brief description of the changes made in this PR. - N/A. +## Type of Change -[//]: # (The task ID in ClickUp [project: https://app.clickup.com/9018752317/v/f/90183126979/90182605225] which maps this change.) -* ### Task tickets: +- [ ] โœจ New feature +- [ ] ๐Ÿ”ง Bug fix +- [ ] โ™ป๏ธ Refactoring +- [ ] ๐Ÿ€ Performance improvement +- [ ] ๐Ÿ“š Documentation update +- [ ] ๐Ÿš€ Release - * Task ID: N/A. - * Relative task IDs: - * [ ] N/A. - * Relative PRs: - * N/A. +## Breaking Changes -[//]: # (The key changes like demonstration, as-is & to-be, etc. for reviewers could be faster understand what it changes) -* ### Key point change (optional): +Does this PR introduce any breaking changes? - N/A. +- [ ] No +- [ ] Yes (please describe below) +## Related Issues -[//]: # (What's the scope in project it would affect with your modify? For example, would it affect CI workflow? Or any feature usage? Please list all the items which may be affected.) -## _Effecting Scope_ +- Related JIRA ticket: AAASM-XX +- Related GitHub issues: #XX -* Action Types: - * [ ] โœจ Adding new something - * [ ] ๐ŸŸข No breaking change - * [ ] ๐ŸŸ  Has breaking change - * [ ] โœ๏ธ Modifying existing something - * [ ] ๐ŸŸข No breaking change - * [ ] ๐ŸŸ  Has breaking change - * [ ] ๐Ÿšฎ Removing something - * [ ] ๐Ÿ”ง Fixing bug - * [ ] โ™ป๏ธ Refactoring something - * [ ] ๐Ÿ€ Improving something (maybe performance, code quality, security, etc.) - * [ ] ๐Ÿš€ Release -* Scopes: - * [ ] โœ๏ธ Command line interface - * [ ] ๐Ÿ’ผ Core feature - * [ ] ๐Ÿ•ธ๏ธ Web server - * [ ] ๐Ÿค– MCP server - * [ ] ๐Ÿชก API client - * [ ] ๐Ÿซ€ Data model - * [ ] ๐ŸŽจ UI/UX (maybe command line interface, etc.) - * [ ] โ›‘๏ธ Error handling - * [ ] ๐Ÿงช Testing - * [ ] ๐Ÿงช Unit testing - * [ ] ๐Ÿงช Integration testing - * [ ] ๐Ÿงช End-to-end testing - * [ ] ๐Ÿงช Contract testing - * [ ] ๐Ÿ“š Documentation - * [ ] ๐Ÿš€ Building - * [ ] ๐Ÿค– CI/CD - * [ ] ๐Ÿ”— Dependencies - * [ ] ๐Ÿ“ฆ Project configurations -* Additional description: - N/A. +## Testing +Describe the testing performed for this PR: -[//]: # (The brief of major changes what your modify. Please list it.) -## _Description_ +- [ ] Unit tests added/updated +- [ ] Integration tests added/updated +- [ ] Manual testing performed +- [ ] No tests required (explain why) -* N/A. +## Checklist + +- [ ] Code follows project style guidelines +- [ ] Self-review completed +- [ ] Comments added for complex logic +- [ ] Documentation updated if needed +- [ ] All tests passing From 8c13cd2833d6dc50d8c1ff4ab09166b6bc0d6ec2 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:34:31 +0800 Subject: [PATCH 26/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20COD?= =?UTF-8?q?EOWNERS=20with=20actual=20maintainers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/CODEOWNERS | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 67e3bdb..7b7fb85 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,53 +1,53 @@ -# CODEOWNERS file for the project +# CODEOWNERS file for the Agent Assembly Python SDK project # Format: file-pattern @owner # Order is important; the last matching pattern takes precedence. ####################################### # Repository Default Owner ####################################### -* +* @agent-assembly/core-team # Software license annotation -/LICENSE +/LICENSE @agent-assembly/core-team ####################################### # Source Code ####################################### -/src/ใ€‚ -*.py +/agent_assembly/ @agent-assembly/core-team +*.py @agent-assembly/core-team ####################################### # Tests ####################################### -/test/ +/test/ @agent-assembly/core-team ####################################### # Documentation ####################################### -/docs/ -*.md -*.mdx -*.ts +/docs/ @agent-assembly/core-team +*.md @agent-assembly/core-team +*.mdx @agent-assembly/core-team +*.ts @agent-assembly/core-team ####################################### # CI/CD Configuration ####################################### -/.github/ -/.github/workflows/ +/.github/ @agent-assembly/core-team +/.github/workflows/ @agent-assembly/core-team ####################################### # Build Configuration ####################################### -/pyproject.toml -/scripts/ +/pyproject.toml @agent-assembly/core-team +/scripts/ @agent-assembly/core-team ####################################### # Code Quality and Testing ####################################### -/.pre-commit-config.yaml -/pytest.ini -/.coveragerc -/mypy.ini -/.pylintrc -/sonar-project.properties -/codecov.yml +/.pre-commit-config.yaml @agent-assembly/core-team +/pytest.ini @agent-assembly/core-team +/.coveragerc @agent-assembly/core-team +/mypy.ini @agent-assembly/core-team +/.pylintrc @agent-assembly/core-team +/sonar-project.properties @agent-assembly/core-team +/codecov.yml @agent-assembly/core-team From 6b196943b22d9ad764ae8b31f661aea2d1424d4f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:35:38 +0800 Subject: [PATCH 27/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20dep?= =?UTF-8?q?endabot=20configuration=20for=20actual=20repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index cbd99b9..c45b5ac 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -26,7 +26,7 @@ updates: # Docusaurus (TSX) - package-ecosystem: "npm" - directory: "/docs_with_docusarus" + directory: "/docs" schedule: interval: "daily" labels: From d09fb4c84208239191636db631991ebd4a234df8 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:35:56 +0800 Subject: [PATCH 28/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20wor?= =?UTF-8?q?kflow=20repository=20references=20to=20actual=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 81eedc4..cc72e56 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,7 +5,7 @@ on: # For the push event, it only runs building and testing. push: branches: - - "" + - "master" - "!**e2e" - "!e2e**" paths: @@ -14,7 +14,7 @@ on: - ".github/workflows/rw_build_and_test.yaml" - ".github/workflows/rw_run_all_test_and_record.yaml" # For source code and test - - "/**/*.py" + - "agent_assembly/**/*.py" - "!**/__pkg_info__.py" - "test/**/*.py" # For shell script for CI @@ -32,7 +32,7 @@ on: # or other checking, i.e., record the test report by CodeCov and check the code quality by SonarQube. pull_request: branches: - - "" + - "master" - "!**e2e" - "!e2e**" paths: @@ -41,7 +41,7 @@ on: - ".github/workflows/rw_build_and_test.yaml" - ".github/workflows/rw_run_all_test_and_record.yaml" # For source code and test - - "/**/*.py" + - "agent_assembly/**/*.py" - "!**/__pkg_info__.py" - "test/**/*.py" # For shell script for CI From 6f6ab545ffd12cc529911c027ddf1665f94201de Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:37:33 +0800 Subject: [PATCH 29/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20son?= =?UTF-8?q?ar-project.properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index 6e2c71d..f48eb92 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,16 +1,16 @@ sonar.host.url=https://sonarcloud.io -sonar.projectKey= -sonar.organization= +sonar.projectKey=agent-assembly_python-sdk +sonar.organization=agent-assembly sonar.issues.defaultAssigneeLogin=Bryant # This is the name and version displayed in the SonarCloud UI. -sonar.projectName= +sonar.projectName=agent-assembly-python-sdk sonar.projectVersion=0.0.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. sonar.projectBaseDir=./ -sonar.sources=src/ +sonar.sources=agent_assembly/ sonar.tests=test/ # Python test coverage settings @@ -20,7 +20,7 @@ sonar.python.coverage.reportPaths=coverage*.xml #sonar.coverage.python.reportPaths=coverage*.xml # Ignore by test coverage -sonar.coverage.exclusions=src/types.py +sonar.coverage.exclusions=agent_assembly/types.py # Ignore by general analyze # sonar.exclusions=**/migrations/** From ce12bc789c8eebb2fbc9bee207b2733f722b6a32 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:38:20 +0800 Subject: [PATCH 30/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20pre?= =?UTF-8?q?-commit=20hooks=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c2f58b5..cfbea1d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: rev: v1.16.0 hooks: - id: mypy - package: src,test + package: agent_assembly,test # exclude: ^test/unit_test.{1,64}.py args: # - --strict From dccaa3055eac17b9140bc15f92f81564d3f671b2 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:41:17 +0800 Subject: [PATCH 31/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20wor?= =?UTF-8?q?kflow=20paths=20for=20agent=5Fassembly=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/REUSABLE_WORKFLOWS.md | 2 +- .github/workflows/docs-automerge.yml | 2 +- .github/workflows/docs-build-check.yaml | 40 ++++++++++++------------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/REUSABLE_WORKFLOWS.md b/.github/workflows/REUSABLE_WORKFLOWS.md index 15e9da4..19c8768 100644 --- a/.github/workflows/REUSABLE_WORKFLOWS.md +++ b/.github/workflows/REUSABLE_WORKFLOWS.md @@ -272,7 +272,7 @@ jobs: Your project should follow this structure for optimal compatibility: ``` your-project/ -โ”œโ”€โ”€ src/your_package_name/ # Your Python package +โ”œโ”€โ”€ agent_assembly/ # Your Python package โ”œโ”€โ”€ test/ โ”‚ โ”œโ”€โ”€ unit_test/ โ”‚ โ”œโ”€โ”€ integration_test/ diff --git a/.github/workflows/docs-automerge.yml b/.github/workflows/docs-automerge.yml index d11b20e..263d35f 100644 --- a/.github/workflows/docs-automerge.yml +++ b/.github/workflows/docs-automerge.yml @@ -27,7 +27,7 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} filters: | code: - - '/**' + - 'agent_assembly/**' - 'examples/**' - 'scripts/**' - 'test/**' diff --git a/.github/workflows/docs-build-check.yaml b/.github/workflows/docs-build-check.yaml index 5e85988..e43808c 100644 --- a/.github/workflows/docs-build-check.yaml +++ b/.github/workflows/docs-build-check.yaml @@ -7,27 +7,27 @@ on: - ".github/workflows/docs-build-check.yaml" - ".github/workflows/documentation.yaml" # Documentation dependencies - - "docs_with_docusarus/package.json" - - "docs_with_docusarus/pnpm-lock.yaml" + - "docs/package.json" + - "docs/pnpm-lock.yaml" # Docusaurus configuration - - "docs_with_docusarus/docusaurus.config.ts" - - "docs_with_docusarus/tsconfig.json" + - "docs/docusaurus.config.ts" + - "docs/tsconfig.json" # Documentation content - - "docs_with_docusarus/**/*.md" - - "docs_with_docusarus/**/*.mdx" - - "docs_with_docusarus/**/*.ts" - - "docs_with_docusarus/**/*.tsx" - - "docs_with_docusarus/**/*.js" - - "docs_with_docusarus/**/*.jsx" - - "docs_with_docusarus/**/*.css" - - "docs_with_docusarus/**/*.json" + - "docs/**/*.md" + - "docs/**/*.mdx" + - "docs/**/*.ts" + - "docs/**/*.tsx" + - "docs/**/*.js" + - "docs/**/*.jsx" + - "docs/**/*.css" + - "docs/**/*.json" # Docusaurus versioning - - "docs_with_docusarus/*_versions.json" - - "docs_with_docusarus/*_versioned_docs/**" - - "docs_with_docusarus/*_versioned_sidebars/**" + - "docs/*_versions.json" + - "docs/*_versioned_docs/**" + - "docs/*_versioned_sidebars/**" # Static assets - - "docs_with_docusarus/static/**" - - "docs_with_docusarus/src/**" + - "docs/static/**" + - "docs/src/**" permissions: contents: read @@ -44,7 +44,7 @@ jobs: with: operation: test node-version: '24' - working-directory: docs_with_docusarus + working-directory: docs upload-artifacts: true validate_build: @@ -56,11 +56,11 @@ jobs: uses: actions/download-artifact@v8 with: name: documentation-build - path: docs_with_docusarus/build + path: docs/build - name: Validate build quality run: | - cd docs_with_docusarus/build + cd docs/build # Count HTML files HTML_COUNT=$(find . -name "*.html" | wc -l) From d1b472a62aa3221f6fc05f2c30942da2a060350c Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:41:47 +0800 Subject: [PATCH 32/59] =?UTF-8?q?=E2=9C=A8=20(config):=20Add=20ruff.toml?= =?UTF-8?q?=20configuration=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruff.toml | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 ruff.toml diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..02c0ab6 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,56 @@ +[exclude] +".ai/" +".github/" +".git/" +".idea/" +"__pycache__" +"*.egg-info" +".mypy_cache" +".pytest_cache" +".tox" +".venv" +"venv" +"build" +"dist" +"docs_with_docusarus" +"docs" + +line-length = 120 +indent-width = 4 +target-version = "py312" + +[lint] +select = [ + "E", # pycodestyle errors + "W", # pycodestyle warnings + "F", # pyflakes + "I", # isort + "B", # flake8-bugbear + "C4", # flake8-comprehensions + "UP", # pyupgrade + "ARG", # flake8-unused-arguments + "SIM", # flake8-simplify +] + +ignore = [ + "E501", # line too long (handled by formatter) + "B008", # do not perform function calls in argument defaults + "C901", # too complex + "ARG001", # unused function argument +] + +[lint.per-file-ignores] +"__init__.py" = ["F401"] +"test/**/*.py" = ["S101"] + +[lint.isort] +known-first-party = ["agent_assembly"] + +[format] +quote-style = "double" +indent-style = "space" +skip-magic-trailing-comma = false +line-ending = "auto" + +[pydocstyle] +convention = "google" From be435d228e2e8654e74b696ec0a169438889257a Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:42:28 +0800 Subject: [PATCH 33/59] =?UTF-8?q?=F0=9F=9A=AE=20(docker):=20Remove=20Docke?= =?UTF-8?q?rfile=20(not=20needed=20for=20Python=20SDK=20library)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 56 ------------------------------------------------------ 1 file changed, 56 deletions(-) delete mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index e0c333a..0000000 --- a/Dockerfile +++ /dev/null @@ -1,56 +0,0 @@ -# Build stage -FROM python:3.13-slim AS builder - -# Set environment variables -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - PIP_NO_CACHE_DIR=off \ - PIP_DISABLE_PIP_VERSION_CHECK=on - -# Install uv -COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ - -# Set working directory -WORKDIR /app - -# Copy only requirements files first to leverage Docker cache -COPY pyproject.toml uv.lock LICENSE README.md ./ - -# Create virtual environment and install dependencies -RUN uv venv /app/.venv && \ - . /app/.venv/bin/activate && \ - uv sync --locked --all-extras - -# Final stage -FROM python:3.13-slim - -# Set environment variables -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - PATH="/app/.venv/bin:$PATH" \ - SERVER_PORT=8000 - -# Install uv -COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ - -WORKDIR /app - -# Copy virtual environment from builder stage -COPY --from=builder /app/.venv /app/.venv - -# Copy application code -COPY . . - -# Create a non-root user to run the app and set permissions -RUN groupadd -r appuser && \ - useradd -r -g appuser -d /app appuser && \ - chown -R appuser:appuser /app - -# Switch to non-root user -USER appuser - -# Expose port from environment variable -EXPOSE ${SERVER_PORT} - -# Set the entry point -CMD ["bash", "./scripts/docker/run-server.sh"] From fc0c3bf24c2df402532afa3d200bab2a63862a5d Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:44:19 +0800 Subject: [PATCH 34/59] =?UTF-8?q?=F0=9F=9A=AE=20(docs):=20Remove=20README?= =?UTF-8?q?=5FDOCKERHUB.md=20(not=20needed=20for=20Python=20SDK=20library)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README_DOCKERHUB.md | 145 -------------------------------------------- 1 file changed, 145 deletions(-) delete mode 100644 README_DOCKERHUB.md diff --git a/README_DOCKERHUB.md b/README_DOCKERHUB.md deleted file mode 100644 index 785cce8..0000000 --- a/README_DOCKERHUB.md +++ /dev/null @@ -1,145 +0,0 @@ -# ๐Ÿฆพ ClickUp MCP Server - -[![Docker Pulls](https://img.shields.io/docker/pulls/chisanan232/clickup-mcp-server)](https://hub.docker.com/r/chisanan232/clickup-mcp-server) -[![Docker Image Size](https://img.shields.io/docker/image-size/chisanan232/clickup-mcp-server/latest)](https://hub.docker.com/r/chisanan232/clickup-mcp-server) -[![Docker Stars](https://img.shields.io/docker/stars/chisanan232/clickup-mcp-server)](https://hub.docker.com/r/chisanan232/clickup-mcp-server) -[![Docker Automated build](https://img.shields.io/docker/automated/chisanan232/clickup-mcp-server)](https://hub.docker.com/r/chisanan232/clickup-mcp-server) -[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) -[![linting: pylint](https://img.shields.io/badge/linting-pylint-yellowgreen)](https://github.com/pylint-dev/pylint) - -## ๐Ÿ” Overview - -A powerful FastAPI web server that exposes ClickUp functionality through a REST API using the Model-Controller-Provider (MCP) pattern. - -## ๐Ÿณ Docker Usage - -### ๐Ÿš€ Quick Start - -Pull the Docker image: - -```bash -docker pull chisanan232/clickup-mcp-server:latest -``` - -Run the container with minimal configuration: - -```bash -docker run -d -p 8000:8000 -e CLICKUP_API_TOKEN=your_token_here chisanan232/clickup-mcp-server -``` - -Access the API documentation at `http://localhost:8000/docs` - -### ๐Ÿ”ง Configuration Options - -The Docker container can be configured using environment variables: - -| Environment Variable | Description | Default | -|----------------------|-----------------------------------------------------------------|-----------| -| `CLICKUP_API_TOKEN` | Your ClickUp API token (required) | - | -| `SERVER_HOST` | Host to bind the server to | `0.0.0.0` | -| `SERVER_PORT` | Port to bind the server to | `8000` | -| `MCP_TRANSPORT` | Transport mode (`sse`, `streamable-http`) | `sse` | -| `LOG_LEVEL` | Logging level (`debug`, `info`, `warning`, `error`, `critical`) | `info` | -| `RELOAD` | Enable auto-reload for development | - | - -### ๐Ÿ“ Using Environment Files - -You can use a `.env` file for configuration instead of passing environment variables directly: - -1. Create a `.env` file with your configuration: - -``` -CLICKUP_API_TOKEN=your_clickup_api_token_here -LOG_LEVEL=debug -``` - -2. Mount the file when running the container: - -```bash -docker run -d -p 8000:8000 -v $(pwd)/.env:/app/.env chisanan232/clickup-mcp-server -``` - -### ๐Ÿ”„ Custom Port Configuration - -To use a custom port: - -```bash -docker run -d -p 9000:9000 -e SERVER_PORT=9000 -e CLICKUP_API_TOKEN=your_token_here chisanan232/clickup-mcp-server -``` - -### ๐Ÿ›ก๏ธ Securing Your API Token - -For production environments, consider using Docker secrets or a secure environment management solution rather than passing the API token directly. - -### ๐Ÿ” Health Check - -The container includes a health check endpoint at `/health` that can be used to verify the server is running correctly. - -## ๐Ÿ“š Python Usage - -### Installation - -```bash -pip install -e . -``` - -### Configuration - -There are two ways to configure your ClickUp API token: - -1. **Environment variable**: Set the `CLICKUP_API_TOKEN` environment variable -2. **Environment file**: Create a `.env` file with your ClickUp API token: - -``` -CLICKUP_API_TOKEN=your_clickup_api_token_here -``` - -See the `.env.example` file for an example configuration. - -### Starting the server - -```bash -python -m clickup_mcp -``` - -### Command Line Options - -The server accepts the following command line options: - -- `--host`: Host to bind the server to (default: 0.0.0.0) -- `--port`: Port to bind the server to (default: 8000) -- `--log-level`: Logging level (choices: debug, info, warning, error, critical; default: info) -- `--reload`: Enable auto-reload for development -- `--env`: Path to a custom .env file for environment variables (default: .env) -- `--token`: ClickUp API token (overrides token from .env file if provided) -- `--transport`: Transport protocol to use (sse or http-streaming) - -Example: -```bash -python -m clickup_mcp --host 127.0.0.1 --port 8080 --log-level debug --env custom.env -``` - -## ๐Ÿ“‹ Requirements - -- Python 3.13+ -- Docker (for container deployment) - -## ๐Ÿ“– Documentation - -API documentation is available at `http://localhost:8000/docs` when the server is running. - -## ๐ŸŒŸ Features - -- ๐Ÿ”’ Secure API token handling via environment variables or files -- ๐Ÿ”„ Multiple transport protocols (SSE, HTTP streaming) -- ๐Ÿ“Š Comprehensive ClickUp API coverage -- ๐Ÿš€ Fast and efficient FastAPI implementation -- ๐Ÿ“ Interactive API documentation with Swagger UI - -## ๐Ÿ”จ Development - -Want to contribute? Great! Check out our [GitHub repository](https://github.com/Chisanan232/clickup-mcp-server) for contribution guidelines. - -## ๐Ÿ“œ License - -[MIT License](./LICENSE) From 90801edcaf61267d879350a7ca596d6bf5d8b775 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:44:31 +0800 Subject: [PATCH 35/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(test):=20Update=20p?= =?UTF-8?q?ytest.ini=20for=20SDK=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytest.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytest.ini b/pytest.ini index ef66cb3..dfef326 100644 --- a/pytest.ini +++ b/pytest.ini @@ -2,7 +2,7 @@ [pytest] minversion = 7.0.0 addopts = - --cov=src/ + --cov=agent_assembly/ --cov-config=./.coveragerc -r a -vv From 119a2a1dc0cf39bab8925ebbcf0e5543f381dc2f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:44:52 +0800 Subject: [PATCH 36/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(types):=20Update=20?= =?UTF-8?q?mypy.ini=20for=20SDK=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mypy.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy.ini b/mypy.ini index 6fe6cc8..9d88229 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,7 +1,7 @@ # Global options: [mypy] -packages = src,test +packages = agent_assembly,test exclude = (?x)( test/unit_test.{1,64}.py # Ignore the code of unit test because of the usage of mock ) From 55a61d4b0246ae067bab4c8eb132b774cf4653a6 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:45:14 +0800 Subject: [PATCH 37/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(test):=20Update=20.?= =?UTF-8?q?coveragerc=20for=20SDK=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .coveragerc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.coveragerc b/.coveragerc index 6986f9c..06c4fef 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,11 +1,11 @@ [run] parallel = True relative_files = True -include=./src +include=./agent_assembly omit = # */__init__.py - ./src/__main__.py + ./agent_assembly/__main__.py [report] From fac1f0b455d0f5934893e9bd9123c3b1dcdf5617 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:45:47 +0800 Subject: [PATCH 38/59] =?UTF-8?q?=E2=9C=A8=20(core):=20Add=20init=5Fassemb?= =?UTF-8?q?ly=20function=20to=20core=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/core/__init__.py | 4 ++++ agent_assembly/core/assembly.py | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 agent_assembly/core/assembly.py diff --git a/agent_assembly/core/__init__.py b/agent_assembly/core/__init__.py index 492b428..a7cf528 100644 --- a/agent_assembly/core/__init__.py +++ b/agent_assembly/core/__init__.py @@ -1 +1,5 @@ """Core module for Agent Assembly initialization.""" + +from agent_assembly.core.assembly import init_assembly + +__all__ = ["init_assembly"] diff --git a/agent_assembly/core/assembly.py b/agent_assembly/core/assembly.py new file mode 100644 index 0000000..88afbe9 --- /dev/null +++ b/agent_assembly/core/assembly.py @@ -0,0 +1,39 @@ +"""Core assembly initialization module.""" + +from __future__ import annotations + +from typing import Optional + +from agent_assembly.client.gateway import GatewayClient +from agent_assembly.exceptions import ConfigurationError + + +def init_assembly( + gateway_url: str, + agent_id: str, + api_key: Optional[str] = None, +) -> GatewayClient: + """ + Initialize the Agent Assembly SDK. + + Args: + gateway_url: URL of the governance gateway + agent_id: Unique identifier for the agent + api_key: Optional API key for authentication + + Returns: + Configured GatewayClient instance + + Raises: + ConfigurationError: If initialization fails + """ + if not gateway_url: + raise ConfigurationError("gateway_url is required") + if not agent_id: + raise ConfigurationError("agent_id is required") + + return GatewayClient( + gateway_url=gateway_url, + agent_id=agent_id, + api_key=api_key, + ) From ceed183f00b2465583ae5cad6892e1493c715b2f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:46:00 +0800 Subject: [PATCH 39/59] =?UTF-8?q?=E2=9C=A8=20(client):=20Add=20gateway=20c?= =?UTF-8?q?lient=20for=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/client/__init__.py | 4 ++ agent_assembly/client/gateway.py | 105 ++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 agent_assembly/client/gateway.py diff --git a/agent_assembly/client/__init__.py b/agent_assembly/client/__init__.py index a10c86c..93278fa 100644 --- a/agent_assembly/client/__init__.py +++ b/agent_assembly/client/__init__.py @@ -1 +1,5 @@ """Client module for gateway communication.""" + +from agent_assembly.client.gateway import GatewayClient + +__all__ = ["GatewayClient"] diff --git a/agent_assembly/client/gateway.py b/agent_assembly/client/gateway.py new file mode 100644 index 0000000..650c5a7 --- /dev/null +++ b/agent_assembly/client/gateway.py @@ -0,0 +1,105 @@ +"""Gateway client for communication with the governance gateway.""" + +from __future__ import annotations + +from typing import Optional + +import httpx + +from agent_assembly.exceptions import GatewayError + + +class GatewayClient: + """Client for communicating with the Agent Assembly governance gateway.""" + + def __init__( + self, + gateway_url: str, + agent_id: str, + api_key: Optional[str] = None, + timeout: int = 30, + ) -> None: + """ + Initialize the GatewayClient. + + Args: + gateway_url: URL of the governance gateway + agent_id: Unique identifier for the agent + api_key: Optional API key for authentication + timeout: Request timeout in seconds + """ + self.gateway_url = gateway_url.rstrip("/") + self.agent_id = agent_id + self.api_key = api_key + self.timeout = timeout + self._client: Optional[httpx.Client] = None + + @property + def client(self) -> httpx.Client: + """Get or create the HTTP client.""" + if self._client is None: + headers = {} + if self.api_key: + headers["Authorization"] = f"Bearer {self.api_key}" + self._client = httpx.Client( + base_url=self.gateway_url, + headers=headers, + timeout=self.timeout, + ) + return self._client + + def close(self) -> None: + """Close the HTTP client.""" + if self._client is not None: + self._client.close() + self._client = None + + def __enter__(self) -> GatewayClient: + """Context manager entry.""" + return self + + def __exit__(self, *args: object) -> None: + """Context manager exit.""" + self.close() + + async def register_agent(self) -> dict: + """ + Register the agent with the governance gateway. + + Returns: + Registration response data + + Raises: + GatewayError: If registration fails + """ + try: + response = self.client.post( + f"/agents/{self.agent_id}/register", + ) + response.raise_for_status() + return response.json() + except httpx.HTTPError as e: + raise GatewayError(f"Failed to register agent: {e}") from e + + async def check_policy_compliance(self, action: str) -> dict: + """ + Check if an action complies with governance policies. + + Args: + action: The action to check + + Returns: + Policy compliance response + + Raises: + GatewayError: If policy check fails + """ + try: + response = self.client.post( + f"/agents/{self.agent_id}/policy/check", + json={"action": action}, + ) + response.raise_for_status() + return response.json() + except httpx.HTTPError as e: + raise GatewayError(f"Failed to check policy compliance: {e}") from e From 67ef585920dfcbaad2ac7995af90b1f3b39a1c74 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:46:18 +0800 Subject: [PATCH 40/59] =?UTF-8?q?=E2=9C=A8=20(models):=20Add=20agent=20dat?= =?UTF-8?q?a=20models?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/models/__init__.py | 4 ++++ agent_assembly/models/agent.py | 37 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 agent_assembly/models/agent.py diff --git a/agent_assembly/models/__init__.py b/agent_assembly/models/__init__.py index 9d3bd7b..3b4fbda 100644 --- a/agent_assembly/models/__init__.py +++ b/agent_assembly/models/__init__.py @@ -1 +1,5 @@ """Data models for Agent Assembly SDK.""" + +from agent_assembly.models.agent import AgentConfig, AgentState, PolicyEvaluation + +__all__ = ["AgentConfig", "AgentState", "PolicyEvaluation"] diff --git a/agent_assembly/models/agent.py b/agent_assembly/models/agent.py new file mode 100644 index 0000000..8cfbbc8 --- /dev/null +++ b/agent_assembly/models/agent.py @@ -0,0 +1,37 @@ +"""Agent data models for the SDK.""" + +from __future__ import annotations + +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel, Field + + +class AgentConfig(BaseModel): + """Configuration for an agent.""" + + agent_id: str = Field(..., description="Unique identifier for the agent") + name: str = Field(..., description="Human-readable name for the agent") + description: Optional[str] = Field(None, description="Description of the agent") + version: str = Field(default="0.1.0", description="Agent version") + created_at: datetime = Field(default_factory=datetime.utcnow, description="Creation timestamp") + updated_at: datetime = Field(default_factory=datetime.utcnow, description="Last update timestamp") + + +class AgentState(BaseModel): + """Current state of an agent.""" + + agent_id: str = Field(..., description="Unique identifier for the agent") + status: str = Field(default="idle", description="Current status of the agent") + last_activity: Optional[datetime] = Field(None, description="Last activity timestamp") + metadata: dict = Field(default_factory=dict, description="Additional state metadata") + + +class PolicyEvaluation(BaseModel): + """Result of a policy evaluation.""" + + action: str = Field(..., description="Action that was evaluated") + allowed: bool = Field(..., description="Whether the action is allowed") + reason: Optional[str] = Field(None, description="Reason for the decision") + policy_id: Optional[str] = Field(None, description="ID of the policy that made the decision") From 399d2b3d27ec631ea6de20822f51d977054be3df Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:46:37 +0800 Subject: [PATCH 41/59] =?UTF-8?q?=F0=9F=93=9A=20(docs):=20Add=20basic=20us?= =?UTF-8?q?age=20example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/basic_usage.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 examples/basic_usage.py diff --git a/examples/basic_usage.py b/examples/basic_usage.py new file mode 100644 index 0000000..87b8479 --- /dev/null +++ b/examples/basic_usage.py @@ -0,0 +1,36 @@ +""" +Basic usage example for the Agent Assembly Python SDK. + +This example demonstrates how to initialize the SDK and use its basic features. +""" + +from agent_assembly import init_assembly +from agent_assembly.models import AgentConfig + +# Initialize the assembly with your agent configuration +assembly = init_assembly( + gateway_url="https://gateway.agent-assembly.dev", + agent_id="my-agent-001", + api_key="your-api-key-here", # Optional, depending on your gateway configuration +) + +# Create an agent configuration +agent_config = AgentConfig( + agent_id="my-agent-001", + name="My AI Agent", + description="A sample AI agent using Agent Assembly SDK", + version="1.0.0", +) + +print(f"Agent configured: {agent_config.name}") +print(f"Agent ID: {agent_config.agent_id}") +print(f"Version: {agent_config.version}") + +# The assembly client can now be used to interact with the governance gateway +# For example: +# - Register the agent with the gateway +# - Check policy compliance before executing actions +# - Log audit events + +# Don't forget to close the client when done +assembly.close() From 46e49e828c9cd91a285b40b4bf1356bc08a524b4 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 14:47:17 +0800 Subject: [PATCH 42/59] =?UTF-8?q?=E2=9C=A8=20(test):=20Add=20integration?= =?UTF-8?q?=20test=20stub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/integration/test_assembly_integration.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 test/integration/test_assembly_integration.py diff --git a/test/integration/test_assembly_integration.py b/test/integration/test_assembly_integration.py new file mode 100644 index 0000000..3829185 --- /dev/null +++ b/test/integration/test_assembly_integration.py @@ -0,0 +1,55 @@ +""" +Integration test stub for the Agent Assembly SDK. + +This file contains integration tests for the SDK. +These tests require a running gateway instance. +""" + +import pytest + +from agent_assembly import init_assembly +from agent_assembly.exceptions import ConfigurationError + + +@pytest.mark.integration +def test_init_assembly_with_valid_config(): + """Test that assembly initialization works with valid configuration.""" + # This test requires a running gateway + assembly = init_assembly( + gateway_url="http://localhost:8080", + agent_id="test-agent-001", + ) + assert assembly is not None + assert assembly.agent_id == "test-agent-001" + assembly.close() + + +@pytest.mark.integration +def test_init_assembly_with_invalid_config(): + """Test that assembly initialization fails with invalid configuration.""" + with pytest.raises(ConfigurationError): + init_assembly( + gateway_url="", # Invalid: empty URL + agent_id="test-agent-001", + ) + + with pytest.raises(ConfigurationError): + init_assembly( + gateway_url="http://localhost:8080", + agent_id="", # Invalid: empty agent ID + ) + + +@pytest.mark.integration +async def test_gateway_client_context_manager(): + """Test that the gateway client works as a context manager.""" + assembly = init_assembly( + gateway_url="http://localhost:8080", + agent_id="test-agent-001", + ) + + with assembly: + assert assembly.client is not None + + # Client should be closed after exiting context + assert assembly._client is None From 43493095dcf7a9dfcbf7182d0431519dff913730 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:02:49 +0800 Subject: [PATCH 43/59] =?UTF-8?q?=F0=9F=94=92=20(deps):=20Update=20uv.lock?= =?UTF-8?q?=20file=20for=20new=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- uv.lock | 556 ++++++++++++++++++++++---------------------------------- 1 file changed, 217 insertions(+), 339 deletions(-) diff --git a/uv.lock b/uv.lock index 0626e1e..33155c6 100644 --- a/uv.lock +++ b/uv.lock @@ -3,76 +3,74 @@ revision = 2 requires-python = ">=3.12, <4.0" [[package]] -name = "aiohappyeyeballs" -version = "2.6.1" +name = "agent-assembly" +version = "0.0.0" +source = { editable = "." } +dependencies = [ + { name = "httpx" }, + { name = "pydantic" }, + { name = "typing-extensions" }, +] + +[package.dev-dependencies] +dev = [ + { name = "coverage" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "pytest-rerunfailures" }, + { name = "python-dotenv" }, + { name = "ruff" }, +] +pre-commit-ci = [ + { name = "mypy" }, + { name = "pre-commit" }, + { name = "pylint" }, +] + +[package.metadata] +requires-dist = [ + { name = "httpx", specifier = ">=0.27.0,<1.0.0" }, + { name = "pydantic", specifier = ">=2.0.0,<3.0.0" }, + { name = "typing-extensions", specifier = ">=4.0.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "coverage", specifier = "~=7.10" }, + { name = "pytest", specifier = ">=8.1.1,<10" }, + { name = "pytest-asyncio", specifier = ">=0.23.0,<2" }, + { name = "pytest-cov", specifier = ">=5.0.0,<8" }, + { name = "pytest-rerunfailures", specifier = ">=14.0,<17" }, + { name = "python-dotenv", specifier = ">=1.0.1,<2" }, + { name = "ruff", specifier = ">=0.1.0" }, +] +pre-commit-ci = [ + { name = "mypy", specifier = ">=1.2.0,<2" }, + { name = "pre-commit", specifier = ">=3.5.0,<5" }, + { name = "pylint", specifier = ">=3.1.0,<5" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] [[package]] -name = "aiohttp" -version = "3.12.15" +name = "anyio" +version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "yarl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/e7/d92a237d8802ca88483906c388f7c201bbe96cd80a165ffd0ac2f6a8d59f/aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2", size = 7823716, upload-time = "2025-07-29T05:52:32.215Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/97/77cb2450d9b35f517d6cf506256bf4f5bda3f93a66b4ad64ba7fc917899c/aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7", size = 702333, upload-time = "2025-07-29T05:50:46.507Z" }, - { url = "https://files.pythonhosted.org/packages/83/6d/0544e6b08b748682c30b9f65640d006e51f90763b41d7c546693bc22900d/aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444", size = 476948, upload-time = "2025-07-29T05:50:48.067Z" }, - { url = "https://files.pythonhosted.org/packages/3a/1d/c8c40e611e5094330284b1aea8a4b02ca0858f8458614fa35754cab42b9c/aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d", size = 469787, upload-time = "2025-07-29T05:50:49.669Z" }, - { url = "https://files.pythonhosted.org/packages/38/7d/b76438e70319796bfff717f325d97ce2e9310f752a267bfdf5192ac6082b/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c", size = 1716590, upload-time = "2025-07-29T05:50:51.368Z" }, - { url = "https://files.pythonhosted.org/packages/79/b1/60370d70cdf8b269ee1444b390cbd72ce514f0d1cd1a715821c784d272c9/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0", size = 1699241, upload-time = "2025-07-29T05:50:53.628Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2b/4968a7b8792437ebc12186db31523f541943e99bda8f30335c482bea6879/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab", size = 1754335, upload-time = "2025-07-29T05:50:55.394Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c1/49524ed553f9a0bec1a11fac09e790f49ff669bcd14164f9fab608831c4d/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb", size = 1800491, upload-time = "2025-07-29T05:50:57.202Z" }, - { url = "https://files.pythonhosted.org/packages/de/5e/3bf5acea47a96a28c121b167f5ef659cf71208b19e52a88cdfa5c37f1fcc/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545", size = 1719929, upload-time = "2025-07-29T05:50:59.192Z" }, - { url = "https://files.pythonhosted.org/packages/39/94/8ae30b806835bcd1cba799ba35347dee6961a11bd507db634516210e91d8/aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c", size = 1635733, upload-time = "2025-07-29T05:51:01.394Z" }, - { url = "https://files.pythonhosted.org/packages/7a/46/06cdef71dd03acd9da7f51ab3a9107318aee12ad38d273f654e4f981583a/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd", size = 1696790, upload-time = "2025-07-29T05:51:03.657Z" }, - { url = "https://files.pythonhosted.org/packages/02/90/6b4cfaaf92ed98d0ec4d173e78b99b4b1a7551250be8937d9d67ecb356b4/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f", size = 1718245, upload-time = "2025-07-29T05:51:05.911Z" }, - { url = "https://files.pythonhosted.org/packages/2e/e6/2593751670fa06f080a846f37f112cbe6f873ba510d070136a6ed46117c6/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d", size = 1658899, upload-time = "2025-07-29T05:51:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/8f/28/c15bacbdb8b8eb5bf39b10680d129ea7410b859e379b03190f02fa104ffd/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519", size = 1738459, upload-time = "2025-07-29T05:51:09.56Z" }, - { url = "https://files.pythonhosted.org/packages/00/de/c269cbc4faa01fb10f143b1670633a8ddd5b2e1ffd0548f7aa49cb5c70e2/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea", size = 1766434, upload-time = "2025-07-29T05:51:11.423Z" }, - { url = "https://files.pythonhosted.org/packages/52/b0/4ff3abd81aa7d929b27d2e1403722a65fc87b763e3a97b3a2a494bfc63bc/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3", size = 1726045, upload-time = "2025-07-29T05:51:13.689Z" }, - { url = "https://files.pythonhosted.org/packages/71/16/949225a6a2dd6efcbd855fbd90cf476052e648fb011aa538e3b15b89a57a/aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1", size = 423591, upload-time = "2025-07-29T05:51:15.452Z" }, - { url = "https://files.pythonhosted.org/packages/2b/d8/fa65d2a349fe938b76d309db1a56a75c4fb8cc7b17a398b698488a939903/aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34", size = 450266, upload-time = "2025-07-29T05:51:17.239Z" }, - { url = "https://files.pythonhosted.org/packages/f2/33/918091abcf102e39d15aba2476ad9e7bd35ddb190dcdd43a854000d3da0d/aiohttp-3.12.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f922ffd05034d439dde1c77a20461cf4a1b0831e6caa26151fe7aa8aaebc315", size = 696741, upload-time = "2025-07-29T05:51:19.021Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2a/7495a81e39a998e400f3ecdd44a62107254803d1681d9189be5c2e4530cd/aiohttp-3.12.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ee8a8ac39ce45f3e55663891d4b1d15598c157b4d494a4613e704c8b43112cd", size = 474407, upload-time = "2025-07-29T05:51:21.165Z" }, - { url = "https://files.pythonhosted.org/packages/49/fc/a9576ab4be2dcbd0f73ee8675d16c707cfc12d5ee80ccf4015ba543480c9/aiohttp-3.12.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3eae49032c29d356b94eee45a3f39fdf4b0814b397638c2f718e96cfadf4c4e4", size = 466703, upload-time = "2025-07-29T05:51:22.948Z" }, - { url = "https://files.pythonhosted.org/packages/09/2f/d4bcc8448cf536b2b54eed48f19682031ad182faa3a3fee54ebe5b156387/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97752ff12cc12f46a9b20327104448042fce5c33a624f88c18f66f9368091c7", size = 1705532, upload-time = "2025-07-29T05:51:25.211Z" }, - { url = "https://files.pythonhosted.org/packages/f1/f3/59406396083f8b489261e3c011aa8aee9df360a96ac8fa5c2e7e1b8f0466/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:894261472691d6fe76ebb7fcf2e5870a2ac284c7406ddc95823c8598a1390f0d", size = 1686794, upload-time = "2025-07-29T05:51:27.145Z" }, - { url = "https://files.pythonhosted.org/packages/dc/71/164d194993a8d114ee5656c3b7ae9c12ceee7040d076bf7b32fb98a8c5c6/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fa5d9eb82ce98959fc1031c28198b431b4d9396894f385cb63f1e2f3f20ca6b", size = 1738865, upload-time = "2025-07-29T05:51:29.366Z" }, - { url = "https://files.pythonhosted.org/packages/1c/00/d198461b699188a93ead39cb458554d9f0f69879b95078dce416d3209b54/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fa751efb11a541f57db59c1dd821bec09031e01452b2b6217319b3a1f34f3d", size = 1788238, upload-time = "2025-07-29T05:51:31.285Z" }, - { url = "https://files.pythonhosted.org/packages/85/b8/9e7175e1fa0ac8e56baa83bf3c214823ce250d0028955dfb23f43d5e61fd/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5346b93e62ab51ee2a9d68e8f73c7cf96ffb73568a23e683f931e52450e4148d", size = 1710566, upload-time = "2025-07-29T05:51:33.219Z" }, - { url = "https://files.pythonhosted.org/packages/59/e4/16a8eac9df39b48ae102ec030fa9f726d3570732e46ba0c592aeeb507b93/aiohttp-3.12.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:049ec0360f939cd164ecbfd2873eaa432613d5e77d6b04535e3d1fbae5a9e645", size = 1624270, upload-time = "2025-07-29T05:51:35.195Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f8/cd84dee7b6ace0740908fd0af170f9fab50c2a41ccbc3806aabcb1050141/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b52dcf013b57464b6d1e51b627adfd69a8053e84b7103a7cd49c030f9ca44461", size = 1677294, upload-time = "2025-07-29T05:51:37.215Z" }, - { url = "https://files.pythonhosted.org/packages/ce/42/d0f1f85e50d401eccd12bf85c46ba84f947a84839c8a1c2c5f6e8ab1eb50/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b2af240143dd2765e0fb661fd0361a1b469cab235039ea57663cda087250ea9", size = 1708958, upload-time = "2025-07-29T05:51:39.328Z" }, - { url = "https://files.pythonhosted.org/packages/d5/6b/f6fa6c5790fb602538483aa5a1b86fcbad66244997e5230d88f9412ef24c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac77f709a2cde2cc71257ab2d8c74dd157c67a0558a0d2799d5d571b4c63d44d", size = 1651553, upload-time = "2025-07-29T05:51:41.356Z" }, - { url = "https://files.pythonhosted.org/packages/04/36/a6d36ad545fa12e61d11d1932eef273928b0495e6a576eb2af04297fdd3c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:47f6b962246f0a774fbd3b6b7be25d59b06fdb2f164cf2513097998fc6a29693", size = 1727688, upload-time = "2025-07-29T05:51:43.452Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c8/f195e5e06608a97a4e52c5d41c7927301bf757a8e8bb5bbf8cef6c314961/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:760fb7db442f284996e39cf9915a94492e1896baac44f06ae551974907922b64", size = 1761157, upload-time = "2025-07-29T05:51:45.643Z" }, - { url = "https://files.pythonhosted.org/packages/05/6a/ea199e61b67f25ba688d3ce93f63b49b0a4e3b3d380f03971b4646412fc6/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad702e57dc385cae679c39d318def49aef754455f237499d5b99bea4ef582e51", size = 1710050, upload-time = "2025-07-29T05:51:48.203Z" }, - { url = "https://files.pythonhosted.org/packages/b4/2e/ffeb7f6256b33635c29dbed29a22a723ff2dd7401fff42ea60cf2060abfb/aiohttp-3.12.15-cp313-cp313-win32.whl", hash = "sha256:f813c3e9032331024de2eb2e32a88d86afb69291fbc37a3a3ae81cc9917fb3d0", size = 422647, upload-time = "2025-07-29T05:51:50.718Z" }, - { url = "https://files.pythonhosted.org/packages/1b/8e/78ee35774201f38d5e1ba079c9958f7629b1fd079459aea9467441dbfbf5/aiohttp-3.12.15-cp313-cp313-win_amd64.whl", hash = "sha256:1a649001580bdb37c6fdb1bebbd7e3bc688e8ec2b5c6f52edbb664662b17dc84", size = 449067, upload-time = "2025-07-29T05:51:52.549Z" }, -] - -[[package]] -name = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist" }, + { name = "idna" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, ] [[package]] @@ -85,12 +83,12 @@ wheels = [ ] [[package]] -name = "attrs" -version = "25.3.0" +name = "certifi" +version = "2026.4.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, ] [[package]] @@ -203,63 +201,40 @@ wheels = [ ] [[package]] -name = "frozenlist" -version = "1.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b1/b64018016eeb087db503b038296fd782586432b9c077fc5c7839e9cb6ef6/frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f", size = 45078, upload-time = "2025-06-09T23:02:35.538Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/a2/c8131383f1e66adad5f6ecfcce383d584ca94055a34d683bbb24ac5f2f1c/frozenlist-1.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3dbf9952c4bb0e90e98aec1bd992b3318685005702656bc6f67c1a32b76787f2", size = 81424, upload-time = "2025-06-09T23:00:42.24Z" }, - { url = "https://files.pythonhosted.org/packages/4c/9d/02754159955088cb52567337d1113f945b9e444c4960771ea90eb73de8db/frozenlist-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f5906d3359300b8a9bb194239491122e6cf1444c2efb88865426f170c262cdb", size = 47952, upload-time = "2025-06-09T23:00:43.481Z" }, - { url = "https://files.pythonhosted.org/packages/01/7a/0046ef1bd6699b40acd2067ed6d6670b4db2f425c56980fa21c982c2a9db/frozenlist-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3dabd5a8f84573c8d10d8859a50ea2dec01eea372031929871368c09fa103478", size = 46688, upload-time = "2025-06-09T23:00:44.793Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a2/a910bafe29c86997363fb4c02069df4ff0b5bc39d33c5198b4e9dd42d8f8/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa57daa5917f1738064f302bf2626281a1cb01920c32f711fbc7bc36111058a8", size = 243084, upload-time = "2025-06-09T23:00:46.125Z" }, - { url = "https://files.pythonhosted.org/packages/64/3e/5036af9d5031374c64c387469bfcc3af537fc0f5b1187d83a1cf6fab1639/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c193dda2b6d49f4c4398962810fa7d7c78f032bf45572b3e04dd5249dff27e08", size = 233524, upload-time = "2025-06-09T23:00:47.73Z" }, - { url = "https://files.pythonhosted.org/packages/06/39/6a17b7c107a2887e781a48ecf20ad20f1c39d94b2a548c83615b5b879f28/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe2b675cf0aaa6d61bf8fbffd3c274b3c9b7b1623beb3809df8a81399a4a9c4", size = 248493, upload-time = "2025-06-09T23:00:49.742Z" }, - { url = "https://files.pythonhosted.org/packages/be/00/711d1337c7327d88c44d91dd0f556a1c47fb99afc060ae0ef66b4d24793d/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8fc5d5cda37f62b262405cf9652cf0856839c4be8ee41be0afe8858f17f4c94b", size = 244116, upload-time = "2025-06-09T23:00:51.352Z" }, - { url = "https://files.pythonhosted.org/packages/24/fe/74e6ec0639c115df13d5850e75722750adabdc7de24e37e05a40527ca539/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d5ce521d1dd7d620198829b87ea002956e4319002ef0bc8d3e6d045cb4646e", size = 224557, upload-time = "2025-06-09T23:00:52.855Z" }, - { url = "https://files.pythonhosted.org/packages/8d/db/48421f62a6f77c553575201e89048e97198046b793f4a089c79a6e3268bd/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:488d0a7d6a0008ca0db273c542098a0fa9e7dfaa7e57f70acef43f32b3f69dca", size = 241820, upload-time = "2025-06-09T23:00:54.43Z" }, - { url = "https://files.pythonhosted.org/packages/1d/fa/cb4a76bea23047c8462976ea7b7a2bf53997a0ca171302deae9d6dd12096/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:15a7eaba63983d22c54d255b854e8108e7e5f3e89f647fc854bd77a237e767df", size = 236542, upload-time = "2025-06-09T23:00:56.409Z" }, - { url = "https://files.pythonhosted.org/packages/5d/32/476a4b5cfaa0ec94d3f808f193301debff2ea42288a099afe60757ef6282/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1eaa7e9c6d15df825bf255649e05bd8a74b04a4d2baa1ae46d9c2d00b2ca2cb5", size = 249350, upload-time = "2025-06-09T23:00:58.468Z" }, - { url = "https://files.pythonhosted.org/packages/8d/ba/9a28042f84a6bf8ea5dbc81cfff8eaef18d78b2a1ad9d51c7bc5b029ad16/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4389e06714cfa9d47ab87f784a7c5be91d3934cd6e9a7b85beef808297cc025", size = 225093, upload-time = "2025-06-09T23:01:00.015Z" }, - { url = "https://files.pythonhosted.org/packages/bc/29/3a32959e68f9cf000b04e79ba574527c17e8842e38c91d68214a37455786/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73bd45e1488c40b63fe5a7df892baf9e2a4d4bb6409a2b3b78ac1c6236178e01", size = 245482, upload-time = "2025-06-09T23:01:01.474Z" }, - { url = "https://files.pythonhosted.org/packages/80/e8/edf2f9e00da553f07f5fa165325cfc302dead715cab6ac8336a5f3d0adc2/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99886d98e1643269760e5fe0df31e5ae7050788dd288947f7f007209b8c33f08", size = 249590, upload-time = "2025-06-09T23:01:02.961Z" }, - { url = "https://files.pythonhosted.org/packages/1c/80/9a0eb48b944050f94cc51ee1c413eb14a39543cc4f760ed12657a5a3c45a/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43", size = 237785, upload-time = "2025-06-09T23:01:05.095Z" }, - { url = "https://files.pythonhosted.org/packages/f3/74/87601e0fb0369b7a2baf404ea921769c53b7ae00dee7dcfe5162c8c6dbf0/frozenlist-1.7.0-cp312-cp312-win32.whl", hash = "sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3", size = 39487, upload-time = "2025-06-09T23:01:06.54Z" }, - { url = "https://files.pythonhosted.org/packages/0b/15/c026e9a9fc17585a9d461f65d8593d281fedf55fbf7eb53f16c6df2392f9/frozenlist-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a", size = 43874, upload-time = "2025-06-09T23:01:07.752Z" }, - { url = "https://files.pythonhosted.org/packages/24/90/6b2cebdabdbd50367273c20ff6b57a3dfa89bd0762de02c3a1eb42cb6462/frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee", size = 79791, upload-time = "2025-06-09T23:01:09.368Z" }, - { url = "https://files.pythonhosted.org/packages/83/2e/5b70b6a3325363293fe5fc3ae74cdcbc3e996c2a11dde2fd9f1fb0776d19/frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d", size = 47165, upload-time = "2025-06-09T23:01:10.653Z" }, - { url = "https://files.pythonhosted.org/packages/f4/25/a0895c99270ca6966110f4ad98e87e5662eab416a17e7fd53c364bf8b954/frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43", size = 45881, upload-time = "2025-06-09T23:01:12.296Z" }, - { url = "https://files.pythonhosted.org/packages/19/7c/71bb0bbe0832793c601fff68cd0cf6143753d0c667f9aec93d3c323f4b55/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d", size = 232409, upload-time = "2025-06-09T23:01:13.641Z" }, - { url = "https://files.pythonhosted.org/packages/c0/45/ed2798718910fe6eb3ba574082aaceff4528e6323f9a8570be0f7028d8e9/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee", size = 225132, upload-time = "2025-06-09T23:01:15.264Z" }, - { url = "https://files.pythonhosted.org/packages/ba/e2/8417ae0f8eacb1d071d4950f32f229aa6bf68ab69aab797b72a07ea68d4f/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb", size = 237638, upload-time = "2025-06-09T23:01:16.752Z" }, - { url = "https://files.pythonhosted.org/packages/f8/b7/2ace5450ce85f2af05a871b8c8719b341294775a0a6c5585d5e6170f2ce7/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f", size = 233539, upload-time = "2025-06-09T23:01:18.202Z" }, - { url = "https://files.pythonhosted.org/packages/46/b9/6989292c5539553dba63f3c83dc4598186ab2888f67c0dc1d917e6887db6/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60", size = 215646, upload-time = "2025-06-09T23:01:19.649Z" }, - { url = "https://files.pythonhosted.org/packages/72/31/bc8c5c99c7818293458fe745dab4fd5730ff49697ccc82b554eb69f16a24/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00", size = 232233, upload-time = "2025-06-09T23:01:21.175Z" }, - { url = "https://files.pythonhosted.org/packages/59/52/460db4d7ba0811b9ccb85af996019f5d70831f2f5f255f7cc61f86199795/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b", size = 227996, upload-time = "2025-06-09T23:01:23.098Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/f4b39e904c03927b7ecf891804fd3b4df3db29b9e487c6418e37988d6e9d/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c", size = 242280, upload-time = "2025-06-09T23:01:24.808Z" }, - { url = "https://files.pythonhosted.org/packages/b8/33/3f8d6ced42f162d743e3517781566b8481322be321b486d9d262adf70bfb/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949", size = 217717, upload-time = "2025-06-09T23:01:26.28Z" }, - { url = "https://files.pythonhosted.org/packages/3e/e8/ad683e75da6ccef50d0ab0c2b2324b32f84fc88ceee778ed79b8e2d2fe2e/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca", size = 236644, upload-time = "2025-06-09T23:01:27.887Z" }, - { url = "https://files.pythonhosted.org/packages/b2/14/8d19ccdd3799310722195a72ac94ddc677541fb4bef4091d8e7775752360/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b", size = 238879, upload-time = "2025-06-09T23:01:29.524Z" }, - { url = "https://files.pythonhosted.org/packages/ce/13/c12bf657494c2fd1079a48b2db49fa4196325909249a52d8f09bc9123fd7/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e", size = 232502, upload-time = "2025-06-09T23:01:31.287Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8b/e7f9dfde869825489382bc0d512c15e96d3964180c9499efcec72e85db7e/frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1", size = 39169, upload-time = "2025-06-09T23:01:35.503Z" }, - { url = "https://files.pythonhosted.org/packages/35/89/a487a98d94205d85745080a37860ff5744b9820a2c9acbcdd9440bfddf98/frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba", size = 43219, upload-time = "2025-06-09T23:01:36.784Z" }, - { url = "https://files.pythonhosted.org/packages/56/d5/5c4cf2319a49eddd9dd7145e66c4866bdc6f3dbc67ca3d59685149c11e0d/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d", size = 84345, upload-time = "2025-06-09T23:01:38.295Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/ec2c1e1dc16b85bc9d526009961953df9cec8481b6886debb36ec9107799/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d", size = 48880, upload-time = "2025-06-09T23:01:39.887Z" }, - { url = "https://files.pythonhosted.org/packages/69/86/f9596807b03de126e11e7d42ac91e3d0b19a6599c714a1989a4e85eeefc4/frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b", size = 48498, upload-time = "2025-06-09T23:01:41.318Z" }, - { url = "https://files.pythonhosted.org/packages/5e/cb/df6de220f5036001005f2d726b789b2c0b65f2363b104bbc16f5be8084f8/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146", size = 292296, upload-time = "2025-06-09T23:01:42.685Z" }, - { url = "https://files.pythonhosted.org/packages/83/1f/de84c642f17c8f851a2905cee2dae401e5e0daca9b5ef121e120e19aa825/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74", size = 273103, upload-time = "2025-06-09T23:01:44.166Z" }, - { url = "https://files.pythonhosted.org/packages/88/3c/c840bfa474ba3fa13c772b93070893c6e9d5c0350885760376cbe3b6c1b3/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1", size = 292869, upload-time = "2025-06-09T23:01:45.681Z" }, - { url = "https://files.pythonhosted.org/packages/a6/1c/3efa6e7d5a39a1d5ef0abeb51c48fb657765794a46cf124e5aca2c7a592c/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1", size = 291467, upload-time = "2025-06-09T23:01:47.234Z" }, - { url = "https://files.pythonhosted.org/packages/4f/00/d5c5e09d4922c395e2f2f6b79b9a20dab4b67daaf78ab92e7729341f61f6/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384", size = 266028, upload-time = "2025-06-09T23:01:48.819Z" }, - { url = "https://files.pythonhosted.org/packages/4e/27/72765be905619dfde25a7f33813ac0341eb6b076abede17a2e3fbfade0cb/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb", size = 284294, upload-time = "2025-06-09T23:01:50.394Z" }, - { url = "https://files.pythonhosted.org/packages/88/67/c94103a23001b17808eb7dd1200c156bb69fb68e63fcf0693dde4cd6228c/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c", size = 281898, upload-time = "2025-06-09T23:01:52.234Z" }, - { url = "https://files.pythonhosted.org/packages/42/34/a3e2c00c00f9e2a9db5653bca3fec306349e71aff14ae45ecc6d0951dd24/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65", size = 290465, upload-time = "2025-06-09T23:01:53.788Z" }, - { url = "https://files.pythonhosted.org/packages/bb/73/f89b7fbce8b0b0c095d82b008afd0590f71ccb3dee6eee41791cf8cd25fd/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3", size = 266385, upload-time = "2025-06-09T23:01:55.769Z" }, - { url = "https://files.pythonhosted.org/packages/cd/45/e365fdb554159462ca12df54bc59bfa7a9a273ecc21e99e72e597564d1ae/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657", size = 288771, upload-time = "2025-06-09T23:01:57.4Z" }, - { url = "https://files.pythonhosted.org/packages/00/11/47b6117002a0e904f004d70ec5194fe9144f117c33c851e3d51c765962d0/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104", size = 288206, upload-time = "2025-06-09T23:01:58.936Z" }, - { url = "https://files.pythonhosted.org/packages/40/37/5f9f3c3fd7f7746082ec67bcdc204db72dad081f4f83a503d33220a92973/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf", size = 282620, upload-time = "2025-06-09T23:02:00.493Z" }, - { url = "https://files.pythonhosted.org/packages/0b/31/8fbc5af2d183bff20f21aa743b4088eac4445d2bb1cdece449ae80e4e2d1/frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81", size = 43059, upload-time = "2025-06-09T23:02:02.072Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ed/41956f52105b8dbc26e457c5705340c67c8cc2b79f394b79bffc09d0e938/frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e", size = 47516, upload-time = "2025-06-09T23:02:03.779Z" }, - { url = "https://files.pythonhosted.org/packages/ee/45/b82e3c16be2182bff01179db177fe144d58b5dc787a7d4492c6ed8b9317f/frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e", size = 13106, upload-time = "2025-06-09T23:02:34.204Z" }, +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, ] [[package]] @@ -307,69 +282,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350, upload-time = "2022-01-24T01:14:49.62Z" }, ] -[[package]] -name = "multidict" -version = "6.6.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/7f/0652e6ed47ab288e3756ea9c0df8b14950781184d4bd7883f4d87dd41245/multidict-6.6.4.tar.gz", hash = "sha256:d2d4e4787672911b48350df02ed3fa3fffdc2f2e8ca06dd6afdf34189b76a9dd", size = 101843, upload-time = "2025-08-11T12:08:48.217Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/f6/512ffd8fd8b37fb2680e5ac35d788f1d71bbaf37789d21a820bdc441e565/multidict-6.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0ffb87be160942d56d7b87b0fdf098e81ed565add09eaa1294268c7f3caac4c8", size = 76516, upload-time = "2025-08-11T12:06:53.393Z" }, - { url = "https://files.pythonhosted.org/packages/99/58/45c3e75deb8855c36bd66cc1658007589662ba584dbf423d01df478dd1c5/multidict-6.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d191de6cbab2aff5de6c5723101705fd044b3e4c7cfd587a1929b5028b9714b3", size = 45394, upload-time = "2025-08-11T12:06:54.555Z" }, - { url = "https://files.pythonhosted.org/packages/fd/ca/e8c4472a93a26e4507c0b8e1f0762c0d8a32de1328ef72fd704ef9cc5447/multidict-6.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38a0956dd92d918ad5feff3db8fcb4a5eb7dba114da917e1a88475619781b57b", size = 43591, upload-time = "2025-08-11T12:06:55.672Z" }, - { url = "https://files.pythonhosted.org/packages/05/51/edf414f4df058574a7265034d04c935aa84a89e79ce90fcf4df211f47b16/multidict-6.6.4-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6865f6d3b7900ae020b495d599fcf3765653bc927951c1abb959017f81ae8287", size = 237215, upload-time = "2025-08-11T12:06:57.213Z" }, - { url = "https://files.pythonhosted.org/packages/c8/45/8b3d6dbad8cf3252553cc41abea09ad527b33ce47a5e199072620b296902/multidict-6.6.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a2088c126b6f72db6c9212ad827d0ba088c01d951cee25e758c450da732c138", size = 258299, upload-time = "2025-08-11T12:06:58.946Z" }, - { url = "https://files.pythonhosted.org/packages/3c/e8/8ca2e9a9f5a435fc6db40438a55730a4bf4956b554e487fa1b9ae920f825/multidict-6.6.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0f37bed7319b848097085d7d48116f545985db988e2256b2e6f00563a3416ee6", size = 242357, upload-time = "2025-08-11T12:07:00.301Z" }, - { url = "https://files.pythonhosted.org/packages/0f/84/80c77c99df05a75c28490b2af8f7cba2a12621186e0a8b0865d8e745c104/multidict-6.6.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:01368e3c94032ba6ca0b78e7ccb099643466cf24f8dc8eefcfdc0571d56e58f9", size = 268369, upload-time = "2025-08-11T12:07:01.638Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e9/920bfa46c27b05fb3e1ad85121fd49f441492dca2449c5bcfe42e4565d8a/multidict-6.6.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe323540c255db0bffee79ad7f048c909f2ab0edb87a597e1c17da6a54e493c", size = 269341, upload-time = "2025-08-11T12:07:02.943Z" }, - { url = "https://files.pythonhosted.org/packages/af/65/753a2d8b05daf496f4a9c367fe844e90a1b2cac78e2be2c844200d10cc4c/multidict-6.6.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8eb3025f17b0a4c3cd08cda49acf312a19ad6e8a4edd9dbd591e6506d999402", size = 256100, upload-time = "2025-08-11T12:07:04.564Z" }, - { url = "https://files.pythonhosted.org/packages/09/54/655be13ae324212bf0bc15d665a4e34844f34c206f78801be42f7a0a8aaa/multidict-6.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bbc14f0365534d35a06970d6a83478b249752e922d662dc24d489af1aa0d1be7", size = 253584, upload-time = "2025-08-11T12:07:05.914Z" }, - { url = "https://files.pythonhosted.org/packages/5c/74/ab2039ecc05264b5cec73eb018ce417af3ebb384ae9c0e9ed42cb33f8151/multidict-6.6.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:75aa52fba2d96bf972e85451b99d8e19cc37ce26fd016f6d4aa60da9ab2b005f", size = 251018, upload-time = "2025-08-11T12:07:08.301Z" }, - { url = "https://files.pythonhosted.org/packages/af/0a/ccbb244ac848e56c6427f2392741c06302bbfba49c0042f1eb3c5b606497/multidict-6.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fefd4a815e362d4f011919d97d7b4a1e566f1dde83dc4ad8cfb5b41de1df68d", size = 251477, upload-time = "2025-08-11T12:07:10.248Z" }, - { url = "https://files.pythonhosted.org/packages/0e/b0/0ed49bba775b135937f52fe13922bc64a7eaf0a3ead84a36e8e4e446e096/multidict-6.6.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:db9801fe021f59a5b375ab778973127ca0ac52429a26e2fd86aa9508f4d26eb7", size = 263575, upload-time = "2025-08-11T12:07:11.928Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d9/7fb85a85e14de2e44dfb6a24f03c41e2af8697a6df83daddb0e9b7569f73/multidict-6.6.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a650629970fa21ac1fb06ba25dabfc5b8a2054fcbf6ae97c758aa956b8dba802", size = 259649, upload-time = "2025-08-11T12:07:13.244Z" }, - { url = "https://files.pythonhosted.org/packages/03/9e/b3a459bcf9b6e74fa461a5222a10ff9b544cb1cd52fd482fb1b75ecda2a2/multidict-6.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:452ff5da78d4720d7516a3a2abd804957532dd69296cb77319c193e3ffb87e24", size = 251505, upload-time = "2025-08-11T12:07:14.57Z" }, - { url = "https://files.pythonhosted.org/packages/86/a2/8022f78f041dfe6d71e364001a5cf987c30edfc83c8a5fb7a3f0974cff39/multidict-6.6.4-cp312-cp312-win32.whl", hash = "sha256:8c2fcb12136530ed19572bbba61b407f655e3953ba669b96a35036a11a485793", size = 41888, upload-time = "2025-08-11T12:07:15.904Z" }, - { url = "https://files.pythonhosted.org/packages/c7/eb/d88b1780d43a56db2cba24289fa744a9d216c1a8546a0dc3956563fd53ea/multidict-6.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:047d9425860a8c9544fed1b9584f0c8bcd31bcde9568b047c5e567a1025ecd6e", size = 46072, upload-time = "2025-08-11T12:07:17.045Z" }, - { url = "https://files.pythonhosted.org/packages/9f/16/b929320bf5750e2d9d4931835a4c638a19d2494a5b519caaaa7492ebe105/multidict-6.6.4-cp312-cp312-win_arm64.whl", hash = "sha256:14754eb72feaa1e8ae528468f24250dd997b8e2188c3d2f593f9eba259e4b364", size = 43222, upload-time = "2025-08-11T12:07:18.328Z" }, - { url = "https://files.pythonhosted.org/packages/3a/5d/e1db626f64f60008320aab00fbe4f23fc3300d75892a3381275b3d284580/multidict-6.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f46a6e8597f9bd71b31cc708195d42b634c8527fecbcf93febf1052cacc1f16e", size = 75848, upload-time = "2025-08-11T12:07:19.912Z" }, - { url = "https://files.pythonhosted.org/packages/4c/aa/8b6f548d839b6c13887253af4e29c939af22a18591bfb5d0ee6f1931dae8/multidict-6.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:22e38b2bc176c5eb9c0a0e379f9d188ae4cd8b28c0f53b52bce7ab0a9e534657", size = 45060, upload-time = "2025-08-11T12:07:21.163Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c6/f5e97e5d99a729bc2aa58eb3ebfa9f1e56a9b517cc38c60537c81834a73f/multidict-6.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5df8afd26f162da59e218ac0eefaa01b01b2e6cd606cffa46608f699539246da", size = 43269, upload-time = "2025-08-11T12:07:22.392Z" }, - { url = "https://files.pythonhosted.org/packages/dc/31/d54eb0c62516776f36fe67f84a732f97e0b0e12f98d5685bebcc6d396910/multidict-6.6.4-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:49517449b58d043023720aa58e62b2f74ce9b28f740a0b5d33971149553d72aa", size = 237158, upload-time = "2025-08-11T12:07:23.636Z" }, - { url = "https://files.pythonhosted.org/packages/c4/1c/8a10c1c25b23156e63b12165a929d8eb49a6ed769fdbefb06e6f07c1e50d/multidict-6.6.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae9408439537c5afdca05edd128a63f56a62680f4b3c234301055d7a2000220f", size = 257076, upload-time = "2025-08-11T12:07:25.049Z" }, - { url = "https://files.pythonhosted.org/packages/ad/86/90e20b5771d6805a119e483fd3d1e8393e745a11511aebca41f0da38c3e2/multidict-6.6.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:87a32d20759dc52a9e850fe1061b6e41ab28e2998d44168a8a341b99ded1dba0", size = 240694, upload-time = "2025-08-11T12:07:26.458Z" }, - { url = "https://files.pythonhosted.org/packages/e7/49/484d3e6b535bc0555b52a0a26ba86e4d8d03fd5587d4936dc59ba7583221/multidict-6.6.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:52e3c8d43cdfff587ceedce9deb25e6ae77daba560b626e97a56ddcad3756879", size = 266350, upload-time = "2025-08-11T12:07:27.94Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b4/aa4c5c379b11895083d50021e229e90c408d7d875471cb3abf721e4670d6/multidict-6.6.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ad8850921d3a8d8ff6fbef790e773cecfc260bbfa0566998980d3fa8f520bc4a", size = 267250, upload-time = "2025-08-11T12:07:29.303Z" }, - { url = "https://files.pythonhosted.org/packages/80/e5/5e22c5bf96a64bdd43518b1834c6d95a4922cc2066b7d8e467dae9b6cee6/multidict-6.6.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:497a2954adc25c08daff36f795077f63ad33e13f19bfff7736e72c785391534f", size = 254900, upload-time = "2025-08-11T12:07:30.764Z" }, - { url = "https://files.pythonhosted.org/packages/17/38/58b27fed927c07035abc02befacab42491e7388ca105e087e6e0215ead64/multidict-6.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:024ce601f92d780ca1617ad4be5ac15b501cc2414970ffa2bb2bbc2bd5a68fa5", size = 252355, upload-time = "2025-08-11T12:07:32.205Z" }, - { url = "https://files.pythonhosted.org/packages/d0/a1/dad75d23a90c29c02b5d6f3d7c10ab36c3197613be5d07ec49c7791e186c/multidict-6.6.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a693fc5ed9bdd1c9e898013e0da4dcc640de7963a371c0bd458e50e046bf6438", size = 250061, upload-time = "2025-08-11T12:07:33.623Z" }, - { url = "https://files.pythonhosted.org/packages/b8/1a/ac2216b61c7f116edab6dc3378cca6c70dc019c9a457ff0d754067c58b20/multidict-6.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:190766dac95aab54cae5b152a56520fd99298f32a1266d66d27fdd1b5ac00f4e", size = 249675, upload-time = "2025-08-11T12:07:34.958Z" }, - { url = "https://files.pythonhosted.org/packages/d4/79/1916af833b800d13883e452e8e0977c065c4ee3ab7a26941fbfdebc11895/multidict-6.6.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:34d8f2a5ffdceab9dcd97c7a016deb2308531d5f0fced2bb0c9e1df45b3363d7", size = 261247, upload-time = "2025-08-11T12:07:36.588Z" }, - { url = "https://files.pythonhosted.org/packages/c5/65/d1f84fe08ac44a5fc7391cbc20a7cedc433ea616b266284413fd86062f8c/multidict-6.6.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:59e8d40ab1f5a8597abcef00d04845155a5693b5da00d2c93dbe88f2050f2812", size = 257960, upload-time = "2025-08-11T12:07:39.735Z" }, - { url = "https://files.pythonhosted.org/packages/13/b5/29ec78057d377b195ac2c5248c773703a6b602e132a763e20ec0457e7440/multidict-6.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:467fe64138cfac771f0e949b938c2e1ada2b5af22f39692aa9258715e9ea613a", size = 250078, upload-time = "2025-08-11T12:07:41.525Z" }, - { url = "https://files.pythonhosted.org/packages/c4/0e/7e79d38f70a872cae32e29b0d77024bef7834b0afb406ddae6558d9e2414/multidict-6.6.4-cp313-cp313-win32.whl", hash = "sha256:14616a30fe6d0a48d0a48d1a633ab3b8bec4cf293aac65f32ed116f620adfd69", size = 41708, upload-time = "2025-08-11T12:07:43.405Z" }, - { url = "https://files.pythonhosted.org/packages/9d/34/746696dffff742e97cd6a23da953e55d0ea51fa601fa2ff387b3edcfaa2c/multidict-6.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:40cd05eaeb39e2bc8939451f033e57feaa2ac99e07dbca8afe2be450a4a3b6cf", size = 45912, upload-time = "2025-08-11T12:07:45.082Z" }, - { url = "https://files.pythonhosted.org/packages/c7/87/3bac136181e271e29170d8d71929cdeddeb77f3e8b6a0c08da3a8e9da114/multidict-6.6.4-cp313-cp313-win_arm64.whl", hash = "sha256:f6eb37d511bfae9e13e82cb4d1af36b91150466f24d9b2b8a9785816deb16605", size = 43076, upload-time = "2025-08-11T12:07:46.746Z" }, - { url = "https://files.pythonhosted.org/packages/64/94/0a8e63e36c049b571c9ae41ee301ada29c3fee9643d9c2548d7d558a1d99/multidict-6.6.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:6c84378acd4f37d1b507dfa0d459b449e2321b3ba5f2338f9b085cf7a7ba95eb", size = 82812, upload-time = "2025-08-11T12:07:48.402Z" }, - { url = "https://files.pythonhosted.org/packages/25/1a/be8e369dfcd260d2070a67e65dd3990dd635cbd735b98da31e00ea84cd4e/multidict-6.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0e0558693063c75f3d952abf645c78f3c5dfdd825a41d8c4d8156fc0b0da6e7e", size = 48313, upload-time = "2025-08-11T12:07:49.679Z" }, - { url = "https://files.pythonhosted.org/packages/26/5a/dd4ade298674b2f9a7b06a32c94ffbc0497354df8285f27317c66433ce3b/multidict-6.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3f8e2384cb83ebd23fd07e9eada8ba64afc4c759cd94817433ab8c81ee4b403f", size = 46777, upload-time = "2025-08-11T12:07:51.318Z" }, - { url = "https://files.pythonhosted.org/packages/89/db/98aa28bc7e071bfba611ac2ae803c24e96dd3a452b4118c587d3d872c64c/multidict-6.6.4-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f996b87b420995a9174b2a7c1a8daf7db4750be6848b03eb5e639674f7963773", size = 229321, upload-time = "2025-08-11T12:07:52.965Z" }, - { url = "https://files.pythonhosted.org/packages/c7/bc/01ddda2a73dd9d167bd85d0e8ef4293836a8f82b786c63fb1a429bc3e678/multidict-6.6.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc356250cffd6e78416cf5b40dc6a74f1edf3be8e834cf8862d9ed5265cf9b0e", size = 249954, upload-time = "2025-08-11T12:07:54.423Z" }, - { url = "https://files.pythonhosted.org/packages/06/78/6b7c0f020f9aa0acf66d0ab4eb9f08375bac9a50ff5e3edb1c4ccd59eafc/multidict-6.6.4-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:dadf95aa862714ea468a49ad1e09fe00fcc9ec67d122f6596a8d40caf6cec7d0", size = 228612, upload-time = "2025-08-11T12:07:55.914Z" }, - { url = "https://files.pythonhosted.org/packages/00/44/3faa416f89b2d5d76e9d447296a81521e1c832ad6e40b92f990697b43192/multidict-6.6.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7dd57515bebffd8ebd714d101d4c434063322e4fe24042e90ced41f18b6d3395", size = 257528, upload-time = "2025-08-11T12:07:57.371Z" }, - { url = "https://files.pythonhosted.org/packages/05/5f/77c03b89af0fcb16f018f668207768191fb9dcfb5e3361a5e706a11db2c9/multidict-6.6.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:967af5f238ebc2eb1da4e77af5492219fbd9b4b812347da39a7b5f5c72c0fa45", size = 256329, upload-time = "2025-08-11T12:07:58.844Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e9/ed750a2a9afb4f8dc6f13dc5b67b514832101b95714f1211cd42e0aafc26/multidict-6.6.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a4c6875c37aae9794308ec43e3530e4aa0d36579ce38d89979bbf89582002bb", size = 247928, upload-time = "2025-08-11T12:08:01.037Z" }, - { url = "https://files.pythonhosted.org/packages/1f/b5/e0571bc13cda277db7e6e8a532791d4403dacc9850006cb66d2556e649c0/multidict-6.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7f683a551e92bdb7fac545b9c6f9fa2aebdeefa61d607510b3533286fcab67f5", size = 245228, upload-time = "2025-08-11T12:08:02.96Z" }, - { url = "https://files.pythonhosted.org/packages/f3/a3/69a84b0eccb9824491f06368f5b86e72e4af54c3067c37c39099b6687109/multidict-6.6.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:3ba5aaf600edaf2a868a391779f7a85d93bed147854925f34edd24cc70a3e141", size = 235869, upload-time = "2025-08-11T12:08:04.746Z" }, - { url = "https://files.pythonhosted.org/packages/a9/9d/28802e8f9121a6a0804fa009debf4e753d0a59969ea9f70be5f5fdfcb18f/multidict-6.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:580b643b7fd2c295d83cad90d78419081f53fd532d1f1eb67ceb7060f61cff0d", size = 243446, upload-time = "2025-08-11T12:08:06.332Z" }, - { url = "https://files.pythonhosted.org/packages/38/ea/6c98add069b4878c1d66428a5f5149ddb6d32b1f9836a826ac764b9940be/multidict-6.6.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:37b7187197da6af3ee0b044dbc9625afd0c885f2800815b228a0e70f9a7f473d", size = 252299, upload-time = "2025-08-11T12:08:07.931Z" }, - { url = "https://files.pythonhosted.org/packages/3a/09/8fe02d204473e14c0af3affd50af9078839dfca1742f025cca765435d6b4/multidict-6.6.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e1b93790ed0bc26feb72e2f08299691ceb6da5e9e14a0d13cc74f1869af327a0", size = 246926, upload-time = "2025-08-11T12:08:09.467Z" }, - { url = "https://files.pythonhosted.org/packages/37/3d/7b1e10d774a6df5175ecd3c92bff069e77bed9ec2a927fdd4ff5fe182f67/multidict-6.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a506a77ddee1efcca81ecbeae27ade3e09cdf21a8ae854d766c2bb4f14053f92", size = 243383, upload-time = "2025-08-11T12:08:10.981Z" }, - { url = "https://files.pythonhosted.org/packages/50/b0/a6fae46071b645ae98786ab738447de1ef53742eaad949f27e960864bb49/multidict-6.6.4-cp313-cp313t-win32.whl", hash = "sha256:f93b2b2279883d1d0a9e1bd01f312d6fc315c5e4c1f09e112e4736e2f650bc4e", size = 47775, upload-time = "2025-08-11T12:08:12.439Z" }, - { url = "https://files.pythonhosted.org/packages/b2/0a/2436550b1520091af0600dff547913cb2d66fbac27a8c33bc1b1bccd8d98/multidict-6.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:6d46a180acdf6e87cc41dc15d8f5c2986e1e8739dc25dbb7dac826731ef381a4", size = 53100, upload-time = "2025-08-11T12:08:13.823Z" }, - { url = "https://files.pythonhosted.org/packages/97/ea/43ac51faff934086db9c072a94d327d71b7d8b40cd5dcb47311330929ef0/multidict-6.6.4-cp313-cp313t-win_arm64.whl", hash = "sha256:756989334015e3335d087a27331659820d53ba432befdef6a718398b0a8493ad", size = 45501, upload-time = "2025-08-11T12:08:15.173Z" }, - { url = "https://files.pythonhosted.org/packages/fd/69/b547032297c7e63ba2af494edba695d781af8a0c6e89e4d06cf848b21d80/multidict-6.6.4-py3-none-any.whl", hash = "sha256:27d8f8e125c07cb954e54d75d04905a9bba8a439c1d84aca94949d4d03d8601c", size = 12313, upload-time = "2025-08-11T12:08:46.891Z" }, -] - [[package]] name = "mypy" version = "1.17.1" @@ -473,60 +385,93 @@ wheels = [ ] [[package]] -name = "propcache" -version = "0.3.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/16/43264e4a779dd8588c21a70f0709665ee8f611211bdd2c87d952cfa7c776/propcache-0.3.2.tar.gz", hash = "sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168", size = 44139, upload-time = "2025-06-09T22:56:06.081Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/42/9ca01b0a6f48e81615dca4765a8f1dd2c057e0540f6116a27dc5ee01dfb6/propcache-0.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8de106b6c84506b31c27168582cd3cb3000a6412c16df14a8628e5871ff83c10", size = 73674, upload-time = "2025-06-09T22:54:30.551Z" }, - { url = "https://files.pythonhosted.org/packages/af/6e/21293133beb550f9c901bbece755d582bfaf2176bee4774000bd4dd41884/propcache-0.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28710b0d3975117239c76600ea351934ac7b5ff56e60953474342608dbbb6154", size = 43570, upload-time = "2025-06-09T22:54:32.296Z" }, - { url = "https://files.pythonhosted.org/packages/0c/c8/0393a0a3a2b8760eb3bde3c147f62b20044f0ddac81e9d6ed7318ec0d852/propcache-0.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce26862344bdf836650ed2487c3d724b00fbfec4233a1013f597b78c1cb73615", size = 43094, upload-time = "2025-06-09T22:54:33.929Z" }, - { url = "https://files.pythonhosted.org/packages/37/2c/489afe311a690399d04a3e03b069225670c1d489eb7b044a566511c1c498/propcache-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bca54bd347a253af2cf4544bbec232ab982f4868de0dd684246b67a51bc6b1db", size = 226958, upload-time = "2025-06-09T22:54:35.186Z" }, - { url = "https://files.pythonhosted.org/packages/9d/ca/63b520d2f3d418c968bf596839ae26cf7f87bead026b6192d4da6a08c467/propcache-0.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55780d5e9a2ddc59711d727226bb1ba83a22dd32f64ee15594b9392b1f544eb1", size = 234894, upload-time = "2025-06-09T22:54:36.708Z" }, - { url = "https://files.pythonhosted.org/packages/11/60/1d0ed6fff455a028d678df30cc28dcee7af77fa2b0e6962ce1df95c9a2a9/propcache-0.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:035e631be25d6975ed87ab23153db6a73426a48db688070d925aa27e996fe93c", size = 233672, upload-time = "2025-06-09T22:54:38.062Z" }, - { url = "https://files.pythonhosted.org/packages/37/7c/54fd5301ef38505ab235d98827207176a5c9b2aa61939b10a460ca53e123/propcache-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6f22b6eaa39297c751d0e80c0d3a454f112f5c6481214fcf4c092074cecd67", size = 224395, upload-time = "2025-06-09T22:54:39.634Z" }, - { url = "https://files.pythonhosted.org/packages/ee/1a/89a40e0846f5de05fdc6779883bf46ba980e6df4d2ff8fb02643de126592/propcache-0.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ca3aee1aa955438c4dba34fc20a9f390e4c79967257d830f137bd5a8a32ed3b", size = 212510, upload-time = "2025-06-09T22:54:41.565Z" }, - { url = "https://files.pythonhosted.org/packages/5e/33/ca98368586c9566a6b8d5ef66e30484f8da84c0aac3f2d9aec6d31a11bd5/propcache-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4f30862869fa2b68380d677cc1c5fcf1e0f2b9ea0cf665812895c75d0ca3b8", size = 222949, upload-time = "2025-06-09T22:54:43.038Z" }, - { url = "https://files.pythonhosted.org/packages/ba/11/ace870d0aafe443b33b2f0b7efdb872b7c3abd505bfb4890716ad7865e9d/propcache-0.3.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b77ec3c257d7816d9f3700013639db7491a434644c906a2578a11daf13176251", size = 217258, upload-time = "2025-06-09T22:54:44.376Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d2/86fd6f7adffcfc74b42c10a6b7db721d1d9ca1055c45d39a1a8f2a740a21/propcache-0.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cab90ac9d3f14b2d5050928483d3d3b8fb6b4018893fc75710e6aa361ecb2474", size = 213036, upload-time = "2025-06-09T22:54:46.243Z" }, - { url = "https://files.pythonhosted.org/packages/07/94/2d7d1e328f45ff34a0a284cf5a2847013701e24c2a53117e7c280a4316b3/propcache-0.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0b504d29f3c47cf6b9e936c1852246c83d450e8e063d50562115a6be6d3a2535", size = 227684, upload-time = "2025-06-09T22:54:47.63Z" }, - { url = "https://files.pythonhosted.org/packages/b7/05/37ae63a0087677e90b1d14710e532ff104d44bc1efa3b3970fff99b891dc/propcache-0.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:ce2ac2675a6aa41ddb2a0c9cbff53780a617ac3d43e620f8fd77ba1c84dcfc06", size = 234562, upload-time = "2025-06-09T22:54:48.982Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7c/3f539fcae630408d0bd8bf3208b9a647ccad10976eda62402a80adf8fc34/propcache-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1", size = 222142, upload-time = "2025-06-09T22:54:50.424Z" }, - { url = "https://files.pythonhosted.org/packages/7c/d2/34b9eac8c35f79f8a962546b3e97e9d4b990c420ee66ac8255d5d9611648/propcache-0.3.2-cp312-cp312-win32.whl", hash = "sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1", size = 37711, upload-time = "2025-06-09T22:54:52.072Z" }, - { url = "https://files.pythonhosted.org/packages/19/61/d582be5d226cf79071681d1b46b848d6cb03d7b70af7063e33a2787eaa03/propcache-0.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c", size = 41479, upload-time = "2025-06-09T22:54:53.234Z" }, - { url = "https://files.pythonhosted.org/packages/dc/d1/8c747fafa558c603c4ca19d8e20b288aa0c7cda74e9402f50f31eb65267e/propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945", size = 71286, upload-time = "2025-06-09T22:54:54.369Z" }, - { url = "https://files.pythonhosted.org/packages/61/99/d606cb7986b60d89c36de8a85d58764323b3a5ff07770a99d8e993b3fa73/propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252", size = 42425, upload-time = "2025-06-09T22:54:55.642Z" }, - { url = "https://files.pythonhosted.org/packages/8c/96/ef98f91bbb42b79e9bb82bdd348b255eb9d65f14dbbe3b1594644c4073f7/propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f", size = 41846, upload-time = "2025-06-09T22:54:57.246Z" }, - { url = "https://files.pythonhosted.org/packages/5b/ad/3f0f9a705fb630d175146cd7b1d2bf5555c9beaed54e94132b21aac098a6/propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33", size = 208871, upload-time = "2025-06-09T22:54:58.975Z" }, - { url = "https://files.pythonhosted.org/packages/3a/38/2085cda93d2c8b6ec3e92af2c89489a36a5886b712a34ab25de9fbca7992/propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e", size = 215720, upload-time = "2025-06-09T22:55:00.471Z" }, - { url = "https://files.pythonhosted.org/packages/61/c1/d72ea2dc83ac7f2c8e182786ab0fc2c7bd123a1ff9b7975bee671866fe5f/propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1", size = 215203, upload-time = "2025-06-09T22:55:01.834Z" }, - { url = "https://files.pythonhosted.org/packages/af/81/b324c44ae60c56ef12007105f1460d5c304b0626ab0cc6b07c8f2a9aa0b8/propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3", size = 206365, upload-time = "2025-06-09T22:55:03.199Z" }, - { url = "https://files.pythonhosted.org/packages/09/73/88549128bb89e66d2aff242488f62869014ae092db63ccea53c1cc75a81d/propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1", size = 196016, upload-time = "2025-06-09T22:55:04.518Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3f/3bdd14e737d145114a5eb83cb172903afba7242f67c5877f9909a20d948d/propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6", size = 205596, upload-time = "2025-06-09T22:55:05.942Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ca/2f4aa819c357d3107c3763d7ef42c03980f9ed5c48c82e01e25945d437c1/propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387", size = 200977, upload-time = "2025-06-09T22:55:07.792Z" }, - { url = "https://files.pythonhosted.org/packages/cd/4a/e65276c7477533c59085251ae88505caf6831c0e85ff8b2e31ebcbb949b1/propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4", size = 197220, upload-time = "2025-06-09T22:55:09.173Z" }, - { url = "https://files.pythonhosted.org/packages/7c/54/fc7152e517cf5578278b242396ce4d4b36795423988ef39bb8cd5bf274c8/propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88", size = 210642, upload-time = "2025-06-09T22:55:10.62Z" }, - { url = "https://files.pythonhosted.org/packages/b9/80/abeb4a896d2767bf5f1ea7b92eb7be6a5330645bd7fb844049c0e4045d9d/propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206", size = 212789, upload-time = "2025-06-09T22:55:12.029Z" }, - { url = "https://files.pythonhosted.org/packages/b3/db/ea12a49aa7b2b6d68a5da8293dcf50068d48d088100ac016ad92a6a780e6/propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43", size = 205880, upload-time = "2025-06-09T22:55:13.45Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e5/9076a0bbbfb65d1198007059c65639dfd56266cf8e477a9707e4b1999ff4/propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02", size = 37220, upload-time = "2025-06-09T22:55:15.284Z" }, - { url = "https://files.pythonhosted.org/packages/d3/f5/b369e026b09a26cd77aa88d8fffd69141d2ae00a2abaaf5380d2603f4b7f/propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05", size = 40678, upload-time = "2025-06-09T22:55:16.445Z" }, - { url = "https://files.pythonhosted.org/packages/a4/3a/6ece377b55544941a08d03581c7bc400a3c8cd3c2865900a68d5de79e21f/propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b", size = 76560, upload-time = "2025-06-09T22:55:17.598Z" }, - { url = "https://files.pythonhosted.org/packages/0c/da/64a2bb16418740fa634b0e9c3d29edff1db07f56d3546ca2d86ddf0305e1/propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0", size = 44676, upload-time = "2025-06-09T22:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/36/7b/f025e06ea51cb72c52fb87e9b395cced02786610b60a3ed51da8af017170/propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e", size = 44701, upload-time = "2025-06-09T22:55:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/a4/00/faa1b1b7c3b74fc277f8642f32a4c72ba1d7b2de36d7cdfb676db7f4303e/propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28", size = 276934, upload-time = "2025-06-09T22:55:21.5Z" }, - { url = "https://files.pythonhosted.org/packages/74/ab/935beb6f1756e0476a4d5938ff44bf0d13a055fed880caf93859b4f1baf4/propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a", size = 278316, upload-time = "2025-06-09T22:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/f8/9d/994a5c1ce4389610838d1caec74bdf0e98b306c70314d46dbe4fcf21a3e2/propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c", size = 282619, upload-time = "2025-06-09T22:55:24.651Z" }, - { url = "https://files.pythonhosted.org/packages/2b/00/a10afce3d1ed0287cef2e09506d3be9822513f2c1e96457ee369adb9a6cd/propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725", size = 265896, upload-time = "2025-06-09T22:55:26.049Z" }, - { url = "https://files.pythonhosted.org/packages/2e/a8/2aa6716ffa566ca57c749edb909ad27884680887d68517e4be41b02299f3/propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892", size = 252111, upload-time = "2025-06-09T22:55:27.381Z" }, - { url = "https://files.pythonhosted.org/packages/36/4f/345ca9183b85ac29c8694b0941f7484bf419c7f0fea2d1e386b4f7893eed/propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44", size = 268334, upload-time = "2025-06-09T22:55:28.747Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ca/fcd54f78b59e3f97b3b9715501e3147f5340167733d27db423aa321e7148/propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe", size = 255026, upload-time = "2025-06-09T22:55:30.184Z" }, - { url = "https://files.pythonhosted.org/packages/8b/95/8e6a6bbbd78ac89c30c225210a5c687790e532ba4088afb8c0445b77ef37/propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81", size = 250724, upload-time = "2025-06-09T22:55:31.646Z" }, - { url = "https://files.pythonhosted.org/packages/ee/b0/0dd03616142baba28e8b2d14ce5df6631b4673850a3d4f9c0f9dd714a404/propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba", size = 268868, upload-time = "2025-06-09T22:55:33.209Z" }, - { url = "https://files.pythonhosted.org/packages/c5/98/2c12407a7e4fbacd94ddd32f3b1e3d5231e77c30ef7162b12a60e2dd5ce3/propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770", size = 271322, upload-time = "2025-06-09T22:55:35.065Z" }, - { url = "https://files.pythonhosted.org/packages/35/91/9cb56efbb428b006bb85db28591e40b7736847b8331d43fe335acf95f6c8/propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330", size = 265778, upload-time = "2025-06-09T22:55:36.45Z" }, - { url = "https://files.pythonhosted.org/packages/9a/4c/b0fe775a2bdd01e176b14b574be679d84fc83958335790f7c9a686c1f468/propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394", size = 41175, upload-time = "2025-06-09T22:55:38.436Z" }, - { url = "https://files.pythonhosted.org/packages/a4/ff/47f08595e3d9b5e149c150f88d9714574f1a7cbd89fe2817158a952674bf/propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198", size = 44857, upload-time = "2025-06-09T22:55:39.687Z" }, - { url = "https://files.pythonhosted.org/packages/cc/35/cc0aaecf278bb4575b8555f2b137de5ab821595ddae9da9d3cd1da4072c7/propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f", size = 12663, upload-time = "2025-06-09T22:56:04.484Z" }, +name = "pydantic" +version = "2.13.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/e4/40d09941a2cebcb20609b86a559817d5b9291c49dd6f8c87e5feffbe703a/pydantic-2.13.3.tar.gz", hash = "sha256:af09e9d1d09f4e7fe37145c1f577e1d61ceb9a41924bf0094a36506285d0a84d", size = 844068, upload-time = "2026-04-20T14:46:43.632Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/0a/fd7d723f8f8153418fb40cf9c940e82004fce7e987026b08a68a36dd3fe7/pydantic-2.13.3-py3-none-any.whl", hash = "sha256:6db14ac8dfc9a1e57f87ea2c0de670c251240f43cb0c30a5130e9720dc612927", size = 471981, upload-time = "2026-04-20T14:46:41.402Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/ef/f7abb56c49382a246fd2ce9c799691e3c3e7175ec74b14d99e798bcddb1a/pydantic_core-2.46.3.tar.gz", hash = "sha256:41c178f65b8c29807239d47e6050262eb6bf84eb695e41101e62e38df4a5bc2c", size = 471412, upload-time = "2026-04-20T14:40:56.672Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/cb/5b47425556ecc1f3fe18ed2a0083188aa46e1dd812b06e406475b3a5d536/pydantic_core-2.46.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b11b59b3eee90a80a36701ddb4576d9ae31f93f05cb9e277ceaa09e6bf074a67", size = 2101946, upload-time = "2026-04-20T14:40:52.581Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4f/2fb62c2267cae99b815bbf4a7b9283812c88ca3153ef29f7707200f1d4e5/pydantic_core-2.46.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af8653713055ea18a3abc1537fe2ebc42f5b0bbb768d1eb79fd74eb47c0ac089", size = 1951612, upload-time = "2026-04-20T14:42:42.996Z" }, + { url = "https://files.pythonhosted.org/packages/50/6e/b7348fd30d6556d132cddd5bd79f37f96f2601fe0608afac4f5fb01ec0b3/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75a519dab6d63c514f3a81053e5266c549679e4aa88f6ec57f2b7b854aceb1b0", size = 1977027, upload-time = "2026-04-20T14:42:02.001Z" }, + { url = "https://files.pythonhosted.org/packages/82/11/31d60ee2b45540d3fb0b29302a393dbc01cd771c473f5b5147bcd353e593/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6cd87cb1575b1ad05ba98894c5b5c96411ef678fa2f6ed2576607095b8d9789", size = 2063008, upload-time = "2026-04-20T14:44:17.952Z" }, + { url = "https://files.pythonhosted.org/packages/8a/db/3a9d1957181b59258f44a2300ab0f0be9d1e12d662a4f57bb31250455c52/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f80a55484b8d843c8ada81ebf70a682f3f00a3d40e378c06cf17ecb44d280d7d", size = 2233082, upload-time = "2026-04-20T14:40:57.934Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e1/3277c38792aeb5cfb18c2f0c5785a221d9ff4e149abbe1184d53d5f72273/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3861f1731b90c50a3266316b9044f5c9b405eecb8e299b0a7120596334e4fe9c", size = 2304615, upload-time = "2026-04-20T14:42:12.584Z" }, + { url = "https://files.pythonhosted.org/packages/5e/d5/e3d9717c9eba10855325650afd2a9cba8e607321697f18953af9d562da2f/pydantic_core-2.46.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb528e295ed31570ac3dcc9bfdd6e0150bc11ce6168ac87a8082055cf1a67395", size = 2094380, upload-time = "2026-04-20T14:43:05.522Z" }, + { url = "https://files.pythonhosted.org/packages/a1/20/abac35dedcbfd66c6f0b03e4e3564511771d6c9b7ede10a362d03e110d9b/pydantic_core-2.46.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:367508faa4973b992b271ba1494acaab36eb7e8739d1e47be5035fb1ea225396", size = 2135429, upload-time = "2026-04-20T14:41:55.549Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a5/41bfd1df69afad71b5cf0535055bccc73022715ad362edbc124bc1e021d7/pydantic_core-2.46.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ad3c826fe523e4becf4fe39baa44286cff85ef137c729a2c5e269afbfd0905d", size = 2174582, upload-time = "2026-04-20T14:41:45.96Z" }, + { url = "https://files.pythonhosted.org/packages/79/65/38d86ea056b29b2b10734eb23329b7a7672ca604df4f2b6e9c02d4ee22fe/pydantic_core-2.46.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ec638c5d194ef8af27db69f16c954a09797c0dc25015ad6123eb2c73a4d271ca", size = 2187533, upload-time = "2026-04-20T14:40:55.367Z" }, + { url = "https://files.pythonhosted.org/packages/b6/55/a1129141678a2026badc539ad1dee0a71d06f54c2f06a4bd68c030ac781b/pydantic_core-2.46.3-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:28ed528c45446062ee66edb1d33df5d88828ae167de76e773a3c7f64bd14e976", size = 2332985, upload-time = "2026-04-20T14:44:13.05Z" }, + { url = "https://files.pythonhosted.org/packages/d7/60/cb26f4077719f709e54819f4e8e1d43f4091f94e285eb6bd21e1190a7b7c/pydantic_core-2.46.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aed19d0c783886d5bd86d80ae5030006b45e28464218747dcf83dabfdd092c7b", size = 2373670, upload-time = "2026-04-20T14:41:53.421Z" }, + { url = "https://files.pythonhosted.org/packages/6b/7e/c3f21882bdf1d8d086876f81b5e296206c69c6082551d776895de7801fa0/pydantic_core-2.46.3-cp312-cp312-win32.whl", hash = "sha256:06d5d8820cbbdb4147578c1fe7ffcd5b83f34508cb9f9ab76e807be7db6ff0a4", size = 1966722, upload-time = "2026-04-20T14:44:30.588Z" }, + { url = "https://files.pythonhosted.org/packages/57/be/6b5e757b859013ebfbd7adba02f23b428f37c86dcbf78b5bb0b4ffd36e99/pydantic_core-2.46.3-cp312-cp312-win_amd64.whl", hash = "sha256:c3212fda0ee959c1dd04c60b601ec31097aaa893573a3a1abd0a47bcac2968c1", size = 2072970, upload-time = "2026-04-20T14:42:54.248Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f8/a989b21cc75e9a32d24192ef700eea606521221a89faa40c919ce884f2b1/pydantic_core-2.46.3-cp312-cp312-win_arm64.whl", hash = "sha256:f1f8338dd7a7f31761f1f1a3c47503a9a3b34eea3c8b01fa6ee96408affb5e72", size = 2035963, upload-time = "2026-04-20T14:44:20.4Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3c/9b5e8eb9821936d065439c3b0fb1490ffa64163bfe7e1595985a47896073/pydantic_core-2.46.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:12bc98de041458b80c86c56b24df1d23832f3e166cbaff011f25d187f5c62c37", size = 2102109, upload-time = "2026-04-20T14:41:24.219Z" }, + { url = "https://files.pythonhosted.org/packages/91/97/1c41d1f5a19f241d8069f1e249853bcce378cdb76eec8ab636d7bc426280/pydantic_core-2.46.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:85348b8f89d2c3508b65b16c3c33a4da22b8215138d8b996912bb1532868885f", size = 1951820, upload-time = "2026-04-20T14:42:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/30/b4/d03a7ae14571bc2b6b3c7b122441154720619afe9a336fa3a95434df5e2f/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1105677a6df914b1fb71a81b96c8cce7726857e1717d86001f29be06a25ee6f8", size = 1977785, upload-time = "2026-04-20T14:42:31.648Z" }, + { url = "https://files.pythonhosted.org/packages/ae/0c/4086f808834b59e3c8f1aa26df8f4b6d998cdcf354a143d18ef41529d1fe/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87082cd65669a33adeba5470769e9704c7cf026cc30afb9cc77fd865578ebaad", size = 2062761, upload-time = "2026-04-20T14:40:37.093Z" }, + { url = "https://files.pythonhosted.org/packages/fa/71/a649be5a5064c2df0db06e0a512c2281134ed2fcc981f52a657936a7527c/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60e5f66e12c4f5212d08522963380eaaeac5ebd795826cfd19b2dfb0c7a52b9c", size = 2232989, upload-time = "2026-04-20T14:42:59.254Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/7756e75763e810b3a710f4724441d1ecc5883b94aacb07ca71c5fb5cfb69/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6cdf19bf84128d5e7c37e8a73a0c5c10d51103a650ac585d42dd6ae233f2b7f", size = 2303975, upload-time = "2026-04-20T14:41:32.287Z" }, + { url = "https://files.pythonhosted.org/packages/6c/35/68a762e0c1e31f35fa0dac733cbd9f5b118042853698de9509c8e5bf128b/pydantic_core-2.46.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031bb17f4885a43773c8c763089499f242aee2ea85cf17154168775dccdecf35", size = 2095325, upload-time = "2026-04-20T14:42:47.685Z" }, + { url = "https://files.pythonhosted.org/packages/77/bf/1bf8c9a8e91836c926eae5e3e51dce009bf495a60ca56060689d3df3f340/pydantic_core-2.46.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:bcf2a8b2982a6673693eae7348ef3d8cf3979c1d63b54fca7c397a635cc68687", size = 2133368, upload-time = "2026-04-20T14:41:22.766Z" }, + { url = "https://files.pythonhosted.org/packages/e5/50/87d818d6bab915984995157ceb2380f5aac4e563dddbed6b56f0ed057aba/pydantic_core-2.46.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28e8cf2f52d72ced402a137145923a762cbb5081e48b34312f7a0c8f55928ec3", size = 2173908, upload-time = "2026-04-20T14:42:52.044Z" }, + { url = "https://files.pythonhosted.org/packages/91/88/a311fb306d0bd6185db41fa14ae888fb81d0baf648a761ae760d30819d33/pydantic_core-2.46.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:17eaface65d9fc5abb940003020309c1bf7a211f5f608d7870297c367e6f9022", size = 2186422, upload-time = "2026-04-20T14:43:29.55Z" }, + { url = "https://files.pythonhosted.org/packages/8f/79/28fd0d81508525ab2054fef7c77a638c8b5b0afcbbaeee493cf7c3fef7e1/pydantic_core-2.46.3-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:93fd339f23408a07e98950a89644f92c54d8729719a40b30c0a30bb9ebc55d23", size = 2332709, upload-time = "2026-04-20T14:42:16.134Z" }, + { url = "https://files.pythonhosted.org/packages/b3/21/795bf5fe5c0f379308b8ef19c50dedab2e7711dbc8d0c2acf08f1c7daa05/pydantic_core-2.46.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:23cbdb3aaa74dfe0837975dbf69b469753bbde8eacace524519ffdb6b6e89eb7", size = 2372428, upload-time = "2026-04-20T14:41:10.974Z" }, + { url = "https://files.pythonhosted.org/packages/45/b3/ed14c659cbe7605e3ef063077680a64680aec81eb1a04763a05190d49b7f/pydantic_core-2.46.3-cp313-cp313-win32.whl", hash = "sha256:610eda2e3838f401105e6326ca304f5da1e15393ae25dacae5c5c63f2c275b13", size = 1965601, upload-time = "2026-04-20T14:41:42.128Z" }, + { url = "https://files.pythonhosted.org/packages/ef/bb/adb70d9a762ddd002d723fbf1bd492244d37da41e3af7b74ad212609027e/pydantic_core-2.46.3-cp313-cp313-win_amd64.whl", hash = "sha256:68cc7866ed863db34351294187f9b729964c371ba33e31c26f478471c52e1ed0", size = 2071517, upload-time = "2026-04-20T14:43:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/52/eb/66faefabebfe68bd7788339c9c9127231e680b11906368c67ce112fdb47f/pydantic_core-2.46.3-cp313-cp313-win_arm64.whl", hash = "sha256:f64b5537ac62b231572879cd08ec05600308636a5d63bcbdb15063a466977bec", size = 2035802, upload-time = "2026-04-20T14:43:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/7f/db/a7bcb4940183fda36022cd18ba8dd12f2dff40740ec7b58ce7457befa416/pydantic_core-2.46.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:afa3aa644f74e290cdede48a7b0bee37d1c35e71b05105f6b340d484af536d9b", size = 2097614, upload-time = "2026-04-20T14:44:38.374Z" }, + { url = "https://files.pythonhosted.org/packages/24/35/e4066358a22e3e99519db370494c7528f5a2aa1367370e80e27e20283543/pydantic_core-2.46.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ced3310e51aa425f7f77da8bbbb5212616655bedbe82c70944320bc1dbe5e018", size = 1951896, upload-time = "2026-04-20T14:40:53.996Z" }, + { url = "https://files.pythonhosted.org/packages/87/92/37cf4049d1636996e4b888c05a501f40a43ff218983a551d57f9d5e14f0d/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e29908922ce9da1a30b4da490bd1d3d82c01dcfdf864d2a74aacee674d0bfa34", size = 1979314, upload-time = "2026-04-20T14:41:49.446Z" }, + { url = "https://files.pythonhosted.org/packages/d8/36/9ff4d676dfbdfb2d591cf43f3d90ded01e15b1404fd101180ed2d62a2fd3/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c9ff69140423eea8ed2d5477df3ba037f671f5e897d206d921bc9fdc39613e7", size = 2056133, upload-time = "2026-04-20T14:42:23.574Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f0/405b442a4d7ba855b06eec8b2bf9c617d43b8432d099dfdc7bf999293495/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b675ab0a0d5b1c8fdb81195dc5bcefea3f3c240871cdd7ff9a2de8aa50772eb2", size = 2228726, upload-time = "2026-04-20T14:44:22.816Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f8/65cd92dd5a0bd89ba277a98ecbfaf6fc36bbd3300973c7a4b826d6ab1391/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0087084960f209a9a4af50ecd1fb063d9ad3658c07bb81a7a53f452dacbfb2ba", size = 2301214, upload-time = "2026-04-20T14:44:48.792Z" }, + { url = "https://files.pythonhosted.org/packages/fd/86/ef96a4c6e79e7a2d0410826a68fbc0eccc0fd44aa733be199d5fcac3bb87/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed42e6cc8e1b0e2b9b96e2276bad70ae625d10d6d524aed0c93de974ae029f9f", size = 2099927, upload-time = "2026-04-20T14:41:40.196Z" }, + { url = "https://files.pythonhosted.org/packages/6d/53/269caf30e0096e0a8a8f929d1982a27b3879872cca2d917d17c2f9fdf4fe/pydantic_core-2.46.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:f1771ce258afb3e4201e67d154edbbae712a76a6081079fe247c2f53c6322c22", size = 2128789, upload-time = "2026-04-20T14:41:15.868Z" }, + { url = "https://files.pythonhosted.org/packages/00/b0/1a6d9b6a587e118482910c244a1c5acf4d192604174132efd12bf0ac486f/pydantic_core-2.46.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7610b6a5242a6c736d8ad47fd5fff87fcfe8f833b281b1c409c3d6835d9227f", size = 2173815, upload-time = "2026-04-20T14:44:25.152Z" }, + { url = "https://files.pythonhosted.org/packages/87/56/e7e00d4041a7e62b5a40815590114db3b535bf3ca0bf4dca9f16cef25246/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:ff5e7783bcc5476e1db448bf268f11cb257b1c276d3e89f00b5727be86dd0127", size = 2181608, upload-time = "2026-04-20T14:41:28.933Z" }, + { url = "https://files.pythonhosted.org/packages/e8/22/4bd23c3d41f7c185d60808a1de83c76cf5aeabf792f6c636a55c3b1ec7f9/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:9d2e32edcc143bc01e95300671915d9ca052d4f745aa0a49c48d4803f8a85f2c", size = 2326968, upload-time = "2026-04-20T14:42:03.962Z" }, + { url = "https://files.pythonhosted.org/packages/24/ac/66cd45129e3915e5ade3b292cb3bc7fd537f58f8f8dbdaba6170f7cabb74/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d83d1c6b87fa56b521479cff237e626a292f3b31b6345c15a99121b454c1", size = 2369842, upload-time = "2026-04-20T14:41:35.52Z" }, + { url = "https://files.pythonhosted.org/packages/a2/51/dd4248abb84113615473aa20d5545b7c4cd73c8644003b5259686f93996c/pydantic_core-2.46.3-cp314-cp314-win32.whl", hash = "sha256:07bc6d2a28c3adb4f7c6ae46aa4f2d2929af127f587ed44057af50bf1ce0f505", size = 1959661, upload-time = "2026-04-20T14:41:00.042Z" }, + { url = "https://files.pythonhosted.org/packages/20/eb/59980e5f1ae54a3b86372bd9f0fa373ea2d402e8cdcd3459334430f91e91/pydantic_core-2.46.3-cp314-cp314-win_amd64.whl", hash = "sha256:8940562319bc621da30714617e6a7eaa6b98c84e8c685bcdc02d7ed5e7c7c44e", size = 2071686, upload-time = "2026-04-20T14:43:16.471Z" }, + { url = "https://files.pythonhosted.org/packages/8c/db/1cf77e5247047dfee34bc01fa9bca134854f528c8eb053e144298893d370/pydantic_core-2.46.3-cp314-cp314-win_arm64.whl", hash = "sha256:5dcbbcf4d22210ced8f837c96db941bdb078f419543472aca5d9a0bb7cddc7df", size = 2026907, upload-time = "2026-04-20T14:43:31.732Z" }, + { url = "https://files.pythonhosted.org/packages/57/c0/b3df9f6a543276eadba0a48487b082ca1f201745329d97dbfa287034a230/pydantic_core-2.46.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d0fe3dce1e836e418f912c1ad91c73357d03e556a4d286f441bf34fed2dbeecf", size = 2095047, upload-time = "2026-04-20T14:42:37.982Z" }, + { url = "https://files.pythonhosted.org/packages/66/57/886a938073b97556c168fd99e1a7305bb363cd30a6d2c76086bf0587b32a/pydantic_core-2.46.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9ce92e58abc722dac1bf835a6798a60b294e48eb0e625ec9fd994b932ac5feee", size = 1934329, upload-time = "2026-04-20T14:43:49.655Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7c/b42eaa5c34b13b07ecb51da21761297a9b8eb43044c864a035999998f328/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03e6467f0f5ab796a486146d1b887b2dc5e5f9b3288898c1b1c3ad974e53e4a", size = 1974847, upload-time = "2026-04-20T14:42:10.737Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9b/92b42db6543e7de4f99ae977101a2967b63122d4b6cf7773812da2d7d5b5/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2798b6ba041b9d70acfb9071a2ea13c8456dd1e6a5555798e41ba7b0790e329c", size = 2041742, upload-time = "2026-04-20T14:40:44.262Z" }, + { url = "https://files.pythonhosted.org/packages/0f/19/46fbe1efabb5aa2834b43b9454e70f9a83ad9c338c1291e48bdc4fecf167/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9be3e221bdc6d69abf294dcf7aff6af19c31a5cdcc8f0aa3b14be29df4bd03b1", size = 2236235, upload-time = "2026-04-20T14:41:27.307Z" }, + { url = "https://files.pythonhosted.org/packages/77/da/b3f95bc009ad60ec53120f5d16c6faa8cabdbe8a20d83849a1f2b8728148/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13936129ce841f2a5ddf6f126fea3c43cd128807b5a59588c37cf10178c2e64", size = 2282633, upload-time = "2026-04-20T14:44:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6e/401336117722e28f32fb8220df676769d28ebdf08f2f4469646d404c43a3/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28b5f2ef03416facccb1c6ef744c69793175fd27e44ef15669201601cf423acb", size = 2109679, upload-time = "2026-04-20T14:44:41.065Z" }, + { url = "https://files.pythonhosted.org/packages/fc/53/b289f9bc8756a32fe718c46f55afaeaf8d489ee18d1a1e7be1db73f42cc4/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:830d1247d77ad23852314f069e9d7ddafeec5f684baf9d7e7065ed46a049c4e6", size = 2108342, upload-time = "2026-04-20T14:42:50.144Z" }, + { url = "https://files.pythonhosted.org/packages/10/5b/8292fc7c1f9111f1b2b7c1b0dcf1179edcd014fc3ea4517499f50b829d71/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0793c90c1a3c74966e7975eaef3ed30ebdff3260a0f815a62a22adc17e4c01c", size = 2157208, upload-time = "2026-04-20T14:42:08.133Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9e/f80044e9ec07580f057a89fc131f78dda7a58751ddf52bbe05eaf31db50f/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d2d0aead851b66f5245ec0c4fb2612ef457f8bbafefdf65a2bf9d6bac6140f47", size = 2167237, upload-time = "2026-04-20T14:42:25.412Z" }, + { url = "https://files.pythonhosted.org/packages/f8/84/6781a1b037f3b96be9227edbd1101f6d3946746056231bf4ac48cdff1a8d/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:2f40e4246676beb31c5ce77c38a55ca4e465c6b38d11ea1bd935420568e0b1ab", size = 2312540, upload-time = "2026-04-20T14:40:40.313Z" }, + { url = "https://files.pythonhosted.org/packages/3e/db/19c0839feeb728e7df03255581f198dfdf1c2aeb1e174a8420b63c5252e5/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:cf489cf8986c543939aeee17a09c04d6ffb43bfef8ca16fcbcc5cfdcbed24dba", size = 2369556, upload-time = "2026-04-20T14:41:09.427Z" }, + { url = "https://files.pythonhosted.org/packages/e0/15/3228774cb7cd45f5f721ddf1b2242747f4eb834d0c491f0c02d606f09fed/pydantic_core-2.46.3-cp314-cp314t-win32.whl", hash = "sha256:ffe0883b56cfc05798bf994164d2b2ff03efe2d22022a2bb080f3b626176dd56", size = 1949756, upload-time = "2026-04-20T14:41:25.717Z" }, + { url = "https://files.pythonhosted.org/packages/b8/2a/c79cf53fd91e5a87e30d481809f52f9a60dd221e39de66455cf04deaad37/pydantic_core-2.46.3-cp314-cp314t-win_amd64.whl", hash = "sha256:706d9d0ce9cf4593d07270d8e9f53b161f90c57d315aeec4fb4fd7a8b10240d8", size = 2051305, upload-time = "2026-04-20T14:43:18.627Z" }, + { url = "https://files.pythonhosted.org/packages/0b/db/d8182a7f1d9343a032265aae186eb063fe26ca4c40f256b21e8da4498e89/pydantic_core-2.46.3-cp314-cp314t-win_arm64.whl", hash = "sha256:77706aeb41df6a76568434701e0917da10692da28cb69d5fb6919ce5fdb07374", size = 2026310, upload-time = "2026-04-20T14:41:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/34/42/f426db557e8ab2791bc7562052299944a118655496fbff99914e564c0a94/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:b12dd51f1187c2eb489af8e20f880362db98e954b54ab792fa5d92e8bcc6b803", size = 2091877, upload-time = "2026-04-20T14:43:27.091Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4f/86a832a9d14df58e663bfdf4627dc00d3317c2bd583c4fb23390b0f04b8e/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f00a0961b125f1a47af7bcc17f00782e12f4cd056f83416006b30111d941dfa3", size = 1932428, upload-time = "2026-04-20T14:40:45.781Z" }, + { url = "https://files.pythonhosted.org/packages/11/1a/fe857968954d93fb78e0d4b6df5c988c74c4aaa67181c60be7cfe327c0ca/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57697d7c056aca4bbb680200f96563e841a6386ac1129370a0102592f4dddff5", size = 1997550, upload-time = "2026-04-20T14:44:02.425Z" }, + { url = "https://files.pythonhosted.org/packages/17/eb/9d89ad2d9b0ba8cd65393d434471621b98912abb10fbe1df08e480ba57b5/pydantic_core-2.46.3-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd35aa21299def8db7ef4fe5c4ff862941a9a158ca7b63d61e66fe67d30416b4", size = 2137657, upload-time = "2026-04-20T14:42:45.149Z" }, ] [[package]] @@ -646,42 +591,28 @@ wheels = [ ] [[package]] -name = "test-python-uv-project-template" -version = "0.0.3" -source = { editable = "." } - -[package.dev-dependencies] -dev = [ - { name = "aiohttp" }, - { name = "coverage" }, - { name = "pytest" }, - { name = "pytest-asyncio" }, - { name = "pytest-cov" }, - { name = "pytest-rerunfailures" }, - { name = "python-dotenv" }, -] -pre-commit-ci = [ - { name = "mypy" }, - { name = "pre-commit" }, - { name = "pylint" }, -] - -[package.metadata] - -[package.metadata.requires-dev] -dev = [ - { name = "aiohttp", specifier = ">=3.12.13" }, - { name = "coverage", specifier = "~=7.10" }, - { name = "pytest", specifier = ">=8.1.1,<9" }, - { name = "pytest-asyncio", specifier = ">=0.23.0,<2" }, - { name = "pytest-cov", specifier = ">=5.0.0,<8" }, - { name = "pytest-rerunfailures", specifier = ">=14.0,<17" }, - { name = "python-dotenv", specifier = ">=1.0.1,<2" }, -] -pre-commit-ci = [ - { name = "mypy", specifier = ">=1.2.0,<2" }, - { name = "pre-commit", specifier = ">=3.5.0,<5" }, - { name = "pylint", specifier = ">=3.1.0,<4" }, +name = "ruff" +version = "0.15.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/8d/192f3d7103816158dfd5ea50d098ef2aec19194e6cbccd4b3485bdb2eb2d/ruff-0.15.11.tar.gz", hash = "sha256:f092b21708bf0e7437ce9ada249dfe688ff9a0954fc94abab05dcea7dcd29c33", size = 4637264, upload-time = "2026-04-16T18:46:26.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/1e/6aca3427f751295ab011828e15e9bf452200ac74484f1db4be0197b8170b/ruff-0.15.11-py3-none-linux_armv6l.whl", hash = "sha256:e927cfff503135c558eb581a0c9792264aae9507904eb27809cdcff2f2c847b7", size = 10607943, upload-time = "2026-04-16T18:46:05.967Z" }, + { url = "https://files.pythonhosted.org/packages/e7/26/1341c262e74f36d4e84f3d6f4df0ac68cd53331a66bfc5080daa17c84c0b/ruff-0.15.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7a1b5b2938d8f890b76084d4fa843604d787a912541eae85fd7e233398bbb73e", size = 10988592, upload-time = "2026-04-16T18:46:00.742Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/850b1d6ffa9564fbb6740429bad53df1094082fe515c8c1e74b6d8d05f18/ruff-0.15.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d4176f3d194afbdaee6e41b9ccb1a2c287dba8700047df474abfbe773825d1cb", size = 10338501, upload-time = "2026-04-16T18:46:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/f2/11/cc1284d3e298c45a817a6aadb6c3e1d70b45c9b36d8d9cce3387b495a03a/ruff-0.15.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b17c886fb88203ced3afe7f14e8d5ae96e9d2f4ccc0ee66aa19f2c2675a27e4", size = 10670693, upload-time = "2026-04-16T18:46:41.941Z" }, + { url = "https://files.pythonhosted.org/packages/ce/9e/f8288b034ab72b371513c13f9a41d9ba3effac54e24bfb467b007daee2ca/ruff-0.15.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:49fafa220220afe7758a487b048de4c8f9f767f37dfefad46b9dd06759d003eb", size = 10416177, upload-time = "2026-04-16T18:46:21.717Z" }, + { url = "https://files.pythonhosted.org/packages/85/71/504d79abfd3d92532ba6bbe3d1c19fada03e494332a59e37c7c2dabae427/ruff-0.15.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2ab8427e74a00d93b8bda1307b1e60970d40f304af38bccb218e056c220120d", size = 11221886, upload-time = "2026-04-16T18:46:15.086Z" }, + { url = "https://files.pythonhosted.org/packages/43/5a/947e6ab7a5ad603d65b474be15a4cbc6d29832db5d762cd142e4e3a74164/ruff-0.15.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:195072c0c8e1fc8f940652073df082e37a5d9cb43b4ab1e4d0566ab8977a13b7", size = 12075183, upload-time = "2026-04-16T18:46:07.944Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a1/0b7bb6268775fdd3a0818aee8efd8f5b4e231d24dd4d528ced2534023182/ruff-0.15.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3a0996d486af3920dec930a2e7daed4847dfc12649b537a9335585ada163e9e", size = 11516575, upload-time = "2026-04-16T18:46:31.687Z" }, + { url = "https://files.pythonhosted.org/packages/30/c3/bb5168fc4d233cc06e95f482770d0f3c87945a0cd9f614b90ea8dc2f2833/ruff-0.15.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bef2cb556d509259f1fe440bb9cd33c756222cf0a7afe90d15edf0866702431", size = 11306537, upload-time = "2026-04-16T18:46:36.988Z" }, + { url = "https://files.pythonhosted.org/packages/e4/92/4cfae6441f3967317946f3b788136eecf093729b94d6561f963ed810c82e/ruff-0.15.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:030d921a836d7d4a12cf6e8d984a88b66094ccb0e0f17ddd55067c331191bf19", size = 11296813, upload-time = "2026-04-16T18:46:24.182Z" }, + { url = "https://files.pythonhosted.org/packages/43/26/972784c5dde8313acde8ac71ba8ac65475b85db4a2352a76c9934361f9bc/ruff-0.15.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0e783b599b4577788dbbb66b9addcef87e9a8832f4ce0c19e34bf55543a2f890", size = 10633136, upload-time = "2026-04-16T18:46:39.802Z" }, + { url = "https://files.pythonhosted.org/packages/5b/53/3985a4f185020c2f367f2e08a103032e12564829742a1b417980ce1514a0/ruff-0.15.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ae90592246625ba4a34349d68ec28d4400d75182b71baa196ddb9f82db025ef5", size = 10424701, upload-time = "2026-04-16T18:46:10.381Z" }, + { url = "https://files.pythonhosted.org/packages/d3/57/bf0dfb32241b56c83bb663a826133da4bf17f682ba8c096973065f6e6a68/ruff-0.15.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1f111d62e3c983ed20e0ca2e800f8d77433a5b1161947df99a5c2a3fb60514f0", size = 10873887, upload-time = "2026-04-16T18:46:29.157Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/e48076b2a57dc33ee8c7a957296f97c744ca891a8ffb4ffb1aaa3b3f517d/ruff-0.15.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:06f483d6646f59eaffba9ae30956370d3a886625f511a3108994000480621d1c", size = 11404316, upload-time = "2026-04-16T18:46:19.462Z" }, + { url = "https://files.pythonhosted.org/packages/88/27/0195d15fe7a897cbcba0904792c4b7c9fdd958456c3a17d2ea6093716a9a/ruff-0.15.11-py3-none-win32.whl", hash = "sha256:476a2aa56b7da0b73a3ee80b6b2f0e19cce544245479adde7baa65466664d5f3", size = 10655535, upload-time = "2026-04-16T18:46:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5e/c927b325bd4c1d3620211a4b96f47864633199feed60fa936025ab27e090/ruff-0.15.11-py3-none-win_amd64.whl", hash = "sha256:8b6756d88d7e234fb0c98c91511aae3cd519d5e3ed271cae31b20f39cb2a12a3", size = 11779692, upload-time = "2026-04-16T18:46:17.268Z" }, + { url = "https://files.pythonhosted.org/packages/63/b6/aeadee5443e49baa2facd51131159fd6301cc4ccfc1541e4df7b021c37dd/ruff-0.15.11-py3-none-win_arm64.whl", hash = "sha256:063fed18cc1bbe0ee7393957284a6fe8b588c6a406a285af3ee3f46da2391ee4", size = 11032614, upload-time = "2026-04-16T18:46:34.487Z" }, ] [[package]] @@ -702,6 +633,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + [[package]] name = "virtualenv" version = "20.34.0" @@ -715,68 +658,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615 wheels = [ { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279, upload-time = "2025-08-13T14:24:05.111Z" }, ] - -[[package]] -name = "yarl" -version = "1.20.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3c/fb/efaa23fa4e45537b827620f04cf8f3cd658b76642205162e072703a5b963/yarl-1.20.1.tar.gz", hash = "sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac", size = 186428, upload-time = "2025-06-10T00:46:09.923Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/9a/cb7fad7d73c69f296eda6815e4a2c7ed53fc70c2f136479a91c8e5fbdb6d/yarl-1.20.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdcc4cd244e58593a4379fe60fdee5ac0331f8eb70320a24d591a3be197b94a9", size = 133667, upload-time = "2025-06-10T00:43:44.369Z" }, - { url = "https://files.pythonhosted.org/packages/67/38/688577a1cb1e656e3971fb66a3492501c5a5df56d99722e57c98249e5b8a/yarl-1.20.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b29a2c385a5f5b9c7d9347e5812b6f7ab267193c62d282a540b4fc528c8a9d2a", size = 91025, upload-time = "2025-06-10T00:43:46.295Z" }, - { url = "https://files.pythonhosted.org/packages/50/ec/72991ae51febeb11a42813fc259f0d4c8e0507f2b74b5514618d8b640365/yarl-1.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1112ae8154186dfe2de4732197f59c05a83dc814849a5ced892b708033f40dc2", size = 89709, upload-time = "2025-06-10T00:43:48.22Z" }, - { url = "https://files.pythonhosted.org/packages/99/da/4d798025490e89426e9f976702e5f9482005c548c579bdae792a4c37769e/yarl-1.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90bbd29c4fe234233f7fa2b9b121fb63c321830e5d05b45153a2ca68f7d310ee", size = 352287, upload-time = "2025-06-10T00:43:49.924Z" }, - { url = "https://files.pythonhosted.org/packages/1a/26/54a15c6a567aac1c61b18aa0f4b8aa2e285a52d547d1be8bf48abe2b3991/yarl-1.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:680e19c7ce3710ac4cd964e90dad99bf9b5029372ba0c7cbfcd55e54d90ea819", size = 345429, upload-time = "2025-06-10T00:43:51.7Z" }, - { url = "https://files.pythonhosted.org/packages/d6/95/9dcf2386cb875b234353b93ec43e40219e14900e046bf6ac118f94b1e353/yarl-1.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a979218c1fdb4246a05efc2cc23859d47c89af463a90b99b7c56094daf25a16", size = 365429, upload-time = "2025-06-10T00:43:53.494Z" }, - { url = "https://files.pythonhosted.org/packages/91/b2/33a8750f6a4bc224242a635f5f2cff6d6ad5ba651f6edcccf721992c21a0/yarl-1.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255b468adf57b4a7b65d8aad5b5138dce6a0752c139965711bdcb81bc370e1b6", size = 363862, upload-time = "2025-06-10T00:43:55.766Z" }, - { url = "https://files.pythonhosted.org/packages/98/28/3ab7acc5b51f4434b181b0cee8f1f4b77a65919700a355fb3617f9488874/yarl-1.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a97d67108e79cfe22e2b430d80d7571ae57d19f17cda8bb967057ca8a7bf5bfd", size = 355616, upload-time = "2025-06-10T00:43:58.056Z" }, - { url = "https://files.pythonhosted.org/packages/36/a3/f666894aa947a371724ec7cd2e5daa78ee8a777b21509b4252dd7bd15e29/yarl-1.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8570d998db4ddbfb9a590b185a0a33dbf8aafb831d07a5257b4ec9948df9cb0a", size = 339954, upload-time = "2025-06-10T00:43:59.773Z" }, - { url = "https://files.pythonhosted.org/packages/f1/81/5f466427e09773c04219d3450d7a1256138a010b6c9f0af2d48565e9ad13/yarl-1.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97c75596019baae7c71ccf1d8cc4738bc08134060d0adfcbe5642f778d1dca38", size = 365575, upload-time = "2025-06-10T00:44:02.051Z" }, - { url = "https://files.pythonhosted.org/packages/2e/e3/e4b0ad8403e97e6c9972dd587388940a032f030ebec196ab81a3b8e94d31/yarl-1.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1c48912653e63aef91ff988c5432832692ac5a1d8f0fb8a33091520b5bbe19ef", size = 365061, upload-time = "2025-06-10T00:44:04.196Z" }, - { url = "https://files.pythonhosted.org/packages/ac/99/b8a142e79eb86c926f9f06452eb13ecb1bb5713bd01dc0038faf5452e544/yarl-1.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4c3ae28f3ae1563c50f3d37f064ddb1511ecc1d5584e88c6b7c63cf7702a6d5f", size = 364142, upload-time = "2025-06-10T00:44:06.527Z" }, - { url = "https://files.pythonhosted.org/packages/34/f2/08ed34a4a506d82a1a3e5bab99ccd930a040f9b6449e9fd050320e45845c/yarl-1.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c5e9642f27036283550f5f57dc6156c51084b458570b9d0d96100c8bebb186a8", size = 381894, upload-time = "2025-06-10T00:44:08.379Z" }, - { url = "https://files.pythonhosted.org/packages/92/f8/9a3fbf0968eac704f681726eff595dce9b49c8a25cd92bf83df209668285/yarl-1.20.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2c26b0c49220d5799f7b22c6838409ee9bc58ee5c95361a4d7831f03cc225b5a", size = 383378, upload-time = "2025-06-10T00:44:10.51Z" }, - { url = "https://files.pythonhosted.org/packages/af/85/9363f77bdfa1e4d690957cd39d192c4cacd1c58965df0470a4905253b54f/yarl-1.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004", size = 374069, upload-time = "2025-06-10T00:44:12.834Z" }, - { url = "https://files.pythonhosted.org/packages/35/99/9918c8739ba271dcd935400cff8b32e3cd319eaf02fcd023d5dcd487a7c8/yarl-1.20.1-cp312-cp312-win32.whl", hash = "sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5", size = 81249, upload-time = "2025-06-10T00:44:14.731Z" }, - { url = "https://files.pythonhosted.org/packages/eb/83/5d9092950565481b413b31a23e75dd3418ff0a277d6e0abf3729d4d1ce25/yarl-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698", size = 86710, upload-time = "2025-06-10T00:44:16.716Z" }, - { url = "https://files.pythonhosted.org/packages/8a/e1/2411b6d7f769a07687acee88a062af5833cf1966b7266f3d8dfb3d3dc7d3/yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a", size = 131811, upload-time = "2025-06-10T00:44:18.933Z" }, - { url = "https://files.pythonhosted.org/packages/b2/27/584394e1cb76fb771371770eccad35de400e7b434ce3142c2dd27392c968/yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3", size = 90078, upload-time = "2025-06-10T00:44:20.635Z" }, - { url = "https://files.pythonhosted.org/packages/bf/9a/3246ae92d4049099f52d9b0fe3486e3b500e29b7ea872d0f152966fc209d/yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7", size = 88748, upload-time = "2025-06-10T00:44:22.34Z" }, - { url = "https://files.pythonhosted.org/packages/a3/25/35afe384e31115a1a801fbcf84012d7a066d89035befae7c5d4284df1e03/yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691", size = 349595, upload-time = "2025-06-10T00:44:24.314Z" }, - { url = "https://files.pythonhosted.org/packages/28/2d/8aca6cb2cabc8f12efcb82749b9cefecbccfc7b0384e56cd71058ccee433/yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31", size = 342616, upload-time = "2025-06-10T00:44:26.167Z" }, - { url = "https://files.pythonhosted.org/packages/0b/e9/1312633d16b31acf0098d30440ca855e3492d66623dafb8e25b03d00c3da/yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28", size = 361324, upload-time = "2025-06-10T00:44:27.915Z" }, - { url = "https://files.pythonhosted.org/packages/bc/a0/688cc99463f12f7669eec7c8acc71ef56a1521b99eab7cd3abb75af887b0/yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653", size = 359676, upload-time = "2025-06-10T00:44:30.041Z" }, - { url = "https://files.pythonhosted.org/packages/af/44/46407d7f7a56e9a85a4c207724c9f2c545c060380718eea9088f222ba697/yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5", size = 352614, upload-time = "2025-06-10T00:44:32.171Z" }, - { url = "https://files.pythonhosted.org/packages/b1/91/31163295e82b8d5485d31d9cf7754d973d41915cadce070491778d9c9825/yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02", size = 336766, upload-time = "2025-06-10T00:44:34.494Z" }, - { url = "https://files.pythonhosted.org/packages/b4/8e/c41a5bc482121f51c083c4c2bcd16b9e01e1cf8729e380273a952513a21f/yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53", size = 364615, upload-time = "2025-06-10T00:44:36.856Z" }, - { url = "https://files.pythonhosted.org/packages/e3/5b/61a3b054238d33d70ea06ebba7e58597891b71c699e247df35cc984ab393/yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc", size = 360982, upload-time = "2025-06-10T00:44:39.141Z" }, - { url = "https://files.pythonhosted.org/packages/df/a3/6a72fb83f8d478cb201d14927bc8040af901811a88e0ff2da7842dd0ed19/yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04", size = 369792, upload-time = "2025-06-10T00:44:40.934Z" }, - { url = "https://files.pythonhosted.org/packages/7c/af/4cc3c36dfc7c077f8dedb561eb21f69e1e9f2456b91b593882b0b18c19dc/yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4", size = 382049, upload-time = "2025-06-10T00:44:42.854Z" }, - { url = "https://files.pythonhosted.org/packages/19/3a/e54e2c4752160115183a66dc9ee75a153f81f3ab2ba4bf79c3c53b33de34/yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b", size = 384774, upload-time = "2025-06-10T00:44:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/9c/20/200ae86dabfca89060ec6447649f219b4cbd94531e425e50d57e5f5ac330/yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1", size = 374252, upload-time = "2025-06-10T00:44:47.31Z" }, - { url = "https://files.pythonhosted.org/packages/83/75/11ee332f2f516b3d094e89448da73d557687f7d137d5a0f48c40ff211487/yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7", size = 81198, upload-time = "2025-06-10T00:44:49.164Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ba/39b1ecbf51620b40ab402b0fc817f0ff750f6d92712b44689c2c215be89d/yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c", size = 86346, upload-time = "2025-06-10T00:44:51.182Z" }, - { url = "https://files.pythonhosted.org/packages/43/c7/669c52519dca4c95153c8ad96dd123c79f354a376346b198f438e56ffeb4/yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d", size = 138826, upload-time = "2025-06-10T00:44:52.883Z" }, - { url = "https://files.pythonhosted.org/packages/6a/42/fc0053719b44f6ad04a75d7f05e0e9674d45ef62f2d9ad2c1163e5c05827/yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf", size = 93217, upload-time = "2025-06-10T00:44:54.658Z" }, - { url = "https://files.pythonhosted.org/packages/4f/7f/fa59c4c27e2a076bba0d959386e26eba77eb52ea4a0aac48e3515c186b4c/yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3", size = 92700, upload-time = "2025-06-10T00:44:56.784Z" }, - { url = "https://files.pythonhosted.org/packages/2f/d4/062b2f48e7c93481e88eff97a6312dca15ea200e959f23e96d8ab898c5b8/yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d", size = 347644, upload-time = "2025-06-10T00:44:59.071Z" }, - { url = "https://files.pythonhosted.org/packages/89/47/78b7f40d13c8f62b499cc702fdf69e090455518ae544c00a3bf4afc9fc77/yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c", size = 323452, upload-time = "2025-06-10T00:45:01.605Z" }, - { url = "https://files.pythonhosted.org/packages/eb/2b/490d3b2dc66f52987d4ee0d3090a147ea67732ce6b4d61e362c1846d0d32/yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1", size = 346378, upload-time = "2025-06-10T00:45:03.946Z" }, - { url = "https://files.pythonhosted.org/packages/66/ad/775da9c8a94ce925d1537f939a4f17d782efef1f973039d821cbe4bcc211/yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce", size = 353261, upload-time = "2025-06-10T00:45:05.992Z" }, - { url = "https://files.pythonhosted.org/packages/4b/23/0ed0922b47a4f5c6eb9065d5ff1e459747226ddce5c6a4c111e728c9f701/yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3", size = 335987, upload-time = "2025-06-10T00:45:08.227Z" }, - { url = "https://files.pythonhosted.org/packages/3e/49/bc728a7fe7d0e9336e2b78f0958a2d6b288ba89f25a1762407a222bf53c3/yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be", size = 329361, upload-time = "2025-06-10T00:45:10.11Z" }, - { url = "https://files.pythonhosted.org/packages/93/8f/b811b9d1f617c83c907e7082a76e2b92b655400e61730cd61a1f67178393/yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16", size = 346460, upload-time = "2025-06-10T00:45:12.055Z" }, - { url = "https://files.pythonhosted.org/packages/70/fd/af94f04f275f95da2c3b8b5e1d49e3e79f1ed8b6ceb0f1664cbd902773ff/yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513", size = 334486, upload-time = "2025-06-10T00:45:13.995Z" }, - { url = "https://files.pythonhosted.org/packages/84/65/04c62e82704e7dd0a9b3f61dbaa8447f8507655fd16c51da0637b39b2910/yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f", size = 342219, upload-time = "2025-06-10T00:45:16.479Z" }, - { url = "https://files.pythonhosted.org/packages/91/95/459ca62eb958381b342d94ab9a4b6aec1ddec1f7057c487e926f03c06d30/yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390", size = 350693, upload-time = "2025-06-10T00:45:18.399Z" }, - { url = "https://files.pythonhosted.org/packages/a6/00/d393e82dd955ad20617abc546a8f1aee40534d599ff555ea053d0ec9bf03/yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458", size = 355803, upload-time = "2025-06-10T00:45:20.677Z" }, - { url = "https://files.pythonhosted.org/packages/9e/ed/c5fb04869b99b717985e244fd93029c7a8e8febdfcffa06093e32d7d44e7/yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e", size = 341709, upload-time = "2025-06-10T00:45:23.221Z" }, - { url = "https://files.pythonhosted.org/packages/24/fd/725b8e73ac2a50e78a4534ac43c6addf5c1c2d65380dd48a9169cc6739a9/yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d", size = 86591, upload-time = "2025-06-10T00:45:25.793Z" }, - { url = "https://files.pythonhosted.org/packages/94/c3/b2e9f38bc3e11191981d57ea08cab2166e74ea770024a646617c9cddd9f6/yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f", size = 93003, upload-time = "2025-06-10T00:45:27.752Z" }, - { url = "https://files.pythonhosted.org/packages/b4/2d/2345fce04cfd4bee161bf1e7d9cdc702e3e16109021035dbb24db654a622/yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77", size = 46542, upload-time = "2025-06-10T00:46:07.521Z" }, -] From 31696cec6562057eff4b658839bf0f9d3bdbf52a Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:32:35 +0800 Subject: [PATCH 44/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Fix=20SonarQ?= =?UTF-8?q?ube=20organization=20and=20project=20key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index f48eb92..20e4fe8 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,6 +1,6 @@ sonar.host.url=https://sonarcloud.io -sonar.projectKey=agent-assembly_python-sdk -sonar.organization=agent-assembly +sonar.projectKey=AI-agent-assembly_python-sdk +sonar.organization=ai-agent-assembly sonar.issues.defaultAssigneeLogin=Bryant From dbe58510c888003ca3fb839af2ce63749d110b7a Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:41:37 +0800 Subject: [PATCH 45/59] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(test):=20Rename=20t?= =?UTF-8?q?est=20folders=20(unit=5Ftest->unit,=20integration=5Ftest->integ?= =?UTF-8?q?ration)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/{ => integration}/integration_test/__init__.py | 0 test/{unit_test => unit}/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename test/{ => integration}/integration_test/__init__.py (100%) rename test/{unit_test => unit}/__init__.py (100%) diff --git a/test/integration_test/__init__.py b/test/integration/integration_test/__init__.py similarity index 100% rename from test/integration_test/__init__.py rename to test/integration/integration_test/__init__.py diff --git a/test/unit_test/__init__.py b/test/unit/__init__.py similarity index 100% rename from test/unit_test/__init__.py rename to test/unit/__init__.py From 75deda7d0a7677cd93480cf2fbc1f18f24c41e85 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:42:45 +0800 Subject: [PATCH 46/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20wor?= =?UTF-8?q?kflow=20paths=20for=20renamed=20test=20folders?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/REUSABLE_WORKFLOWS.md | 4 ++-- .github/workflows/rw_build_and_test.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/REUSABLE_WORKFLOWS.md b/.github/workflows/REUSABLE_WORKFLOWS.md index 19c8768..475c38a 100644 --- a/.github/workflows/REUSABLE_WORKFLOWS.md +++ b/.github/workflows/REUSABLE_WORKFLOWS.md @@ -274,8 +274,8 @@ Your project should follow this structure for optimal compatibility: your-project/ โ”œโ”€โ”€ agent_assembly/ # Your Python package โ”œโ”€โ”€ test/ -โ”‚ โ”œโ”€โ”€ unit_test/ -โ”‚ โ”œโ”€โ”€ integration_test/ +โ”‚ โ”œโ”€โ”€ unit/ +โ”‚ โ”œโ”€โ”€ integration/ โ”‚ โ”œโ”€โ”€ e2e_test/ โ”‚ โ””โ”€โ”€ contract_test/ โ”œโ”€โ”€ scripts/ diff --git a/.github/workflows/rw_build_and_test.yaml b/.github/workflows/rw_build_and_test.yaml index c85b82c..f1b3ca3 100644 --- a/.github/workflows/rw_build_and_test.yaml +++ b/.github/workflows/rw_build_and_test.yaml @@ -19,7 +19,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master with: test_type: unit-test - test_folder: './test/unit_test' + test_folder: './test/unit' install_dependency_with_group: 'dev' python-versions: '["3.13"]' operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' @@ -29,7 +29,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master with: test_type: integration-test - test_folder: './test/integration_test' + test_folder: './test/integration' install_dependency_with_group: 'dev' python-versions: '["3.13"]' operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' From ab4ea12bf56b2d1256961b335ef00a94f9ff7046 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:44:44 +0800 Subject: [PATCH 47/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20tes?= =?UTF-8?q?t=20folder=20paths=20in=20workflows=20(e2e,=20contract,=20ci=5F?= =?UTF-8?q?script)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/REUSABLE_WORKFLOWS.md | 4 ++-- .github/workflows/ci_includes_e2e_test.yaml | 2 +- .github/workflows/rw_build_and_test.yaml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/REUSABLE_WORKFLOWS.md b/.github/workflows/REUSABLE_WORKFLOWS.md index 475c38a..37e888e 100644 --- a/.github/workflows/REUSABLE_WORKFLOWS.md +++ b/.github/workflows/REUSABLE_WORKFLOWS.md @@ -276,8 +276,8 @@ your-project/ โ”œโ”€โ”€ test/ โ”‚ โ”œโ”€โ”€ unit/ โ”‚ โ”œโ”€โ”€ integration/ -โ”‚ โ”œโ”€โ”€ e2e_test/ -โ”‚ โ””โ”€โ”€ contract_test/ +โ”‚ โ”œโ”€โ”€ e2e/ +โ”‚ โ””โ”€โ”€ contract/ โ”œโ”€โ”€ scripts/ โ”‚ โ””โ”€โ”€ run_all_tests.sh โ”œโ”€โ”€ pyproject.toml diff --git a/.github/workflows/ci_includes_e2e_test.yaml b/.github/workflows/ci_includes_e2e_test.yaml index 949227a..68716ef 100644 --- a/.github/workflows/ci_includes_e2e_test.yaml +++ b/.github/workflows/ci_includes_e2e_test.yaml @@ -15,7 +15,7 @@ on: - ".github/workflows/rw_build_and_test.yaml" - ".github/workflows/rw_run_all_test_and_record.yaml" # For test code - - "test/e2e_test/**/*.py" + - "test/e2e/**/*.py" # For configurations for test or CI - ".coveragerc" - "codecov.yml" diff --git a/.github/workflows/rw_build_and_test.yaml b/.github/workflows/rw_build_and_test.yaml index f1b3ca3..80b6944 100644 --- a/.github/workflows/rw_build_and_test.yaml +++ b/.github/workflows/rw_build_and_test.yaml @@ -40,7 +40,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master with: test_type: e2e-test - test_folder: './test/e2e_test' + test_folder: './test/e2e' install_dependency_with_group: 'dev' max-parallel: 1 python-versions: '["3.13"]' @@ -53,7 +53,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master with: test_type: contract-test - test_folder: './test/contract_test' + test_folder: './test/contract' install_dependency_with_group: 'dev' python-versions: '["3.13"]' operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' @@ -63,7 +63,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master with: test_type: ci-script-test - test_folder: './test/ci_script_test' + test_folder: './test/ci_script' install_dependency_with_group: 'dev' python-versions: '["3.13"]' operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' From 65fa887a20fab7ad463abc818df600bb4dcdc847 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:46:27 +0800 Subject: [PATCH 48/59] =?UTF-8?q?=F0=9F=9A=AE=20(test):=20Remove=20redunda?= =?UTF-8?q?nt=20integration=5Ftest=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/integration/integration_test/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test/integration/integration_test/__init__.py diff --git a/test/integration/integration_test/__init__.py b/test/integration/integration_test/__init__.py deleted file mode 100644 index e69de29..0000000 From 07712c426ca9bfa5701dc3528c5589503e09f7a3 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:50:03 +0800 Subject: [PATCH 49/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(test):=20Fix=20test?= =?UTF-8?q?s=20and=20add=20unit=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/integration/test_assembly_integration.py | 2 +- test/unit/test_assembly.py | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 test/unit/test_assembly.py diff --git a/test/integration/test_assembly_integration.py b/test/integration/test_assembly_integration.py index 3829185..5020ce5 100644 --- a/test/integration/test_assembly_integration.py +++ b/test/integration/test_assembly_integration.py @@ -41,7 +41,7 @@ def test_init_assembly_with_invalid_config(): @pytest.mark.integration -async def test_gateway_client_context_manager(): +def test_gateway_client_context_manager(): """Test that the gateway client works as a context manager.""" assembly = init_assembly( gateway_url="http://localhost:8080", diff --git a/test/unit/test_assembly.py b/test/unit/test_assembly.py new file mode 100644 index 0000000..da5667e --- /dev/null +++ b/test/unit/test_assembly.py @@ -0,0 +1,62 @@ +""" +Unit tests for the Agent Assembly SDK. + +These tests verify the basic SDK functionality without requiring external dependencies. +""" + +import pytest + +from agent_assembly import init_assembly +from agent_assembly.exceptions import ConfigurationError + + +def test_init_assembly_with_valid_config(): + """Test that assembly initialization works with valid configuration.""" + assembly = init_assembly( + gateway_url="http://localhost:8080", + agent_id="test-agent-001", + ) + assert assembly is not None + assert assembly.agent_id == "test-agent-001" + assert assembly.gateway_url == "http://localhost:8080" + assembly.close() + + +def test_init_assembly_with_invalid_config(): + """Test that assembly initialization fails with invalid configuration.""" + with pytest.raises(ConfigurationError): + init_assembly( + gateway_url="", # Invalid: empty URL + agent_id="test-agent-001", + ) + + with pytest.raises(ConfigurationError): + init_assembly( + gateway_url="http://localhost:8080", + agent_id="", # Invalid: empty agent ID + ) + + +def test_gateway_client_context_manager(): + """Test that the gateway client works as a context manager.""" + assembly = init_assembly( + gateway_url="http://localhost:8080", + agent_id="test-agent-001", + ) + + with assembly: + assert assembly.client is not None + + # Client should be closed after exiting context + assert assembly._client is None + + +def test_gateway_client_with_api_key(): + """Test that the gateway client can be initialized with an API key.""" + assembly = init_assembly( + gateway_url="http://localhost:8080", + agent_id="test-agent-001", + api_key="test-api-key", + ) + assert assembly.api_key == "test-api-key" + assembly.close() From 573562f8bcb7e1f33cb1b8cc611cd9ab0239d95f Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 15:51:47 +0800 Subject: [PATCH 50/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(package):=20Export?= =?UTF-8?q?=20init=5Fassembly=20from=20package=20=5F=5Finit=5F=5F.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent_assembly/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/agent_assembly/__init__.py b/agent_assembly/__init__.py index f5e6087..b038b1a 100644 --- a/agent_assembly/__init__.py +++ b/agent_assembly/__init__.py @@ -1,5 +1,6 @@ """Agent Assembly Python SDK.""" +from agent_assembly.core import init_assembly from agent_assembly.exceptions import ( AgentError, AssemblyError, @@ -12,6 +13,7 @@ __all__ = [ "__version__", + "init_assembly", "AssemblyError", "AgentError", "PolicyError", From 14c5d05881b021c04da66afce9cdcfd88ea7e1a2 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 16:03:04 +0800 Subject: [PATCH 51/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Comment=20ou?= =?UTF-8?q?t=20contract=20test=20steps=20(not=20implemented=20yet)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/rw_build_and_test.yaml | 46 ++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/.github/workflows/rw_build_and_test.yaml b/.github/workflows/rw_build_and_test.yaml index 80b6944..cfd65d2 100644 --- a/.github/workflows/rw_build_and_test.yaml +++ b/.github/workflows/rw_build_and_test.yaml @@ -48,15 +48,16 @@ jobs: secrets: e2e_test_api_token: ${{ secrets.e2e_test_api_token }} - run_contract-test: -# name: Run all contract test items - uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master - with: - test_type: contract-test - test_folder: './test/contract' - install_dependency_with_group: 'dev' - python-versions: '["3.13"]' - operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' + # Contract test not implemented yet + # run_contract-test: + # # name: Run all contract test items + # uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master + # with: + # test_type: contract-test + # test_folder: './test/contract' + # install_dependency_with_group: 'dev' + # python-versions: '["3.13"]' + # operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' run_script-test: # name: Run all contract test items @@ -104,17 +105,18 @@ jobs: test_type: e2e-test source_folder: src - contract-test_codecov: -# name: For end-to-end test, organize and generate the testing report and upload it to Codecov - if: ${{ - contains(fromJSON('["pull_request","workflow_dispatch","schedule"]'), github.event_name) || - (github.event_name == 'push' && github.ref_name == 'master') - }} - needs: run_contract-test - uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master - with: - test_type: contract-test - source_folder: src + # Contract test not implemented yet + # contract-test_codecov: + # # name: For end-to-end test, organize and generate the testing report and upload it to Codecov + # if: ${{ + # contains(fromJSON('["pull_request","workflow_dispatch","schedule"]'), github.event_name) || + # (github.event_name == 'push' && github.ref_name == 'master') + # }} + # needs: run_contract-test + # uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master + # with: + # test_type: contract-test + # source_folder: src all_test_not_e2e_test_codecov: # name: Organize and generate the testing report and upload it to Codecov @@ -126,7 +128,7 @@ jobs: inputs.run_e2e == false }} # needs: [run_unit-test, run_integration-test, run_contract-test] - needs: [run_unit-test, run_integration-test, run_contract-test] + needs: [run_unit-test, run_integration-test] uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: all-test @@ -142,7 +144,7 @@ jobs: inputs.run_e2e == true }} # needs: [run_unit-test, run_integration-test, run_contract-test, run_e2e-test] - needs: [run_unit-test, run_integration-test, run_contract-test, run_e2e-test] + needs: [run_unit-test, run_integration-test, run_e2e-test] uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: all-test From 1db9446fe407887d6dc753a5575d92667ba85ca9 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 16:12:12 +0800 Subject: [PATCH 52/59] =?UTF-8?q?=F0=9F=9A=AE=20(ci):=20Remove=20Docker=20?= =?UTF-8?q?references=20from=20all=20workflows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-ci.yml | 83 ----------------------- .github/workflows/dockerhub-readme-ci.yml | 69 ------------------- .github/workflows/docs-automerge.yml | 2 - .github/workflows/release-staging.yml | 9 +-- .github/workflows/release-validate.yml | 15 ---- .github/workflows/release.yml | 18 ----- 6 files changed, 1 insertion(+), 195 deletions(-) delete mode 100644 .github/workflows/docker-ci.yml delete mode 100644 .github/workflows/dockerhub-readme-ci.yml diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml deleted file mode 100644 index 9c37d16..0000000 --- a/.github/workflows/docker-ci.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: docker-ci - -on: - push: - branches: - - "" - paths: -# For GitHub Action - - ".github/workflows/docker-ci.yml" -# For source code and test - - "/**/*.py" - - "!**/__pkg_info__.py" -# For docker configuration and shell script for running by Docker - - "Dockerfile" - - "scripts/docker/run-server.sh" -# For Python project configuration - - "pyproject.toml" - - "uv.lock" - - # For the push event, in addition to build and test would be run, it would trigger other service to keep the reports - # or other checking, i.e., record the test report by CodeCov and check the code quality by SonarQube. - pull_request: - branches: - - "" - paths: -# For GitHub Action - - ".github/workflows/docker-ci.yml" -# For source code and test - - "/**/*.py" - - "!**/__pkg_info__.py" -# For docker configuration and shell script for running by Docker - - "Dockerfile" - - "scripts/docker/run-server.sh" -# For Python project configuration - - "pyproject.toml" - - "uv.lock" - -env: - TEST_TAG: user/:test - TEST_CONTAINER_NAME: - -jobs: - image-check: - runs-on: ubuntu-latest - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v4 - with: - buildkitd-flags: --debug - - - name: Validate build configuration - uses: docker/build-push-action@v7 - with: - call: check - tags: user/app:latest - cache-from: type=gha - cache-to: type=gha,mode=max - - image-test: - runs-on: ubuntu-latest - steps: - - name: Set up QEMU - uses: docker/setup-qemu-action@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v4 - with: - buildkitd-flags: --debug - - - name: Build and export to Docker - uses: docker/build-push-action@v7 - with: - load: true - tags: ${{ env.TEST_TAG }} - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Test - run: | - docker run -e API_TOKEN=${{ secrets. }} -d --rm --name ${{ env.TEST_CONTAINER_NAME }} ${{ env.TEST_TAG }} - echo "Waiting for the server to start..." - sleep 5 - docker logs ${{ env.TEST_CONTAINER_NAME }} diff --git a/.github/workflows/dockerhub-readme-ci.yml b/.github/workflows/dockerhub-readme-ci.yml deleted file mode 100644 index 537d3a5..0000000 --- a/.github/workflows/dockerhub-readme-ci.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: dockerhub-readme-ci - -on: - push: - branches: - - "master" - paths: -# For GitHub Action - - ".github/workflows/dockerhub-readme-ci.yml" -# For the README file for the Docker Hub - - "README_DOCKERHUB.md" - - # For debug and test only -# pull_request: -# branches: -# - "master" -# paths: -## For GitHub Action -# - ".github/workflows/dockerhub-readme-ci.yml" -## For the README file for the Docker Hub -# - "README_DOCKERHUB.md" - -jobs: - update-readme: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - - # Change token - - name: Get Docker Hub JWT - env: - U: chisanan232 - P: ${{ secrets.DOCKERHUB_README_UPDATE_TOKEN }} - run: | - set -euo pipefail - JWT=$(curl -s -H 'Content-Type: application/json' \ - -d "{\"username\":\"${U}\",\"password\":\"${P}\"}" \ - https://hub.docker.com/v2/users/login/ | jq -r .token) - test -n "$JWT" -a "$JWT" != null || (echo "JWT empty"; exit 1) - echo "JWT=$JWT" >> $GITHUB_ENV - echo "โœ… Got JWT for user: $U" - - - name: Update the Docker Hub short description and overview - env: - REPO: ${{ secrets.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPOSITORY }} - JWT: ${{ env.JWT }} - run: | - set -euo pipefail - ORIG=$(curl -s -H "Authorization: JWT $JWT" \ - "https://hub.docker.com/v2/repositories/${REPO}/" | jq -r .full_description) - README_FILE="README_DOCKERHUB.md" - # Read README and encode as a JSON string (preserves newlines/special chars) - NEW=$(jq -Rs . < "$README_FILE") - SHORT_NEW="${{ vars.DOCKER_HUB_SHORT_DESCRIPTION }}" - - CODE=$(curl -s -o /dev/null -w '%{http_code}' -X PATCH \ - -H "Authorization: JWT $JWT" -H "Content-Type: application/json" \ - -d "{\"description\":\"${SHORT_NEW}\", \"full_description\": ${NEW} }" \ - "https://hub.docker.com/v2/repositories/${REPO}/") - echo "PATCH full_description -> $CODE" - - # Check if the response code is 200 (success) - if [ "$CODE" != "200" ]; then - echo "โŒ Failed to update Docker Hub README. HTTP status code: $CODE" - exit 1 - fi - - echo "โœ… Successfully updated Docker Hub README" diff --git a/.github/workflows/docs-automerge.yml b/.github/workflows/docs-automerge.yml index 263d35f..97f00bc 100644 --- a/.github/workflows/docs-automerge.yml +++ b/.github/workflows/docs-automerge.yml @@ -33,12 +33,10 @@ jobs: - 'test/**' - '.github/**' - '.coveragerc' - - '.dockerignore' - '.env*' - '.gitignore' - '.pre-commit-config.yaml' - '.pylintrc' - - 'Dockerfile' - 'mypy.ini' - 'pyproject.toml' - 'pytest.ini' diff --git a/.github/workflows/release-staging.yml b/.github/workflows/release-staging.yml index 86e7c72..3b76194 100644 --- a/.github/workflows/release-staging.yml +++ b/.github/workflows/release-staging.yml @@ -31,8 +31,6 @@ jobs: with: level: ${{ inputs.level }} secrets: - DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} - DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }} TEST_PYPI_API_TOKEN: ${{ secrets.TEST_PYPI_API_TOKEN }} @@ -60,18 +58,13 @@ jobs: echo "- Base Version: ${{ needs.staging.outputs.version }}" echo "- RC Version: ${{ needs.staging.outputs.rc_version }}" echo "- TestPyPI: https://test.pypi.org/project/${{ github.repository_owner }}/${{ needs.staging.outputs.version }}/" - echo "- GHCR RC Image: ghcr.io/${{ github.repository }}:${{ needs.staging.outputs.rc_version }}" - echo "- DockerHub RC Image: docker.io/${{ github.repository }}:${{ needs.staging.outputs.rc_version }}" echo "- Docs Preview: docs-preview branch" echo "" echo "๐Ÿงช Testing Instructions:" echo "1. Install from TestPyPI:" echo " pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ ${{ github.repository_owner }}==${{ needs.staging.outputs.version }}" echo "" - echo "2. Test RC Docker image:" - echo " docker run -p 8000:8000 ghcr.io/${{ github.repository }}:${{ needs.staging.outputs.rc_version }}" - echo "" - echo "3. Review documentation preview in docs-preview branch" + echo "2. Review documentation preview in docs-preview branch" echo "" else echo "โŒ Staging process failed. Check the workflow logs above." diff --git a/.github/workflows/release-validate.yml b/.github/workflows/release-validate.yml index 5db7851..513e303 100644 --- a/.github/workflows/release-validate.yml +++ b/.github/workflows/release-validate.yml @@ -35,15 +35,6 @@ on: - auto - force - skip - docker: - description: 'Docker image validation' - required: false - default: 'auto' - type: choice - options: - - auto - - force - - skip docs: description: 'Documentation validation' required: false @@ -71,7 +62,6 @@ jobs: with: level: ${{ inputs.level }} python: ${{ inputs.python }} - docker: ${{ inputs.docker }} docs: ${{ inputs.docs }} # Summary job to report results @@ -87,7 +77,6 @@ jobs: echo "" echo "Validation Status: ${{ needs.validation.result }}" echo "Python Build: ${{ needs.validation.outputs.python_validated }}" - echo "Docker Build: ${{ needs.validation.outputs.docker_validated }}" echo "Docs Build: ${{ needs.validation.outputs.docs_validated }}" echo "Security Scan: ${{ needs.validation.outputs.security_validated }}" echo "Test Version: ${{ needs.validation.outputs.test_version }}" @@ -100,7 +89,6 @@ jobs: echo "- Release Intent: ${{ needs.validation.outputs.do_release }}" echo "- Level: ${{ needs.validation.outputs.level }}" echo "- Python: ${{ needs.validation.outputs.python }}" - echo "- Docker: ${{ needs.validation.outputs.docker }}" echo "- Docs: ${{ needs.validation.outputs.docs }}" echo "- Test Version: ${{ needs.validation.outputs.test_version }}" echo "" @@ -112,9 +100,6 @@ jobs: if [[ "${{ needs.validation.outputs.python_validated }}" != "true" ]]; then echo "- Python package build/test failed" fi - if [[ "${{ needs.validation.outputs.docker_validated }}" != "true" ]]; then - echo "- Docker image build/test failed" - fi if [[ "${{ needs.validation.outputs.docs_validated }}" != "true" ]]; then echo "- Documentation build/test failed" fi diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fa95763..fdfcaff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,15 +29,6 @@ on: - auto - force - skip - docker: - description: 'Docker image release' - required: false - default: 'auto' - type: choice - options: - - auto - - force - - skip docs: description: 'Documentation versioning' required: false @@ -65,11 +56,8 @@ jobs: with: level: ${{ inputs.level }} python: ${{ inputs.python }} - docker: ${{ inputs.docker }} docs: ${{ inputs.docs }} secrets: - DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} - DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }} TEST_PYPI_API_TOKEN: ${{ secrets.TEST_PYPI_API_TOKEN }} @@ -88,7 +76,6 @@ jobs: echo "Version Released: ${{ needs.release.outputs.version }}" echo "Release Performed: ${{ needs.release.outputs.release_performed }}" echo "Python Released: ${{ needs.release.outputs.python_released }}" - echo "Docker Released: ${{ needs.release.outputs.docker_released }}" echo "Docs Released: ${{ needs.release.outputs.docs_released }}" echo "" @@ -99,11 +86,6 @@ jobs: if [[ "${{ needs.release.outputs.python_released }}" == "true" ]]; then echo "- Python Package: https://pypi.org/project/${{ github.repository_owner }}/${{ needs.release.outputs.version }}/" fi - if [[ "${{ needs.release.outputs.docker_released }}" == "true" ]]; then - echo "- Docker Images:" - echo " - DockerHub: docker.io/${{ github.repository }}:${{ needs.release.outputs.version }}" - echo " - GHCR: ghcr.io/${{ github.repository }}:${{ needs.release.outputs.version }}" - fi if [[ "${{ needs.release.outputs.docs_released }}" == "true" ]]; then echo "- Documentation: Versioned documentation deployed" fi From d10d99b84d5fae57cea336bfbae568ff33becc3e Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 16:14:37 +0800 Subject: [PATCH 53/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Update=20tes?= =?UTF-8?q?t=20flags=20to=20match=20folder=20naming=20(unit,=20integration?= =?UTF-8?q?,=20e2e,=20contract)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflows/rw_run_all_test_and_record.yaml | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/rw_run_all_test_and_record.yaml b/.github/workflows/rw_run_all_test_and_record.yaml index b3a9bc1..6ff2ad8 100644 --- a/.github/workflows/rw_run_all_test_and_record.yaml +++ b/.github/workflows/rw_run_all_test_and_record.yaml @@ -42,10 +42,10 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: unit-test + test_type: unit upload-to-codecov: true - codecov_flags: unit-test # Required if 'upload-to-codecov' is true - codecov_name: # Required if 'upload-to-codecov' is true + codecov_flags: unit # Required if 'upload-to-codecov' is true + codecov_name: agent-assembly # Required if 'upload-to-codecov' is true integration-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -61,10 +61,10 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: integration-test + test_type: integration upload-to-codecov: true - codecov_flags: integration-test # Required if 'upload-to-codecov' is true - codecov_name: # Required if 'upload-to-codecov' is true + codecov_flags: integration # Required if 'upload-to-codecov' is true + codecov_name: agent-assembly # Required if 'upload-to-codecov' is true e2e-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -81,10 +81,10 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: e2e-test + test_type: e2e upload-to-codecov: true - codecov_flags: e2e-test # Required if 'upload-to-codecov' is true - codecov_name: # Required if 'upload-to-codecov' is true + codecov_flags: e2e # Required if 'upload-to-codecov' is true + codecov_name: agent-assembly # Required if 'upload-to-codecov' is true contract-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -100,10 +100,10 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: contract-test + test_type: contract upload-to-codecov: true - codecov_flags: contract-test # Required if 'upload-to-codecov' is true - codecov_name: # Required if 'upload-to-codecov' is true + codecov_flags: contract # Required if 'upload-to-codecov' is true + codecov_name: agent-assembly # Required if 'upload-to-codecov' is true all-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -119,10 +119,10 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: all-test + test_type: all upload-to-codecov: true - codecov_flags: all-test # Required if 'upload-to-codecov' is true - codecov_name: # Required if 'upload-to-codecov' is true + codecov_flags: all # Required if 'upload-to-codecov' is true + codecov_name: agent-assembly # Required if 'upload-to-codecov' is true sonarcloud_finish: # name: SonarCloud Scan From 892101e967a36610299ba1e14118e1fbedf3b8f5 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 16:16:19 +0800 Subject: [PATCH 54/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Rollback=20t?= =?UTF-8?q?est=5Ftype=20params,=20keep=20codecov=5Fflags=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/rw_run_all_test_and_record.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rw_run_all_test_and_record.yaml b/.github/workflows/rw_run_all_test_and_record.yaml index 6ff2ad8..4735027 100644 --- a/.github/workflows/rw_run_all_test_and_record.yaml +++ b/.github/workflows/rw_run_all_test_and_record.yaml @@ -42,7 +42,7 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: unit + test_type: unit-test upload-to-codecov: true codecov_flags: unit # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true @@ -61,7 +61,7 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: integration + test_type: integration-test upload-to-codecov: true codecov_flags: integration # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true @@ -81,7 +81,7 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: e2e + test_type: e2e-test upload-to-codecov: true codecov_flags: e2e # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true @@ -100,7 +100,7 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: contract + test_type: contract-test upload-to-codecov: true codecov_flags: contract # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true @@ -119,7 +119,7 @@ jobs: secrets: codecov_token: ${{ secrets.codecov_token }} with: - test_type: all + test_type: all-test upload-to-codecov: true codecov_flags: all # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true From 2d6729143d4f29b7e5ecef0002c3238cc58b736d Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 16:34:55 +0800 Subject: [PATCH 55/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Comment=20ou?= =?UTF-8?q?t=20CI=20script=20test=20(not=20implemented=20yet)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/rw_build_and_test.yaml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/rw_build_and_test.yaml b/.github/workflows/rw_build_and_test.yaml index cfd65d2..b822068 100644 --- a/.github/workflows/rw_build_and_test.yaml +++ b/.github/workflows/rw_build_and_test.yaml @@ -59,15 +59,16 @@ jobs: # python-versions: '["3.13"]' # operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' - run_script-test: -# name: Run all contract test items - uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master - with: - test_type: ci-script-test - test_folder: './test/ci_script' - install_dependency_with_group: 'dev' - python-versions: '["3.13"]' - operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' + # CI script test not implemented yet + # run_script-test: + # # name: Run all contract test items + # uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_uv_run_test.yaml@master + # with: + # test_type: ci-script-test + # test_folder: './test/ci_script' + # install_dependency_with_group: 'dev' + # python-versions: '["3.13"]' + # operating-systems: '["ubuntu-latest", "ubuntu-22.04", "macos-latest", "macos-14"]' unit-test_codecov: # name: For unit test, organize and generate the testing report and upload it to Codecov From da2cded637ea7230c9814f63ecf944b205d0ad9a Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 16:38:26 +0800 Subject: [PATCH 56/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(repo):=20Update=20C?= =?UTF-8?q?ODEOWNERS=20to=20use=20@Chisanan232=20(TODO:=20add=20@agent-ass?= =?UTF-8?q?embly/core-team)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/CODEOWNERS | 50 +++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7b7fb85..634178f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,50 +4,58 @@ ####################################### # Repository Default Owner +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 ####################################### -* @agent-assembly/core-team +* @Chisanan232 # Software license annotation -/LICENSE @agent-assembly/core-team +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 +/LICENSE @Chisanan232 ####################################### # Source Code +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 ####################################### -/agent_assembly/ @agent-assembly/core-team -*.py @agent-assembly/core-team +/agent_assembly/ @Chisanan232 +*.py @Chisanan232 ####################################### # Tests +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 ####################################### -/test/ @agent-assembly/core-team +/test/ @Chisanan232 ####################################### # Documentation +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 ####################################### -/docs/ @agent-assembly/core-team -*.md @agent-assembly/core-team -*.mdx @agent-assembly/core-team -*.ts @agent-assembly/core-team +/docs/ @Chisanan232 +*.md @Chisanan232 +*.mdx @Chisanan232 +*.ts @Chisanan232 ####################################### # CI/CD Configuration +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 ####################################### -/.github/ @agent-assembly/core-team -/.github/workflows/ @agent-assembly/core-team +/.github/ @Chisanan232 +/.github/workflows/ @Chisanan232 ####################################### # Build Configuration +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 ####################################### -/pyproject.toml @agent-assembly/core-team -/scripts/ @agent-assembly/core-team +/pyproject.toml @Chisanan232 +/scripts/ @Chisanan232 ####################################### # Code Quality and Testing -####################################### -/.pre-commit-config.yaml @agent-assembly/core-team -/pytest.ini @agent-assembly/core-team -/.coveragerc @agent-assembly/core-team -/mypy.ini @agent-assembly/core-team -/.pylintrc @agent-assembly/core-team -/sonar-project.properties @agent-assembly/core-team -/codecov.yml @agent-assembly/core-team +# TODO: Create @agent-assembly/core-team team and replace @Chisanan232 +####################################### +/.pre-commit-config.yaml @Chisanan232 +/pytest.ini @Chisanan232 +/.coveragerc @Chisanan232 +/mypy.ini @Chisanan232 +/.pylintrc @Chisanan232 +/sonar-project.properties @Chisanan232 +/codecov.yml @Chisanan232 From e41dbc50d54019b74f1ce70bed8c7c92b0c28c26 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 17:00:30 +0800 Subject: [PATCH 57/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Add=20codeco?= =?UTF-8?q?v=5Fslug=20parameter=20to=20all=20codecov=20upload=20jobs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/rw_run_all_test_and_record.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/rw_run_all_test_and_record.yaml b/.github/workflows/rw_run_all_test_and_record.yaml index 4735027..b82115e 100644 --- a/.github/workflows/rw_run_all_test_and_record.yaml +++ b/.github/workflows/rw_run_all_test_and_record.yaml @@ -46,6 +46,7 @@ jobs: upload-to-codecov: true codecov_flags: unit # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true + codecov_slug: AI-agent-assembly/python-sdk integration-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -65,6 +66,7 @@ jobs: upload-to-codecov: true codecov_flags: integration # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true + codecov_slug: AI-agent-assembly/python-sdk e2e-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -85,6 +87,7 @@ jobs: upload-to-codecov: true codecov_flags: e2e # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true + codecov_slug: AI-agent-assembly/python-sdk contract-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -104,6 +107,7 @@ jobs: upload-to-codecov: true codecov_flags: contract # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true + codecov_slug: AI-agent-assembly/python-sdk all-test_codecov_finish: # name: Organize and generate the testing report and upload it to Codecov @@ -123,6 +127,7 @@ jobs: upload-to-codecov: true codecov_flags: all # Required if 'upload-to-codecov' is true codecov_name: agent-assembly # Required if 'upload-to-codecov' is true + codecov_slug: AI-agent-assembly/python-sdk sonarcloud_finish: # name: SonarCloud Scan From 7c32ea94d0f789404cb313e8a08fbdc25446c940 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Fri, 24 Apr 2026 22:10:59 +0800 Subject: [PATCH 58/59] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20(ci):=20Fix=20source?= =?UTF-8?q?=5Ffolder=20parameter=20to=20agent=5Fassembly=20for=20coverage?= =?UTF-8?q?=20reports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/rw_build_and_test.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rw_build_and_test.yaml b/.github/workflows/rw_build_and_test.yaml index b822068..2134e1e 100644 --- a/.github/workflows/rw_build_and_test.yaml +++ b/.github/workflows/rw_build_and_test.yaml @@ -80,7 +80,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: unit-test - source_folder: src + source_folder: agent_assembly integration-test_codecov: # name: For unit test, organize and generate the testing report and upload it to Codecov @@ -92,7 +92,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: integration-test - source_folder: src + source_folder: agent_assembly e2e-test_codecov: # name: For end-to-end test, organize and generate the testing report and upload it to Codecov @@ -104,7 +104,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: e2e-test - source_folder: src + source_folder: agent_assembly # Contract test not implemented yet # contract-test_codecov: @@ -133,7 +133,7 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: all-test - source_folder: src + source_folder: agent_assembly all_test_include_e2e_test_codecov: # name: Organize and generate the testing report and upload it to Codecov @@ -149,4 +149,4 @@ jobs: uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_organize_test_cov_reports.yaml@master with: test_type: all-test - source_folder: src + source_folder: agent_assembly From b19ec1f86d444b32155bc4260df4546ec6d25184 Mon Sep 17 00:00:00 2001 From: Chisanan232 Date: Sat, 25 Apr 2026 10:23:45 +0800 Subject: [PATCH 59/59] =?UTF-8?q?=F0=9F=90=9B=20ci:=20fix=20sonarcloud=20c?= =?UTF-8?q?overage=20artifact=20download=20for=20PR=20analysis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflows/rw_run_all_test_and_record.yaml | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rw_run_all_test_and_record.yaml b/.github/workflows/rw_run_all_test_and_record.yaml index b82115e..dfeb223 100644 --- a/.github/workflows/rw_run_all_test_and_record.yaml +++ b/.github/workflows/rw_run_all_test_and_record.yaml @@ -139,8 +139,31 @@ jobs: ) }} needs: build-and-test - uses: Chisanan232/GitHub-Action_Reusable_Workflows-Python/.github/workflows/rw_sonarqube_scan.yaml@master - secrets: - sonar_token: ${{ secrets.sonar_token }} - with: - download_path: ${{ inputs.download_path }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + # Required by SonarCloud to correctly compute PR/new-code deltas. + fetch-depth: 0 + + - name: Download all-test coverage XML report + uses: actions/download-artifact@v8 + with: + name: all-test_coverage_xml_report + path: ./ + + - name: Verify coverage XML report exists + run: | + if [ ! -f "./coverage_all-test.xml" ]; then + echo "Expected coverage report ./coverage_all-test.xml not found." + echo "Current files:" + ls -la + exit 1 + fi + + - name: SonarCloud Scan + uses: SonarSource/sonarqube-scan-action@v7.1.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.sonar_token }} + SONAR_HOST_URL: https://sonarcloud.io