mirror of
https://github.com/Minidoracat/mcp-feedback-enhanced.git
synced 2025-07-26 10:02:25 +08:00

- Updated version to 2.6.0 - Custom version specified: 2.6.0 - Auto-generated release from workflow
316 lines
9.2 KiB
TOML
316 lines
9.2 KiB
TOML
[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", # 裸露 except(18個錯誤,需要指定異常類型)
|
||
"ARG001", # 未使用函數參數(4個錯誤,需要重構接口)
|
||
"ARG002", # 未使用方法參數(4個錯誤,需要重構接口)
|
||
"SIM105", # try-except-pass(6個錯誤,可用 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
|