[build-system] requires = ["setuptools>=77.0"] build-backend = "setuptools.build_meta" [project] name = "misterdev" dynamic = ["version"] description = "An autonomous, extensible LLM build orchestrator that plans, edits, and verifies code across languages." readme = "README.md" license = "AGPL-3.0-or-later" license-files = ["LICENSE", "COMMERCIAL_LICENSE.md"] authors = [ { name = "David Condrey", email = "david@writerslogic.com" } ] keywords = [ "llm", "ai-agent", "code-generation", "orchestration", "developer-tools", "mcp", "model-context-protocol", "tree-sitter", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Build Tools", "Operating System :: OS Independent", "Typing :: Typed", ] requires-python = ">=3.10" dependencies = [ "openai>=1.0.0", "PyYAML>=6.0", "pydantic>=2.0.0", "python-frontmatter>=1.0.0", "rich>=13.0.0", "tree-sitter>=0.25.2", "tree-sitter-python>=0.25.0", "tree-sitter-rust>=0.24.2", "tree-sitter-typescript>=0.23.2", "tree-sitter-c>=0.24.1", "tree-sitter-cpp>=0.23.4", "tree-sitter-swift>=0.7.0", "tree-sitter-c-sharp>=0.23.1", "tree-sitter-javascript>=0.23.0", "tree-sitter-kotlin>=1.1.0", "tiktoken>=0.7.0", "pillow>=12.2.0", "playwright>=1.60.0", ] [project.optional-dependencies] # Local, offline embeddings for semantic context ranking (no API key). Heavy # (pulls onnxruntime); enable when you want dense ranking without OpenRouter. local-embeddings = [ "fastembed>=0.3.0", ] # Optional LSP semantic-diagnostics gate (orchestrator.lsp_diagnostics). Needs # the per-language server available; off by default and timeout-bounded. lsp = [ "multilspy>=0.0.1", ] # Optional web verification gate (orchestrator.web_verify): headless browser # (Playwright) checks plus screenshot pixel-diff (Pillow). Off by default and # timeout-bounded; requires `playwright install chromium` for the browser. When # Playwright/browser is absent the gate SKIPs rather than failing. web = [ "playwright>=1.40.0", "pillow>=10.0.0", ] # Optional MCP (Model Context Protocol) tool-host substrate (project.mcp, # orchestrator.mcp_enabled). Connects to configured MCP servers, discovers their # tools, and can call one; off by default and timeout-bounded. Absent SDK = the # tool registry is empty and the manager is a no-op (never an error). mcp = [ "mcp>=1.0.0", ] [tool.setuptools.dynamic] version = { attr = "misterdev.__version__" } [tool.setuptools.packages.find] include = ["misterdev*"] [tool.setuptools.package-data] # Ship the PEP 561 marker so downstreams get the inline types. misterdev = ["py.typed"] [tool.setuptools.data-files] # Install the man page so `man misterdev` works after a prefix/user/pipx install # (the prefix's share/man must be on MANPATH; see docs/getting-started.md). "share/man/man1" = ["man/misterdev.1"] [tool.ruff] target-version = "py310" line-length = 88 [project.urls] Homepage = "https://github.com/dcondrey/misterdev" Repository = "https://github.com/dcondrey/misterdev" Issues = "https://github.com/dcondrey/misterdev/issues" Changelog = "https://github.com/dcondrey/misterdev/blob/main/CHANGELOG.md" [dependency-groups] dev = [ "pytest>=9.1.0", "coverage>=7.0", # ruff is the lint gate CI runs (`uv run ruff check .`); it must be in the # synced dev environment or CI fails to spawn it (a local global install # masked this). "ruff>=0.10", # MCP SDK in the dev group so the suite exercises the REAL substrate path # (an in-process stdio MCP server, fully offline) rather than skipping it. "mcp>=1.0.0", # multilspy (the `lsp` extra) in the dev group so the LSP integration harness # drives a REAL language server (jedi, offline) instead of skipping — same # rationale as the MCP SDK above. Off the normal install; dev/CI only. "multilspy>=0.0.1", ] [project.scripts] misterdev = "misterdev.cli:main" misterdev-mcp = "misterdev.mcp_server:main"