[build-system] requires = ["hatchling>=1.21"] build-backend = "hatchling.build" [project] name = "vexor" description = "A semantic search engine for files and code." readme = "README.md" authors = [{ name = "scarletkc" }] license = { text = "MIT" } requires-python = ">=3.10" keywords = ["semantic-search", "cli", "typer", "ai", "vector", "file"] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: End Users/Desktop", "Intended Audience :: Developers", "Intended Audience :: Education", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Utilities", "Topic :: System :: Filesystems", "Topic :: Text Processing :: Indexing", "Topic :: Scientific/Engineering :: Information Analysis", ] dependencies = [ "google-genai>=1.57.0", "openai>=1.0.0", "python-dotenv>=1.0.0", "pathspec>=0.12.1", "rank-bm25>=0.2.2", "numpy>=1.23.0", "tokenizers>=0.15.0", "typer>=0.20.0", "rich>=13.0.0", "charset-normalizer>=3.3.0", "pypdf>=4.0.0", "python-docx>=0.8.11", "python-pptx>=0.6.21", "tree-sitter>=0.23.0", "tree-sitter-javascript>=0.23.0", "tree-sitter-typescript>=0.23.0", "watchdog>=6.0.0", ] dynamic = ["version"] [project.optional-dependencies] local = [ "fastembed>=0.4.0", ] local-cuda = [ "fastembed>=0.4.0", "onnxruntime-gpu>=1.17.0; platform_system != \"Darwin\"", ] flashrank = [ "flashrank>=0.2.9", ] [dependency-groups] dev = [ # Pinned so a ruff release cannot turn a green branch red on its own. "ruff==0.16.3", "pytest>=7.4", "pytest-cov>=4.1", "build>=1.2.1", "twine>=5.1.1", "pyinstaller>=6.0.0", ] [project.urls] Repository = "https://github.com/scarletkc/vexor" [project.scripts] vexor = "vexor.__main__:main" [tool.hatch.version] path = "vexor/__init__.py" [tool.hatch.build.targets.sdist] include = [ "vexor", "plugins/vexor/skills", "README.md", "LICENSE", "pyproject.toml", ] [tool.hatch.build.targets.wheel] packages = ["vexor"] [tool.hatch.build.targets.wheel.force-include] "plugins/vexor/skills" = "vexor/_bundled_skills" [tool.ruff] line-length = 100 target-version = "py310" [tool.ruff.lint] select = ["E", "W", "F", "I", "UP", "B", "SIM", "C4", "RUF"] ignore = [ # Nested conditionals here usually stage interactive prompts or ordered # guards; folding them into `and` chains hides the side-effecting calls. "SIM102", # Vexor indexes multilingual text, so CJK punctuation in fixtures and # message copy is content rather than a homoglyph mistake. "RUF001", ] [tool.ruff.lint.flake8-bugbear] # Typer carries CLI metadata in call-expression defaults, so B008 there reports # the framework's documented signature style rather than a shared-state bug. extend-immutable-calls = ["typer.Option", "typer.Argument"] [tool.pytest.ini_options] addopts = "-ra" pythonpath = ["."]