feedback-mcp 1.0.64__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of feedback-mcp might be problematic. Click here for more details.
- add_command_dialog.py +712 -0
- command.py +636 -0
- components/__init__.py +15 -0
- components/agent_popup.py +187 -0
- components/chat_history.py +281 -0
- components/command_popup.py +399 -0
- components/feedback_text_edit.py +1125 -0
- components/file_popup.py +417 -0
- components/history_popup.py +582 -0
- components/markdown_display.py +262 -0
- context_formatter.py +301 -0
- debug_logger.py +107 -0
- feedback_config.py +144 -0
- feedback_mcp-1.0.64.dist-info/METADATA +327 -0
- feedback_mcp-1.0.64.dist-info/RECORD +41 -0
- feedback_mcp-1.0.64.dist-info/WHEEL +5 -0
- feedback_mcp-1.0.64.dist-info/entry_points.txt +2 -0
- feedback_mcp-1.0.64.dist-info/top_level.txt +20 -0
- feedback_ui.py +1680 -0
- get_session_id.py +53 -0
- git_operations.py +579 -0
- ide_utils.py +313 -0
- path_config.py +89 -0
- post_task_hook.py +78 -0
- record.py +188 -0
- server.py +746 -0
- session_manager.py +368 -0
- stop_hook.py +87 -0
- tabs/__init__.py +87 -0
- tabs/base_tab.py +34 -0
- tabs/chat_history_style.qss +66 -0
- tabs/chat_history_tab.py +1000 -0
- tabs/chat_tab.py +1931 -0
- tabs/workspace_tab.py +502 -0
- ui/__init__.py +20 -0
- ui/__main__.py +16 -0
- ui/compact_feedback_ui.py +376 -0
- ui/session_list_ui.py +793 -0
- ui/styles/session_list.qss +158 -0
- window_position_manager.py +197 -0
- workspace_manager.py +253 -0
feedback_config.py
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Feedback配置管理
|
|
4
|
+
用于管理IDE等全局配置
|
|
5
|
+
"""
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Optional, Dict, Any
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FeedbackConfig:
|
|
13
|
+
"""Feedback配置管理"""
|
|
14
|
+
|
|
15
|
+
def __init__(self, project_path: Optional[str] = None):
|
|
16
|
+
"""初始化配置管理器
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
project_path: 项目路径,默认为当前工作目录
|
|
20
|
+
"""
|
|
21
|
+
if project_path:
|
|
22
|
+
self.project_path = Path(project_path)
|
|
23
|
+
else:
|
|
24
|
+
self.project_path = Path.cwd()
|
|
25
|
+
|
|
26
|
+
self.config_dir = self.project_path / '.claude'
|
|
27
|
+
self.config_file = self.config_dir / 'feedback.config'
|
|
28
|
+
|
|
29
|
+
def load_config(self) -> Dict[str, Any]:
|
|
30
|
+
"""加载配置
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
配置字典
|
|
34
|
+
"""
|
|
35
|
+
if not self.config_file.exists():
|
|
36
|
+
return {
|
|
37
|
+
"ide": None,
|
|
38
|
+
"custom_ide_command": None
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
with open(self.config_file, 'r', encoding='utf-8') as f:
|
|
43
|
+
config = json.load(f)
|
|
44
|
+
# 确保必要的键存在
|
|
45
|
+
if "ide" not in config:
|
|
46
|
+
config["ide"] = None
|
|
47
|
+
if "custom_ide_command" not in config:
|
|
48
|
+
config["custom_ide_command"] = None
|
|
49
|
+
return config
|
|
50
|
+
except (json.JSONDecodeError, IOError) as e:
|
|
51
|
+
print(f"Error loading config: {e}")
|
|
52
|
+
return {
|
|
53
|
+
"ide": None,
|
|
54
|
+
"custom_ide_command": None
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
def save_config(self, config: Dict[str, Any]):
|
|
58
|
+
"""保存配置
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
config: 配置字典
|
|
62
|
+
"""
|
|
63
|
+
try:
|
|
64
|
+
# 确保目录存在
|
|
65
|
+
self.config_dir.mkdir(parents=True, exist_ok=True)
|
|
66
|
+
|
|
67
|
+
# 写入配置
|
|
68
|
+
with open(self.config_file, 'w', encoding='utf-8') as f:
|
|
69
|
+
json.dump(config, f, indent=2, ensure_ascii=False)
|
|
70
|
+
except IOError as e:
|
|
71
|
+
print(f"Error saving config: {e}")
|
|
72
|
+
|
|
73
|
+
def get_ide(self) -> Optional[str]:
|
|
74
|
+
"""获取配置的IDE
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
IDE名称或None
|
|
78
|
+
"""
|
|
79
|
+
config = self.load_config()
|
|
80
|
+
# 优先返回custom_ide_command,其次返回ide
|
|
81
|
+
custom = config.get("custom_ide_command")
|
|
82
|
+
if custom:
|
|
83
|
+
return custom
|
|
84
|
+
return config.get("ide")
|
|
85
|
+
|
|
86
|
+
def set_ide(self, ide: Optional[str] = None, custom_command: Optional[str] = None):
|
|
87
|
+
"""设置IDE
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
ide: IDE名称(单选按钮选择的)
|
|
91
|
+
custom_command: 自定义IDE命令
|
|
92
|
+
"""
|
|
93
|
+
config = self.load_config()
|
|
94
|
+
|
|
95
|
+
if custom_command:
|
|
96
|
+
# 如果有自定义命令,优先使用
|
|
97
|
+
config["custom_ide_command"] = custom_command
|
|
98
|
+
config["ide"] = None
|
|
99
|
+
else:
|
|
100
|
+
# 否则使用预设IDE
|
|
101
|
+
config["ide"] = ide
|
|
102
|
+
config["custom_ide_command"] = None
|
|
103
|
+
|
|
104
|
+
self.save_config(config)
|
|
105
|
+
|
|
106
|
+
def clear_ide(self):
|
|
107
|
+
"""清除IDE配置"""
|
|
108
|
+
config = self.load_config()
|
|
109
|
+
config["ide"] = None
|
|
110
|
+
config["custom_ide_command"] = None
|
|
111
|
+
self.save_config(config)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def main():
|
|
115
|
+
"""命令行接口"""
|
|
116
|
+
import argparse
|
|
117
|
+
|
|
118
|
+
parser = argparse.ArgumentParser(description='管理Feedback配置')
|
|
119
|
+
parser.add_argument('action', choices=['get', 'set', 'clear'],
|
|
120
|
+
help='要执行的操作')
|
|
121
|
+
parser.add_argument('--project-path', help='项目路径')
|
|
122
|
+
parser.add_argument('--ide', help='IDE名称')
|
|
123
|
+
parser.add_argument('--custom-command', help='自定义IDE命令')
|
|
124
|
+
|
|
125
|
+
args = parser.parse_args()
|
|
126
|
+
|
|
127
|
+
config_manager = FeedbackConfig(args.project_path)
|
|
128
|
+
|
|
129
|
+
if args.action == 'get':
|
|
130
|
+
ide = config_manager.get_ide()
|
|
131
|
+
print(ide if ide else "none")
|
|
132
|
+
|
|
133
|
+
elif args.action == 'set':
|
|
134
|
+
config_manager.set_ide(args.ide, args.custom_command)
|
|
135
|
+
ide = config_manager.get_ide()
|
|
136
|
+
print(f"IDE配置已设置为: {ide}")
|
|
137
|
+
|
|
138
|
+
elif args.action == 'clear':
|
|
139
|
+
config_manager.clear_ide()
|
|
140
|
+
print("IDE配置已清除")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if __name__ == "__main__":
|
|
144
|
+
main()
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: feedback-mcp
|
|
3
|
+
Version: 1.0.64
|
|
4
|
+
Summary: Interactive Feedback MCP Server with UI - 支持工作空间管理、任务追踪、检查点恢复的反馈系统
|
|
5
|
+
Author-email: Yang <your.email@example.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yourusername/feedback-mcp
|
|
8
|
+
Project-URL: Repository, https://github.com/yourusername/feedback-mcp
|
|
9
|
+
Project-URL: Issues, https://github.com/yourusername/feedback-mcp/issues
|
|
10
|
+
Keywords: mcp,feedback,interactive,workspace,task-management,checkpoint,ai-assistant,development-tools
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
19
|
+
Classifier: Operating System :: OS Independent
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
Requires-Dist: fastmcp==2.5.1
|
|
23
|
+
Requires-Dist: PySide6<7.0.0,>=6.8.0
|
|
24
|
+
Requires-Dist: psutil<8.0.0,>=6.0.0
|
|
25
|
+
Requires-Dist: markdown<4.0.0,>=3.6
|
|
26
|
+
Requires-Dist: pyyaml<7.0.0,>=6.0.0
|
|
27
|
+
Requires-Dist: requests<3.0.0,>=2.28.0
|
|
28
|
+
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
29
|
+
Requires-Dist: urllib3<3.0.0,>=2.0.0
|
|
30
|
+
Requires-Dist: websockets==15.0.1
|
|
31
|
+
Requires-Dist: Pillow<12.0.0,>=10.0.0
|
|
32
|
+
Requires-Dist: pyperclip<2.0.0,>=1.8.0
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest; extra == "dev"
|
|
35
|
+
Requires-Dist: black; extra == "dev"
|
|
36
|
+
Requires-Dist: flake8; extra == "dev"
|
|
37
|
+
Requires-Dist: build; extra == "dev"
|
|
38
|
+
Requires-Dist: twine; extra == "dev"
|
|
39
|
+
|
|
40
|
+
# Interactive Feedback MCP
|
|
41
|
+
|
|
42
|
+
一个功能强大的 MCP (Model Context Protocol) 服务器,提供交互式反馈界面,支持工作空间管理、任务追踪和检查点恢复。
|
|
43
|
+
|
|
44
|
+
## ✨ 核心特性
|
|
45
|
+
|
|
46
|
+
- 🎯 **交互式反馈界面**: 基于 PySide6 的现代化 UI,支持文本、图片等多种反馈方式
|
|
47
|
+
- 📁 **工作空间管理**: 完整的工作空间生命周期管理,支持阶段切换
|
|
48
|
+
- ✅ **任务追踪**: 强大的任务管理系统,支持依赖关系、优先级、并行执行
|
|
49
|
+
- 💾 **检查点恢复**: 创建、恢复、对比工作检查点,确保工作安全
|
|
50
|
+
- 🔄 **工作流支持**: 模板化工作流,支持自定义工作流程
|
|
51
|
+
- 📊 **会话管理**: 完整的会话历史记录和统计
|
|
52
|
+
|
|
53
|
+
## 🚀 快速开始
|
|
54
|
+
|
|
55
|
+
### 方式一:使用 uv tool 安装(推荐)
|
|
56
|
+
|
|
57
|
+
#### 安装 feedback-mcp
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# 使用清华镜像(推荐,国内速度快)
|
|
61
|
+
uv tool install feedback-mcp@latest --index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
62
|
+
|
|
63
|
+
# 或使用阿里云镜像
|
|
64
|
+
uv tool install feedback-mcp@latest --index https://mirrors.aliyun.com/pypi/simple/
|
|
65
|
+
|
|
66
|
+
# 验证安装
|
|
67
|
+
uv tool list | grep feedback
|
|
68
|
+
which feedback-mcp
|
|
69
|
+
|
|
70
|
+
# 更新版本
|
|
71
|
+
uv tool upgrade feedback-mcp
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**优势:**
|
|
75
|
+
- ✅ 只占用 1.1GB 空间(不会重复缓存)
|
|
76
|
+
- ✅ 启动速度快 10-30 倍
|
|
77
|
+
- ✅ 使用国内镜像下载速度快(1-3分钟 vs 10-30分钟)
|
|
78
|
+
- ✅ 一次安装,长期使用
|
|
79
|
+
- ✅ 自动管理 Python 版本(支持 3.10-3.12)
|
|
80
|
+
|
|
81
|
+
**可选:配置全局镜像**
|
|
82
|
+
|
|
83
|
+
如果不想每次都加 `--index` 参数,可以配置 `~/.config/uv/uv.toml`:
|
|
84
|
+
|
|
85
|
+
```toml
|
|
86
|
+
[[index]]
|
|
87
|
+
name = "tsinghua"
|
|
88
|
+
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
89
|
+
default = true
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
配置后直接运行 `uv tool install feedback-mcp@latest` 即可。
|
|
93
|
+
|
|
94
|
+
### 方式二:使用 pip 安装
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 使用清华镜像安装
|
|
98
|
+
pip install feedback-mcp -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
99
|
+
|
|
100
|
+
# 或配置 pip 全局镜像
|
|
101
|
+
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
|
102
|
+
pip install feedback-mcp
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 配置 MCP 服务器
|
|
106
|
+
|
|
107
|
+
在你的 MCP 客户端配置文件(如 `.mcp.json`)中添加:
|
|
108
|
+
|
|
109
|
+
#### 使用 uv tool 方式(推荐)
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"mcpServers": {
|
|
114
|
+
"feedback": {
|
|
115
|
+
"command": "feedback-mcp",
|
|
116
|
+
"args": ["--ide", "qoder"],
|
|
117
|
+
"timeout": 30000,
|
|
118
|
+
"autoApprove": ["interactive_feedback"]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
**参数说明:**
|
|
126
|
+
- `--ide`: IDE 名称,可选值:`qoder`、`cursor`、`vscode` 等
|
|
127
|
+
- `timeout`: 超时时间(毫秒),建议 30000 以上
|
|
128
|
+
- `autoApprove`: 自动批准的工具列表
|
|
129
|
+
|
|
130
|
+
### 配置 Stop Hook
|
|
131
|
+
|
|
132
|
+
在项目的 `hooks/hooks.json` 文件中配置停止钩子:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"hooks": {
|
|
137
|
+
"Stop": [
|
|
138
|
+
{
|
|
139
|
+
"hooks": [
|
|
140
|
+
{
|
|
141
|
+
"type": "command",
|
|
142
|
+
"command": "uvx --from feedback-mcp --with feedback-mcp python -m stop_hook"
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**注意:**
|
|
152
|
+
- `uvx` 会自动选择合适的 Python 版本(3.10-3.12)
|
|
153
|
+
- 如需指定版本可添加 `--python 3.11` 参数
|
|
154
|
+
- 如果使用 `uv tool install` 方式,参考上文中的路径配置
|
|
155
|
+
- 如果使用 pip 全局安装,使用 `python3 -m stop_hook` 即可
|
|
156
|
+
- Stop Hook 用于在会话结束时触发反馈提示
|
|
157
|
+
|
|
158
|
+
### 使用示例
|
|
159
|
+
|
|
160
|
+
安装配置完成后,AI 助手可以通过 `interactive_feedback` 工具与你交互:
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
# AI 助手自动调用 feedback 工具
|
|
164
|
+
# 弹出交互式反馈窗口
|
|
165
|
+
# 支持文本输入、预定义选项、文件选择等多种交互方式
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## 📦 主要功能
|
|
169
|
+
|
|
170
|
+
### 1. 工作空间管理
|
|
171
|
+
|
|
172
|
+
- 创建工作空间并设置目标
|
|
173
|
+
- 管理工作空间的不同阶段
|
|
174
|
+
- 记录工作记忆和相关文件
|
|
175
|
+
- 支持多个并行工作空间
|
|
176
|
+
|
|
177
|
+
### 2. 任务管理
|
|
178
|
+
|
|
179
|
+
- 创建和更新任务列表
|
|
180
|
+
- 设置任务依赖关系和优先级
|
|
181
|
+
- 支持任务并行执行
|
|
182
|
+
- 实时任务状态追踪
|
|
183
|
+
|
|
184
|
+
### 3. 检查点系统
|
|
185
|
+
|
|
186
|
+
- 创建工作检查点快照
|
|
187
|
+
- 恢复到历史检查点
|
|
188
|
+
- 对比不同检查点的差异
|
|
189
|
+
- 自动收集相关文件
|
|
190
|
+
|
|
191
|
+
### 4. 工作流引擎
|
|
192
|
+
|
|
193
|
+
- 预定义工作流模板
|
|
194
|
+
- 自定义工作流步骤
|
|
195
|
+
- 工作流状态管理
|
|
196
|
+
- 步骤依赖和执行控制
|
|
197
|
+
|
|
198
|
+
## 🔧 系统要求
|
|
199
|
+
|
|
200
|
+
- Python >= 3.10, < 3.13 (支持 3.10, 3.11, 3.12)
|
|
201
|
+
- PySide6 >= 6.8.0
|
|
202
|
+
- FastMCP >= 2.5.1
|
|
203
|
+
|
|
204
|
+
## 🐛 常见问题
|
|
205
|
+
|
|
206
|
+
### 1. 磁盘空间占用过大
|
|
207
|
+
|
|
208
|
+
**问题:** `~/.cache/uv/` 目录占用大量磁盘空间(可能达到 100GB+)
|
|
209
|
+
|
|
210
|
+
**原因:** 使用 `uvx` 方式会为每次运行创建独立的虚拟环境缓存
|
|
211
|
+
|
|
212
|
+
**解决方案:**
|
|
213
|
+
```bash
|
|
214
|
+
# 清理 uv 缓存
|
|
215
|
+
uv cache clean
|
|
216
|
+
|
|
217
|
+
# 迁移到 uv tool install 方式(推荐)
|
|
218
|
+
uv tool install feedback-mcp@latest
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
迁移后磁盘占用从 ~125GB 降至 ~1.1GB,启动速度提升 10-30 倍。
|
|
222
|
+
|
|
223
|
+
### 2. 安装速度慢
|
|
224
|
+
|
|
225
|
+
**问题:** 下载 PySide6 等大型依赖包速度很慢
|
|
226
|
+
|
|
227
|
+
**解决方案:** 配置国内镜像加速(见上文"配置国内镜像加速"章节)
|
|
228
|
+
|
|
229
|
+
### 3. Stop Hook 不工作
|
|
230
|
+
|
|
231
|
+
**问题:** 会话结束时没有弹出反馈窗口
|
|
232
|
+
|
|
233
|
+
**排查步骤:**
|
|
234
|
+
```bash
|
|
235
|
+
# 1. 检查 hooks.json 配置是否正确
|
|
236
|
+
cat hooks/hooks.json
|
|
237
|
+
|
|
238
|
+
# 2. 测试 stop_hook 模块是否可用
|
|
239
|
+
~/.local/share/uv/tools/feedback-mcp/bin/python -m stop_hook
|
|
240
|
+
|
|
241
|
+
# 3. 检查 Python 路径是否正确
|
|
242
|
+
which python
|
|
243
|
+
ls -la ~/.local/share/uv/tools/feedback-mcp/bin/python
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**解决方案:** 确保 hooks.json 中的 Python 路径与实际安装位置一致
|
|
247
|
+
|
|
248
|
+
### 4. 权限问题
|
|
249
|
+
|
|
250
|
+
**问题:** `permission denied: feedback-mcp`
|
|
251
|
+
|
|
252
|
+
**解决方案:**
|
|
253
|
+
```bash
|
|
254
|
+
# 添加执行权限
|
|
255
|
+
chmod +x ~/.local/bin/feedback-mcp
|
|
256
|
+
|
|
257
|
+
# 确保 ~/.local/bin 在 PATH 中
|
|
258
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
|
|
259
|
+
source ~/.zshrc
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 5. 版本更新
|
|
263
|
+
|
|
264
|
+
**更新到最新版本:**
|
|
265
|
+
```bash
|
|
266
|
+
# 使用 uv tool
|
|
267
|
+
uv tool upgrade feedback-mcp
|
|
268
|
+
|
|
269
|
+
# 或重新安装特定版本
|
|
270
|
+
uv tool install feedback-mcp@1.0.4 --force
|
|
271
|
+
|
|
272
|
+
# 使用 pip
|
|
273
|
+
pip install --upgrade feedback-mcp -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 6. 从 uvx 迁移到 uv tool
|
|
277
|
+
|
|
278
|
+
如果你之前使用 `uvx` 方式,建议迁移到 `uv tool install`:
|
|
279
|
+
|
|
280
|
+
**迁移步骤:**
|
|
281
|
+
1. 清理旧缓存:`uv cache clean`
|
|
282
|
+
2. 安装工具:`uv tool install feedback-mcp@latest`
|
|
283
|
+
3. 更新 `.mcp.json`:将 `command` 从 `"uvx"` 改为 `"feedback-mcp"`
|
|
284
|
+
4. 更新 `hooks.json`:使用完整的 Python 路径
|
|
285
|
+
|
|
286
|
+
详细迁移指南请参考项目中的 `MIGRATION_SUMMARY.md` 文档。
|
|
287
|
+
|
|
288
|
+
## 🔍 调试模式
|
|
289
|
+
|
|
290
|
+
启用调试日志:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# 设置环境变量
|
|
294
|
+
export DEBUG=1
|
|
295
|
+
feedback-mcp --ide qoder
|
|
296
|
+
|
|
297
|
+
# 查看日志
|
|
298
|
+
tail -f /path/to/feedback.log
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## 📝 开发
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
# 克隆仓库
|
|
305
|
+
git clone https://github.com/yourusername/interactive-feedback-mcp.git
|
|
306
|
+
cd interactive-feedback-mcp
|
|
307
|
+
|
|
308
|
+
# 安装开发依赖
|
|
309
|
+
pip install -e ".[dev]"
|
|
310
|
+
|
|
311
|
+
# 运行服务器
|
|
312
|
+
python -m src-min.server
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## 🤝 贡献
|
|
316
|
+
|
|
317
|
+
欢迎提交 Issue 和 Pull Request!
|
|
318
|
+
|
|
319
|
+
## 📄 许可证
|
|
320
|
+
|
|
321
|
+
MIT License
|
|
322
|
+
|
|
323
|
+
## 🔗 相关链接
|
|
324
|
+
|
|
325
|
+
- [GitHub Repository](https://github.com/yourusername/interactive-feedback-mcp)
|
|
326
|
+
- [MCP Documentation](https://modelcontextprotocol.io/)
|
|
327
|
+
- [Issue Tracker](https://github.com/yourusername/interactive-feedback-mcp/issues)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
add_command_dialog.py,sha256=SFBlWCY5eZ9MmFOQ4Nt29ehwMY1Y8POIzeGgOnRTHzI,26281
|
|
2
|
+
command.py,sha256=wC1x3KfaOi-DDy5SvIK4kN-PMZTIGYNsgilPTzQ1Us0,25936
|
|
3
|
+
context_formatter.py,sha256=yt88vx-HU1LstlKMl8eh9yf8nhhTkskjimig8rw2k8Y,11458
|
|
4
|
+
debug_logger.py,sha256=ZDhErmUdKMKDJMMfvKI-UtLHOaAFm9qbgtUJDuiSRts,4228
|
|
5
|
+
feedback_config.py,sha256=sQzYgKYhwEDWJtlG492ickGYK2EdyBhsZdjiqRtJxSE,4142
|
|
6
|
+
feedback_ui.py,sha256=eMAlEgy_aBGYp8l35qUgT1jqaU586LLz7GqliD0vUHg,67874
|
|
7
|
+
get_session_id.py,sha256=NDfxazme_BgHgHkKOdo-n71MvlkRIebwPEI6h5kduGk,1809
|
|
8
|
+
git_operations.py,sha256=svBodkhkfnNd4t5MwJZFvi_XRr3SdicbjSyMH1g1JMI,23871
|
|
9
|
+
ide_utils.py,sha256=8KlHeQdQ1wAVctzxKBeBpKlr9wpt52WKtvArUvmESZE,8948
|
|
10
|
+
path_config.py,sha256=MY43rTs19DEWbIVckGGSyA0q2NUiEHuU51L5RgFF7Vw,3274
|
|
11
|
+
post_task_hook.py,sha256=nGMi9iIbq3iv7gqN1hDTYrTDdBgj6-arwTeCXXWedjw,2649
|
|
12
|
+
record.py,sha256=jhZJ5lWMs1fQt9yoLZ1rj2eCqr3yGIejAhXDhBxkwUg,6417
|
|
13
|
+
server.py,sha256=V7oIAj382dyfuxSAU0KZ8TBZMuGay5YaAFqHacaseg0,30385
|
|
14
|
+
session_manager.py,sha256=mvvK2X2Rr1-LHT71poDZj-ZuPY3Ni5IuNbV470LxzQg,12622
|
|
15
|
+
stop_hook.py,sha256=BBGzAivVTxUIcG-oAKDZCyZnvj7NctsBwCwDkX-7uaI,3052
|
|
16
|
+
window_position_manager.py,sha256=4BhMDIQ2UnvTnbBzt5yQDKC7En2-8fOIDwhKfWpaNBw,6469
|
|
17
|
+
workspace_manager.py,sha256=F8cxQBr3misn32w1Z4UnDMU3BETWyC0asG_af8Sejuc,7848
|
|
18
|
+
components/__init__.py,sha256=MLxfbTmwIyXT0n7hgHzcKyf1mjLEAFfkQohVPju75pU,287
|
|
19
|
+
components/agent_popup.py,sha256=b6bEUXXaPxHOoB-NzEg4a3H9raYO2HCSFed8HCnsfDk,5805
|
|
20
|
+
components/chat_history.py,sha256=XrgE_Kh3iQN1OQ_6GP-UUBkLNnBaIXUdvDXTOftgPUc,10376
|
|
21
|
+
components/command_popup.py,sha256=7me1MNg2Vm4Ue3s-bosWD8O9Fg3TS2rTF-X1f5f7KzE,15229
|
|
22
|
+
components/feedback_text_edit.py,sha256=Q8qzlXzgrXXv8UBe0mHKeIXUYs8ka4rU5ceI4flZAHQ,43437
|
|
23
|
+
components/file_popup.py,sha256=_gS7w7KH0jLtFo9C0IvWv4gC5cc9IvwHWnJvZ_OJtWo,14788
|
|
24
|
+
components/history_popup.py,sha256=61KLCJzkkDFB4E8FPovZlX3WGAohiYIcYZJUggghX7E,19694
|
|
25
|
+
components/markdown_display.py,sha256=neNfe2s8_dFkKPOnF-WQkzIvBeKD3nxxFZbuNmkUNFA,9777
|
|
26
|
+
tabs/__init__.py,sha256=HPlk2eAtIQEHNpjNp5RH6wbQLvwJJOBMbSxyIPTsiA0,1559
|
|
27
|
+
tabs/base_tab.py,sha256=6nYXKhrWp77ezt1Xdmu0Mod9nOafMp27wPsoBTp6-Po,781
|
|
28
|
+
tabs/chat_history_style.qss,sha256=viziaHC8oluD5LJeOKXhGHVDh3JWS4PReUxvfEFbrks,1645
|
|
29
|
+
tabs/chat_history_tab.py,sha256=0jrg-SoREwoq4DJ_uH6tQSRrBDCiJPRQ-N8x9VcqywA,38662
|
|
30
|
+
tabs/chat_tab.py,sha256=lFfLs7b22o55A0xmznTZ8ScA295NEF9Kn6Spa6oOjeM,77921
|
|
31
|
+
tabs/workspace_tab.py,sha256=FOeRJIVvGboNqmFLSnF_rcneAL0ICMT2HItuUrKr_xI,18219
|
|
32
|
+
ui/__init__.py,sha256=Ci3V2esksNuam2ZpGKVqr4n7AX2mhdC39U6EcJwSlrQ,345
|
|
33
|
+
ui/__main__.py,sha256=iDIR_b9SHIhWTuxgHRg4IcHNke23KWJZ2M6hsHwu_Fk,363
|
|
34
|
+
ui/compact_feedback_ui.py,sha256=VjWwSiyC-9zulXQI4mbgxRNUj3ss00EQyjTg0oSdVZE,14090
|
|
35
|
+
ui/session_list_ui.py,sha256=V9WrGgRC0uLuwVtAaAo5Mrkrm9zIzFfS6sBnwTswepo,30027
|
|
36
|
+
ui/styles/session_list.qss,sha256=y5tt0F6fRhEDcSCHJPQQrTFAIKeSShZMmRvjTeE6gvI,3735
|
|
37
|
+
feedback_mcp-1.0.64.dist-info/METADATA,sha256=5C1bLN63lyKP5NZBnQdniw3JhbnXL7SdZBOHlPKVocw,8715
|
|
38
|
+
feedback_mcp-1.0.64.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
39
|
+
feedback_mcp-1.0.64.dist-info/entry_points.txt,sha256=sQh-GO0peid-VnYwSo9YKc-24H13o8mG4l-qLtFWoeg,45
|
|
40
|
+
feedback_mcp-1.0.64.dist-info/top_level.txt,sha256=IKnj7tM3zkH5s9di3IQN4szSO-6GDc2MzOyegPCyyKo,254
|
|
41
|
+
feedback_mcp-1.0.64.dist-info/RECORD,,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
add_command_dialog
|
|
2
|
+
command
|
|
3
|
+
components
|
|
4
|
+
context_formatter
|
|
5
|
+
debug_logger
|
|
6
|
+
feedback_config
|
|
7
|
+
feedback_ui
|
|
8
|
+
get_session_id
|
|
9
|
+
git_operations
|
|
10
|
+
ide_utils
|
|
11
|
+
path_config
|
|
12
|
+
post_task_hook
|
|
13
|
+
record
|
|
14
|
+
server
|
|
15
|
+
session_manager
|
|
16
|
+
stop_hook
|
|
17
|
+
tabs
|
|
18
|
+
ui
|
|
19
|
+
window_position_manager
|
|
20
|
+
workspace_manager
|