[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "solstone" version = "0.1.0" description = "Navigate Life Intelligently" readme = "README.md" requires-python = ">=3.10" license = {text = "AGPL-3.0-only"} authors = [ {name = "Jer+AI", email = "jeremie.miller@gmail.com"} ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Affero General Public License v3", "Operating System :: POSIX :: Linux", "Operating System :: MacOS :: MacOS X", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Multimedia :: Sound/Audio :: Analysis", "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] keywords = ["audio", "transcription", "screenshot", "multimodal", "ai", "gemini"] dependencies = [ # Core dependencies "python-dotenv", "google-genai", "Flask[async]", "flask-sock", "Markdown", "mistune", "python-frontmatter", # Natural language time parsing "timefhuman", "Pillow", "numpy", "desktop-notifier", "setproctitle", "av", "openai>=1.2.0", "openai-agents>=0.1.0", "anthropic", "httpx", "h2", "cryptography>=42", "pyjwt>=2.8", "jsonschema>=4.26,<5", "genai-prices", # Link tunnel service (think/link/): TLS 1.3 in memory-BIO mode over # an opaque WebSocket; requires pyOpenSSL for the handshake-time # verify callback that stdlib ssl can't express. "pyOpenSSL>=24.0", "websockets>=13.0", "pypdf", "pdf2image", "pytesseract", "weasyprint", "icalendar", "blessed>=1.20.0", "psutil", "tzlocal", "python-slugify", "rapidfuzz", "typer", "userpath>=1.9.2,<2", # Audio processing "soundfile", "faster-whisper>=1.0.0", "resemblyzer>=0.1.0", "webrtcvad-wheels>=2.0.12", # Media processing "opencv-python-headless", # Development tools "ruff", "mypy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-timeout", "freezegun", "playwright>=1.40.0", "requests", ] [project.scripts] sol = "sol:main" [project.urls] Homepage = "https://github.com/solpbc/solstone" Repository = "https://github.com/solpbc/solstone" Documentation = "https://github.com/solpbc/solstone/blob/main/README.md" "Bug Tracker" = "https://github.com/solpbc/solstone/issues" [tool.setuptools.packages.find] include = ["apps*", "think*", "convey*", "observe*", "talent*"] [tool.setuptools] py-modules = ["media", "sol"] [tool.setuptools.package-data] apps = ["*/templates/*.html", "*/talent/*.md"] think = ["*.md", "*.json", "templates/*.md", "policies/*.toml"] talent = ["*.md", "*.py"] observe = ["*.md", "categories/*.md", "transcribe/*.md"] convey = [ "templates/*.html", "static/*", ] # Development tools configuration [tool.ruff] target-version = "py310" exclude = [".venv", "scratch", "logs", "build", "dist"] [tool.ruff.lint] select = ["F", "E", "W", "I"] ignore = ["E501", "E203", "E402"] [tool.mypy] python_version = "3.12" warn_return_any = true warn_unused_configs = true exclude = ["tests", ".venv", "scratch", "logs", "build", "dist"] ignore_missing_imports = true ignore_errors = true [tool.uv] # resemblyzer -> librosa -> numba: force modern version (old numba only supports Python <3.10) constraint-dependencies = ["numba>=0.60"] # resemblyzer -> webrtcvad: abandoned (2017), uses pkg_resources removed in setuptools 82. # Replace with maintained fork webrtcvad-wheels (same Python module, pkg_resources fix since 2.0.12). override-dependencies = ["webrtcvad>=99; python_version < '0'"] [tool.pytest.ini_options] addopts = "--import-mode=importlib" testpaths = ["tests", "apps"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] markers = [ "integration: marks tests as integration tests (deselect with '-m \"not integration\"')", ] timeout = 15 tmp_path_retention_policy = "none" filterwarnings = [ # Third-party deprecation warnings (Python 3.14+) "ignore:codecs.open.* is deprecated:DeprecationWarning", "ignore:.*_UnionGenericAlias.* is deprecated:DeprecationWarning", "ignore:.*DefaultEventLoopPolicy.* is deprecated:DeprecationWarning", ]