cursor-feedback 0.1.23 → 0.1.33
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.
- package/README.md +14 -0
- package/dist/extension.js +83 -40
- package/dist/extension.js.map +1 -1
- package/dist/mcp-server.js +160 -81
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
- package/src/extension.ts +92 -42
- package/src/mcp-server.ts +116 -29
package/README.md
CHANGED
|
@@ -66,6 +66,20 @@ npm install -g cursor-feedback
|
|
|
66
66
|
3. 在聊天中让 AI 调用 `interactive_feedback` 工具
|
|
67
67
|
4. AI 会在侧边栏显示工作摘要,等待您的反馈
|
|
68
68
|
|
|
69
|
+
### 4. 配置 User Rules(推荐)
|
|
70
|
+
|
|
71
|
+
为了让 AI 更好地使用 Cursor Feedback,建议在 Cursor 设置中添加以下 User Rules:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
# Cursor Feedback 规则
|
|
75
|
+
|
|
76
|
+
1. 在任何流程、任务、对话进行时,无论是询问、回复、或完成阶段性任务,皆必须调用 MCP cursor-feedback。
|
|
77
|
+
2. 每当收到用户反馈,必须再次调用 MCP cursor-feedback,并根据反馈内容调整行为。
|
|
78
|
+
3. 完成任务前,必须使用 MCP cursor-feedback 工具向用户询问反馈。
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
配置后,AI 会在对话过程中自动调用 Cursor Feedback 工具,实现持续的交互式对话。
|
|
82
|
+
|
|
69
83
|
## 📖 MCP 工具
|
|
70
84
|
|
|
71
85
|
### interactive_feedback
|
package/dist/extension.js
CHANGED
|
@@ -122,11 +122,14 @@ class FeedbackViewProvider {
|
|
|
122
122
|
this._activePort = null;
|
|
123
123
|
this._portScanRange = 20; // 扫描端口范围
|
|
124
124
|
this._seenRequestIds = new Set(); // 已处理过的请求 ID
|
|
125
|
+
this._latestServerStartTime = 0; // 当前工作区已知的最新 Server 启动时间
|
|
125
126
|
this._debugInfo = {
|
|
126
127
|
portRange: '',
|
|
127
128
|
workspacePath: '',
|
|
128
129
|
connectedPorts: [],
|
|
129
|
-
lastStatus: '初始化中...'
|
|
130
|
+
lastStatus: '初始化中...',
|
|
131
|
+
mismatchCount: 0,
|
|
132
|
+
activePort: null
|
|
130
133
|
};
|
|
131
134
|
this._basePort = port;
|
|
132
135
|
this._debugInfo.portRange = `${port}-${port + this._portScanRange - 1}`;
|
|
@@ -191,53 +194,84 @@ class FeedbackViewProvider {
|
|
|
191
194
|
}
|
|
192
195
|
/**
|
|
193
196
|
* 轮询检查是否有新的反馈请求
|
|
194
|
-
*
|
|
197
|
+
* 优化:如果已有活跃端口,只轮询该端口;否则扫描所有端口
|
|
195
198
|
*/
|
|
196
199
|
async _pollForFeedbackRequest() {
|
|
197
200
|
try {
|
|
198
201
|
// 更新工作区路径
|
|
199
202
|
const workspacePaths = getWorkspacePaths();
|
|
200
203
|
this._debugInfo.workspacePath = workspacePaths.length > 0 ? workspacePaths[0] : '(无工作区)';
|
|
201
|
-
//
|
|
204
|
+
// 始终扫描所有端口,确保能检测到新 Server
|
|
205
|
+
// 不再使用活跃端口优化,因为它会导致错过新 Server 的请求
|
|
202
206
|
const ports = [];
|
|
203
207
|
for (let i = 0; i < this._portScanRange; i++) {
|
|
204
208
|
ports.push(this._basePort + i);
|
|
205
209
|
}
|
|
206
210
|
// 并行检查所有端口
|
|
207
211
|
const results = await Promise.all(ports.map(port => this._checkPortForRequest(port)));
|
|
208
|
-
//
|
|
212
|
+
// 更新已连接的端口列表和不匹配数量
|
|
209
213
|
this._debugInfo.connectedPorts = results.filter(r => r.connected).map(r => r.port);
|
|
210
|
-
|
|
214
|
+
this._debugInfo.mismatchCount = results.filter(r => r.mismatch).length;
|
|
215
|
+
// 找出同一工作区中 startTime 最大的 Server
|
|
216
|
+
const currentWorkspace = getWorkspacePaths()[0] || '';
|
|
217
|
+
const normalize = (p) => p.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
218
|
+
const normalizedCurrentWorkspace = normalize(currentWorkspace);
|
|
219
|
+
let maxStartTime = 0;
|
|
220
|
+
for (const r of results) {
|
|
221
|
+
if (r.connected && r.startTime) {
|
|
222
|
+
// 检查是否属于当前工作区(ownerWorkspace 匹配或未设置)
|
|
223
|
+
const serverOwner = r.ownerWorkspace ? normalize(r.ownerWorkspace) : '';
|
|
224
|
+
const isMyServer = !serverOwner || serverOwner === normalizedCurrentWorkspace;
|
|
225
|
+
if (isMyServer && r.startTime > maxStartTime) {
|
|
226
|
+
maxStartTime = r.startTime;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
this._latestServerStartTime = maxStartTime;
|
|
231
|
+
// 收集所有有效请求
|
|
232
|
+
// 按请求的 timestamp 和 Server 的 startTime 排序,优先显示最新的
|
|
211
233
|
const validRequests = results
|
|
212
234
|
.filter(r => r.request && !this._seenRequestIds.has(r.request.id))
|
|
213
|
-
.sort((a, b) =>
|
|
235
|
+
.sort((a, b) => {
|
|
236
|
+
// 首先按请求的 timestamp 排序(新的优先)
|
|
237
|
+
const timestampDiff = b.request.timestamp - a.request.timestamp;
|
|
238
|
+
if (timestampDiff !== 0) {
|
|
239
|
+
return timestampDiff;
|
|
240
|
+
}
|
|
241
|
+
// timestamp 相同时,按 Server 的 startTime 排序(新的优先)
|
|
242
|
+
return (b.startTime || 0) - (a.startTime || 0);
|
|
243
|
+
});
|
|
214
244
|
// 处理最新的请求
|
|
215
245
|
if (validRequests.length > 0) {
|
|
216
246
|
const newest = validRequests[0];
|
|
217
247
|
this._activePort = newest.port;
|
|
248
|
+
this._debugInfo.activePort = newest.port;
|
|
218
249
|
this._debugInfo.lastStatus = `找到请求 (端口 ${newest.port})`;
|
|
219
|
-
this._debugInfo.mismatchInfo = undefined;
|
|
220
250
|
this._handleNewRequest(newest.request, newest.port);
|
|
221
251
|
this._updateDebugInfo();
|
|
222
252
|
return;
|
|
223
253
|
}
|
|
254
|
+
// 没有新的有效请求时,检查是否有当前正在处理的请求
|
|
255
|
+
if (this._currentRequest && this._activePort) {
|
|
256
|
+
// 保持当前活跃端口
|
|
257
|
+
this._debugInfo.activePort = this._activePort;
|
|
258
|
+
this._debugInfo.lastStatus = `监听端口 ${this._activePort}`;
|
|
259
|
+
this._updateDebugInfo();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
// 确实没有任何请求,重置活跃端口
|
|
263
|
+
this._debugInfo.activePort = null;
|
|
224
264
|
// 更新调试状态
|
|
225
265
|
if (this._debugInfo.connectedPorts.length === 0) {
|
|
226
266
|
this._debugInfo.lastStatus = '未找到 MCP Server';
|
|
227
267
|
}
|
|
268
|
+
else if (this._debugInfo.mismatchCount > 0) {
|
|
269
|
+
this._debugInfo.lastStatus = `连接 ${this._debugInfo.connectedPorts.length} 个端口,${this._debugInfo.mismatchCount} 个路径不匹配`;
|
|
270
|
+
}
|
|
228
271
|
else {
|
|
229
|
-
this._debugInfo.lastStatus =
|
|
272
|
+
this._debugInfo.lastStatus = `连接 ${this._debugInfo.connectedPorts.length} 个端口,无匹配请求`;
|
|
230
273
|
}
|
|
231
274
|
this._updateDebugInfo();
|
|
232
|
-
// 检查活跃端口的请求状态(可能已被处理或超时)
|
|
233
|
-
if (this._activePort && this._currentRequest) {
|
|
234
|
-
const activeResult = results.find(r => r.port === this._activePort);
|
|
235
|
-
if (activeResult && activeResult.connected && !activeResult.request) {
|
|
236
|
-
// 请求已被处理或超时
|
|
237
|
-
this._currentRequest = null;
|
|
238
|
-
this._showWaitingState();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
275
|
}
|
|
242
276
|
catch (error) {
|
|
243
277
|
this._debugInfo.lastStatus = `轮询错误: ${error}`;
|
|
@@ -249,24 +283,37 @@ class FeedbackViewProvider {
|
|
|
249
283
|
*/
|
|
250
284
|
async _checkPortForRequest(port) {
|
|
251
285
|
try {
|
|
252
|
-
|
|
253
|
-
const
|
|
286
|
+
// 带上工作区路径和已知的最新 startTime
|
|
287
|
+
const workspacePaths = getWorkspacePaths();
|
|
288
|
+
const workspacePath = workspacePaths.length > 0 ? workspacePaths[0] : '';
|
|
289
|
+
const url = `http://127.0.0.1:${port}/api/feedback/current?workspace=${encodeURIComponent(workspacePath)}&latestStartTime=${this._latestServerStartTime}`;
|
|
290
|
+
const response = await this._httpGet(url);
|
|
291
|
+
const parsed = JSON.parse(response);
|
|
292
|
+
// 兼容新旧两种响应格式
|
|
293
|
+
// 新格式: { request, ownerWorkspace, startTime }
|
|
294
|
+
// 旧格式: FeedbackRequest | null
|
|
295
|
+
let request;
|
|
296
|
+
let ownerWorkspace = null;
|
|
297
|
+
let startTime = 0;
|
|
298
|
+
if (parsed && typeof parsed === 'object' && 'startTime' in parsed) {
|
|
299
|
+
// 新格式
|
|
300
|
+
request = parsed.request;
|
|
301
|
+
ownerWorkspace = parsed.ownerWorkspace;
|
|
302
|
+
startTime = parsed.startTime;
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
// 旧格式(兼容 npm 上的旧版本)
|
|
306
|
+
request = parsed;
|
|
307
|
+
}
|
|
254
308
|
// 检查请求是否属于当前工作区
|
|
255
309
|
if (request) {
|
|
256
|
-
const workspacePaths = getWorkspacePaths();
|
|
257
310
|
const isMatch = isPathInWorkspace(request.projectDir);
|
|
258
311
|
if (!isMatch) {
|
|
259
|
-
//
|
|
260
|
-
|
|
261
|
-
requestPath: request.projectDir,
|
|
262
|
-
workspacePath: workspacePaths.length > 0 ? workspacePaths[0] : '(无工作区)'
|
|
263
|
-
};
|
|
264
|
-
this._debugInfo.lastStatus = `路径不匹配 (端口 ${port})`;
|
|
265
|
-
// 请求不属于当前工作区,忽略
|
|
266
|
-
return { connected: true, request: null, port };
|
|
312
|
+
// 请求不属于当前工作区,返回特殊标记
|
|
313
|
+
return { connected: true, request: null, port, mismatch: true, ownerWorkspace, startTime };
|
|
267
314
|
}
|
|
268
315
|
}
|
|
269
|
-
return { connected: true, request, port };
|
|
316
|
+
return { connected: true, request, port, ownerWorkspace, startTime };
|
|
270
317
|
}
|
|
271
318
|
catch {
|
|
272
319
|
return { connected: false, request: null, port };
|
|
@@ -657,6 +704,7 @@ class FeedbackViewProvider {
|
|
|
657
704
|
gap: 6px;
|
|
658
705
|
font-size: 11px;
|
|
659
706
|
padding: 6px 10px;
|
|
707
|
+
position: relative;
|
|
660
708
|
background: var(--vscode-textBlockQuote-background);
|
|
661
709
|
border-radius: 4px;
|
|
662
710
|
margin-bottom: 12px;
|
|
@@ -686,10 +734,9 @@ class FeedbackViewProvider {
|
|
|
686
734
|
|
|
687
735
|
.debug-tooltip {
|
|
688
736
|
display: none;
|
|
689
|
-
position:
|
|
690
|
-
top:
|
|
691
|
-
right:
|
|
692
|
-
margin-top: 4px;
|
|
737
|
+
position: fixed;
|
|
738
|
+
top: 50px;
|
|
739
|
+
right: 10px;
|
|
693
740
|
padding: 8px 10px;
|
|
694
741
|
background: var(--vscode-editorWidget-background);
|
|
695
742
|
border: 1px solid var(--vscode-editorWidget-border);
|
|
@@ -697,8 +744,8 @@ class FeedbackViewProvider {
|
|
|
697
744
|
font-size: 11px;
|
|
698
745
|
white-space: pre-wrap;
|
|
699
746
|
z-index: 1000;
|
|
700
|
-
min-width:
|
|
701
|
-
max-width:
|
|
747
|
+
min-width: 180px;
|
|
748
|
+
max-width: 280px;
|
|
702
749
|
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
|
703
750
|
}
|
|
704
751
|
|
|
@@ -1187,13 +1234,9 @@ class FeedbackViewProvider {
|
|
|
1187
1234
|
debugText += '━━━━━━━━━━━━\\n';
|
|
1188
1235
|
debugText += '扫描端口: ' + debug.portRange + '\\n';
|
|
1189
1236
|
debugText += '工作区: ' + debug.workspacePath + '\\n';
|
|
1237
|
+
debugText += '当前端口: ' + (debug.activePort || '-') + '\\n';
|
|
1190
1238
|
debugText += '已连接: ' + (debug.connectedPorts.length > 0 ? debug.connectedPorts.join(', ') : '无') + '\\n';
|
|
1191
1239
|
debugText += '状态: ' + debug.lastStatus;
|
|
1192
|
-
if (debug.mismatchInfo) {
|
|
1193
|
-
debugText += '\\n\\n⚠️ 路径不匹配\\n';
|
|
1194
|
-
debugText += '请求: ' + debug.mismatchInfo.requestPath + '\\n';
|
|
1195
|
-
debugText += '工作区: ' + debug.mismatchInfo.workspacePath;
|
|
1196
|
-
}
|
|
1197
1240
|
debugTooltip.textContent = debugText;
|
|
1198
1241
|
break;
|
|
1199
1242
|
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -71,6 +71,11 @@ class McpFeedbackServer {
|
|
|
71
71
|
this.pendingRequests = new Map();
|
|
72
72
|
// 当前反馈请求
|
|
73
73
|
this.currentRequest = null;
|
|
74
|
+
// 所属工作区(只在 AI 调用 feedback 时设置)
|
|
75
|
+
// 只有来自同一工作区的轮询才会更新活动时间
|
|
76
|
+
this.ownerWorkspace = null;
|
|
77
|
+
// Server 启动时间(用于区分同一项目的新旧 Server)
|
|
78
|
+
this.startTime = Date.now();
|
|
74
79
|
// 最后活动时间(用于自动退出)
|
|
75
80
|
this.lastActivityTime = Date.now();
|
|
76
81
|
// 自动退出检查定时器
|
|
@@ -152,13 +157,25 @@ class McpFeedbackServer {
|
|
|
152
157
|
// 处理工具调用
|
|
153
158
|
this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
154
159
|
const { name, arguments: args } = request.params;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
try {
|
|
161
|
+
switch (name) {
|
|
162
|
+
case 'interactive_feedback':
|
|
163
|
+
return await this.handleInteractiveFeedback(args);
|
|
164
|
+
case 'get_system_info':
|
|
165
|
+
return this.handleGetSystemInfo();
|
|
166
|
+
default:
|
|
167
|
+
return {
|
|
168
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
169
|
+
isError: true,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
debugLog(`Error in tool ${name}: ${error}`);
|
|
175
|
+
return {
|
|
176
|
+
content: [{ type: 'text', text: `Tool error: ${error}` }],
|
|
177
|
+
isError: true,
|
|
178
|
+
};
|
|
162
179
|
}
|
|
163
180
|
});
|
|
164
181
|
}
|
|
@@ -173,6 +190,12 @@ class McpFeedbackServer {
|
|
|
173
190
|
const envTimeout = process.env.MCP_FEEDBACK_TIMEOUT ? parseInt(process.env.MCP_FEEDBACK_TIMEOUT, 10) : null;
|
|
174
191
|
const timeout = envTimeout || args?.timeout || 300;
|
|
175
192
|
const requestId = this.generateRequestId();
|
|
193
|
+
// AI 调用 feedback 时设置 ownerWorkspace(这是唯一正确的时机)
|
|
194
|
+
const normalize = (p) => p.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
195
|
+
this.ownerWorkspace = normalize(projectDir);
|
|
196
|
+
debugLog(`Owner workspace set to: ${this.ownerWorkspace}`);
|
|
197
|
+
// AI 调用 feedback 时更新活动时间
|
|
198
|
+
this.updateActivity();
|
|
176
199
|
// 创建反馈请求
|
|
177
200
|
this.currentRequest = {
|
|
178
201
|
id: requestId,
|
|
@@ -400,81 +423,118 @@ class McpFeedbackServer {
|
|
|
400
423
|
startHttpServer() {
|
|
401
424
|
return new Promise((resolve, reject) => {
|
|
402
425
|
this.httpServer = http.createServer((req, res) => {
|
|
403
|
-
//
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
res.
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
426
|
+
// 包裹整个请求处理逻辑,防止异常导致进程崩溃
|
|
427
|
+
try {
|
|
428
|
+
// 注意:活动时间的更新已移到具体的请求处理中
|
|
429
|
+
// 只有来自匹配工作区的请求才会更新活动时间
|
|
430
|
+
// 设置 CORS 头
|
|
431
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
432
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
433
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
434
|
+
if (req.method === 'OPTIONS') {
|
|
435
|
+
res.writeHead(200);
|
|
436
|
+
res.end();
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
// 获取当前反馈请求
|
|
440
|
+
if (req.method === 'GET' && req.url?.startsWith('/api/feedback/current')) {
|
|
441
|
+
// 解析 URL 参数
|
|
442
|
+
const urlObj = new URL(req.url, `http://127.0.0.1:${this.port}`);
|
|
443
|
+
const workspaceParam = urlObj.searchParams.get('workspace') || '';
|
|
444
|
+
const latestStartTimeParam = urlObj.searchParams.get('latestStartTime');
|
|
445
|
+
const latestStartTime = latestStartTimeParam ? parseInt(latestStartTimeParam, 10) : 0;
|
|
446
|
+
const normalize = (p) => p.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
447
|
+
const normalizedWorkspace = normalize(workspaceParam);
|
|
448
|
+
// 检查是否应该更新活动时间
|
|
449
|
+
// 条件 1:工作区匹配(或未设置 ownerWorkspace)
|
|
450
|
+
// 条件 2:是最新的 Server(startTime >= latestStartTime)
|
|
451
|
+
// 条件 3:latestStartTime > 0(插件已完成首轮扫描)
|
|
452
|
+
const isWorkspaceMatch = !this.ownerWorkspace || normalizedWorkspace === this.ownerWorkspace;
|
|
453
|
+
const isLatestServer = latestStartTime > 0 && this.startTime >= latestStartTime;
|
|
454
|
+
if (isWorkspaceMatch && isLatestServer) {
|
|
455
|
+
this.updateActivity();
|
|
456
|
+
}
|
|
457
|
+
// 不满足条件时不更新活动时间,旧的 Server 会在 2 分钟后自动退出
|
|
458
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
459
|
+
// 返回当前请求、ownerWorkspace 和 startTime
|
|
460
|
+
res.end(JSON.stringify({
|
|
461
|
+
request: this.currentRequest || null,
|
|
462
|
+
ownerWorkspace: this.ownerWorkspace,
|
|
463
|
+
startTime: this.startTime,
|
|
464
|
+
}));
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
// 提交反馈
|
|
468
|
+
if (req.method === 'POST' && req.url === '/api/feedback/submit') {
|
|
469
|
+
// 提交反馈一定是来自正确的工作区,更新活动时间
|
|
470
|
+
this.updateActivity();
|
|
471
|
+
let body = '';
|
|
472
|
+
req.on('data', chunk => {
|
|
473
|
+
body += chunk.toString();
|
|
474
|
+
});
|
|
475
|
+
req.on('end', () => {
|
|
476
|
+
try {
|
|
477
|
+
const data = JSON.parse(body);
|
|
478
|
+
const { requestId, feedback } = data;
|
|
479
|
+
debugLog(`Received feedback submission for request: ${requestId}`);
|
|
480
|
+
const pending = this.pendingRequests.get(requestId);
|
|
481
|
+
if (pending) {
|
|
482
|
+
clearTimeout(pending.timeout);
|
|
483
|
+
pending.resolve(feedback);
|
|
484
|
+
this.pendingRequests.delete(requestId);
|
|
485
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
486
|
+
res.end(JSON.stringify({ success: true }));
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
debugLog(`Request ${requestId} not found`);
|
|
490
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
491
|
+
res.end(JSON.stringify({ error: 'Request not found' }));
|
|
492
|
+
}
|
|
438
493
|
}
|
|
439
|
-
|
|
440
|
-
debugLog(`
|
|
441
|
-
res.writeHead(
|
|
442
|
-
res.end(JSON.stringify({ error: '
|
|
494
|
+
catch (error) {
|
|
495
|
+
debugLog(`Invalid request body: ${error}`);
|
|
496
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
497
|
+
res.end(JSON.stringify({ error: 'Invalid request body' }));
|
|
443
498
|
}
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
499
|
+
});
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
// 健康检查
|
|
503
|
+
if (req.method === 'GET' && req.url === '/api/health') {
|
|
504
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
505
|
+
res.end(JSON.stringify({
|
|
506
|
+
status: 'ok',
|
|
507
|
+
version: '0.0.1',
|
|
508
|
+
hasCurrentRequest: this.currentRequest !== null,
|
|
509
|
+
pid: process.pid,
|
|
510
|
+
}));
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
// 关闭服务器(用于新进程替换旧进程)
|
|
514
|
+
if (req.method === 'POST' && req.url === '/api/shutdown') {
|
|
515
|
+
debugLog('Received shutdown request from new MCP Server instance');
|
|
516
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
517
|
+
res.end(JSON.stringify({ success: true, message: 'Shutting down...' }));
|
|
518
|
+
// 延迟关闭,确保响应已发送
|
|
519
|
+
setTimeout(() => {
|
|
520
|
+
this.stop();
|
|
521
|
+
process.exit(0);
|
|
522
|
+
}, 100);
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
res.writeHead(404);
|
|
526
|
+
res.end('Not Found');
|
|
463
527
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
}, 100);
|
|
474
|
-
return;
|
|
528
|
+
catch (error) {
|
|
529
|
+
debugLog(`HTTP request error: ${error}`);
|
|
530
|
+
try {
|
|
531
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
532
|
+
res.end(JSON.stringify({ error: 'Internal server error' }));
|
|
533
|
+
}
|
|
534
|
+
catch {
|
|
535
|
+
// 响应可能已经发送,忽略
|
|
536
|
+
}
|
|
475
537
|
}
|
|
476
|
-
res.writeHead(404);
|
|
477
|
-
res.end('Not Found');
|
|
478
538
|
});
|
|
479
539
|
this.httpServer.on('error', async (err) => {
|
|
480
540
|
if (err.code === 'EADDRINUSE') {
|
|
@@ -502,10 +562,24 @@ class McpFeedbackServer {
|
|
|
502
562
|
}
|
|
503
563
|
/**
|
|
504
564
|
* 启动无活动自动退出检查
|
|
565
|
+
*
|
|
566
|
+
* 退出条件:
|
|
567
|
+
* 1. 没有 currentRequest(即没有请求在等待用户反馈)
|
|
568
|
+
* 2. 超过 2 分钟没有来自对应工作区的轮询
|
|
569
|
+
*
|
|
570
|
+
* 这样:
|
|
571
|
+
* - 窗口打开时:插件轮询会更新活动时间,不会退出
|
|
572
|
+
* - 等待反馈时:有 currentRequest,不会退出
|
|
573
|
+
* - 窗口关闭后:没有轮询,2 分钟后退出
|
|
505
574
|
*/
|
|
506
575
|
startInactivityCheck() {
|
|
507
576
|
// 每分钟检查一次
|
|
508
577
|
this.inactivityCheckInterval = setInterval(() => {
|
|
578
|
+
// 如果有请求正在等待用户反馈,绝对不退出
|
|
579
|
+
if (this.currentRequest) {
|
|
580
|
+
debugLog('Request pending, skipping inactivity check');
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
509
583
|
const inactiveTime = Date.now() - this.lastActivityTime;
|
|
510
584
|
if (inactiveTime > this.INACTIVITY_TIMEOUT) {
|
|
511
585
|
debugLog(`No activity for ${Math.round(inactiveTime / 1000)}s, auto-exiting...`);
|
|
@@ -577,10 +651,15 @@ async function main() {
|
|
|
577
651
|
server.stop();
|
|
578
652
|
process.exit(0);
|
|
579
653
|
});
|
|
654
|
+
// 捕获未处理的异常,记录日志但不退出进程
|
|
580
655
|
process.on('uncaughtException', (error) => {
|
|
581
|
-
debugLog(`Uncaught exception: ${error}`);
|
|
582
|
-
|
|
583
|
-
|
|
656
|
+
debugLog(`Uncaught exception (continuing): ${error}`);
|
|
657
|
+
// 不退出进程,让 MCP 连接保持
|
|
658
|
+
});
|
|
659
|
+
// 捕获未处理的 Promise 拒绝
|
|
660
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
661
|
+
debugLog(`Unhandled rejection (continuing): ${reason}`);
|
|
662
|
+
// 不退出进程,让 MCP 连接保持
|
|
584
663
|
});
|
|
585
664
|
await server.start();
|
|
586
665
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "cursor-feedback",
|
|
3
3
|
"displayName": "Cursor Feedback",
|
|
4
4
|
"description": "Interactive feedback collection for AI agents in Cursor/VS Code - MCP Server with sidebar UI",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.33",
|
|
6
6
|
"author": "jianger666",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"repository": {
|
package/src/extension.ts
CHANGED
|
@@ -125,17 +125,21 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
125
125
|
private _activePort: number | null = null;
|
|
126
126
|
private _portScanRange = 20; // 扫描端口范围
|
|
127
127
|
private _seenRequestIds: Set<string> = new Set(); // 已处理过的请求 ID
|
|
128
|
+
private _latestServerStartTime: number = 0; // 当前工作区已知的最新 Server 启动时间
|
|
128
129
|
private _debugInfo: {
|
|
129
130
|
portRange: string;
|
|
130
131
|
workspacePath: string;
|
|
131
132
|
connectedPorts: number[];
|
|
132
133
|
lastStatus: string;
|
|
133
|
-
|
|
134
|
+
mismatchCount: number; // 路径不匹配的端口数量
|
|
135
|
+
activePort: number | null; // 当前活跃端口
|
|
134
136
|
} = {
|
|
135
137
|
portRange: '',
|
|
136
138
|
workspacePath: '',
|
|
137
139
|
connectedPorts: [],
|
|
138
|
-
lastStatus: '初始化中...'
|
|
140
|
+
lastStatus: '初始化中...',
|
|
141
|
+
mismatchCount: 0,
|
|
142
|
+
activePort: null
|
|
139
143
|
};
|
|
140
144
|
|
|
141
145
|
constructor(
|
|
@@ -220,7 +224,7 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
220
224
|
|
|
221
225
|
/**
|
|
222
226
|
* 轮询检查是否有新的反馈请求
|
|
223
|
-
*
|
|
227
|
+
* 优化:如果已有活跃端口,只轮询该端口;否则扫描所有端口
|
|
224
228
|
*/
|
|
225
229
|
private async _pollForFeedbackRequest() {
|
|
226
230
|
try {
|
|
@@ -228,7 +232,8 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
228
232
|
const workspacePaths = getWorkspacePaths();
|
|
229
233
|
this._debugInfo.workspacePath = workspacePaths.length > 0 ? workspacePaths[0] : '(无工作区)';
|
|
230
234
|
|
|
231
|
-
//
|
|
235
|
+
// 始终扫描所有端口,确保能检测到新 Server
|
|
236
|
+
// 不再使用活跃端口优化,因为它会导致错过新 Server 的请求
|
|
232
237
|
const ports = [];
|
|
233
238
|
for (let i = 0; i < this._portScanRange; i++) {
|
|
234
239
|
ports.push(this._basePort + i);
|
|
@@ -237,42 +242,74 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
237
242
|
// 并行检查所有端口
|
|
238
243
|
const results = await Promise.all(ports.map(port => this._checkPortForRequest(port)));
|
|
239
244
|
|
|
240
|
-
//
|
|
245
|
+
// 更新已连接的端口列表和不匹配数量
|
|
241
246
|
this._debugInfo.connectedPorts = results.filter(r => r.connected).map(r => r.port);
|
|
247
|
+
this._debugInfo.mismatchCount = results.filter(r => r.mismatch).length;
|
|
242
248
|
|
|
243
|
-
//
|
|
249
|
+
// 找出同一工作区中 startTime 最大的 Server
|
|
250
|
+
const currentWorkspace = getWorkspacePaths()[0] || '';
|
|
251
|
+
const normalize = (p: string) => p.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
252
|
+
const normalizedCurrentWorkspace = normalize(currentWorkspace);
|
|
253
|
+
|
|
254
|
+
let maxStartTime = 0;
|
|
255
|
+
for (const r of results) {
|
|
256
|
+
if (r.connected && r.startTime) {
|
|
257
|
+
// 检查是否属于当前工作区(ownerWorkspace 匹配或未设置)
|
|
258
|
+
const serverOwner = r.ownerWorkspace ? normalize(r.ownerWorkspace) : '';
|
|
259
|
+
const isMyServer = !serverOwner || serverOwner === normalizedCurrentWorkspace;
|
|
260
|
+
if (isMyServer && r.startTime > maxStartTime) {
|
|
261
|
+
maxStartTime = r.startTime;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
this._latestServerStartTime = maxStartTime;
|
|
266
|
+
|
|
267
|
+
// 收集所有有效请求
|
|
268
|
+
// 按请求的 timestamp 和 Server 的 startTime 排序,优先显示最新的
|
|
244
269
|
const validRequests = results
|
|
245
270
|
.filter(r => r.request && !this._seenRequestIds.has(r.request.id))
|
|
246
|
-
.sort((a, b) =>
|
|
271
|
+
.sort((a, b) => {
|
|
272
|
+
// 首先按请求的 timestamp 排序(新的优先)
|
|
273
|
+
const timestampDiff = b.request!.timestamp - a.request!.timestamp;
|
|
274
|
+
if (timestampDiff !== 0) {
|
|
275
|
+
return timestampDiff;
|
|
276
|
+
}
|
|
277
|
+
// timestamp 相同时,按 Server 的 startTime 排序(新的优先)
|
|
278
|
+
return (b.startTime || 0) - (a.startTime || 0);
|
|
279
|
+
});
|
|
247
280
|
|
|
248
281
|
// 处理最新的请求
|
|
249
282
|
if (validRequests.length > 0) {
|
|
250
283
|
const newest = validRequests[0];
|
|
251
284
|
this._activePort = newest.port;
|
|
285
|
+
this._debugInfo.activePort = newest.port;
|
|
252
286
|
this._debugInfo.lastStatus = `找到请求 (端口 ${newest.port})`;
|
|
253
|
-
this._debugInfo.mismatchInfo = undefined;
|
|
254
287
|
this._handleNewRequest(newest.request!, newest.port);
|
|
255
288
|
this._updateDebugInfo();
|
|
256
289
|
return;
|
|
257
290
|
}
|
|
258
291
|
|
|
292
|
+
// 没有新的有效请求时,检查是否有当前正在处理的请求
|
|
293
|
+
if (this._currentRequest && this._activePort) {
|
|
294
|
+
// 保持当前活跃端口
|
|
295
|
+
this._debugInfo.activePort = this._activePort;
|
|
296
|
+
this._debugInfo.lastStatus = `监听端口 ${this._activePort}`;
|
|
297
|
+
this._updateDebugInfo();
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// 确实没有任何请求,重置活跃端口
|
|
302
|
+
this._debugInfo.activePort = null;
|
|
303
|
+
|
|
259
304
|
// 更新调试状态
|
|
260
305
|
if (this._debugInfo.connectedPorts.length === 0) {
|
|
261
306
|
this._debugInfo.lastStatus = '未找到 MCP Server';
|
|
307
|
+
} else if (this._debugInfo.mismatchCount > 0) {
|
|
308
|
+
this._debugInfo.lastStatus = `连接 ${this._debugInfo.connectedPorts.length} 个端口,${this._debugInfo.mismatchCount} 个路径不匹配`;
|
|
262
309
|
} else {
|
|
263
|
-
this._debugInfo.lastStatus =
|
|
310
|
+
this._debugInfo.lastStatus = `连接 ${this._debugInfo.connectedPorts.length} 个端口,无匹配请求`;
|
|
264
311
|
}
|
|
265
312
|
this._updateDebugInfo();
|
|
266
|
-
|
|
267
|
-
// 检查活跃端口的请求状态(可能已被处理或超时)
|
|
268
|
-
if (this._activePort && this._currentRequest) {
|
|
269
|
-
const activeResult = results.find(r => r.port === this._activePort);
|
|
270
|
-
if (activeResult && activeResult.connected && !activeResult.request) {
|
|
271
|
-
// 请求已被处理或超时
|
|
272
|
-
this._currentRequest = null;
|
|
273
|
-
this._showWaitingState();
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
313
|
} catch (error) {
|
|
277
314
|
this._debugInfo.lastStatus = `轮询错误: ${error}`;
|
|
278
315
|
this._updateDebugInfo();
|
|
@@ -286,29 +323,46 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
286
323
|
connected: boolean;
|
|
287
324
|
request: FeedbackRequest | null;
|
|
288
325
|
port: number;
|
|
326
|
+
mismatch?: boolean; // 是否有请求但路径不匹配
|
|
327
|
+
ownerWorkspace?: string | null; // Server 的所属工作区
|
|
328
|
+
startTime?: number; // Server 的启动时间
|
|
289
329
|
}> {
|
|
290
330
|
try {
|
|
291
|
-
|
|
292
|
-
const
|
|
331
|
+
// 带上工作区路径和已知的最新 startTime
|
|
332
|
+
const workspacePaths = getWorkspacePaths();
|
|
333
|
+
const workspacePath = workspacePaths.length > 0 ? workspacePaths[0] : '';
|
|
334
|
+
const url = `http://127.0.0.1:${port}/api/feedback/current?workspace=${encodeURIComponent(workspacePath)}&latestStartTime=${this._latestServerStartTime}`;
|
|
335
|
+
const response = await this._httpGet(url);
|
|
336
|
+
const parsed = JSON.parse(response);
|
|
337
|
+
|
|
338
|
+
// 兼容新旧两种响应格式
|
|
339
|
+
// 新格式: { request, ownerWorkspace, startTime }
|
|
340
|
+
// 旧格式: FeedbackRequest | null
|
|
341
|
+
let request: FeedbackRequest | null;
|
|
342
|
+
let ownerWorkspace: string | null = null;
|
|
343
|
+
let startTime: number = 0;
|
|
344
|
+
|
|
345
|
+
if (parsed && typeof parsed === 'object' && 'startTime' in parsed) {
|
|
346
|
+
// 新格式
|
|
347
|
+
request = parsed.request;
|
|
348
|
+
ownerWorkspace = parsed.ownerWorkspace;
|
|
349
|
+
startTime = parsed.startTime;
|
|
350
|
+
} else {
|
|
351
|
+
// 旧格式(兼容 npm 上的旧版本)
|
|
352
|
+
request = parsed as FeedbackRequest | null;
|
|
353
|
+
}
|
|
293
354
|
|
|
294
355
|
// 检查请求是否属于当前工作区
|
|
295
356
|
if (request) {
|
|
296
|
-
const workspacePaths = getWorkspacePaths();
|
|
297
357
|
const isMatch = isPathInWorkspace(request.projectDir);
|
|
298
358
|
|
|
299
359
|
if (!isMatch) {
|
|
300
|
-
//
|
|
301
|
-
|
|
302
|
-
requestPath: request.projectDir,
|
|
303
|
-
workspacePath: workspacePaths.length > 0 ? workspacePaths[0] : '(无工作区)'
|
|
304
|
-
};
|
|
305
|
-
this._debugInfo.lastStatus = `路径不匹配 (端口 ${port})`;
|
|
306
|
-
// 请求不属于当前工作区,忽略
|
|
307
|
-
return { connected: true, request: null, port };
|
|
360
|
+
// 请求不属于当前工作区,返回特殊标记
|
|
361
|
+
return { connected: true, request: null, port, mismatch: true, ownerWorkspace, startTime };
|
|
308
362
|
}
|
|
309
363
|
}
|
|
310
364
|
|
|
311
|
-
return { connected: true, request, port };
|
|
365
|
+
return { connected: true, request, port, ownerWorkspace, startTime };
|
|
312
366
|
} catch {
|
|
313
367
|
return { connected: false, request: null, port };
|
|
314
368
|
}
|
|
@@ -732,6 +786,7 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
732
786
|
gap: 6px;
|
|
733
787
|
font-size: 11px;
|
|
734
788
|
padding: 6px 10px;
|
|
789
|
+
position: relative;
|
|
735
790
|
background: var(--vscode-textBlockQuote-background);
|
|
736
791
|
border-radius: 4px;
|
|
737
792
|
margin-bottom: 12px;
|
|
@@ -761,10 +816,9 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
761
816
|
|
|
762
817
|
.debug-tooltip {
|
|
763
818
|
display: none;
|
|
764
|
-
position:
|
|
765
|
-
top:
|
|
766
|
-
right:
|
|
767
|
-
margin-top: 4px;
|
|
819
|
+
position: fixed;
|
|
820
|
+
top: 50px;
|
|
821
|
+
right: 10px;
|
|
768
822
|
padding: 8px 10px;
|
|
769
823
|
background: var(--vscode-editorWidget-background);
|
|
770
824
|
border: 1px solid var(--vscode-editorWidget-border);
|
|
@@ -772,8 +826,8 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
772
826
|
font-size: 11px;
|
|
773
827
|
white-space: pre-wrap;
|
|
774
828
|
z-index: 1000;
|
|
775
|
-
min-width:
|
|
776
|
-
max-width:
|
|
829
|
+
min-width: 180px;
|
|
830
|
+
max-width: 280px;
|
|
777
831
|
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
|
778
832
|
}
|
|
779
833
|
|
|
@@ -1262,13 +1316,9 @@ class FeedbackViewProvider implements vscode.WebviewViewProvider {
|
|
|
1262
1316
|
debugText += '━━━━━━━━━━━━\\n';
|
|
1263
1317
|
debugText += '扫描端口: ' + debug.portRange + '\\n';
|
|
1264
1318
|
debugText += '工作区: ' + debug.workspacePath + '\\n';
|
|
1319
|
+
debugText += '当前端口: ' + (debug.activePort || '-') + '\\n';
|
|
1265
1320
|
debugText += '已连接: ' + (debug.connectedPorts.length > 0 ? debug.connectedPorts.join(', ') : '无') + '\\n';
|
|
1266
1321
|
debugText += '状态: ' + debug.lastStatus;
|
|
1267
|
-
if (debug.mismatchInfo) {
|
|
1268
|
-
debugText += '\\n\\n⚠️ 路径不匹配\\n';
|
|
1269
|
-
debugText += '请求: ' + debug.mismatchInfo.requestPath + '\\n';
|
|
1270
|
-
debugText += '工作区: ' + debug.mismatchInfo.workspacePath;
|
|
1271
|
-
}
|
|
1272
1322
|
debugTooltip.textContent = debugText;
|
|
1273
1323
|
break;
|
|
1274
1324
|
|
package/src/mcp-server.ts
CHANGED
|
@@ -75,6 +75,13 @@ class McpFeedbackServer {
|
|
|
75
75
|
// 当前反馈请求
|
|
76
76
|
private currentRequest: FeedbackRequest | null = null;
|
|
77
77
|
|
|
78
|
+
// 所属工作区(只在 AI 调用 feedback 时设置)
|
|
79
|
+
// 只有来自同一工作区的轮询才会更新活动时间
|
|
80
|
+
private ownerWorkspace: string | null = null;
|
|
81
|
+
|
|
82
|
+
// Server 启动时间(用于区分同一项目的新旧 Server)
|
|
83
|
+
private readonly startTime: number = Date.now();
|
|
84
|
+
|
|
78
85
|
// 最后活动时间(用于自动退出)
|
|
79
86
|
private lastActivityTime: number = Date.now();
|
|
80
87
|
// 自动退出检查定时器
|
|
@@ -166,13 +173,24 @@ class McpFeedbackServer {
|
|
|
166
173
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
167
174
|
const { name, arguments: args } = request.params;
|
|
168
175
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
+
try {
|
|
177
|
+
switch (name) {
|
|
178
|
+
case 'interactive_feedback':
|
|
179
|
+
return await this.handleInteractiveFeedback(args);
|
|
180
|
+
case 'get_system_info':
|
|
181
|
+
return this.handleGetSystemInfo();
|
|
182
|
+
default:
|
|
183
|
+
return {
|
|
184
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
185
|
+
isError: true,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
} catch (error) {
|
|
189
|
+
debugLog(`Error in tool ${name}: ${error}`);
|
|
190
|
+
return {
|
|
191
|
+
content: [{ type: 'text', text: `Tool error: ${error}` }],
|
|
192
|
+
isError: true,
|
|
193
|
+
};
|
|
176
194
|
}
|
|
177
195
|
});
|
|
178
196
|
}
|
|
@@ -192,6 +210,14 @@ class McpFeedbackServer {
|
|
|
192
210
|
|
|
193
211
|
const requestId = this.generateRequestId();
|
|
194
212
|
|
|
213
|
+
// AI 调用 feedback 时设置 ownerWorkspace(这是唯一正确的时机)
|
|
214
|
+
const normalize = (p: string) => p.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
215
|
+
this.ownerWorkspace = normalize(projectDir);
|
|
216
|
+
debugLog(`Owner workspace set to: ${this.ownerWorkspace}`);
|
|
217
|
+
|
|
218
|
+
// AI 调用 feedback 时更新活动时间
|
|
219
|
+
this.updateActivity();
|
|
220
|
+
|
|
195
221
|
// 创建反馈请求
|
|
196
222
|
this.currentRequest = {
|
|
197
223
|
id: requestId,
|
|
@@ -444,29 +470,60 @@ class McpFeedbackServer {
|
|
|
444
470
|
private startHttpServer(): Promise<void> {
|
|
445
471
|
return new Promise((resolve, reject) => {
|
|
446
472
|
this.httpServer = http.createServer((req, res) => {
|
|
447
|
-
//
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
473
|
+
// 包裹整个请求处理逻辑,防止异常导致进程崩溃
|
|
474
|
+
try {
|
|
475
|
+
// 注意:活动时间的更新已移到具体的请求处理中
|
|
476
|
+
// 只有来自匹配工作区的请求才会更新活动时间
|
|
477
|
+
|
|
478
|
+
// 设置 CORS 头
|
|
479
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
480
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
481
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
482
|
+
|
|
483
|
+
if (req.method === 'OPTIONS') {
|
|
484
|
+
res.writeHead(200);
|
|
485
|
+
res.end();
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
// 获取当前反馈请求
|
|
490
|
+
if (req.method === 'GET' && req.url?.startsWith('/api/feedback/current')) {
|
|
491
|
+
// 解析 URL 参数
|
|
492
|
+
const urlObj = new URL(req.url, `http://127.0.0.1:${this.port}`);
|
|
493
|
+
const workspaceParam = urlObj.searchParams.get('workspace') || '';
|
|
494
|
+
const latestStartTimeParam = urlObj.searchParams.get('latestStartTime');
|
|
495
|
+
const latestStartTime = latestStartTimeParam ? parseInt(latestStartTimeParam, 10) : 0;
|
|
496
|
+
|
|
497
|
+
const normalize = (p: string) => p.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
498
|
+
const normalizedWorkspace = normalize(workspaceParam);
|
|
499
|
+
|
|
500
|
+
// 检查是否应该更新活动时间
|
|
501
|
+
// 条件 1:工作区匹配(或未设置 ownerWorkspace)
|
|
502
|
+
// 条件 2:是最新的 Server(startTime >= latestStartTime)
|
|
503
|
+
// 条件 3:latestStartTime > 0(插件已完成首轮扫描)
|
|
504
|
+
const isWorkspaceMatch = !this.ownerWorkspace || normalizedWorkspace === this.ownerWorkspace;
|
|
505
|
+
const isLatestServer = latestStartTime > 0 && this.startTime >= latestStartTime;
|
|
506
|
+
|
|
507
|
+
if (isWorkspaceMatch && isLatestServer) {
|
|
508
|
+
this.updateActivity();
|
|
509
|
+
}
|
|
510
|
+
// 不满足条件时不更新活动时间,旧的 Server 会在 2 分钟后自动退出
|
|
511
|
+
|
|
463
512
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
464
|
-
|
|
513
|
+
// 返回当前请求、ownerWorkspace 和 startTime
|
|
514
|
+
res.end(JSON.stringify({
|
|
515
|
+
request: this.currentRequest || null,
|
|
516
|
+
ownerWorkspace: this.ownerWorkspace,
|
|
517
|
+
startTime: this.startTime,
|
|
518
|
+
}));
|
|
465
519
|
return;
|
|
466
520
|
}
|
|
467
521
|
|
|
468
522
|
// 提交反馈
|
|
469
523
|
if (req.method === 'POST' && req.url === '/api/feedback/submit') {
|
|
524
|
+
// 提交反馈一定是来自正确的工作区,更新活动时间
|
|
525
|
+
this.updateActivity();
|
|
526
|
+
|
|
470
527
|
let body = '';
|
|
471
528
|
req.on('data', chunk => {
|
|
472
529
|
body += chunk.toString();
|
|
@@ -526,8 +583,17 @@ class McpFeedbackServer {
|
|
|
526
583
|
return;
|
|
527
584
|
}
|
|
528
585
|
|
|
529
|
-
|
|
530
|
-
|
|
586
|
+
res.writeHead(404);
|
|
587
|
+
res.end('Not Found');
|
|
588
|
+
} catch (error) {
|
|
589
|
+
debugLog(`HTTP request error: ${error}`);
|
|
590
|
+
try {
|
|
591
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
592
|
+
res.end(JSON.stringify({ error: 'Internal server error' }));
|
|
593
|
+
} catch {
|
|
594
|
+
// 响应可能已经发送,忽略
|
|
595
|
+
}
|
|
596
|
+
}
|
|
531
597
|
});
|
|
532
598
|
|
|
533
599
|
this.httpServer.on('error', async (err: NodeJS.ErrnoException) => {
|
|
@@ -558,10 +624,25 @@ class McpFeedbackServer {
|
|
|
558
624
|
|
|
559
625
|
/**
|
|
560
626
|
* 启动无活动自动退出检查
|
|
627
|
+
*
|
|
628
|
+
* 退出条件:
|
|
629
|
+
* 1. 没有 currentRequest(即没有请求在等待用户反馈)
|
|
630
|
+
* 2. 超过 2 分钟没有来自对应工作区的轮询
|
|
631
|
+
*
|
|
632
|
+
* 这样:
|
|
633
|
+
* - 窗口打开时:插件轮询会更新活动时间,不会退出
|
|
634
|
+
* - 等待反馈时:有 currentRequest,不会退出
|
|
635
|
+
* - 窗口关闭后:没有轮询,2 分钟后退出
|
|
561
636
|
*/
|
|
562
637
|
private startInactivityCheck(): void {
|
|
563
638
|
// 每分钟检查一次
|
|
564
639
|
this.inactivityCheckInterval = setInterval(() => {
|
|
640
|
+
// 如果有请求正在等待用户反馈,绝对不退出
|
|
641
|
+
if (this.currentRequest) {
|
|
642
|
+
debugLog('Request pending, skipping inactivity check');
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
|
|
565
646
|
const inactiveTime = Date.now() - this.lastActivityTime;
|
|
566
647
|
if (inactiveTime > this.INACTIVITY_TIMEOUT) {
|
|
567
648
|
debugLog(`No activity for ${Math.round(inactiveTime / 1000)}s, auto-exiting...`);
|
|
@@ -646,10 +727,16 @@ async function main() {
|
|
|
646
727
|
process.exit(0);
|
|
647
728
|
});
|
|
648
729
|
|
|
730
|
+
// 捕获未处理的异常,记录日志但不退出进程
|
|
649
731
|
process.on('uncaughtException', (error) => {
|
|
650
|
-
debugLog(`Uncaught exception: ${error}`);
|
|
651
|
-
|
|
652
|
-
|
|
732
|
+
debugLog(`Uncaught exception (continuing): ${error}`);
|
|
733
|
+
// 不退出进程,让 MCP 连接保持
|
|
734
|
+
});
|
|
735
|
+
|
|
736
|
+
// 捕获未处理的 Promise 拒绝
|
|
737
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
738
|
+
debugLog(`Unhandled rejection (continuing): ${reason}`);
|
|
739
|
+
// 不退出进程,让 MCP 连接保持
|
|
653
740
|
});
|
|
654
741
|
|
|
655
742
|
await server.start();
|