Files
Pyra/pyproject.toml
curo1305 8d4917f7ca feat(daemon): add async event bus for inter-plugin notifications
Adds daemon/events.py — a lightweight asyncio.Queue-based publish/subscribe
bus that lets daemon tasks communicate without direct imports between plugins.
Email plugin publishes new_email events; messaging bots consume via
subscribe_forever(). Also adds email optional-dependency group to pyproject.toml
(imap-tools, google-api-python-client, google-auth-oauthlib, O365).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 23:12:17 +02:00

70 lines
1.7 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "pyra"
version = "0.1.0"
description = "Personal AI assistant CLI with vault-first security"
requires-python = ">=3.11"
dependencies = [
"litellm>=1.40.0",
"rich>=13.0.0",
"click>=8.1.0",
"prompt-toolkit>=3.0.0",
"questionary>=2.0.0",
"ruamel.yaml>=0.18.0",
"pydantic>=2.0.0",
"httpx>=0.27.0",
"python-dotenv>=1.0.0",
"textual>=1.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.23.0",
"ruff>=0.4.0",
]
nextcloud = ["caldav>=1.3.0", "webdav4>=0.9.0", "vobject>=0.9.6"]
matrix = ["matrix-nio>=0.24.0", "aiofiles>=23.0.0"]
telegram = ["python-telegram-bot>=21.0"]
ssh = ["paramiko>=3.4.0"]
docker = ["docker>=7.0.0"]
gdrive = ["google-api-python-client>=2.120.0", "google-auth-oauthlib>=1.2.0"]
onedrive = ["msal>=1.28.0"]
dropbox = ["dropbox>=12.0.0"]
daemon = ["aiofiles>=23.0.0"]
email = [
"imap-tools>=1.7.0",
"google-api-python-client>=2.120.0",
"google-auth-oauthlib>=1.2.0",
"O365>=2.0.36",
]
all-plugins = [
"caldav>=1.3.0", "webdav4>=0.9.0", "vobject>=0.9.6",
"matrix-nio>=0.24.0", "aiofiles>=23.0.0",
"python-telegram-bot>=21.0",
"paramiko>=3.4.0",
"docker>=7.0.0",
"google-api-python-client>=2.120.0", "google-auth-oauthlib>=1.2.0",
"msal>=1.28.0",
"dropbox>=12.0.0",
"imap-tools>=1.7.0",
"O365>=2.0.36",
]
[project.scripts]
pyra = "pyra.cli:main"
[tool.hatch.build.targets.wheel]
packages = ["src/pyra"]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]