forked from Minidoracat/mcp-feedback-enhanced
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
315 lines (276 loc) · 9.19 KB
/
pyproject.toml
File metadata and controls
315 lines (276 loc) · 9.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
[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