@synth-coder/memhub 0.2.1 → 0.2.3

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.
Files changed (71) hide show
  1. package/.eslintrc.cjs +45 -45
  2. package/.factory/commands/opsx-apply.md +150 -0
  3. package/.factory/commands/opsx-archive.md +155 -0
  4. package/.factory/commands/opsx-explore.md +171 -0
  5. package/.factory/commands/opsx-propose.md +104 -0
  6. package/.factory/skills/openspec-apply-change/SKILL.md +156 -0
  7. package/.factory/skills/openspec-archive-change/SKILL.md +114 -0
  8. package/.factory/skills/openspec-explore/SKILL.md +288 -0
  9. package/.factory/skills/openspec-propose/SKILL.md +110 -0
  10. package/.github/workflows/ci.yml +74 -74
  11. package/.iflow/commands/opsx-apply.md +152 -152
  12. package/.iflow/commands/opsx-archive.md +157 -157
  13. package/.iflow/commands/opsx-explore.md +173 -173
  14. package/.iflow/commands/opsx-propose.md +106 -106
  15. package/.iflow/skills/openspec-apply-change/SKILL.md +156 -156
  16. package/.iflow/skills/openspec-archive-change/SKILL.md +114 -114
  17. package/.iflow/skills/openspec-explore/SKILL.md +288 -288
  18. package/.iflow/skills/openspec-propose/SKILL.md +110 -110
  19. package/.prettierrc +11 -11
  20. package/AGENTS.md +169 -26
  21. package/README.md +195 -195
  22. package/README.zh-CN.md +193 -193
  23. package/dist/src/contracts/mcp.js +34 -34
  24. package/dist/src/server/mcp-server.d.ts +8 -0
  25. package/dist/src/server/mcp-server.d.ts.map +1 -1
  26. package/dist/src/server/mcp-server.js +23 -2
  27. package/dist/src/server/mcp-server.js.map +1 -1
  28. package/dist/src/services/memory-service.d.ts +1 -0
  29. package/dist/src/services/memory-service.d.ts.map +1 -1
  30. package/dist/src/services/memory-service.js +125 -82
  31. package/dist/src/services/memory-service.js.map +1 -1
  32. package/docs/architecture-diagrams.md +368 -0
  33. package/docs/architecture.md +381 -349
  34. package/docs/contracts.md +190 -119
  35. package/docs/prompt-template.md +33 -79
  36. package/docs/proposals/mcp-typescript-sdk-refactor.md +568 -568
  37. package/docs/proposals/proposal-close-gates.md +58 -58
  38. package/docs/tool-calling-policy.md +101 -107
  39. package/docs/vector-search.md +306 -0
  40. package/package.json +59 -58
  41. package/src/contracts/index.ts +12 -12
  42. package/src/contracts/mcp.ts +222 -222
  43. package/src/contracts/schemas.ts +307 -307
  44. package/src/contracts/types.ts +410 -410
  45. package/src/index.ts +8 -8
  46. package/src/server/index.ts +5 -5
  47. package/src/server/mcp-server.ts +185 -161
  48. package/src/services/embedding-service.ts +114 -114
  49. package/src/services/index.ts +5 -5
  50. package/src/services/memory-service.ts +663 -621
  51. package/src/storage/frontmatter-parser.ts +243 -243
  52. package/src/storage/index.ts +6 -6
  53. package/src/storage/markdown-storage.ts +236 -236
  54. package/src/storage/vector-index.ts +160 -160
  55. package/src/utils/index.ts +5 -5
  56. package/src/utils/slugify.ts +63 -63
  57. package/test/contracts/schemas.test.ts +313 -313
  58. package/test/contracts/types.test.ts +21 -21
  59. package/test/frontmatter-parser-more.test.ts +94 -94
  60. package/test/server/mcp-server.test.ts +210 -169
  61. package/test/services/memory-service-edge.test.ts +248 -248
  62. package/test/services/memory-service.test.ts +278 -278
  63. package/test/storage/frontmatter-parser.test.ts +222 -222
  64. package/test/storage/markdown-storage.test.ts +216 -216
  65. package/test/storage/storage-edge.test.ts +238 -238
  66. package/test/storage/vector-index.test.ts +153 -153
  67. package/test/utils/slugify-edge.test.ts +94 -94
  68. package/test/utils/slugify.test.ts +68 -68
  69. package/tsconfig.json +25 -25
  70. package/tsconfig.test.json +8 -8
  71. package/vitest.config.ts +29 -29
@@ -0,0 +1,368 @@
1
+ # MemHub 架构图
2
+
3
+ ## 1. 整体系统架构
4
+
5
+ ```mermaid
6
+ graph TB
7
+ subgraph "Client Layer"
8
+ Client[MCP Client<br/>Claude Desktop / IDE]
9
+ end
10
+
11
+ subgraph "Protocol Layer"
12
+ MCP[MCP Protocol<br/>stdio transport]
13
+ end
14
+
15
+ subgraph "Application Layer"
16
+ Server[MCP Server<br/>mcp-server.ts]
17
+ Router[Tool Router<br/>memory_load / memory_update]
18
+ end
19
+
20
+ subgraph "Service Layer"
21
+ MemoryService[Memory Service<br/>Business Logic]
22
+ EmbeddingService[Embedding Service<br/>ONNX Model]
23
+ end
24
+
25
+ subgraph "Storage Layer"
26
+ MarkdownStorage[Markdown Storage<br/>File System]
27
+ VectorIndex[Vector Index<br/>LanceDB]
28
+ end
29
+
30
+ subgraph "Data Layer"
31
+ Files[Markdown Files<br/>.md]
32
+ VectorDB[LanceDB<br/>.lancedb/]
33
+ end
34
+
35
+ Client -->|stdio| MCP
36
+ MCP --> Server
37
+ Server --> Router
38
+ Router --> MemoryService
39
+ MemoryService --> MarkdownStorage
40
+ MemoryService --> EmbeddingService
41
+ MemoryService --> VectorIndex
42
+ EmbeddingService -.->|embeddings| VectorIndex
43
+ MarkdownStorage --> Files
44
+ VectorIndex --> VectorDB
45
+
46
+ style Client fill:#e1f5ff
47
+ style Server fill:#fff4e1
48
+ style MemoryService fill:#f0f0f0
49
+ style Files fill:#e8f5e9
50
+ style VectorDB fill:#e8f5e9
51
+ ```
52
+
53
+ ## 2. 核心组件架构
54
+
55
+ ```mermaid
56
+ graph LR
57
+ subgraph "MCP Server"
58
+ A[Server Initialization]
59
+ B[Tool Registration]
60
+ C[Request Handler]
61
+ D[Response Formatter]
62
+ end
63
+
64
+ subgraph "Memory Service"
65
+ E[CRUD Operations]
66
+ F[Search Logic]
67
+ G[Validation]
68
+ H[Error Handling]
69
+ end
70
+
71
+ subgraph "Storage Components"
72
+ I[Markdown Storage]
73
+ J[FrontMatter Parser]
74
+ K[Vector Index]
75
+ L[Embedding Service]
76
+ end
77
+
78
+ A --> B
79
+ B --> C
80
+ C --> E
81
+ E --> I
82
+ E --> L
83
+ E --> K
84
+ I --> J
85
+ F --> K
86
+ L -.->|384-dim vectors| K
87
+ C --> D
88
+ E --> G
89
+ E --> H
90
+
91
+ style A fill:#ffebee
92
+ style E fill:#e3f2fd
93
+ style I fill:#f1f8e9
94
+ ```
95
+
96
+ ## 3. 数据流图
97
+
98
+ ### 3.1 Memory Load 流程
99
+
100
+ ```mermaid
101
+ sequenceDiagram
102
+ participant Client as MCP Client
103
+ participant Server as MCP Server
104
+ participant Service as Memory Service
105
+ participant Storage as Markdown Storage
106
+ participant Vector as Vector Index
107
+ participant Embed as Embedding Service
108
+
109
+ Client->>Server: memory_load(query, tags, category)
110
+ Server->>Service: memoryLoad(input)
111
+
112
+ alt Vector Search Enabled
113
+ Service->>Embed: embed(query)
114
+ Embed-->>Service: 384-dim vector
115
+ Service->>Vector: search(vector, limit)
116
+ Vector-->>Service: ranked IDs
117
+ Service->>Storage: read(ids)
118
+ Storage-->>Service: Memory objects
119
+ else Tag/Category Filter
120
+ Service->>Storage: list(filters)
121
+ Storage-->>Service: filtered memories
122
+ end
123
+
124
+ Service-->>Server: MemoryLoadOutput
125
+ Server-->>Client: JSON Response
126
+ ```
127
+
128
+ ### 3.2 Memory Update 流程
129
+
130
+ ```mermaid
131
+ sequenceDiagram
132
+ participant Client as MCP Client
133
+ participant Server as MCP Server
134
+ participant Service as Memory Service
135
+ participant Storage as Markdown Storage
136
+ participant Vector as Vector Index
137
+ participant Embed as Embedding Service
138
+
139
+ Client->>Server: memory_update(content, title, tags)
140
+ Server->>Service: memoryUpdate(input)
141
+ Service->>Service: Generate UUID & timestamp
142
+ Service->>Storage: write(memory)
143
+ Storage-->>Service: file path
144
+
145
+ alt Vector Search Enabled
146
+ Service->>Embed: embedMemory(title, content)
147
+ Embed-->>Service: 384-dim vector
148
+ Service->>Vector: upsert(memory, vector)
149
+ end
150
+
151
+ Service-->>Server: MemoryUpdateOutput
152
+ Server-->>Client: JSON Response
153
+ ```
154
+
155
+ ## 4. 存储架构
156
+
157
+ ```mermaid
158
+ graph TB
159
+ subgraph "File System Structure"
160
+ Root[memories/]
161
+ DateDir[YYYY-MM-DD/]
162
+ SessionDir[session_uuid/]
163
+ File[title-slug.md]
164
+ end
165
+
166
+ subgraph "Markdown File Format"
167
+ YAML[YAML Front Matter<br/>---<br/>id: uuid<br/>tags: array<br/>category: string<br/>importance: 1-5<br/>---]
168
+ Content[Markdown Content<br/># Title<br/><br/>Body text...]
169
+ end
170
+
171
+ subgraph "Vector Database"
172
+ LanceDB[LanceDB<br/>.lancedb/]
173
+ Table[memories table]
174
+ VectorCol[vector: float32[384]]
175
+ MetaCol[metadata columns<br/>id, title, category, tags]
176
+ end
177
+
178
+ Root --> DateDir
179
+ DateDir --> SessionDir
180
+ SessionDir --> File
181
+ File --> YAML
182
+ File --> Content
183
+
184
+ LanceDB --> Table
185
+ Table --> VectorCol
186
+ Table --> MetaCol
187
+
188
+ style Root fill:#fff9c4
189
+ style LanceDB fill:#e1bee7
190
+ ```
191
+
192
+ ## 5. 技术栈架构
193
+
194
+ ```mermaid
195
+ mindmap
196
+ root((MemHub))
197
+ Runtime
198
+ Node.js 18+
199
+ TypeScript 5.9+
200
+ Protocol
201
+ MCP SDK
202
+ stdio transport
203
+ JSON-RPC
204
+ Storage
205
+ Markdown
206
+ YAML Front Matter
207
+ Git-friendly
208
+ Vector DB
209
+ LanceDB
210
+ 384-dim vectors
211
+ ML/AI
212
+ Embedding
213
+ ONNX Runtime
214
+ MiniLM-L6-v2
215
+ Validation
216
+ Zod schemas
217
+ TypeScript types
218
+ Testing
219
+ Vitest
220
+ 80%+ coverage
221
+ Quality
222
+ ESLint
223
+ Prettier
224
+ TypeScript strict
225
+ ```
226
+
227
+ ## 6. 部署架构
228
+
229
+ ```mermaid
230
+ graph TB
231
+ subgraph "Development"
232
+ DevCode[Source Code<br/>TypeScript]
233
+ DevTest[Unit Tests<br/>Vitest]
234
+ DevBuild[Build<br/>tsc]
235
+ end
236
+
237
+ subgraph "Distribution"
238
+ NPM[npm package<br/>@synth-coder/memhub]
239
+ Dist[dist/<br/>JavaScript + .d.ts]
240
+ end
241
+
242
+ subgraph "Runtime"
243
+ MCPClient[MCP Client<br/>Claude/IDE]
244
+ NPX[npx execution]
245
+ NodeEnv[Node.js Environment<br/>MEMHUB_STORAGE_PATH]
246
+ end
247
+
248
+ subgraph "Data Storage"
249
+ MemDir[memories/<br/>Markdown Files]
250
+ VectorDir[.lancedb/<br/>Vector Index]
251
+ HFModel[~/.cache/huggingface/<br/>ONNX Model Cache]
252
+ end
253
+
254
+ DevCode --> DevTest
255
+ DevTest --> DevBuild
256
+ DevBuild --> NPM
257
+ NPM --> NPX
258
+ NPX --> NodeEnv
259
+ MCPClient --> NPX
260
+ NodeEnv --> MemDir
261
+ NodeEnv --> VectorDir
262
+ NodeEnv --> HFModel
263
+
264
+ style DevCode fill:#e3f2fd
265
+ style NPM fill:#fff3e0
266
+ style MCPClient fill:#f3e5f5
267
+ style MemDir fill:#e8f5e9
268
+ ```
269
+
270
+ ## 7. 错误处理架构
271
+
272
+ ```mermaid
273
+ graph TD
274
+ A[Client Request] --> B{Parameter Validation}
275
+ B -->|Invalid| C[ZodError]
276
+ B -->|Valid| D{Service Operation}
277
+
278
+ D --> E{Storage Operation}
279
+ E -->|File Error| F[StorageError]
280
+ E -->|Success| G[Memory Object]
281
+
282
+ D --> H{Vector Operation}
283
+ H -->|Index Error| I[ServiceError]
284
+ H -->|Success| J[Vector Result]
285
+
286
+ G --> K{Embedding}
287
+ J --> K
288
+ K -->|Model Error| L[ServiceError]
289
+ K -->|Success| M[Success Response]
290
+
291
+ C --> N[Error Response]
292
+ F --> N
293
+ I --> N
294
+ L --> N
295
+ M --> O[Success Response]
296
+
297
+ N --> P[Client]
298
+ O --> P
299
+
300
+ style C fill:#ffcdd2
301
+ style F fill:#ffcdd2
302
+ style I fill:#ffcdd2
303
+ style L fill:#ffcdd2
304
+ style M fill:#c8e6c9
305
+ style O fill:#c8e6c9
306
+ ```
307
+
308
+ ## 8. 性能优化架构
309
+
310
+ ```mermaid
311
+ graph LR
312
+ subgraph "Lazy Loading"
313
+ A1[Service Initialization]
314
+ A2[Embedding Model]
315
+ A3[Vector Index]
316
+ end
317
+
318
+ subgraph "Caching"
319
+ B1[Model Cache<br/>~/.cache/huggingface]
320
+ B2[Vector Cache<br/>LanceDB]
321
+ B3[File Handle Pool]
322
+ end
323
+
324
+ subgraph "Async Operations"
325
+ C1[Non-blocking I/O]
326
+ C2[Background Index Update]
327
+ C3[Parallel Processing]
328
+ end
329
+
330
+ A1 --> A2
331
+ A2 --> A3
332
+ A2 --> B1
333
+ A3 --> B2
334
+ C1 --> C2
335
+ C2 --> C3
336
+
337
+ style A1 fill:#e1f5fe
338
+ style B1 fill:#fff9c4
339
+ style C1 fill:#f3e5f5
340
+ ```
341
+
342
+ ## 关键设计特性
343
+
344
+ ### 1. **分层架构**
345
+ - **协议层**: MCP 协议处理
346
+ - **应用层**: 服务器和路由逻辑
347
+ - **服务层**: 核心业务逻辑
348
+ - **存储层**: 数据持久化
349
+
350
+ ### 2. **可扩展性**
351
+ - 模块化设计,易于添加新的存储后端
352
+ - 支持插件式的 embedding 服务
353
+ - 可配置的向量搜索开关
354
+
355
+ ### 3. **容错性**
356
+ - 优雅的错误处理和降级
357
+ - 向量搜索失败不影响基本功能
358
+ - Markdown 作为唯一数据源
359
+
360
+ ### 4. **开发体验**
361
+ - 完整的 TypeScript 类型支持
362
+ - Zod schema 验证
363
+ - 详尽的测试覆盖
364
+
365
+ ### 5. **运维友好**
366
+ - 纯文本存储,易于备份和迁移
367
+ - Git 原生支持版本控制
368
+ - 无外部依赖数据库