[project] name = "saturnzap" version = "1.3.2" description = "CLI-first, non-custodial Lightning Network wallet for autonomous AI agents" readme = "README.md" license = { text = "MIT" } requires-python = ">=3.12" authors = [{ name = "Shone Anstey" }] keywords = ["lightning", "bitcoin", "wallet", "cli", "ldk", "l402", "ai-agent", "mcp"] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Topic :: Office/Business :: Financial", "Topic :: Security :: Cryptography", "Topic :: Software Development :: Libraries :: Python Modules", ] # Note: `ldk-node` is not published to PyPI. The wheel is attached to each # SaturnZap GitHub release. Install with: # uv tool install saturnzap --find-links https://github.com/lqwdtech/SaturnZap/releases/expanded_assets/v1.3.2 # or clone and use `uv sync` (resolves via [tool.uv.sources] below). dependencies = [ "typer>=0.15", "cryptography>=44.0", "platformdirs>=4.3", "mnemonic>=0.21", "ldk-node==0.7.0", "python-dotenv>=1.2.2", "httpx>=0.28.1", "mcp>=1.26,<2", ] [project.urls] Homepage = "https://github.com/lqwdtech/SaturnZap" Repository = "https://github.com/lqwdtech/SaturnZap" Issues = "https://github.com/lqwdtech/SaturnZap/issues" Documentation = "https://github.com/lqwdtech/SaturnZap/tree/main/docs" Changelog = "https://github.com/lqwdtech/SaturnZap/blob/main/CHANGELOG.md" Security = "https://github.com/lqwdtech/SaturnZap/blob/main/SECURITY.md" [tool.uv.sources] ldk-node = { path = "vendor/ldk_node-0.7.0-py3-none-any.whl" } [project.scripts] sz = "saturnzap.cli:main_cli" sz-mcp = "saturnzap.mcp_server:serve" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/saturnzap"] [tool.hatch.build.targets.sdist] exclude = [ "vendor/", ".ruff_cache/", ".pytest_cache/", "logos/", "security/", "skills/", "hooks/", "plans/", "memory/", ".env.example", ".secrets.baseline", ".github/", ] [tool.ruff] target-version = "py312" src = ["src"] [tool.ruff.lint] select = ["E", "F", "W", "I", "UP", "S", "B", "A", "SIM"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["S101", "S105"] [tool.pytest.ini_options] testpaths = ["tests"] markers = [ "live: requires running SaturnZap nodes on droplets (deselect with '-m not live')", "mainnet: requires mainnet wallet on droplet (run with '-m mainnet', never auto-run)", ] [dependency-groups] dev = [ "pytest>=8.0", "ruff>=0.9", "pyyaml>=6.0", "pip-audit>=2.10", ]