@coreyuan/vector-mind 1.0.0
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 +163 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1222 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# VectorMind MCP(Requirement-Driven)
|
|
2
|
+
|
|
3
|
+
VectorMind 是一个 **“以需求为核心”的 MCP 上下文记忆工具**:把每一次代码修改都绑定到一个明确的需求意图(Intent),让你在和 AI 反复对话、切换会话、隔天继续时,**不再靠 AI 盲猜“为什么改这段代码”**。
|
|
4
|
+
|
|
5
|
+
## 它解决什么问题
|
|
6
|
+
|
|
7
|
+
- **AI 经常丢上下文**:隔一段时间/换个会话,AI 不知道当前在做哪个需求、改动做到哪一步。
|
|
8
|
+
- **改动没有“为什么”**:Git 记录了“改了什么”,但很少记录“为什么这么改/当时的目标是什么”。
|
|
9
|
+
- **代码库定位靠猜**:想找某个类/函数在哪里,AI 容易给出错误路径或过时结论。
|
|
10
|
+
|
|
11
|
+
VectorMind 通过本地文件监听 + SQLite 关系记忆,把“需求 → 改动意图 → 文件/符号索引”串起来,帮助 AI **恢复进度、追溯意图、快速定位代码**。
|
|
12
|
+
|
|
13
|
+
## 关键能力(What you get)
|
|
14
|
+
|
|
15
|
+
- **需求追踪(requirements)**:在写代码前创建/激活一个需求,明确目标与业务背景。
|
|
16
|
+
- **改动意图归档(change_logs)**:每次保存后把“改动意图 + 影响文件”写入数据库,并关联到当前激活需求。
|
|
17
|
+
- **符号索引(symbols)**:实时维护类/函数/类型等符号表,用于快速 query 定位定义位置。
|
|
18
|
+
- **项目总结 & 笔记(memory_items)**:把“项目总结/关键决策/约束/待办”等上下文以结构化条目持久化到本地。
|
|
19
|
+
- **代码片段 & 文档分块索引(memory_items)**:监听文件变更,把代码/文档切成可检索的 chunk 存入本地。
|
|
20
|
+
- **语义检索(embeddings + semantic_search)**:使用本地 embedding 模型把上述内容向量化,支持跨需求/意图/笔记/代码/文档的语义召回。
|
|
21
|
+
- **会话恢复(brain dump)**:新会话开始时一键拉取最近需求与对应的改动意图,AI 直接接着做。
|
|
22
|
+
|
|
23
|
+
## 工作流(强烈推荐)
|
|
24
|
+
|
|
25
|
+
1) **新会话开始**:AI 先调用 `bootstrap_context({ query: 当前目标 })`(或 `get_brain_dump()`)恢复上下文并做一次语义召回
|
|
26
|
+
2) **准备开始写代码前**:AI 调用 `start_requirement(title, background)`
|
|
27
|
+
3) **每次改完并保存后**:AI 调用 `get_pending_changes()` 查看待同步文件,再调用 `sync_change_intent(intent, files)`(可省略 files 让服务端自动关联所有 pending)
|
|
28
|
+
4) **阶段性收口**(重要):AI 在对话里写好总结,然后调用 `upsert_project_summary(summary)`/`add_note(...)` 持久化
|
|
29
|
+
5) **需要找代码定义时**:AI 调用 `query_codebase(query)`(不要靠猜)
|
|
30
|
+
6) **需要按语义找上下文/代码/文档时**:AI 调用 `semantic_search(query, ...)`(不要靠猜)
|
|
31
|
+
|
|
32
|
+
> 本 MCP Server 会在初始化时下发 `instructions`,提示 AI 按以上流程调用工具(避免盲猜)。
|
|
33
|
+
|
|
34
|
+
## MCP Tools
|
|
35
|
+
|
|
36
|
+
### `start_requirement`
|
|
37
|
+
- 入参:`{ title: string, background?: string }`
|
|
38
|
+
- 用途:创建并激活一个需求(后续改动意图会自动关联到最新 `active` 需求)
|
|
39
|
+
|
|
40
|
+
### `sync_change_intent`
|
|
41
|
+
- 入参:`{ intent: string, files?: string[], affected_files?: string[] }`
|
|
42
|
+
- 用途:把“这次改动的意图摘要”写入 `change_logs`,并与当前激活需求关联
|
|
43
|
+
- 说明:如果不传 `files`,服务端会自动把“最近未同步的文件变更(pending)”关联到本次意图;如果没有激活需求,会返回错误并提示先 `start_requirement`
|
|
44
|
+
|
|
45
|
+
### `get_brain_dump`
|
|
46
|
+
- 入参:`{}`
|
|
47
|
+
- 用途:返回最近 5 个需求,以及每个需求最近的改动意图(用于会话恢复)
|
|
48
|
+
|
|
49
|
+
### `bootstrap_context`
|
|
50
|
+
- 入参:`{ query?: string, top_k?: number, kinds?: string[], include_content?: boolean }`
|
|
51
|
+
- 用途:返回 brain dump + pending changes;如果传入 `query`,会额外返回本地向量库的语义检索结果(推荐新会话开始就用它)
|
|
52
|
+
|
|
53
|
+
### `get_pending_changes`
|
|
54
|
+
- 入参:`{}`
|
|
55
|
+
- 用途:返回本地“已发生变更但尚未被 sync_change_intent 确认”的文件列表(便于 AI 不漏同步)
|
|
56
|
+
|
|
57
|
+
### `query_codebase`
|
|
58
|
+
- 入参:`{ query: string }`
|
|
59
|
+
- 用途:按名称/签名模糊搜索 `symbols`,返回匹配的 `file_path` 与 `signature`
|
|
60
|
+
|
|
61
|
+
### `upsert_project_summary`
|
|
62
|
+
- 入参:`{ summary: string }`
|
|
63
|
+
- 用途:保存/更新“项目级上下文总结”(由 AI 在对话里写好再保存),用于跨会话快速恢复
|
|
64
|
+
|
|
65
|
+
### `add_note`
|
|
66
|
+
- 入参:`{ title?: string, content: string, tags?: string[] }`
|
|
67
|
+
- 用途:保存一条“可持久化的项目笔记”(决策、约束、TODO、架构说明等)
|
|
68
|
+
|
|
69
|
+
### `semantic_search`
|
|
70
|
+
- 入参:`{ query: string, top_k?: number, kinds?: string[], include_content?: boolean }`
|
|
71
|
+
- 用途:对本地向量库进行语义检索(覆盖需求/意图/笔记/项目总结/代码 chunk/文档 chunk)
|
|
72
|
+
|
|
73
|
+
## 本地数据与监听
|
|
74
|
+
|
|
75
|
+
- 数据库:默认在 `process.cwd()`(或 `VECTORMIND_ROOT` 指定目录)创建 `.vectormind.db`(默认已在 `.gitignore` 中忽略)
|
|
76
|
+
- 监听范围:默认监听 `process.cwd()`(或 `VECTORMIND_ROOT`)下文件变动(忽略 `.git/`、`node_modules/`、`dist/`、数据库文件)
|
|
77
|
+
- 符号抽取:目前为轻量正则抽取(非 AST 解析),支持常见语言如 TS/JS、Python、Go、Rust、C/C++
|
|
78
|
+
- 语义向量:默认使用本地 embedding 模型(`@xenova/transformers`),首次运行可能需要下载模型权重(无云端 API 调用,向量与数据都保存在本地)
|
|
79
|
+
|
|
80
|
+
## 向量化配置(可选)
|
|
81
|
+
|
|
82
|
+
- `VECTORMIND_ROOT=...`:指定“项目根目录”(当你的 MCP Client 启动进程时不在项目目录下时很有用)
|
|
83
|
+
- `VECTORMIND_EMBEDDINGS=off`:关闭向量化(`semantic_search` 不可用)
|
|
84
|
+
- `VECTORMIND_EMBED_FILES=all|changed|none`:是否向量化代码/文档 chunk(默认 `all`)
|
|
85
|
+
- `VECTORMIND_EMBED_MODEL=...`:指定 embedding 模型(默认 `Xenova/all-MiniLM-L6-v2`)
|
|
86
|
+
- `VECTORMIND_EMBED_CACHE_DIR=...`:指定模型缓存目录
|
|
87
|
+
- `VECTORMIND_ALLOW_REMOTE_MODELS=false`:禁止下载远端模型(适合离线环境)
|
|
88
|
+
|
|
89
|
+
## 安装与运行
|
|
90
|
+
|
|
91
|
+
### 本地开发运行
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npm install
|
|
95
|
+
npm run build
|
|
96
|
+
node dist/index.js
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 发布到 NPM(建议)
|
|
100
|
+
|
|
101
|
+
1) 修改 `package.json` 的 `name` 为你的实际包名(例如 `@coreyuan/vector-mind`)
|
|
102
|
+
2) 登录并发布:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm login
|
|
106
|
+
npm publish
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
> 说明:已配置 `prepublishOnly`(发布前自动 `npm run build`)与 `publishConfig.access=public`(适用于 scoped 包)。
|
|
110
|
+
|
|
111
|
+
## 快速测试(Smoke)
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# 只测工具/索引/同步流程(不下载 embedding 模型)
|
|
115
|
+
npm run smoke
|
|
116
|
+
|
|
117
|
+
# 测试向量化 + 语义检索(首次会下载本地模型权重)
|
|
118
|
+
npm run smoke -- --embeddings=on
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 以 NPM 包方式运行(发布后)
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npx -y @coreyuan/vector-mind
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 在 MCP Client 中配置(stdio)
|
|
128
|
+
|
|
129
|
+
不同客户端配置格式略有差异,但核心都是:用 `stdio` 启动一个命令。
|
|
130
|
+
|
|
131
|
+
- 本地构建版本(示例):
|
|
132
|
+
- `command`: `node`
|
|
133
|
+
- `args`: `["/absolute/path/to/your/project/dist/index.js"]`
|
|
134
|
+
|
|
135
|
+
- 发布后(示例):
|
|
136
|
+
- `command`: `npx`
|
|
137
|
+
- `args`: `["-y", "@coreyuan/vector-mind"]`
|
|
138
|
+
|
|
139
|
+
如果你的 MCP Client 启动进程时不在项目目录下,建议在配置里加上:
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"command": "npx",
|
|
144
|
+
"args": ["-y", "@coreyuan/vector-mind"],
|
|
145
|
+
"env": { "VECTORMIND_ROOT": "H:\\\\path\\\\to\\\\your-project" }
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
配置完成后,客户端会在初始化阶段拿到该服务器的 tools + instructions;AI 就能“知道它存在”,并在需要时调用,而不是盲猜。
|
|
150
|
+
|
|
151
|
+
## 典型示例
|
|
152
|
+
|
|
153
|
+
你:我想加“用户头像上传功能”。
|
|
154
|
+
AI:调用 `start_requirement("用户头像上传功能", "支持 PNG/JPG")`。
|
|
155
|
+
你/AI:改完 `upload.ts` 和 `user.model.ts` 并保存。
|
|
156
|
+
AI:调用 `sync_change_intent("增加 Multer 配置,并在 user model 增加 avatar 字段", ["upload.ts","user.model.ts"])`。
|
|
157
|
+
AI:在对话里写一段阶段总结后,调用 `upsert_project_summary("...")`。
|
|
158
|
+
下次新会话:AI 先 `get_brain_dump()`,再用 `semantic_search("头像上传下一步是什么?")` 快速定位相关上下文与代码位置。
|
|
159
|
+
|
|
160
|
+
## 注意事项
|
|
161
|
+
|
|
162
|
+
- `sync_change_intent` 只会关联到“最近的 active 需求”;如需并行多需求,建议先把一个需求标记完成(当前版本未提供 completion tool)。
|
|
163
|
+
- 符号索引是启发式的,复杂语法/宏/生成代码可能不完整;如需更高精度,可扩展为 AST/语言服务器方案。
|
package/dist/index.d.ts
ADDED