Ctrl K
ComunidadGuías…

pyproject.toml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
[project]
name = "yuki"
version = "4.0.0"
description = "具有持续身份、长期记忆与自主参与能力的多平台开源 AI Agent"
readme = "README.md"
license = "AGPL-3.0-only"
license-files = ["LICENSE"]
requires-python = ">=3.12,<3.13"
dependencies = [
    "cryptography>=48",
    "aiosqlite>=0.22.1,<1",
    "alembic>=1.14,<2",
    "httpcore>=1.0.9,<2",
    "httpx[socks]>=0.28.1,<1",
    "defusedxml>=0.7,<1",
    "jsonschema>=4.23,<5",
    "referencing>=0.35,<1",
    "nonebot-adapter-onebot>=2.4,<3",
    "nonebot2[fastapi]>=2.4,<3",
    "packaging>=24,<27",
    "pillow>=11,<13",
    "protobuf>=5,<8",
    "pydantic-settings>=2.7,<3",
    "python-dotenv>=1,<2",
    "python-socks[asyncio]>=2.7,<3",
    "pypdf>=6,<7",
    "sqlalchemy[asyncio]>=2.0.36,<3",
    "tenacity>=9,<10",
    "tzdata>=2025.2",
    "websockets>=16,<17",
    "yuki-semantic-participation @ https://github.com/Institute-of-Agent-Life/Yuki-Semantic-Participation/archive/a6a13d4f04ecc36da26adb5f364abdb4f032fc1e.tar.gz",
    "tomlkit>=0.13,<1",
    "agent-client-protocol==0.12.1",
    "opencc==1.4.2",
]

[project.optional-dependencies]
dev = [
    "platformdirs>=4,<5",
    "mypy>=1.13,<2",
    "pytest>=8.3,<9",
    "pytest-asyncio>=0.24,<1",
    "ruff>=0.8,<1",
    "trustme>=1.2,<2",
    "types-jsonschema>=4.23,<5",
    "types-protobuf>=5,<8",
    "types-defusedxml>=0.7,<1",
    # Tests run the Connector source with this environment; on macOS it needs its screen.
    "pyobjc-framework-Quartz>=13,<14 ; sys_platform == 'darwin'",
    "pyobjc-framework-ScreenCaptureKit>=13,<14 ; sys_platform == 'darwin'",
    "pyobjc-framework-ApplicationServices>=13,<14 ; sys_platform == 'darwin'",
]

[project.scripts]
yuki = "yuki.cli:main"
yuki-bot = "yuki.main:run"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build]
exclude = ["src/yuki/_native", ".cache"]

[tool.hatch.build.targets.wheel]
packages = ["src/yuki", "src/yuki_plugin_sdk"]

[tool.hatch.build.hooks.custom]
path = "hatch_build.py"

[tool.hatch.build.targets.sdist.force-include]
"vendor/sqlite-vec1" = "vendor/sqlite-vec1"
"scripts/build_vec1.py" = "scripts/build_vec1.py"
"hatch_build.py" = "hatch_build.py"

[tool.hatch.metadata]
allow-direct-references = true

[tool.ruff]
target-version = "py312"
line-length = 100
src = ["src", "tests"]

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "ASYNC", "RUF"]
ignore = ["RUF001", "RUF002", "RUF003"]

[tool.ruff.lint.per-file-ignores]
"migrations/versions/*.py" = ["E501"]

[tool.mypy]
python_version = "3.12"
strict = true
packages = ["yuki", "yuki_plugin_sdk"]
mypy_path = "src:packages/yuki-agent-connector/src"
warn_unused_configs = true
plugins = ["pydantic.mypy"]

[[tool.mypy.overrides]]
module = ["nonebot.*", "nonebot_adapter_onebot.*"]
ignore_missing_imports = true

# Built from the pinned Monty source by scripts/build_monty_worker.sh; optional
# at import time so hosts without Code Mode still type-check and run.
[[tool.mypy.overrides]]
module = ["pydantic_monty", "pydantic_monty.*"]
ignore_missing_imports = true

[tool.pytest.ini_options]
addopts = "-ra"
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
pythonpath = ["src", "packages/yuki-agent-connector/src"]
testpaths = ["tests"]
markers = [
    "qwen_embedding_integration: opt-in test against the real DashScope embedding API",
    "native_worker: real pinned Monty worker/binding; executed by the native CI job",
]