ace-tool 0.1.0 → 0.1.1
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 +223 -0
- package/dist/index/manager.d.ts.map +1 -1
- package/dist/index/manager.js +49 -28
- package/dist/index/manager.js.map +1 -1
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/mcpLogger.d.ts +27 -0
- package/dist/mcpLogger.d.ts.map +1 -0
- package/dist/mcpLogger.js +76 -0
- package/dist/mcpLogger.js.map +1 -0
- package/dist/tools/searchContext.js +5 -6
- package/dist/tools/searchContext.js.map +1 -1
- package/dist/utils/projectDetector.d.ts.map +1 -1
- package/dist/utils/projectDetector.js +1 -8
- package/dist/utils/projectDetector.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# ace-tool
|
|
2
|
+
|
|
3
|
+
[English](#english) | [中文](#中文)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## English
|
|
8
|
+
|
|
9
|
+
MCP server for codebase indexing and semantic search.
|
|
10
|
+
|
|
11
|
+
### Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g ace-tool
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Or use directly with npx:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx ace-tool --base-url <URL> --token <TOKEN>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Configuration
|
|
24
|
+
|
|
25
|
+
#### MCP Settings
|
|
26
|
+
|
|
27
|
+
Add to your MCP configuration (e.g., Claude Desktop `claude_desktop_config.json`):
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"mcpServers": {
|
|
32
|
+
"ace-tool": {
|
|
33
|
+
"command": "npx",
|
|
34
|
+
"args": [
|
|
35
|
+
"ace-tool",
|
|
36
|
+
"--base-url", "YOUR_BASE_URL",
|
|
37
|
+
"--token", "YOUR_TOKEN"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### Command Line Arguments
|
|
45
|
+
|
|
46
|
+
| Argument | Required | Description |
|
|
47
|
+
|----------|----------|-------------|
|
|
48
|
+
| `--base-url` | Yes | API base URL for the indexing service |
|
|
49
|
+
| `--token` | Yes | Authentication token |
|
|
50
|
+
| `--enable-log` | No | Enable logging to `.ace-tool/ace-tool.log` in project directory |
|
|
51
|
+
|
|
52
|
+
### Tools
|
|
53
|
+
|
|
54
|
+
#### search_context
|
|
55
|
+
|
|
56
|
+
Search for relevant code context based on a natural language query.
|
|
57
|
+
|
|
58
|
+
**Parameters:**
|
|
59
|
+
|
|
60
|
+
- `project_root_path` (required): Absolute path to the project root directory
|
|
61
|
+
- `query` (required): Natural language description of the code you're looking for
|
|
62
|
+
|
|
63
|
+
**Example queries:**
|
|
64
|
+
|
|
65
|
+
- "Where is the function that handles user authentication?"
|
|
66
|
+
- "Find the initialization flow of message queue consumers during startup"
|
|
67
|
+
- "How is the database connected to the application?"
|
|
68
|
+
|
|
69
|
+
### Project Data
|
|
70
|
+
|
|
71
|
+
ace-tool stores index data in a `.ace-tool` directory within each project:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
your-project/
|
|
75
|
+
├── .ace-tool/
|
|
76
|
+
│ ├── index.json # Index metadata
|
|
77
|
+
│ └── ace-tool.log # Logs (if --enable-log is set)
|
|
78
|
+
├── src/
|
|
79
|
+
└── ...
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The `.ace-tool` directory is automatically added to `.gitignore`.
|
|
83
|
+
|
|
84
|
+
### Supported File Types
|
|
85
|
+
|
|
86
|
+
- **Programming languages**: `.py`, `.js`, `.ts`, `.jsx`, `.tsx`, `.java`, `.go`, `.rs`, `.cpp`, `.c`, `.h`, `.hpp`, `.cs`, `.rb`, `.php`, `.swift`, `.kt`, `.scala`, `.clj`
|
|
87
|
+
- **Config/Data**: `.md`, `.txt`, `.json`, `.yaml`, `.yml`, `.toml`, `.xml`, `.ini`, `.conf`
|
|
88
|
+
- **Web**: `.html`, `.css`, `.scss`, `.sass`, `.less`, `.vue`, `.svelte`
|
|
89
|
+
- **Scripts**: `.sql`, `.sh`, `.bash`, `.ps1`, `.bat`
|
|
90
|
+
|
|
91
|
+
### Error Handling
|
|
92
|
+
|
|
93
|
+
ace-tool provides friendly error messages for common issues:
|
|
94
|
+
|
|
95
|
+
| Error Type | Description |
|
|
96
|
+
|------------|-------------|
|
|
97
|
+
| Token Invalid (401) | Token has expired or is invalid. Update `ACE_TOKEN`. |
|
|
98
|
+
| Access Denied (403) | Token may have been disabled. Contact service provider. |
|
|
99
|
+
| Connection Refused | Cannot connect to server. Check network or service URL. |
|
|
100
|
+
| Connection Timeout | Request timed out. Check network status. |
|
|
101
|
+
| DNS Resolution Failed | Cannot resolve server address. Check `ACE_BASE_URL`. |
|
|
102
|
+
|
|
103
|
+
### MCP Logging
|
|
104
|
+
|
|
105
|
+
ace-tool supports real-time logging via MCP protocol. Logs are automatically pushed to MCP clients that support the logging capability.
|
|
106
|
+
|
|
107
|
+
Log levels: `debug`, `info`, `warning`, `error`
|
|
108
|
+
|
|
109
|
+
To also save logs to a local file, use the `--enable-log` argument.
|
|
110
|
+
|
|
111
|
+
### License
|
|
112
|
+
|
|
113
|
+
MIT
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 中文
|
|
118
|
+
|
|
119
|
+
用于代码库索引和语义搜索的 MCP 服务器。
|
|
120
|
+
|
|
121
|
+
### 安装
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npm install -g ace-tool
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
或直接使用 npx:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npx ace-tool --base-url <URL> --token <TOKEN>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 配置
|
|
134
|
+
|
|
135
|
+
#### MCP 设置
|
|
136
|
+
|
|
137
|
+
添加到你的 MCP 配置文件(例如 Claude Desktop 的 `claude_desktop_config.json`):
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"mcpServers": {
|
|
142
|
+
"ace-tool": {
|
|
143
|
+
"command": "npx",
|
|
144
|
+
"args": [
|
|
145
|
+
"ace-tool",
|
|
146
|
+
"--base-url", "YOUR_BASE_URL",
|
|
147
|
+
"--token", "YOUR_TOKEN"
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
#### 命令行参数
|
|
155
|
+
|
|
156
|
+
| 参数 | 必填 | 描述 |
|
|
157
|
+
|------|------|------|
|
|
158
|
+
| `--base-url` | 是 | 索引服务的 API 基础 URL |
|
|
159
|
+
| `--token` | 是 | 认证令牌 |
|
|
160
|
+
| `--enable-log` | 否 | 启用日志,保存到项目目录的 `.ace-tool/ace-tool.log` |
|
|
161
|
+
|
|
162
|
+
### 工具
|
|
163
|
+
|
|
164
|
+
#### search_context
|
|
165
|
+
|
|
166
|
+
基于自然语言查询搜索相关代码上下文。
|
|
167
|
+
|
|
168
|
+
**参数:**
|
|
169
|
+
|
|
170
|
+
- `project_root_path`(必填):项目根目录的绝对路径
|
|
171
|
+
- `query`(必填):描述你要查找的代码的自然语言
|
|
172
|
+
|
|
173
|
+
**查询示例:**
|
|
174
|
+
|
|
175
|
+
- "处理用户认证的函数在哪里?"
|
|
176
|
+
- "查找启动时消息队列消费者的初始化流程"
|
|
177
|
+
- "数据库是如何连接到应用程序的?"
|
|
178
|
+
|
|
179
|
+
### 项目数据
|
|
180
|
+
|
|
181
|
+
ace-tool 在每个项目的 `.ace-tool` 目录中存储索引数据:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
your-project/
|
|
185
|
+
├── .ace-tool/
|
|
186
|
+
│ ├── index.json # 索引元数据
|
|
187
|
+
│ └── ace-tool.log # 日志(如果设置了 --enable-log)
|
|
188
|
+
├── src/
|
|
189
|
+
└── ...
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`.ace-tool` 目录会自动添加到 `.gitignore`。
|
|
193
|
+
|
|
194
|
+
### 支持的文件类型
|
|
195
|
+
|
|
196
|
+
- **编程语言**:`.py`, `.js`, `.ts`, `.jsx`, `.tsx`, `.java`, `.go`, `.rs`, `.cpp`, `.c`, `.h`, `.hpp`, `.cs`, `.rb`, `.php`, `.swift`, `.kt`, `.scala`, `.clj`
|
|
197
|
+
- **配置/数据**:`.md`, `.txt`, `.json`, `.yaml`, `.yml`, `.toml`, `.xml`, `.ini`, `.conf`
|
|
198
|
+
- **Web**:`.html`, `.css`, `.scss`, `.sass`, `.less`, `.vue`, `.svelte`
|
|
199
|
+
- **脚本**:`.sql`, `.sh`, `.bash`, `.ps1`, `.bat`
|
|
200
|
+
|
|
201
|
+
### 错误处理
|
|
202
|
+
|
|
203
|
+
ace-tool 为常见问题提供友好的错误提示:
|
|
204
|
+
|
|
205
|
+
| 错误类型 | 描述 |
|
|
206
|
+
| -------- | ---- |
|
|
207
|
+
| Token 无效 (401) | Token 已过期或无效,请更新 `ACE_TOKEN` |
|
|
208
|
+
| 访问被拒绝 (403) | Token 可能已被禁用,请联系服务提供商 |
|
|
209
|
+
| 连接被拒绝 | 无法连接到服务器,请检查网络或服务地址 |
|
|
210
|
+
| 连接超时 | 请求超时,请检查网络状况 |
|
|
211
|
+
| DNS 解析失败 | 无法解析服务器地址,请检查 `ACE_BASE_URL` |
|
|
212
|
+
|
|
213
|
+
### MCP 日志
|
|
214
|
+
|
|
215
|
+
ace-tool 支持通过 MCP 协议实时推送日志。日志会自动推送到支持日志功能的 MCP 客户端。
|
|
216
|
+
|
|
217
|
+
日志级别:`debug`, `info`, `warning`, `error`
|
|
218
|
+
|
|
219
|
+
如需同时保存日志到本地文件,请使用 `--enable-log` 参数。
|
|
220
|
+
|
|
221
|
+
### 许可证
|
|
222
|
+
|
|
223
|
+
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/index/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;GAEG;AACH,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/index/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;GAEG;AACH,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAoDD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAgB;gBAGhC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,SAAS,EAAE,MAAM,EACjB,eAAe,GAAE,MAAY,EAC7B,eAAe,GAAE,MAAM,EAAO;IAmBhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6CxB;;OAEG;YACW,YAAY;IAgD1B;;OAEG;YACW,YAAY;IAuD1B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IAuG1C;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyDpD"}
|
package/dist/index/manager.js
CHANGED
|
@@ -7,7 +7,7 @@ import path from 'path';
|
|
|
7
7
|
import axios from 'axios';
|
|
8
8
|
import iconv from 'iconv-lite';
|
|
9
9
|
import ignore from 'ignore';
|
|
10
|
-
import {
|
|
10
|
+
import { sendMcpLog } from '../mcpLogger.js';
|
|
11
11
|
import { getIndexFilePath } from '../utils/projectDetector.js';
|
|
12
12
|
/**
|
|
13
13
|
* 使用多种编码尝试读取文件
|
|
@@ -30,7 +30,7 @@ async function readFileWithEncoding(filePath) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
if (encoding !== 'utf-8') {
|
|
33
|
-
|
|
33
|
+
// 非 UTF-8 编码,静默处理
|
|
34
34
|
}
|
|
35
35
|
return content;
|
|
36
36
|
}
|
|
@@ -39,7 +39,6 @@ async function readFileWithEncoding(filePath) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
const content = iconv.decode(buffer, 'utf-8');
|
|
42
|
-
logger.warning(`Read ${filePath} with utf-8 (some characters may be lost)`);
|
|
43
42
|
return content;
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
@@ -85,7 +84,6 @@ export class IndexManager {
|
|
|
85
84
|
Authorization: `Bearer ${this.token}`,
|
|
86
85
|
},
|
|
87
86
|
});
|
|
88
|
-
logger.info(`IndexManager initialized for project: ${projectRoot}`);
|
|
89
87
|
}
|
|
90
88
|
/**
|
|
91
89
|
* 加载 .gitignore 文件
|
|
@@ -99,11 +97,9 @@ export class IndexManager {
|
|
|
99
97
|
const content = fs.readFileSync(gitignorePath, 'utf-8');
|
|
100
98
|
const patterns = content.split('\n');
|
|
101
99
|
const ig = ignore().add(patterns);
|
|
102
|
-
logger.debug(`Loaded .gitignore with ${patterns.length} patterns`);
|
|
103
100
|
return ig;
|
|
104
101
|
}
|
|
105
102
|
catch (error) {
|
|
106
|
-
logger.warning(`Failed to load .gitignore: ${error}`);
|
|
107
103
|
return null;
|
|
108
104
|
}
|
|
109
105
|
}
|
|
@@ -158,7 +154,7 @@ export class IndexManager {
|
|
|
158
154
|
return JSON.parse(content);
|
|
159
155
|
}
|
|
160
156
|
catch (error) {
|
|
161
|
-
|
|
157
|
+
sendMcpLog('error', `❌ 加载索引失败: ${error}`);
|
|
162
158
|
return [];
|
|
163
159
|
}
|
|
164
160
|
}
|
|
@@ -171,7 +167,7 @@ export class IndexManager {
|
|
|
171
167
|
fs.writeFileSync(this.indexFilePath, content, 'utf-8');
|
|
172
168
|
}
|
|
173
169
|
catch (error) {
|
|
174
|
-
|
|
170
|
+
sendMcpLog('error', `❌ 保存索引失败: ${error}`);
|
|
175
171
|
throw error;
|
|
176
172
|
}
|
|
177
173
|
}
|
|
@@ -215,7 +211,6 @@ export class IndexManager {
|
|
|
215
211
|
const chunkPath = `${filePath}#chunk${chunkIdx + 1}of${numChunks}`;
|
|
216
212
|
blobs.push({ path: chunkPath, content: chunkContent });
|
|
217
213
|
}
|
|
218
|
-
logger.info(`Split file ${filePath} (${totalLines} lines) into ${numChunks} chunks`);
|
|
219
214
|
return blobs;
|
|
220
215
|
}
|
|
221
216
|
/**
|
|
@@ -256,13 +251,12 @@ export class IndexManager {
|
|
|
256
251
|
blobs.push(...fileBlobs);
|
|
257
252
|
}
|
|
258
253
|
catch (error) {
|
|
259
|
-
|
|
254
|
+
// 静默处理读取失败
|
|
260
255
|
}
|
|
261
256
|
}
|
|
262
257
|
}
|
|
263
258
|
};
|
|
264
259
|
await walkDir(this.projectRoot);
|
|
265
|
-
logger.info(`Collected ${blobs.length} blobs (excluded ${excludedCount} items)`);
|
|
266
260
|
return blobs;
|
|
267
261
|
}
|
|
268
262
|
/**
|
|
@@ -277,16 +271,37 @@ export class IndexManager {
|
|
|
277
271
|
catch (error) {
|
|
278
272
|
lastError = error instanceof Error ? error : new Error(String(error));
|
|
279
273
|
const axiosError = error;
|
|
274
|
+
// Token 失效检测 - 不重试,直接抛出友好错误
|
|
275
|
+
if (axiosError.response?.status === 401) {
|
|
276
|
+
sendMcpLog('error', '🔑 Token 已失效或无效,请检查配置');
|
|
277
|
+
throw new Error('Token 已失效或无效,请更新 ACE_TOKEN 环境变量');
|
|
278
|
+
}
|
|
279
|
+
// 权限被拒绝 - 可能被官方制裁
|
|
280
|
+
if (axiosError.response?.status === 403) {
|
|
281
|
+
sendMcpLog('error', '🚫 访问被拒绝,Token 可能已被禁用');
|
|
282
|
+
throw new Error('访问被拒绝,Token 可能已被官方禁用,请联系服务提供商');
|
|
283
|
+
}
|
|
280
284
|
const isRetryable = axiosError.code === 'ECONNREFUSED' ||
|
|
281
285
|
axiosError.code === 'ETIMEDOUT' ||
|
|
282
286
|
axiosError.code === 'ENOTFOUND' ||
|
|
283
287
|
(axiosError.response && axiosError.response.status >= 500);
|
|
284
288
|
if (!isRetryable || attempt === maxRetries - 1) {
|
|
285
|
-
|
|
286
|
-
|
|
289
|
+
// 提供更友好的网络错误提示
|
|
290
|
+
let friendlyMessage = lastError.message;
|
|
291
|
+
if (axiosError.code === 'ECONNREFUSED') {
|
|
292
|
+
friendlyMessage = '无法连接到服务器,请检查网络或服务地址';
|
|
293
|
+
}
|
|
294
|
+
else if (axiosError.code === 'ETIMEDOUT') {
|
|
295
|
+
friendlyMessage = '连接超时,请检查网络状况';
|
|
296
|
+
}
|
|
297
|
+
else if (axiosError.code === 'ENOTFOUND') {
|
|
298
|
+
friendlyMessage = '无法解析服务器地址,请检查 ACE_BASE_URL 配置';
|
|
299
|
+
}
|
|
300
|
+
sendMcpLog('error', `❌ 请求失败 (${attempt + 1}次尝试): ${friendlyMessage}`);
|
|
301
|
+
throw new Error(friendlyMessage);
|
|
287
302
|
}
|
|
288
303
|
const waitTime = retryDelay * Math.pow(2, attempt);
|
|
289
|
-
|
|
304
|
+
sendMcpLog('warning', `⚠️ 请求失败 (${attempt + 1}/${maxRetries}),${waitTime}ms 后重试...`);
|
|
290
305
|
await sleep(waitTime);
|
|
291
306
|
}
|
|
292
307
|
}
|
|
@@ -296,12 +311,15 @@ export class IndexManager {
|
|
|
296
311
|
* 对项目进行索引(支持增量索引)
|
|
297
312
|
*/
|
|
298
313
|
async indexProject() {
|
|
299
|
-
|
|
314
|
+
sendMcpLog('info', `📂 开始索引项目: ${this.projectRoot}`);
|
|
300
315
|
try {
|
|
316
|
+
sendMcpLog('info', '🔍 正在扫描文件...');
|
|
301
317
|
const blobs = await this.collectFiles();
|
|
302
318
|
if (blobs.length === 0) {
|
|
319
|
+
sendMcpLog('warning', '⚠️ 未找到可索引的文本文件');
|
|
303
320
|
return { status: 'error', message: 'No text files found in project' };
|
|
304
321
|
}
|
|
322
|
+
sendMcpLog('info', `📄 扫描完成,共发现 ${blobs.length} 个文件块`);
|
|
305
323
|
// 加载已存在的索引数据
|
|
306
324
|
const existingBlobNames = new Set(this.loadIndex());
|
|
307
325
|
// 为所有收集的 blob 计算哈希值
|
|
@@ -315,18 +333,18 @@ export class IndexManager {
|
|
|
315
333
|
const existingHashes = new Set([...allBlobHashes].filter((hash) => existingBlobNames.has(hash)));
|
|
316
334
|
const newHashes = [...allBlobHashes].filter((hash) => !existingBlobNames.has(hash));
|
|
317
335
|
const blobsToUpload = newHashes.map((hash) => blobHashMap.get(hash));
|
|
318
|
-
|
|
336
|
+
sendMcpLog('info', `📊 增量索引: 已有 ${existingHashes.size} 个, 新增 ${newHashes.length} 个`);
|
|
319
337
|
// 只上传新的 blob
|
|
320
338
|
const uploadedBlobNames = [];
|
|
321
339
|
const failedBatches = [];
|
|
322
340
|
if (blobsToUpload.length > 0) {
|
|
323
341
|
const totalBatches = Math.ceil(blobsToUpload.length / this.batchSize);
|
|
324
|
-
|
|
342
|
+
sendMcpLog('info', `⬆️ 开始上传 ${blobsToUpload.length} 个新文件块,共 ${totalBatches} 批`);
|
|
325
343
|
for (let batchIdx = 0; batchIdx < totalBatches; batchIdx++) {
|
|
326
344
|
const startIdx = batchIdx * this.batchSize;
|
|
327
345
|
const endIdx = Math.min(startIdx + this.batchSize, blobsToUpload.length);
|
|
328
346
|
const batchBlobs = blobsToUpload.slice(startIdx, endIdx);
|
|
329
|
-
|
|
347
|
+
sendMcpLog('info', `📤 上传批次 ${batchIdx + 1}/${totalBatches}...`);
|
|
330
348
|
try {
|
|
331
349
|
const result = await this.retryRequest(async () => {
|
|
332
350
|
const response = await this.httpClient.post(`${this.baseUrl}/batch-upload`, {
|
|
@@ -336,31 +354,31 @@ export class IndexManager {
|
|
|
336
354
|
});
|
|
337
355
|
const batchBlobNames = result.blob_names || [];
|
|
338
356
|
if (batchBlobNames.length === 0) {
|
|
339
|
-
|
|
357
|
+
sendMcpLog('warning', `⚠️ 批次 ${batchIdx + 1} 返回空结果`);
|
|
340
358
|
failedBatches.push(batchIdx + 1);
|
|
341
359
|
continue;
|
|
342
360
|
}
|
|
343
361
|
uploadedBlobNames.push(...batchBlobNames);
|
|
344
|
-
logger.info(`Batch ${batchIdx + 1} uploaded successfully`);
|
|
345
362
|
}
|
|
346
363
|
catch (error) {
|
|
347
364
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
348
|
-
|
|
365
|
+
sendMcpLog('error', `❌ 批次 ${batchIdx + 1} 上传失败: ${errorMessage}`);
|
|
349
366
|
failedBatches.push(batchIdx + 1);
|
|
350
367
|
}
|
|
351
368
|
}
|
|
352
369
|
if (uploadedBlobNames.length === 0 && blobsToUpload.length > 0 && existingHashes.size === 0) {
|
|
370
|
+
sendMcpLog('error', '❌ 所有批次上传失败');
|
|
353
371
|
return { status: 'error', message: 'All batches failed on first indexing' };
|
|
354
372
|
}
|
|
355
373
|
}
|
|
356
374
|
else {
|
|
357
|
-
|
|
375
|
+
sendMcpLog('info', '✅ 无需上传新文件,使用缓存索引');
|
|
358
376
|
}
|
|
359
377
|
// 合并已存在和新上传的 blob 名称
|
|
360
378
|
const allBlobNames = [...existingHashes, ...uploadedBlobNames];
|
|
361
379
|
this.saveIndex(allBlobNames);
|
|
362
380
|
const message = `Indexed ${allBlobNames.length} blobs (existing: ${existingHashes.size}, new: ${uploadedBlobNames.length})`;
|
|
363
|
-
|
|
381
|
+
sendMcpLog('info', `✅ 索引完成: 共 ${allBlobNames.length} 个文件块`);
|
|
364
382
|
return {
|
|
365
383
|
status: failedBatches.length === 0 ? 'success' : 'partial_success',
|
|
366
384
|
message,
|
|
@@ -373,7 +391,7 @@ export class IndexManager {
|
|
|
373
391
|
}
|
|
374
392
|
catch (error) {
|
|
375
393
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
376
|
-
|
|
394
|
+
sendMcpLog('error', `❌ 索引项目失败: ${errorMessage}`);
|
|
377
395
|
return { status: 'error', message: errorMessage };
|
|
378
396
|
}
|
|
379
397
|
}
|
|
@@ -381,20 +399,22 @@ export class IndexManager {
|
|
|
381
399
|
* 搜索代码上下文(自动增量索引)
|
|
382
400
|
*/
|
|
383
401
|
async searchContext(query) {
|
|
384
|
-
|
|
402
|
+
sendMcpLog('info', `🔎 开始搜索: ${query}`);
|
|
385
403
|
try {
|
|
386
404
|
// 自动索引
|
|
387
405
|
const indexResult = await this.indexProject();
|
|
388
406
|
if (indexResult.status === 'error') {
|
|
407
|
+
sendMcpLog('error', `❌ 索引失败: ${indexResult.message}`);
|
|
389
408
|
return `Error: Failed to index project. ${indexResult.message}`;
|
|
390
409
|
}
|
|
391
410
|
// 加载索引
|
|
392
411
|
const blobNames = this.loadIndex();
|
|
393
412
|
if (blobNames.length === 0) {
|
|
413
|
+
sendMcpLog('error', '❌ 索引为空');
|
|
394
414
|
return 'Error: No blobs found after indexing.';
|
|
395
415
|
}
|
|
396
416
|
// 执行搜索
|
|
397
|
-
|
|
417
|
+
sendMcpLog('info', `🔍 正在搜索 ${blobNames.length} 个文件块...`);
|
|
398
418
|
const payload = {
|
|
399
419
|
information_request: query,
|
|
400
420
|
blobs: {
|
|
@@ -413,14 +433,15 @@ export class IndexManager {
|
|
|
413
433
|
}, 3, 2000);
|
|
414
434
|
const formattedRetrieval = result.formatted_retrieval || '';
|
|
415
435
|
if (!formattedRetrieval) {
|
|
436
|
+
sendMcpLog('info', '📭 未找到相关代码');
|
|
416
437
|
return 'No relevant code context found for your query.';
|
|
417
438
|
}
|
|
418
|
-
|
|
439
|
+
sendMcpLog('info', '✅ 搜索完成');
|
|
419
440
|
return formattedRetrieval;
|
|
420
441
|
}
|
|
421
442
|
catch (error) {
|
|
422
443
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
423
|
-
|
|
444
|
+
sendMcpLog('error', `❌ 搜索失败: ${errorMessage}`);
|
|
424
445
|
return `Error: ${errorMessage}`;
|
|
425
446
|
}
|
|
426
447
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/index/manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/index/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
7
7
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
8
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
9
9
|
import { initConfig } from './config.js';
|
|
10
|
-
import {
|
|
10
|
+
import { initMcpLogger, sendMcpLog } from './mcpLogger.js';
|
|
11
11
|
import { SEARCH_CONTEXT_TOOL } from './prompts/searchContext.js';
|
|
12
12
|
import { searchContextTool } from './tools/searchContext.js';
|
|
13
13
|
/**
|
|
@@ -19,8 +19,11 @@ const server = new Server({
|
|
|
19
19
|
}, {
|
|
20
20
|
capabilities: {
|
|
21
21
|
tools: {},
|
|
22
|
+
logging: {},
|
|
22
23
|
},
|
|
23
24
|
});
|
|
25
|
+
// 初始化 MCP 日志模块
|
|
26
|
+
initMcpLogger(server);
|
|
24
27
|
/**
|
|
25
28
|
* 列出可用工具
|
|
26
29
|
*/
|
|
@@ -39,11 +42,9 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
39
42
|
*/
|
|
40
43
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
41
44
|
const { name, arguments: args } = request.params;
|
|
42
|
-
logger.info(`Tool called: ${name}, args: ${JSON.stringify(args)}`);
|
|
43
45
|
try {
|
|
44
46
|
if (name === 'search_context') {
|
|
45
47
|
const result = await searchContextTool(args);
|
|
46
|
-
logger.info(`Tool result: ${result?.text?.substring(0, 100)}...`);
|
|
47
48
|
return {
|
|
48
49
|
content: [
|
|
49
50
|
{
|
|
@@ -64,7 +65,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
64
65
|
}
|
|
65
66
|
catch (error) {
|
|
66
67
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
67
|
-
|
|
68
|
+
sendMcpLog('error', `❌ 工具执行错误: ${errorMessage}`);
|
|
68
69
|
return {
|
|
69
70
|
content: [
|
|
70
71
|
{
|
|
@@ -81,16 +82,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
81
82
|
async function main() {
|
|
82
83
|
try {
|
|
83
84
|
// 初始化配置
|
|
84
|
-
|
|
85
|
-
logger.info('Starting ace-tool MCP server...');
|
|
86
|
-
logger.info(`API: ${config.baseUrl}`);
|
|
85
|
+
initConfig();
|
|
87
86
|
// 启动 MCP 服务器
|
|
88
87
|
const transport = new StdioServerTransport();
|
|
89
88
|
await server.connect(transport);
|
|
90
|
-
logger.info('MCP server connected via stdio');
|
|
91
89
|
}
|
|
92
90
|
catch (error) {
|
|
93
|
-
|
|
91
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
92
|
+
sendMcpLog('error', `❌ 服务器错误: ${errorMessage}`);
|
|
94
93
|
process.exit(1);
|
|
95
94
|
}
|
|
96
95
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 统一日志模块 - 同时支持 MCP 客户端推送和本地文件写入
|
|
3
|
+
*/
|
|
4
|
+
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
5
|
+
type LogLevel = 'debug' | 'info' | 'warning' | 'error';
|
|
6
|
+
/**
|
|
7
|
+
* 初始化 MCP 日志模块
|
|
8
|
+
*/
|
|
9
|
+
export declare function initMcpLogger(server: Server): void;
|
|
10
|
+
/**
|
|
11
|
+
* 启用文件日志
|
|
12
|
+
*/
|
|
13
|
+
export declare function enableFileLog(): void;
|
|
14
|
+
/**
|
|
15
|
+
* 设置项目路径(用于文件日志)
|
|
16
|
+
*/
|
|
17
|
+
export declare function setLogProjectPath(projectRoot: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* 关闭日志流
|
|
20
|
+
*/
|
|
21
|
+
export declare function closeLog(): void;
|
|
22
|
+
/**
|
|
23
|
+
* 发送日志(同时推送到 MCP 客户端和写入文件)
|
|
24
|
+
*/
|
|
25
|
+
export declare function sendMcpLog(level: LogLevel, message: string): void;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=mcpLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpLogger.d.ts","sourceRoot":"","sources":["../src/mcpLogger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAOvD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA0B3D;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAK/B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAkBjE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 统一日志模块 - 同时支持 MCP 客户端推送和本地文件写入
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
let mcpServer = null;
|
|
7
|
+
let fileEnabled = false;
|
|
8
|
+
let logFilePath = null;
|
|
9
|
+
let logStream = null;
|
|
10
|
+
/**
|
|
11
|
+
* 初始化 MCP 日志模块
|
|
12
|
+
*/
|
|
13
|
+
export function initMcpLogger(server) {
|
|
14
|
+
mcpServer = server;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 启用文件日志
|
|
18
|
+
*/
|
|
19
|
+
export function enableFileLog() {
|
|
20
|
+
fileEnabled = true;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 设置项目路径(用于文件日志)
|
|
24
|
+
*/
|
|
25
|
+
export function setLogProjectPath(projectRoot) {
|
|
26
|
+
if (!fileEnabled) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const aceDir = path.join(projectRoot, '.ace-tool');
|
|
30
|
+
// 确保 .ace-tool 目录存在
|
|
31
|
+
if (!fs.existsSync(aceDir)) {
|
|
32
|
+
fs.mkdirSync(aceDir, { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
logFilePath = path.join(aceDir, 'ace-tool.log');
|
|
35
|
+
// 关闭旧的流
|
|
36
|
+
if (logStream) {
|
|
37
|
+
logStream.end();
|
|
38
|
+
}
|
|
39
|
+
// 创建新的写入流(追加模式)
|
|
40
|
+
logStream = fs.createWriteStream(logFilePath, { flags: 'a' });
|
|
41
|
+
// 写入分隔线
|
|
42
|
+
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19);
|
|
43
|
+
const separator = `\n${'='.repeat(60)}\n${timestamp} | Session started\n${'='.repeat(60)}\n`;
|
|
44
|
+
logStream.write(separator);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 关闭日志流
|
|
48
|
+
*/
|
|
49
|
+
export function closeLog() {
|
|
50
|
+
if (logStream) {
|
|
51
|
+
logStream.end();
|
|
52
|
+
logStream = null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 发送日志(同时推送到 MCP 客户端和写入文件)
|
|
57
|
+
*/
|
|
58
|
+
export function sendMcpLog(level, message) {
|
|
59
|
+
// 1. 推送到 MCP 客户端
|
|
60
|
+
if (mcpServer) {
|
|
61
|
+
mcpServer.sendLoggingMessage({
|
|
62
|
+
level,
|
|
63
|
+
data: message,
|
|
64
|
+
}).catch(() => {
|
|
65
|
+
// 忽略发送失败(可能客户端未连接)
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// 2. 写入本地文件(如果启用)
|
|
69
|
+
if (fileEnabled && logStream) {
|
|
70
|
+
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19);
|
|
71
|
+
const levelStr = level.toUpperCase().padEnd(7);
|
|
72
|
+
const logLine = `${timestamp} | ${levelStr} | ${message}\n`;
|
|
73
|
+
logStream.write(logLine);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=mcpLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpLogger.js","sourceRoot":"","sources":["../src/mcpLogger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAKxB,IAAI,SAAS,GAAkB,IAAI,CAAC;AACpC,IAAI,WAAW,GAAY,KAAK,CAAC;AACjC,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,SAAS,GAAG,MAAM,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEnD,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEhD,QAAQ;IACR,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAE9D,QAAQ;IACR,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,uBAAuB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7F,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,GAAG,EAAE,CAAC;QAChB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,OAAe;IACzD,iBAAiB;IACjB,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,kBAAkB,CAAC;YAC3B,KAAK;YACL,IAAI,EAAE,OAAO;SACd,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,mBAAmB;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,GAAG,SAAS,MAAM,QAAQ,MAAM,OAAO,IAAI,CAAC;QAC5D,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import { getConfig } from '../config.js';
|
|
6
6
|
import { IndexManager } from '../index/manager.js';
|
|
7
|
-
import {
|
|
7
|
+
import { enableFileLog, setLogProjectPath, sendMcpLog } from '../mcpLogger.js';
|
|
8
8
|
/**
|
|
9
9
|
* search_context 工具实现
|
|
10
10
|
*/
|
|
@@ -30,19 +30,18 @@ export async function searchContextTool(args) {
|
|
|
30
30
|
return { type: 'text', text: `Error: Project path is not a directory: ${projectRoot}` };
|
|
31
31
|
}
|
|
32
32
|
const config = getConfig();
|
|
33
|
-
//
|
|
33
|
+
// 根据配置启用文件日志
|
|
34
34
|
if (config.enableLog) {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
enableFileLog();
|
|
36
|
+
setLogProjectPath(projectRoot);
|
|
37
37
|
}
|
|
38
|
-
logger.info(`Tool invoked: search_context for project ${projectRoot}`);
|
|
39
38
|
const indexManager = new IndexManager(projectRoot, config.baseUrl, config.token, config.textExtensions, config.batchSize, config.maxLinesPerBlob, config.excludePatterns);
|
|
40
39
|
const result = await indexManager.searchContext(query);
|
|
41
40
|
return { type: 'text', text: result };
|
|
42
41
|
}
|
|
43
42
|
catch (error) {
|
|
44
43
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
45
|
-
|
|
44
|
+
sendMcpLog('error', `❌ 工具执行错误: ${errorMessage}`);
|
|
46
45
|
return { type: 'text', text: `Error: ${errorMessage}` };
|
|
47
46
|
}
|
|
48
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchContext.js","sourceRoot":"","sources":["../../src/tools/searchContext.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"searchContext.js","sourceRoot":"","sources":["../../src/tools/searchContext.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAuB;IAC7D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC;QACxE,CAAC;QAED,iBAAiB;QACjB,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAExD,WAAW;QACX,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAuC,WAAW,EAAE,EAAE,CAAC;QACtF,CAAC;QAED,UAAU;QACV,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2CAA2C,WAAW,EAAE,EAAE,CAAC;QAC1F,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,aAAa;QACb,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,aAAa,EAAE,CAAC;YAChB,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,WAAW,EACX,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,eAAe,CACvB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,UAAU,CAAC,OAAO,EAAE,aAAa,YAAY,EAAE,CAAC,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,YAAY,EAAE,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectDetector.d.ts","sourceRoot":"","sources":["../../src/utils/projectDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"projectDetector.d.ts","sourceRoot":"","sources":["../../src/utils/projectDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA+B1C;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAWrD;AA8BD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import path from 'path';
|
|
7
|
-
import { logger } from '../logger.js';
|
|
8
7
|
/**
|
|
9
8
|
* 检测项目根目录
|
|
10
9
|
* 优先级:.ace-tool/ > .git/
|
|
@@ -14,19 +13,16 @@ import { logger } from '../logger.js';
|
|
|
14
13
|
*/
|
|
15
14
|
export function detectProjectRoot() {
|
|
16
15
|
const cwd = process.cwd();
|
|
17
|
-
logger.debug(`Detecting project root from: ${cwd}`);
|
|
18
16
|
let currentDir = cwd;
|
|
19
17
|
while (true) {
|
|
20
18
|
// 优先检查 .ace-tool 目录
|
|
21
19
|
const acePath = path.join(currentDir, '.ace-tool');
|
|
22
20
|
if (fs.existsSync(acePath) && fs.statSync(acePath).isDirectory()) {
|
|
23
|
-
logger.info(`Found project root (via .ace-tool): ${currentDir}`);
|
|
24
21
|
return currentDir;
|
|
25
22
|
}
|
|
26
23
|
// 其次检查 .git 目录
|
|
27
24
|
const gitPath = path.join(currentDir, '.git');
|
|
28
25
|
if (fs.existsSync(gitPath)) {
|
|
29
|
-
logger.info(`Found project root (via .git): ${currentDir}`);
|
|
30
26
|
return currentDir;
|
|
31
27
|
}
|
|
32
28
|
// 向上一级目录
|
|
@@ -38,7 +34,6 @@ export function detectProjectRoot() {
|
|
|
38
34
|
currentDir = parentDir;
|
|
39
35
|
}
|
|
40
36
|
// 如果找不到 .ace-tool 或 .git,使用当前工作目录
|
|
41
|
-
logger.warning(`No .ace-tool or .git found, using current directory: ${cwd}`);
|
|
42
37
|
return cwd;
|
|
43
38
|
}
|
|
44
39
|
/**
|
|
@@ -52,7 +47,6 @@ export function getAceDir(projectRoot) {
|
|
|
52
47
|
const aceDir = path.join(projectRoot, '.ace-tool');
|
|
53
48
|
if (!fs.existsSync(aceDir)) {
|
|
54
49
|
fs.mkdirSync(aceDir, { recursive: true });
|
|
55
|
-
logger.info(`Created .ace-tool directory: ${aceDir}`);
|
|
56
50
|
// 尝试将 .ace-tool 添加到 .gitignore
|
|
57
51
|
addToGitignore(projectRoot);
|
|
58
52
|
}
|
|
@@ -77,10 +71,9 @@ function addToGitignore(projectRoot) {
|
|
|
77
71
|
? `${content}.ace-tool/\n`
|
|
78
72
|
: `${content}\n.ace-tool/\n`;
|
|
79
73
|
fs.writeFileSync(gitignorePath, newContent, 'utf-8');
|
|
80
|
-
logger.info('Added .ace-tool/ to .gitignore');
|
|
81
74
|
}
|
|
82
75
|
catch (error) {
|
|
83
|
-
|
|
76
|
+
// 静默处理错误
|
|
84
77
|
}
|
|
85
78
|
}
|
|
86
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectDetector.js","sourceRoot":"","sources":["../../src/utils/projectDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"projectDetector.js","sourceRoot":"","sources":["../../src/utils/projectDetector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ace-tool",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "MCP server for codebase indexing and semantic search",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"repository": {
|
|
32
32
|
"type": "git",
|
|
33
|
-
"url": "https://github.com/
|
|
33
|
+
"url": "https://github.com/eastxiaodong/ace-tool.git"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=18.0.0"
|