mcp-feedback-enhanced/pyproject.toml
GitHub Action 9e3b365ca6 🔖 Release v2.6.0
- Updated version to 2.6.0
- Custom version specified: 2.6.0
- Auto-generated release from workflow
2025-06-28 14:36:53 +00:00

316 lines
9.2 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[project]
name = "mcp-feedback-enhanced"
version = "2.6.0"
description = "Enhanced MCP server for interactive user feedback and command execution in AI-assisted development, featuring dual interface support (Web UI and Desktop Application) with intelligent environment detection and cross-platform compatibility."
readme = "README.md"
requires-python = ">=3.11"
authors = [
{ name = "Minidoracat", email = "minidora0702@gmail.com" }
]
keywords = ["mcp", "ai", "feedback", "web-ui", "desktop-app", "interactive", "development", "cross-platform", "tauri", "dual-interface"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: User Interfaces",
"Topic :: Desktop Environment",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Operating System :: OS Independent",
"Environment :: Web Environment",
"Environment :: X11 Applications",
"Environment :: Win32 (MS Windows)",
"Environment :: MacOS X",
]
dependencies = [
"fastmcp>=2.0.0",
"psutil>=7.0.0",
"fastapi>=0.115.0",
"uvicorn>=0.30.0",
"jinja2>=3.1.0",
"websockets>=13.0.0",
"aiohttp>=3.8.0",
"mcp>=1.9.3",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"pytest-asyncio>=0.21.0",
]
[project.urls]
Homepage = "https://github.com/Minidoracat/mcp-feedback-enhanced"
Repository = "https://github.com/Minidoracat/mcp-feedback-enhanced"
Issues = "https://github.com/Minidoracat/mcp-feedback-enhanced/issues"
[project.scripts]
mcp-feedback-enhanced = "mcp_feedback_enhanced.__main__:main"
interactive-feedback-mcp = "mcp_feedback_enhanced.__main__:main"
[build-system]
requires = [
"hatchling",
"maturin>=1.8.7",
"setuptools-rust>=1.11.1"
]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/mcp_feedback_enhanced"]
# 桌面應用程式二進制檔案現在直接存儲在 Git 中
# 由 build-desktop.yml 工作流程自動構建並提交
[tool.uv]
dev-dependencies = [
"bump2version>=1.0.1",
"pytest>=7.0.0",
"pytest-asyncio>=0.21.0",
"pytest-timeout>=2.1.0",
"twine>=6.1.0",
"ruff>=0.11.0",
"mypy>=1.16.0",
"pre-commit>=4.0.0",
"maturin>=1.8.7",
"setuptools-rust>=1.11.1",
"pillow>=11.2.1",
]
# ===== Ruff 配置 =====
[tool.ruff]
# 目標 Python 版本
target-version = "py311"
# 程式碼行長度
line-length = 88
# 包含的檔案模式
include = ["*.py", "*.pyi", "**/pyproject.toml"]
# 排除的檔案和目錄
exclude = [
".bzr",
".direnv",
".eggs",
".git",
".git-rewrite",
".hg",
".mypy_cache",
".nox",
".pants.d",
".pytype",
".ruff_cache",
".svn",
".tox",
".venv",
"__pypackages__",
"_build",
"buck-out",
"build",
"dist",
"venv",
"*.egg-info",
".trunk",
]
[tool.ruff.lint]
# 啟用的規則集
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
"ARG", # flake8-unused-arguments
"C90", # mccabe
"T20", # flake8-print
"TID", # flake8-tidy-imports
"ICN", # flake8-import-conventions
"RET", # flake8-return
"SIM", # flake8-simplify
"S", # bandit (安全檢查)
"A", # flake8-builtins
"COM", # flake8-commas
"PL", # Pylint
"RUF", # Ruff-specific rules
]
# 忽略的規則 - 2024-12-19 更新:經過三階段程式碼品質改善
ignore = [
# === 格式化和工具衝突 ===
"E501", # 行長度由 formatter 處理
"COM812", # 避免與 formatter 衝突
"COM819", # 避免與 formatter 衝突
# === 測試和調試 ===
"S101", # 允許使用 assert測試中必要
"T201", # 允許 print 語句(調試和腳本中使用)
# === 安全相關(已針對性處理)===
"S603", # 允許 subprocess 調用(已安全處理,僅限必要場景)
"S607", # 允許部分路徑執行(已安全處理,僅限必要場景)
"S108", # 允許臨時文件路徑resource_manager 中安全使用)
# === 中文項目特殊需求 ===
"RUF001", # 允許全角字符(中文項目必要)
"RUF002", # 允許全角字符(中文項目必要)
"RUF003", # 允許全角字符(中文項目必要)
# === 複雜度控制(合理範圍內)===
"PLR0913", # 允許多參數函數API 設計需要)
"PLR0912", # 允許多分支(狀態機等複雜邏輯)
"PLR0911", # 允許多返回語句(早期返回模式)
"PLR0915", # 允許函數語句過多(複雜業務邏輯)
"PLR2004", # 允許魔術數字(配置值等)
"C901", # 允許複雜函數(核心業務邏輯)
# === 待重構項目(下個版本處理)===
"E402", # 模組級導入不在頂部1個錯誤需要重構導入順序
"E722", # 裸露 except18個錯誤需要指定異常類型
"ARG001", # 未使用函數參數4個錯誤需要重構接口
"ARG002", # 未使用方法參數4個錯誤需要重構接口
"SIM105", # try-except-pass6個錯誤可用 contextlib.suppress
"RUF006", # 未儲存 asyncio.create_task 返回值3個錯誤
# === 架構設計相關(長期保留)===
"TID252", # 相對導入(模組架構設計)
"B007", # 未使用循環變數(某些算法中正常)
"SIM102", # 嵌套 if可讀性優於簡潔性
"SIM103", # 複雜條件(業務邏輯清晰性)
"SIM108", # if-else vs 三元運算子(可讀性選擇)
"SIM110", # for 迴圈 vs any()(性能和可讀性平衡)
"SIM117", # 嵌套 with資源管理模式
"RET504", # 不必要賦值(調試和可讀性)
"RUF005", # 列表連接(性能不敏感場景)
"RUF012", # 可變類別屬性(設計模式需要)
"RUF013", # 隱式 Optional漸進式類型註解
"S110", # try-except-pass錯誤恢復模式
"E712", # 布林比較(明確性優於簡潔性)
"PLW0603", # global 語句(單例模式等)
"A002", # 遮蔽內建函數名稱(領域特定命名)
]
# 每個檔案的最大複雜度
mccabe.max-complexity = 10
[tool.ruff.lint.per-file-ignores]
# 測試檔案的特殊規則
"tests/**/*.py" = [
"S101", # 測試中允許 assert
"ARG", # 測試中允許未使用參數
"FBT", # 測試中允許布林參數
"PLR2004", # 測試中允許魔術數字
"S311", # 測試中允許偽隨機生成器
]
# __init__.py 檔案的特殊規則
"__init__.py" = [
"F401", # 允許未使用的導入
]
# 腳本檔案的特殊規則
"scripts/**/*.py" = [
"T201", # 腳本中允許 print
"S602", # 腳本中允許 shell 調用(腳本環境相對安全)
"S603", # 腳本中允許 subprocess 調用
"S607", # 腳本中允許部分路徑執行
]
# Web 模組的特殊規則(需要更嚴格的安全檢查)
"src/mcp_feedback_enhanced/web/**/*.py" = [
"S104", # 允許綁定 127.0.0.1(本地開發安全)
]
[tool.ruff.format]
# 使用雙引號
quote-style = "double"
# 縮排樣式
indent-style = "space"
# 跳過魔術逗號
skip-magic-trailing-comma = false
# 行結尾
line-ending = "auto"
[tool.ruff.lint.isort]
# import 排序配置
known-first-party = ["mcp_feedback_enhanced"]
force-single-line = false
lines-after-imports = 2
# ===== mypy 配置 =====
[tool.mypy]
# Python 版本
python_version = "3.11"
# 基本設定 - 2024-12-19 更新經過三階段改善74% 錯誤已修復
warn_return_any = true
warn_unused_configs = true
# 漸進式啟用核心模組已達到類型安全標準剩餘26個錯誤主要為第三方庫問題
disallow_untyped_defs = false # 目標:下個版本啟用
disallow_incomplete_defs = false # 目標:下個版本啟用
check_untyped_defs = true
disallow_untyped_decorators = false # 漸進式啟用
# 嚴格模式(漸進式啟用)
strict_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
warn_unreachable = true
# 錯誤格式
show_error_codes = true
show_column_numbers = true
pretty = true
# 包含和排除 - 使用最佳實踐配置
files = ["src", "tests"]
exclude = [
"build/",
"dist/",
".venv/",
"venv/",
".trunk/",
".mypy_cache/",
]
# 最佳實踐:明確指定包基礎路徑
explicit_package_bases = true
# 設置 mypy 路徑,確保正確的模組解析
mypy_path = ["src"]
# 忽略已安裝的包,只檢查源代碼
no_site_packages = true
# 第三方庫配置
[[tool.mypy.overrides]]
module = [
"fastmcp.*",
"mcp.*",
"psutil.*",
"uvicorn.*",
"websockets.*",
"aiohttp.*",
"fastapi.*",
"pydantic.*",
"pytest.*",
]
ignore_missing_imports = true
# 測試檔案的寬鬆配置
[[tool.mypy.overrides]]
module = "tests.*"
disallow_untyped_defs = false
disallow_incomplete_defs = false
disallow_untyped_decorators = false