genifyai 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 +84 -104
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/parsers/solidity.d.ts.map +1 -1
- package/dist/parsers/solidity.js +7 -1
- package/dist/parsers/solidity.js.map +1 -1
- package/dist/tools/registerAlias.js +1 -1
- package/dist/tools/registerAlias.js.map +1 -1
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -1,156 +1,136 @@
|
|
|
1
|
-
#
|
|
1
|
+
# GenifyAI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**让 AI 真正"看懂"你的代码结构**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
传统的代码搜索只是文本匹配——GenifyAI 不同。它用 AST 解析理解代码结构,精准定位函数、类、接口的定义位置,让 AI 助手能像资深开发者一样快速找到代码。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- `read_range`:按行号范围读取文件片段(1-based,包含 endLine)。
|
|
9
|
-
- `search_fuzzy`:自然语言/关键词/别名的多路召回(别名命中、定义召回、文件名召回、文本命中),返回候选与打分原因。
|
|
10
|
-
- `register_alias`:把自然语言称呼映射到代码位置,便于长期稳定命中。
|
|
7
|
+
## 为什么需要它?
|
|
11
8
|
|
|
12
|
-
|
|
9
|
+
当你问 AI "handleSubmit 函数在哪",普通搜索可能返回几十个包含这个词的地方。GenifyAI 直接告诉你:**定义在 `src/components/Form.tsx` 第 42 行**。
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
| HTML | `.html` `.htm` | element (#id), component (web components) |
|
|
19
|
-
| CSS/Less/Sass | `.css` `.less` `.sass` `.scss` | selector (.class/#id), variable (--custom-prop), keyframes |
|
|
11
|
+
- 🎯 **精准定位** - AST 级别解析,区分定义和引用
|
|
12
|
+
- ⚡ **极速响应** - ripgrep 粗筛 + Tree-sitter 精筛,毫秒级返回
|
|
13
|
+
- 🗣️ **自然语言** - 支持模糊搜索和别名,用你习惯的方式找代码
|
|
14
|
+
- 🌐 **多语言** - TypeScript/JavaScript、Solidity、HTML、CSS 等(持续扩展中)
|
|
20
15
|
|
|
21
|
-
|
|
16
|
+
## 快速开始
|
|
22
17
|
|
|
23
|
-
|
|
18
|
+
### 1. 配置 MCP 客户端
|
|
24
19
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"mcpServers": {
|
|
23
|
+
"genifyai": {
|
|
24
|
+
"command": "npx",
|
|
25
|
+
"args": ["-y", "genifyai"]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
> 💡 大多数客户端会自动将工作目录设为当前打开的项目。如需指定,可添加 `"cwd": "/your/project/path"`。
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
- 包管理器:`pnpm`
|
|
33
|
+
### 2. 重启客户端,开始使用
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
现在可以直接对 AI 说:
|
|
36
36
|
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
```
|
|
38
|
+
"找到 UserContext 的定义"
|
|
39
|
+
"handleLogin 函数在哪个文件?"
|
|
40
|
+
"搜索所有的 interface 定义"
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
### 3. 让 AI 主动使用(推荐)
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
在项目根目录的 `CLAUDE.md` 中添加:
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
```markdown
|
|
48
|
+
## 代码搜索策略
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
搜索代码定义时,优先使用 genifyai MCP 工具:
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"command": "node",
|
|
56
|
-
"args": ["<绝对路径>/Genify/dist/index.js"],
|
|
57
|
-
"env": {}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
52
|
+
- **search_symbol** - 查找函数、类、接口、类型等定义位置,比 Grep 更精准
|
|
53
|
+
- **search_fuzzy** - 自然语言/关键词搜索,支持模糊匹配
|
|
54
|
+
- **read_range** - 按行号范围读取代码,配合 search_symbol 使用
|
|
55
|
+
- **register_alias** - 为代码位置注册别名,提高后续搜索命中率
|
|
62
56
|
|
|
63
|
-
|
|
57
|
+
使用顺序:search_symbol → read_range → 其他工具
|
|
64
58
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"genify": {
|
|
69
|
-
"command": "npx",
|
|
70
|
-
"args": ["-y", "genify"],
|
|
71
|
-
"env": {}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
59
|
+
避免直接使用 Glob/Grep 搜索符号定义,genifyai 基于 AST 解析,能区分定义和引用。
|
|
60
|
+
|
|
61
|
+
当用户用自然语言描述代码且与实际命名差异较大时,主动用 register_alias 注册别名。
|
|
75
62
|
```
|
|
76
63
|
|
|
77
|
-
|
|
64
|
+
这会让 AI 在需要定位代码时自动调用 GenifyAI,而不是反复 Read 多个文件。
|
|
65
|
+
|
|
66
|
+
---
|
|
78
67
|
|
|
79
|
-
|
|
68
|
+
## 四个核心工具
|
|
80
69
|
|
|
81
|
-
|
|
70
|
+
### `search_symbol` - 符号搜索
|
|
82
71
|
|
|
83
|
-
|
|
72
|
+
按定义搜索函数、类、接口、类型等,返回精确位置。
|
|
84
73
|
|
|
85
74
|
```json
|
|
86
|
-
{ "query": "
|
|
75
|
+
{ "query": "useState", "type": "function", "scope": "src" }
|
|
87
76
|
```
|
|
88
77
|
|
|
89
|
-
|
|
90
|
-
- `type`:可选,过滤符号类型
|
|
91
|
-
- `scope`:可选,搜索范围(相对路径)
|
|
92
|
-
- `limit`:可选,返回数量(默认 20)
|
|
93
|
-
- `followExports`:可选,是否跟随导出链路(默认 true)
|
|
78
|
+
支持的符号类型:`function` `class` `interface` `type` `enum` `const` `let` `var` `function_component` `method` `getter` `setter`
|
|
94
79
|
|
|
95
|
-
|
|
80
|
+
### `read_range` - 读取代码
|
|
81
|
+
|
|
82
|
+
按行号范围读取文件片段,配合 search_symbol 查看具体实现。
|
|
96
83
|
|
|
97
84
|
```json
|
|
98
|
-
[
|
|
99
|
-
{
|
|
100
|
-
"name": "Header",
|
|
101
|
-
"kind": "function_component",
|
|
102
|
-
"file": "src/components/Header.tsx",
|
|
103
|
-
"location": { "startLine": 10, "endLine": 85, "startCol": 0, "endCol": 1 },
|
|
104
|
-
"range": "[10:85]",
|
|
105
|
-
"signature": "export const Header = (...) =>",
|
|
106
|
-
"language": "tsx"
|
|
107
|
-
}
|
|
108
|
-
]
|
|
85
|
+
{ "filePath": "src/utils/auth.ts", "range": "[10:50]" }
|
|
109
86
|
```
|
|
110
87
|
|
|
111
|
-
### `
|
|
112
|
-
|
|
113
|
-
按行号范围读取片段(`"[start:end]"`,1-based,包含 end)。
|
|
88
|
+
### `search_fuzzy` - 模糊搜索
|
|
114
89
|
|
|
115
|
-
|
|
90
|
+
自然语言搜索,多路召回(别名、定义、文件名、文本),返回候选和匹配原因。
|
|
116
91
|
|
|
117
92
|
```json
|
|
118
|
-
{ "
|
|
93
|
+
{ "query": "用户登录", "scope": "src" }
|
|
119
94
|
```
|
|
120
95
|
|
|
121
|
-
### `register_alias`
|
|
96
|
+
### `register_alias` - 注册别名
|
|
122
97
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
输入:
|
|
98
|
+
为代码位置绑定自定义名称,长期稳定命中。
|
|
126
99
|
|
|
127
100
|
```json
|
|
128
|
-
{ "term": "
|
|
101
|
+
{ "term": "翻转动画", "target": "src/components/Card.tsx#flipAnimation" }
|
|
129
102
|
```
|
|
130
103
|
|
|
131
|
-
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 支持的语言
|
|
132
107
|
|
|
133
|
-
|
|
108
|
+
| 语言 | 扩展名 | 符号类型 |
|
|
109
|
+
|------|--------|----------|
|
|
110
|
+
| TypeScript/JavaScript | `.ts` `.tsx` `.js` `.jsx` | function, class, interface, type, enum, const, let, var, function_component, method, getter, setter |
|
|
111
|
+
| Solidity | `.sol` | contract, library, interface, struct, event, modifier, error, function, enum |
|
|
112
|
+
| HTML | `.html` `.htm` | element (#id), component |
|
|
113
|
+
| CSS/Less/Sass | `.css` `.less` `.sass` `.scss` | selector, variable, keyframes |
|
|
134
114
|
|
|
135
|
-
|
|
115
|
+
自动忽略 `node_modules`、`dist`、`build`、`.git` 等目录,自动读取 `.gitignore` 规则。
|
|
136
116
|
|
|
137
|
-
|
|
117
|
+
---
|
|
138
118
|
|
|
139
|
-
|
|
140
|
-
{ "query": "反转卡片", "scope": "src", "limit": 20 }
|
|
141
|
-
```
|
|
119
|
+
## 特性亮点
|
|
142
120
|
|
|
143
|
-
|
|
121
|
+
**导出链路跟随** - 自动解析 `export { } from`、`export * from`、`export default`,找到真正的原始定义位置
|
|
144
122
|
|
|
145
|
-
-
|
|
146
|
-
- `range`:建议读取范围
|
|
147
|
-
- `symbol/kind`:可选,命中定义时给出
|
|
148
|
-
- `score`:0~1
|
|
149
|
-
- `reasons`:召回/排序原因(如 `alias_hit`、`definition_match`、`filename_match`、`text_hit`)
|
|
123
|
+
**智能缓存** - 基于文件修改时间的 AST 缓存,避免重复解析
|
|
150
124
|
|
|
151
|
-
|
|
125
|
+
**别名持久化** - 别名存储在 `.genifyai/aliases.json`,可提交到仓库共享
|
|
152
126
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 系统要求
|
|
130
|
+
|
|
131
|
+
- Node.js >= 18
|
|
132
|
+
- 支持 MCP 协议的客户端(Claude Desktop、Cursor 等)
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { registerAlias, registerAliasSchema } from './tools/registerAlias.js';
|
|
|
8
8
|
import { searchFuzzy, searchFuzzySchema } from './tools/searchFuzzy.js';
|
|
9
9
|
import { setWorkspaceRoot } from './utils/pathResolver.js';
|
|
10
10
|
const server = new Server({
|
|
11
|
-
name: '
|
|
11
|
+
name: 'genifyai',
|
|
12
12
|
version: '0.1.0',
|
|
13
13
|
}, {
|
|
14
14
|
capabilities: {
|
|
@@ -203,7 +203,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
203
203
|
}
|
|
204
204
|
catch (err) {
|
|
205
205
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
206
|
-
console.error(`[
|
|
206
|
+
console.error(`[genifyai] Error in tool ${name}:`, errorMessage);
|
|
207
207
|
return {
|
|
208
208
|
content: [
|
|
209
209
|
{
|
|
@@ -220,10 +220,10 @@ async function main() {
|
|
|
220
220
|
setWorkspaceRoot(process.cwd());
|
|
221
221
|
const transport = new StdioServerTransport();
|
|
222
222
|
await server.connect(transport);
|
|
223
|
-
console.error('[
|
|
223
|
+
console.error('[genifyai] Server started');
|
|
224
224
|
}
|
|
225
225
|
main().catch((err) => {
|
|
226
|
-
console.error('[
|
|
226
|
+
console.error('[genifyai] Fatal error:', err);
|
|
227
227
|
process.exit(1);
|
|
228
228
|
});
|
|
229
229
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidity.d.ts","sourceRoot":"","sources":["../../src/parsers/solidity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solidity.d.ts","sourceRoot":"","sources":["../../src/parsers/solidity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AA0GlG,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CA4BvD;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,UAAU,GAChB,UAAU,EAAE,CAOd;AAED,eAAO,MAAM,cAAc,EAAE,cAK5B,CAAC"}
|
package/dist/parsers/solidity.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import Parser from 'tree-sitter';
|
|
2
|
-
import
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import path from 'path';
|
|
3
4
|
import { readFileContent, formatRange } from '../utils/fileReader.js';
|
|
4
5
|
import { getCachedResult, setCachedResult } from './cache.js';
|
|
5
6
|
import { registerParser } from './registry.js';
|
|
7
|
+
// tree-sitter-solidity 包缺少 bindings/node/index.js,需要手动加载
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
const nodeGypBuild = require('node-gyp-build');
|
|
10
|
+
const solidityPkgPath = path.dirname(require.resolve('tree-sitter-solidity/package.json'));
|
|
11
|
+
const Solidity = nodeGypBuild(solidityPkgPath);
|
|
6
12
|
const solParser = new Parser();
|
|
7
13
|
solParser.setLanguage(Solidity);
|
|
8
14
|
const NODE_KIND_MAP = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidity.js","sourceRoot":"","sources":["../../src/parsers/solidity.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,QAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"solidity.js","sourceRoot":"","sources":["../../src/parsers/solidity.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import * as fs from 'node:fs';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import { getWorkspaceRoot } from '../utils/pathResolver.js';
|
|
5
|
-
const ALIAS_DIR = '.
|
|
5
|
+
const ALIAS_DIR = '.genifyai';
|
|
6
6
|
const ALIAS_FILE = 'aliases.json';
|
|
7
7
|
export const registerAliasSchema = z.object({
|
|
8
8
|
term: z.string().describe('Alias or nickname (e.g., "反转卡片")'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerAlias.js","sourceRoot":"","sources":["../../src/tools/registerAlias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"registerAlias.js","sourceRoot":"","sources":["../../src/tools/registerAlias.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genifyai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Intelligent coding assistant MCP tool with AST-based code indexing",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -36,10 +36,11 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
38
38
|
"@vscode/ripgrep": "^1.15.0",
|
|
39
|
+
"node-gyp-build": "^4.8.4",
|
|
39
40
|
"tree-sitter": "^0.21.1",
|
|
40
|
-
"tree-sitter-css": "0.
|
|
41
|
-
"tree-sitter-html": "0.
|
|
42
|
-
"tree-sitter-solidity": "1.2.
|
|
41
|
+
"tree-sitter-css": "0.21.1",
|
|
42
|
+
"tree-sitter-html": "0.23.2",
|
|
43
|
+
"tree-sitter-solidity": "1.2.7",
|
|
43
44
|
"tree-sitter-typescript": "^0.23.2",
|
|
44
45
|
"zod": "^3.24.0"
|
|
45
46
|
},
|