content: [build-system]
  requires = ["setuptools>=61.0"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "tt"
  version = "11.0.18"
  description = "Connect CEX & DEX across multi messaging platforms with plugin support."
  authors = [
    { name = "mraniki", email = "8766259+mraniki@users.noreply.github.com" },
  ]
  license = "MIT" # Use SPDX identifier
  readme = "README.md"
  keywords = [
    "finance",
    "trading",
    "economics",
    "DEFI",
    "CEFI",
    "DEX",
    "CEX",
    "0x",
    "Uniswap",
    "bot",
    "chat",
    "talky",
    "AI agent"
  ]
  requires-python = ">=3.10"
  classifiers = [
    "Intended Audience :: Developers",
    "Intended Audience :: Financial and Insurance Industry",
    "Intended Audience :: Information Technology",
    "Natural Language :: English",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12", # Add 3.12 if supported
    "Topic :: Office/Business :: Financial :: Investment",
    "Topic :: Software Development :: Libraries :: Python Modules",
    "Topic :: Communications :: Chat"
  ]
  dependencies = [
    "loguru>=0.6.0",
    "dynaconf>=3.2.0",
    "fastapi==0.119.0", # Pinned
    "requests==2.32.5", # Pinned
    "uvicorn==0.37.0", # Pinned
    "apprise==1.9.5", # Pinned
    "asyncz==0.13.4", # Pinned
    "nicegui==1.4.9", # Pinned
    "ping3==5.1.5", # Pinned
    "feedparser==6.0.12", # Pinned
    "talkytrend==4.0.1", # Pinned
    "dxsp==13.0.1", # Pinned
    "cefi==7.0.5", # Pinned
    "iamlistening==6.0.4", # Pinned
    "findmyorder==4.0.1", # Pinned
    "myllm==4.19.15", # Pinned
  ]
  
  [project.urls]
  "Homepage" = "https://github.com/mraniki/tt" # Example, adjust if needed
  "Changelog" = "https://github.com/mraniki/tt/blob/dev/CHANGELOG.rst"
  "Issues" = "https://github.com/mraniki/tt/issues"
  "Support" = "https://github.com/mraniki/tt/discussions"
  
  [project.optional-dependencies]
  dev = [
    "python-semantic-release>=8.0.8",
    "ruff~=0.9", # Use existing range
    "pre-commit~=4.0",
  ]
  docs = [
    "sphinx==7.4.7", # Pinned
    "sphinx-hoverxref~=1.3",
    "sphinx_copybutton==0.5.2", # Pinned
    "sphinx_design~=0.6",
    "myst_parser~=4.0",
    "pydata-sphinx-theme~=0.16",
  ]
  test = [
    "pytest~=8.2",
    "pytest-asyncio~=1.0",
    "pytest-cov~=7.0",
    "pytest-loguru~=0.4",
    "pytest-mock~=3.11",
    "pytest-playwright~=0.7",
  ]
  
  [tool.setuptools.packages.find]
  where = ["."] 
  include = ["tt*"] 
  exclude = ["tests*", "docs*", "examples*"]
  
  [tool.pylint.exceptions]
  overgeneral-exceptions = [
    "builtins.BaseException",
    "builtins.Exception",
    "builtins.RuntimeError"
  ]
  
  [tool.pytest.ini_options]
  addopts = """
  -v
  --show-capture=stderr
  """
  filterwarnings = [
    " ignore:.*U.*mode is deprecated:DeprecationWarning",
    "ignore::DeprecationWarning"
  ]
  log_format = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
  log_level = "DEBUG"
  python_classes = "Test*"
  pythonpath = ". tt"
  testpaths = "tests"
  asyncio_mode = "auto"
  asyncio_default_fixture_loop_scope = "function"
  
  [tool.ruff]
  exclude = [
    ".github/*",
    "docs/*",
  ]
  
  [tool.ruff.lint]
  select = [
    "E",  # pycodestyle
    "F",  # pyflakes
    "I",  # isort
    "W"
  ]
  
  #ignore = ["E401","F401","F811"]
  fixable = ["ALL"]
  
  [tool.ruff.format]
  # Like Black, use double quotes for strings.
  quote-style = "double"
  
  [tool.coverage.run]
  omit = [
    "tests/*",
    "examples/*",
    "docs/*",
    "*/config.py"
  ]
  
  [tool.bandit]
  exclude_dirs = ["tests","docs"]
  skips = ["B101","B104"]
  
  
  [tool.semantic_release]
  commit_parser = "emoji"
  tag_format = "v{version}"
  # build_command = "pip install poetry && poetry build" # Removed
  version_toml = [
    # "pyproject.toml:tool.poetry.version" # Removed
    "pyproject.toml:project.version" # Updated
  ]
  version_variables = [
    "tt/utils/version.py:__version__"
  ]
  
  [tool.semantic_release.commit_parser_options]
  major_tags = [
    "BREAKING",
    "💥",
    ":boom:"
  ]
  minor_tags = [
    "feat",
    "🥚",
    ":egg:",
    "💄",
    ":lipstick:",
    "🚀",
    ":rocket:",
    "✨",
    ":sparkles:"
  ]
  patch_tags = [
    "fix",
    "bump",
    "Update",
    "🎨",
    ":art:",
    "🐛",
    ":bug:",
    "🚑",
    ":ambulance:",
    "⚡",
    ":zap:",
    "🔥",
    ":fire:",
    "🚨",
    ":rotating_light:",
    "♻️",
    ":recycle:",
    "🔧",
    ":wrench:",
    "⬆️",
    ":arrow_up:",
    "🩹",
    ":adhesive_bandage:",
    "👷",
    ":construction_worker:",
    "📝",
    ":memo:",
    "🔒",
    ":lock:",
    "👽",
    ":alien:",
    "💬",
    ":speech_balloon:",
    "🥅",
    ":goal_net:",
    "✅",
    ":white_check_mark:",
    "🐳",
    ":whale:",
    "🙈",
    ":see_no_evil:",
    "⚗️",
    ":alembic:",
    "🧐",
    ":monocle_face:",
    "🔇",
    ":mute:",
    "🔊",
    ":volume:"
  ]
  
  [tool.semantic_release.changelog]
  # template_dir = "templates"
  changelog_file = "CHANGELOG.md"
  exclude_commit_patterns = []
  
  [tool.semantic_release.branches.main]
  match = "(main|master|dev)"
  prerelease_token = "rc"
  prerelease = false
  
  [tool.semantic_release.publish]
  dist_glob_patterns = ["dist/*"]
  upload_to_vcs_release = false
  