content: [build-system]
  requires = ["setuptools>=61.0", "wheel"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "junjo"
  version = "0.61.1"
  description = "AI graph workflow and state machine framework for building debuggable AI Agents."
  readme = "README.md"
  requires-python = ">=3.11"
  authors = [{ name = "Matthew Rideout", email = "boon4376@gmail.com" }]
  license = { file = "LICENSE" }
  classifiers = [
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.11",
      "Operating System :: OS Independent",
      "Intended Audience :: Developers",
      "Topic :: Scientific/Engineering :: Artificial Intelligence",
      "Topic :: Software Development :: Libraries :: Application Frameworks",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "Development Status :: 5 - Production/Stable",
      "License :: OSI Approved :: Apache Software License",
  ]
  
  dependencies = [
      "grpcio>=1.75.1",
      "jsonpatch>=1.33",
      "nanoid>=2.0.0",
      "opentelemetry-exporter-otlp-proto-grpc>=1.37.0",
      "opentelemetry-sdk>=1.37.0",
      "pydantic>=2.10.6",
  ]
  
  [project.urls]
  Docs = "https://python-api.junjo.ai/"
  Repository = "https://github.com/mdrideout/junjo"
  "Bug Tracker" = "https://github.com/mdrideout/junjo/issues"
  "Telemetry Server" = "https://github.com/mdrideout/junjo-server"
  
  [project.optional-dependencies]
  dev = [
      "sphinx",
      "furo",
      "pytest",
      "pytest-asyncio",
      "ruff~=0.9.5",
      "sphinx-rtd-theme",
      "simple-sphinx-xml-sitemap",
      "mypy",
      "grpcio-tools",
      "build>=1.2.1",
      "twine>=6.1.0",
      "pre-commit",
  ]
  graphviz = ["graphviz"]
  
  [tool.mypy]
  files = ["src"]
  strict = true
  
  [tool.setuptools.packages.find]
  where = ["src"]
  
  [tool.pytest.ini_options]
  testpaths = ["tests"]
  addopts = [
      "-v",                          # Verbose output
      "-Werror::DeprecationWarning", # Treat deprecation warnings as errors
  ]
  
  [tool.ruff]
  # https://docs.astral.sh/ruff/settings/
  line-length = 120        # Default, compatible with Black
  target-version = "py311" # Or your project's Python version
  indent-width = 4         # Default, compatible with Black
  
  # Formatting options (optional - Ruff's formatter is Black-compatible by default)
  [tool.ruff.format]
  quote-style = "double" # Or "single"
  indent-style = "space"
  line-ending = "lf"
  
  [tool.ruff.lint]
  select = ["E", "F", "W", "I", "UP", "C", "B"]
  ignore = ["B006"]
  
  [tool.ruff.lint.per-file-ignores]
  "tests/junjo/test_*.py" = ["D", "F401"] # ignore docstring rules in tests
  
  [tool.uv.workspace]
  members = [
      "examples/ai_chat/backend",
      "examples/base",
      "examples/getting_started/getting_started",
      "examples/getting_started",
  ]
  
  [tool.uv.sources]
  junjo = { workspace = true }
  