[build-system]
requires = [ "setuptools>=61.0", "wheel",]
build-backend = "setuptools.build_meta"

[project]
name = "claude-mpm"
version = "4.4.10"
description = "Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking"
readme = "README.md"
requires-python = ">=3.8"
keywords = [ "claude", "orchestration", "multi-agent", "ticket-management",]
classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12",]
dependencies = [ "ai-trackdown-pytools>=1.4.0", "pyyaml>=6.0", "python-dotenv>=0.19.0", "click>=8.0.0", "pexpect>=4.8.0", "psutil>=5.9.0", "requests>=2.25.0", "flask>=3.0.0", "flask-cors>=4.0.0", "watchdog>=3.0.0", "python-socketio>=5.11.0", "aiohttp>=3.9.0", "aiohttp-cors>=0.7.0,<0.8.0", "python-engineio>=4.8.0", "aiofiles>=23.0.0", "websockets>=12.0", "python-frontmatter>=1.0.0", "mistune>=3.0.0", "tree-sitter>=0.21.0", "ijson>=3.2.0", "toml>=0.10.2", "packaging>=21.0", "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "rich>=13.0.0", "pyee>=13.0.0", "importlib-resources>=5.0; python_version < '3.9'", "pathspec>=0.11.0",]
[[project.authors]]
name = "Bob Matsuoka"
email = "bob@matsuoka.com"

[[project.maintainers]]
name = "Claude MPM Team"

[project.license]
text = "MIT"

[project.urls]
Homepage = "https://github.com/bobmatnyc/claude-mpm"
Repository = "https://github.com/bobmatnyc/claude-mpm.git"
Issues = "https://github.com/bobmatnyc/claude-mpm/issues"
Documentation = "https://github.com/bobmatnyc/claude-mpm/blob/main/README.md"

[project.optional-dependencies]
mcp = [ "mcp>=0.1.0", "mcp-vector-search>=0.1.0", "mcp-browser>=0.1.0", "mcp-ticketer>=0.1.0", "kuzu-memory>=1.1.1",]
dev = [ "pytest>=7.0", "pytest-asyncio", "pytest-cov", "black", "flake8", "flake8-import-order", "flake8-tidy-imports", "flake8-bugbear", "ruff>=0.1.0", "pylint>=3.0.0", "pre-commit", "mypy>=1.0.0", "types-PyYAML>=6.0.0", "types-requests>=2.25.0",]
docs = [ "sphinx>=7.2.0", "sphinx-rtd-theme>=1.3.0", "sphinx-autobuild>=2021.3.14",]
monitor = [ "python-socketio>=5.11.0", "aiohttp>=3.9.0", "aiohttp-cors>=0.7.0,<0.8.0", "python-engineio>=4.8.0", "aiofiles>=23.0.0", "websockets>=12.0",]
agents = [ "bandit>=1.7.5", "black>=23.0.0", "commitizen>=3.13.0", "dask>=2023.12.0", "detect-secrets>=1.4.0", "diagrams>=0.23.0", "docstring-parser>=0.15.0", "faker>=20.0.0", "gitlint>=0.19.0", "gitpython>=3.1.40", "hypothesis>=6.92.0", "isort>=5.12.0", "lizard>=1.17.0", "mermaid-py>=0.2.0", "mkdocs>=1.5.0", "mutmut>=2.4.0", "mypy>=1.8.0", "pandas>=2.1.0", "pre-commit>=3.5.0", "prometheus-client>=0.19.0", "pydoc-markdown>=4.8.0", "pydriller>=2.5.0", "pygments>=2.17.0", "pytest>=7.4.0", "pytest-benchmark>=4.0.0", "pytest-cov>=4.1.0", "radon>=6.0.0", "rope>=1.11.0", "sphinx>=7.2.0", "sqlalchemy>=2.0.0", "sqlparse>=0.4.4", "tree-sitter>=0.21.0", "tree-sitter-python>=0.21.0", "tree-sitter-javascript>=0.21.0", "tree-sitter-typescript>=0.21.0", "tree-sitter-go>=0.21.0", "tree-sitter-rust>=0.21.0", "tree-sitter-java>=0.21.0", "tree-sitter-cpp>=0.21.0", "tree-sitter-c>=0.21.0", "tree-sitter-ruby>=0.21.0", "tree-sitter-php>=0.21.0",]
data-processing = [ "pandas>=2.1.0", "openpyxl>=3.1.0", "xlsxwriter>=3.1.0", "numpy>=1.24.0", "pyarrow>=14.0.0", "dask>=2023.12.0", "polars>=0.19.0", "xlrd>=2.0.0", "xlwt>=1.3.0", "csvkit>=1.3.0", "tabulate>=0.9.0", "python-dateutil>=2.8.0", "lxml>=4.9.0", "sqlalchemy>=2.0.0", "psycopg2-binary>=2.9.0", "pymongo>=4.5.0", "redis>=5.0.0", "beautifulsoup4>=4.12.0", "jsonschema>=4.19.0",]

[project.scripts]
claude-mpm = "claude_mpm.cli:main"
claude-mpm-ticket = "claude_mpm.cli.ticket_cli:main"
ticket = "claude_mpm.cli.ticket_cli:main"
claude-mpm-version = "claude_mpm.scripts.manage_version:main"
claude-mpm-monitor = "claude_mpm.scripts.launch_monitor:main"
claude-mpm-socketio = "claude_mpm.scripts.socketio_daemon:main"
claude-mpm-mcp = "claude_mpm.services.mcp_gateway.server.stdio_server:main_sync"
claude-mpm-mcp-wrapper = "claude_mpm.scripts.mcp_wrapper:entry_point"

[tool.uv]
dev-dependencies = [ "pytest>=7.0", "pytest-asyncio", "pytest-cov", "black", "flake8", "mypy>=1.0.0", "types-PyYAML>=6.0.0", "types-requests>=2.25.0",]

[tool.black]
line-length = 88
target-version = [ "py38",]

[tool.isort]
profile = "black"
line_length = 88

[tool.mypy]
python_version = "3.8"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true

[tool.ruff]
line-length = 88
target-version = "py38"
select = [ "F", "E", "W", "I", "F401", "F811", "F821", "F823",]
ignore = [ "E203", "E501",]
exclude = [ ".git", "__pycache__", ".venv", "venv", "build", "dist", "*.egg-info", ".pytest_cache", ".mypy_cache", "node_modules",]

[tool.pylint]
max-line-length = 88
disable = [ "C0111", "C0103", "R0903", "R0913", "W0212",]
enable = [ "duplicate-code", "reimported", "import-self", "cyclic-import", "wrong-import-order", "ungrouped-imports", "wrong-import-position",]
min-similarity-lines = 4
ignore-comments = true
ignore-docstrings = true
ignore-imports = false

[tool.commitizen]
name = "cz_conventional_commits"
version = "4.4.10"
version_files = [ "VERSION", "src/claude_mpm/VERSION", "package.json:version",]
tag_format = "v$version"
update_changelog_on_bump = true
changelog_incremental = true

[tool.ruff.per-file-ignores]
"__init__.py" = [ "F401", "F403",]
"tests/*" = [ "F403", "F405",]

[tool.setuptools.package-data]
claude_mpm = [ "VERSION", "BUILD_NUMBER", "scripts/*", "scripts/*.sh", "commands/*.md", "dashboard/*.html", "dashboard/templates/*.html", "dashboard/static/*.css", "dashboard/static/*.js", "dashboard/static/css/*.css", "dashboard/static/js/*.js", "dashboard/static/js/components/*.js", "agents/*.md", "agents/*.json", "agents/*.yaml", "agents/templates/*.json", "agents/schema/*.json", "hooks/**/*.py", "hooks/**/*.sh", "hooks/claude_hooks/*", "hooks/claude_hooks/**/*",]

[tool.pytest.ini_options]
testpaths = [ "tests",]
python_files = [ "test_*.py", "*_test.py",]
python_classes = [ "Test*",]
python_functions = [ "test_*",]
addopts = [ "-v", "--tb=short", "--strict-markers", "--disable-warnings", "--asyncio-mode=auto",]
markers = [ "unit: Unit tests", "integration: Integration tests", "e2e: End-to-end tests", "regression: Regression tests", "socketio: Socket.IO related tests", "hook: Hook system tests",]
asyncio_mode = "auto"

[tool.setuptools.packages.find]
where = [ "src",]

[tool.setuptools.dynamic.version]
file = "VERSION"
