[build-system]
requires = ["setuptools>=68.0"]
build-backend = "setuptools.build_meta"

[project]
name = "salmalm"
version = "0.18.2"
description = "Personal AI Gateway — Pure Python, zero-dependency AI assistant with multi-model routing, web UI, and 56+ built-in tools"
readme = "README.md"
license = "MIT"
requires-python = ">=3.10"
authors = [{name = "Nightmare Dolsoe", email = "dolsoe@salmalm.dev"}]
keywords = ["ai", "gateway", "llm", "agent", "local", "chatgpt", "claude", "assistant", "personal-ai", "multi-model"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Web Environment",
    "Framework :: AsyncIO",
    "Intended Audience :: Developers",
    "Intended Audience :: End Users/Desktop",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
    "Topic :: Communications :: Chat",
    "Topic :: Internet :: WWW/HTTP :: HTTP Servers",
]
dependencies = ["cryptography>=41.0"]

[project.optional-dependencies]
crypto = ["cryptography>=42.0"]
browser = ["playwright>=1.40"]
keychain = ["keyring>=24.0"]
dev = ["pytest", "pytest-asyncio", "pytest-timeout", "pytest-cov", "pytest-forked", "flake8"]

[project.scripts]
salmalm = "salmalm.__main__:main"

[project.urls]
Homepage = "https://github.com/hyunjun6928-netizen/salmalm"
Repository = "https://github.com/hyunjun6928-netizen/salmalm"
Documentation = "https://github.com/hyunjun6928-netizen/salmalm#readme"
"Bug Tracker" = "https://github.com/hyunjun6928-netizen/salmalm/issues"

[tool.setuptools.packages.find]
include = ["salmalm*"]

[tool.setuptools.package-data]
salmalm = ["py.typed", "default_skills/**/*.md", "static/*.html", "static/*.js", "static/*.svg", "static/*.css", "static/*.json", "static/*.png", "static/*.ico"]

[tool.mypy]
python_version = "3.12"
strict = false
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false
check_untyped_defs = true
ignore_missing_imports = true
exclude = ["plugins/", "scripts/", "memory/"]

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
timeout = 30
# Full-suite hang: test file HTTP servers + asyncio loops pollute shared process state.
# CI mitigates via per-file execution (for f in tests/test_*.py; do pytest "$f"; done).
# For local `pytest tests/`, use: pytest --forked tests/ (requires pytest-forked).
# See CONTRIBUTING.md for details.

[tool.flake8]
max-line-length = 120
ignore = ["E501", "W503", "E402", "E203"]
exclude = ["plugins/", "scripts/", "memory/", ".git", "__pycache__"]
