Files
NexusOS/pyproject.toml
2026-08-26 08:17:25 -05:00

129 lines
3.6 KiB
TOML

[build-system]
requires = ["hatchling>=1.26"]
build-backend = "hatchling.build"
[project]
name = "nexusos-ai"
dynamic = ["version"]
description = "Local-first AI assistant runtime, web UI, and portable CLI"
readme = "README.md"
requires-python = ">=3.11"
authors = [{name = "EnderOfWings"}]
keywords = ["ai", "assistant", "ollama", "local-ai", "termux"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Framework :: FastAPI",
"Operating System :: Android",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Communications :: Chat",
]
dependencies = [
"fastapi>=0.115,<1",
"httpx>=0.27,<1",
"pydantic>=2.7,<3",
"python-dotenv>=1,<2",
"PyYAML>=6,<7",
"uvicorn>=0.30,<1",
]
[project.optional-dependencies]
documents = ["pypdf>=5,<7", "python-docx>=1.1,<2"]
process = ["psutil>=5.9,<8"]
vector = ["sqlite-vec>=0.1,<1"]
voice = ["faster-whisper>=1.1,<2"]
mail = ["imap-tools>=1.7,<2"]
# synapse/search.py imports this lazily behind a bare except, so without it
# declared the chat web-search path silently returns nothing.
search = ["duckduckgo-search>=6,<9"]
desktop = [
"psutil>=5.9,<8",
"pywebview>=5,<7; platform_system == 'Windows'",
]
standard = [
"pypdf>=5,<7",
"python-docx>=1.1,<2",
"psutil>=5.9,<8",
"sqlite-vec>=0.1,<1",
"duckduckgo-search>=6,<9",
]
# Every optional capability at once. Kept in sync with the extras above by
# tests/test_packaging_deps.py, which also checks that nothing synapse imports
# is missing from this file.
all = [
"pypdf>=5,<7",
"python-docx>=1.1,<2",
"psutil>=5.9,<8",
"sqlite-vec>=0.1,<1",
"faster-whisper>=1.1,<2",
"imap-tools>=1.7,<2",
"duckduckgo-search>=6,<9",
"pywebview>=5,<7; platform_system == 'Windows'",
]
dev = [
"build>=1.2,<2",
"pytest>=8,<10",
"twine>=7,<8",
]
[project.scripts]
nexus = "nexusos_cli.cli:entrypoint"
ncp = "nexusos_cli.cli:entrypoint"
nexusos = "nexusos_cli.cli:entrypoint"
[project.urls]
Homepage = "https://git.enderofwings.com/enderofwings/NexusOS"
Issues = "https://git.enderofwings.com/enderofwings/NexusOS/issues"
Repository = "https://git.enderofwings.com/enderofwings/NexusOS"
[tool.hatch.version]
path = "VERSION"
pattern = "^(?P<version>[^\\s]+)$"
[tool.hatch.build]
skip-excluded-dirs = true
# Ships interface/web/dist when it has been built. It is gitignored, so a
# static force-include would abort `pip install -e .` on a fresh clone.
[tool.hatch.build.hooks.custom]
path = "hatch_build.py"
[tool.hatch.build.targets.wheel]
packages = ["synapse", "nexusos_cli", "modules"]
[tool.hatch.build.targets.wheel.force-include]
"VERSION" = "synapse/_resources/VERSION"
"data/playbooks" = "synapse/_resources/playbooks"
"assets/n-small.png" = "synapse/_resources/assets/n-small.png"
"assets/themes/NexusOS-icons-src/nexus-underlay.svg" = "synapse/_resources/assets/themes/NexusOS-icons-src/nexus-underlay.svg"
"assets/themes/NexusOS-icons-src/nexus-underlay-ring.svg" = "synapse/_resources/assets/themes/NexusOS-icons-src/nexus-underlay-ring.svg"
[tool.hatch.build.targets.sdist]
include = [
"/assets/n-small.png",
"/assets/themes/NexusOS-icons-src/nexus-underlay.svg",
"/assets/themes/NexusOS-icons-src/nexus-underlay-ring.svg",
"/data/playbooks",
"/docs",
"/management",
"/modules",
"/nexusos_cli",
"/scripts",
"/synapse",
"/tests",
"/README.md",
"/VERSION",
"/pyproject.toml",
"/hatch_build.py",
]
[tool.pytest.ini_options]
testpaths = ["tests", "management"]