cursor-feedback 1.0.0 → 1.0.2

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.
@@ -1,431 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.McpServer = void 0;
37
- const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
38
- const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
39
- const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
40
- const http = __importStar(require("http"));
41
- const os = __importStar(require("os"));
42
- /**
43
- * MCP Server - 独立运行的 MCP 服务
44
- *
45
- * 架构说明:
46
- * 1. MCP Server 通过 stdio 与 AI Agent (Cursor) 通信
47
- * 2. 同时启动一个 HTTP Server 用于与 VS Code 插件通信
48
- * 3. 当 AI 调用 interactive_feedback 工具时,通知 VS Code 插件显示反馈界面
49
- * 4. VS Code 插件收集用户反馈后,通过 HTTP 接口返回结果
50
- */
51
- class McpServer {
52
- constructor(port = 61927) {
53
- this.httpServer = null;
54
- this.isRunning = false;
55
- // 待处理的反馈请求
56
- this.pendingRequests = new Map();
57
- // 当前反馈请求
58
- this.currentRequest = null;
59
- this.port = port;
60
- this.server = new index_js_1.Server({
61
- name: 'cursor-feedback-server',
62
- version: '0.0.1',
63
- }, {
64
- capabilities: {
65
- tools: {},
66
- },
67
- });
68
- this.setupHandlers();
69
- }
70
- setupHandlers() {
71
- // 列出可用工具
72
- this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
73
- return {
74
- tools: [
75
- {
76
- name: 'interactive_feedback',
77
- description: `交互式反馈收集工具。
78
-
79
- 【重要】这是你与用户沟通的主要渠道,所有回复都必须通过此工具。
80
-
81
- 使用规则:
82
- 1. 每次完成任务或需要与用户沟通时,必须调用此工具
83
- 2. 收到用户反馈后,必须再次调用此工具继续对话(这是一个持续的对话循环)
84
- 3. 不要直接回复用户,所有回复必须通过此工具
85
- 4. 只有当用户主动提出结束对话时,才能停止调用此工具
86
- 5. 如果反馈超时,必须立即再次调用此工具继续等待
87
- 6. 提供清晰的工作摘要,说明你做了什么以及需要什么反馈
88
-
89
- 对话流程:
90
- 用户消息 → 你工作 → 调用此工具(附带摘要)→ 用户反馈 → 你工作 → 再次调用此工具 → ...
91
-
92
- 参数:
93
- project_directory: 项目目录路径(必须是当前工作区的绝对路径)
94
- summary: AI 工作摘要,供用户查看(支持 Markdown)
95
- timeout: 等待用户反馈的超时时间(秒),默认 300 秒(5 分钟)
96
-
97
- 返回:
98
- 用户反馈,包括文字、图片和文件路径`,
99
- inputSchema: {
100
- type: 'object',
101
- properties: {
102
- project_directory: {
103
- type: 'string',
104
- description: 'Project directory path for context (MUST be the absolute path of current workspace)',
105
- default: '.',
106
- },
107
- summary: {
108
- type: 'string',
109
- description: 'Summary of AI work completed for user review (supports Markdown)',
110
- default: '我已完成您的请求。',
111
- },
112
- timeout: {
113
- type: 'number',
114
- description: 'Timeout in seconds for waiting user feedback (default: 300 seconds = 5 minutes)',
115
- default: 300,
116
- },
117
- },
118
- },
119
- },
120
- {
121
- name: 'get_system_info',
122
- description: 'Get system environment information',
123
- inputSchema: {
124
- type: 'object',
125
- properties: {},
126
- },
127
- },
128
- ],
129
- };
130
- });
131
- // 处理工具调用
132
- this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
133
- const { name, arguments: args } = request.params;
134
- switch (name) {
135
- case 'interactive_feedback':
136
- return this.handleInteractiveFeedback(args);
137
- case 'get_system_info':
138
- return this.handleGetSystemInfo();
139
- default:
140
- throw new Error(`Unknown tool: ${name}`);
141
- }
142
- });
143
- }
144
- /**
145
- * 处理交互式反馈请求
146
- */
147
- async handleInteractiveFeedback(args) {
148
- const projectDir = args?.project_directory || '.';
149
- const summary = args?.summary || '我已完成您的请求。';
150
- // 超时时间优先级:环境变量 > 工具参数 > 默认值(300秒)
151
- // 这样用户配置的环境变量永远生效,不会被 AI 覆盖
152
- const envTimeout = process.env.MCP_FEEDBACK_TIMEOUT ? parseInt(process.env.MCP_FEEDBACK_TIMEOUT, 10) : null;
153
- const timeout = envTimeout || args?.timeout || 300;
154
- const requestId = this.generateRequestId();
155
- // 创建反馈请求
156
- this.currentRequest = {
157
- id: requestId,
158
- summary,
159
- projectDir,
160
- timeout,
161
- timestamp: Date.now(),
162
- };
163
- console.error(`[MCP] Feedback request created: ${requestId}`);
164
- console.error(`[MCP] Waiting for VS Code extension to collect feedback...`);
165
- try {
166
- // 等待用户反馈
167
- const result = await this.waitForFeedback(requestId, timeout * 1000);
168
- if (!result) {
169
- return {
170
- content: [
171
- {
172
- type: 'text',
173
- text: 'User cancelled the feedback or timeout.',
174
- },
175
- ],
176
- };
177
- }
178
- const contentItems = [];
179
- // 构建反馈文本
180
- let feedbackText = '';
181
- // 添加文字反馈
182
- if (result.interactive_feedback) {
183
- feedbackText += `=== User Feedback ===\n${result.interactive_feedback}`;
184
- }
185
- // 添加附加文件路径
186
- if (result.attachedFiles && result.attachedFiles.length > 0) {
187
- feedbackText += `\n\n=== Attached Files ===\n`;
188
- for (const filePath of result.attachedFiles) {
189
- feedbackText += `${filePath}\n`;
190
- }
191
- feedbackText += `\nPlease read the above files to understand the context.`;
192
- }
193
- if (feedbackText) {
194
- contentItems.push({
195
- type: 'text',
196
- text: feedbackText,
197
- });
198
- }
199
- // 添加图片
200
- if (result.images && result.images.length > 0) {
201
- for (const img of result.images) {
202
- contentItems.push({
203
- type: 'image',
204
- data: img.data,
205
- mimeType: this.getMimeType(img.name),
206
- });
207
- }
208
- }
209
- if (contentItems.length === 0) {
210
- contentItems.push({
211
- type: 'text',
212
- text: 'User did not provide any feedback.',
213
- });
214
- }
215
- return { content: contentItems };
216
- }
217
- catch (error) {
218
- return {
219
- content: [
220
- {
221
- type: 'text',
222
- text: `Error collecting feedback: ${error}`,
223
- },
224
- ],
225
- };
226
- }
227
- finally {
228
- this.currentRequest = null;
229
- }
230
- }
231
- /**
232
- * 等待用户反馈
233
- */
234
- waitForFeedback(requestId, timeoutMs) {
235
- return new Promise((resolve, reject) => {
236
- const timeout = setTimeout(() => {
237
- this.pendingRequests.delete(requestId);
238
- resolve(null);
239
- }, timeoutMs);
240
- this.pendingRequests.set(requestId, { resolve, reject, timeout });
241
- });
242
- }
243
- /**
244
- * 处理获取系统信息请求
245
- */
246
- handleGetSystemInfo() {
247
- const systemInfo = {
248
- platform: process.platform,
249
- nodeVersion: process.version,
250
- arch: process.arch,
251
- hostname: os.hostname(),
252
- interfaceType: 'VS Code Extension',
253
- mcpServerPort: this.port,
254
- };
255
- return {
256
- content: [
257
- {
258
- type: 'text',
259
- text: JSON.stringify(systemInfo, null, 2),
260
- },
261
- ],
262
- };
263
- }
264
- /**
265
- * 根据文件名获取 MIME 类型
266
- */
267
- getMimeType(filename) {
268
- const ext = filename.toLowerCase().split('.').pop();
269
- switch (ext) {
270
- case 'jpg':
271
- case 'jpeg':
272
- return 'image/jpeg';
273
- case 'png':
274
- return 'image/png';
275
- case 'gif':
276
- return 'image/gif';
277
- case 'webp':
278
- return 'image/webp';
279
- default:
280
- return 'image/png';
281
- }
282
- }
283
- /**
284
- * 生成唯一的请求 ID
285
- */
286
- generateRequestId() {
287
- return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
288
- }
289
- /**
290
- * 启动 HTTP 服务器,用于与 VS Code 插件通信
291
- */
292
- startHttpServer() {
293
- return new Promise((resolve, reject) => {
294
- this.httpServer = http.createServer((req, res) => {
295
- // 设置 CORS 头
296
- res.setHeader('Access-Control-Allow-Origin', '*');
297
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
298
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
299
- if (req.method === 'OPTIONS') {
300
- res.writeHead(200);
301
- res.end();
302
- return;
303
- }
304
- // 获取当前反馈请求
305
- if (req.method === 'GET' && req.url === '/api/feedback/current') {
306
- res.writeHead(200, { 'Content-Type': 'application/json' });
307
- res.end(JSON.stringify(this.currentRequest || null));
308
- return;
309
- }
310
- // 提交反馈
311
- if (req.method === 'POST' && req.url === '/api/feedback/submit') {
312
- let body = '';
313
- req.on('data', chunk => {
314
- body += chunk.toString();
315
- });
316
- req.on('end', () => {
317
- try {
318
- const data = JSON.parse(body);
319
- const { requestId, feedback } = data;
320
- const pending = this.pendingRequests.get(requestId);
321
- if (pending) {
322
- clearTimeout(pending.timeout);
323
- pending.resolve(feedback);
324
- this.pendingRequests.delete(requestId);
325
- res.writeHead(200, { 'Content-Type': 'application/json' });
326
- res.end(JSON.stringify({ success: true }));
327
- }
328
- else {
329
- res.writeHead(404, { 'Content-Type': 'application/json' });
330
- res.end(JSON.stringify({ error: 'Request not found' }));
331
- }
332
- }
333
- catch (error) {
334
- res.writeHead(400, { 'Content-Type': 'application/json' });
335
- res.end(JSON.stringify({ error: 'Invalid request body' }));
336
- }
337
- });
338
- return;
339
- }
340
- // 健康检查
341
- if (req.method === 'GET' && req.url === '/api/health') {
342
- res.writeHead(200, { 'Content-Type': 'application/json' });
343
- res.end(JSON.stringify({ status: 'ok', version: '0.0.1' }));
344
- return;
345
- }
346
- res.writeHead(404);
347
- res.end('Not Found');
348
- });
349
- this.httpServer.on('error', (err) => {
350
- if (err.code === 'EADDRINUSE') {
351
- console.error(`[MCP] Port ${this.port} is already in use`);
352
- reject(err);
353
- }
354
- else {
355
- reject(err);
356
- }
357
- });
358
- this.httpServer.listen(this.port, '127.0.0.1', () => {
359
- console.error(`[MCP] HTTP Server listening on http://127.0.0.1:${this.port}`);
360
- resolve();
361
- });
362
- });
363
- }
364
- /**
365
- * 启动服务器
366
- */
367
- async start() {
368
- if (this.isRunning) {
369
- console.error('[MCP] Server is already running');
370
- return;
371
- }
372
- try {
373
- // 启动 HTTP 服务器
374
- await this.startHttpServer();
375
- // 启动 MCP stdio 传输
376
- const transport = new stdio_js_1.StdioServerTransport();
377
- await this.server.connect(transport);
378
- this.isRunning = true;
379
- console.error('[MCP] MCP Server started successfully');
380
- }
381
- catch (error) {
382
- console.error('[MCP] Failed to start server:', error);
383
- throw error;
384
- }
385
- }
386
- /**
387
- * 停止服务器
388
- */
389
- stop() {
390
- if (!this.isRunning) {
391
- return;
392
- }
393
- // 关闭 HTTP 服务器
394
- if (this.httpServer) {
395
- this.httpServer.close();
396
- this.httpServer = null;
397
- }
398
- // 清理待处理的请求
399
- for (const [, pending] of this.pendingRequests) {
400
- clearTimeout(pending.timeout);
401
- pending.resolve(null);
402
- }
403
- this.pendingRequests.clear();
404
- // 关闭 MCP 服务器
405
- this.server.close();
406
- this.isRunning = false;
407
- console.error('[MCP] Server stopped');
408
- }
409
- }
410
- exports.McpServer = McpServer;
411
- /**
412
- * 独立运行入口
413
- */
414
- async function main() {
415
- const port = parseInt(process.env.MCP_PORT || '8766', 10);
416
- const server = new McpServer(port);
417
- process.on('SIGINT', () => {
418
- server.stop();
419
- process.exit(0);
420
- });
421
- process.on('SIGTERM', () => {
422
- server.stop();
423
- process.exit(0);
424
- });
425
- await server.start();
426
- }
427
- // 如果直接运行此文件
428
- if (require.main === module) {
429
- main().catch(console.error);
430
- }
431
- //# sourceMappingURL=McpServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"McpServer.js","sourceRoot":"","sources":["../../src/mcp/McpServer.ts"],"names":[],"mappings":"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"}
@@ -1,138 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.FeedbackPanel = void 0;
37
- const vscode = __importStar(require("vscode"));
38
- /**
39
- * 独立的反馈面板(用于在编辑器区域显示)
40
- */
41
- class FeedbackPanel {
42
- static createOrShow(extensionUri) {
43
- const column = vscode.window.activeTextEditor
44
- ? vscode.window.activeTextEditor.viewColumn
45
- : undefined;
46
- // 如果面板已存在,显示它
47
- if (FeedbackPanel.currentPanel) {
48
- FeedbackPanel.currentPanel._panel.reveal(column);
49
- return;
50
- }
51
- // 创建新面板
52
- const panel = vscode.window.createWebviewPanel(FeedbackPanel.viewType, 'Cursor Feedback', column || vscode.ViewColumn.One, {
53
- enableScripts: true,
54
- localResourceRoots: [extensionUri],
55
- retainContextWhenHidden: true,
56
- });
57
- FeedbackPanel.currentPanel = new FeedbackPanel(panel, extensionUri);
58
- }
59
- constructor(panel, extensionUri) {
60
- this._disposables = [];
61
- this._panel = panel;
62
- this._extensionUri = extensionUri;
63
- // 设置 HTML 内容
64
- this._update();
65
- // 监听面板关闭
66
- this._panel.onDidDispose(() => this.dispose(), null, this._disposables);
67
- // 监听面板状态变化
68
- this._panel.onDidChangeViewState(() => {
69
- if (this._panel.visible) {
70
- this._update();
71
- }
72
- }, null, this._disposables);
73
- // 处理来自 webview 的消息
74
- this._panel.webview.onDidReceiveMessage((message) => {
75
- switch (message.type) {
76
- case 'submitFeedback':
77
- vscode.window.showInformationMessage(`Feedback received: ${message.payload.interactive_feedback}`);
78
- break;
79
- }
80
- }, null, this._disposables);
81
- }
82
- dispose() {
83
- FeedbackPanel.currentPanel = undefined;
84
- this._panel.dispose();
85
- while (this._disposables.length) {
86
- const x = this._disposables.pop();
87
- if (x) {
88
- x.dispose();
89
- }
90
- }
91
- }
92
- _update() {
93
- const webview = this._panel.webview;
94
- this._panel.title = 'Cursor Feedback';
95
- this._panel.webview.html = this._getHtmlForWebview(webview);
96
- }
97
- _getHtmlForWebview(webview) {
98
- return `<!DOCTYPE html>
99
- <html lang="zh-CN">
100
- <head>
101
- <meta charset="UTF-8">
102
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
103
- <title>Cursor Feedback</title>
104
- <style>
105
- body {
106
- font-family: var(--vscode-font-family);
107
- padding: 20px;
108
- color: var(--vscode-foreground);
109
- background-color: var(--vscode-editor-background);
110
- }
111
-
112
- h1 {
113
- color: var(--vscode-foreground);
114
- border-bottom: 1px solid var(--vscode-panel-border);
115
- padding-bottom: 10px;
116
- }
117
-
118
- .info {
119
- background: var(--vscode-textBlockQuote-background);
120
- padding: 15px;
121
- border-radius: 4px;
122
- margin: 20px 0;
123
- }
124
- </style>
125
- </head>
126
- <body>
127
- <h1>Cursor Feedback Panel</h1>
128
- <div class="info">
129
- <p>此面板用于显示独立的反馈界面。</p>
130
- <p>通常情况下,请使用侧边栏中的反馈面板进行交互。</p>
131
- </div>
132
- </body>
133
- </html>`;
134
- }
135
- }
136
- exports.FeedbackPanel = FeedbackPanel;
137
- FeedbackPanel.viewType = 'cursorFeedback';
138
- //# sourceMappingURL=FeedbackPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FeedbackPanel.js","sourceRoot":"","sources":["../../src/webview/FeedbackPanel.ts"],"names":[],"mappings":"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"}