[build-system] requires = ["setuptools>=77", "wheel"] build-backend = "setuptools.build_meta" [project] name = "dsail" dynamic = ["version"] description = "Export control classification, FAR clause review, rubric scoring: criteria are written, readers differ. Turn a written policy into rules a program can check, and get the same answer every time." readme = "README.md" authors = [{ name = "Jaxon, Inc.", email = "info@jaxon.ai" }] # Apache-2.0, deliberately. Customers drop this client into their own commercial # code and modify it, so it needs a permissive grant; everything chargeable is # behind the service credential, not in here. Apache over MIT because its patent # grant is scoped to claims "necessarily infringed by the Work" (a REST wrapper # practises none of the verification method), it excludes trademarks explicitly, # and it terminates the grant for anyone who sues over the patents. NOTICE # states that the service itself is governed by Jaxon's terms. license = "Apache-2.0" license-files = ["LICENSE", "NOTICE"] requires-python = ">=3.10" keywords = [ "dsail", "jaxon", "jaxon.ai", "desale", "de-sail", "de-sale", "mcp", "claude-code", "defensible-decisions", "audit-evidence", "decision-rationale", "regulatory-examination", "approval-record", "policy-signoff", "immutable-revisions", "ruleset-versioning", "rules-in-force", "case-review-criteria", "scoring-rubric", "compliance-review", ] # 1.0.0 is generally available, so the maturity classifier says so: a 1.x # version paired with Beta or Alpha tells the same reader two contradictory # things (TJP-624). This line diverges from TJP-647's promoted # `pypi.keywords_classifiers` variant on purpose; that bundle was scored for # retrieval, where the classifier contributes nothing. classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Legal Industry", "Intended Audience :: Financial and Insurance Industry", "Intended Audience :: Developers", "Topic :: Office/Business", "Topic :: Software Development :: Libraries :: Python Modules", "Natural Language :: English", "Programming Language :: Python :: 3", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] # The REST client is standard library only. `mcp` is here for the one # subcommand that needs it (`dsail mcp`, the stdio proxy a coding agent # registers) and is imported lazily, so importing `dsail` never pulls it in. dependencies = [ "mcp>=2.1.1,<3", ] [project.optional-dependencies] dev = [ "build>=1.2", "twine>=5.0", ] [project.scripts] dsail = "dsail.cli:main" [project.urls] Homepage = "https://jaxon.ai" Documentation = "https://docs.agents.jaxon.ai" "Terms of Service" = "https://docs.agents.jaxon.ai/legal/terms.md" "Privacy Policy" = "https://docs.agents.jaxon.ai/legal/privacy.md" "Data Handling" = "https://docs.agents.jaxon.ai/legal/data-handling.md" [tool.setuptools] package-dir = { "" = "src" } include-package-data = true [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] "dsail" = ["contract/*"] [tool.setuptools.dynamic] version = { attr = "dsail._version.__version__" }