context-gatekeeper 0.3.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.
Files changed (305) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +774 -0
  3. package/README.zh.md +765 -0
  4. package/bin/context-gatekeeper-cli.js +60 -0
  5. package/dist/api/gdpr.d.ts +104 -0
  6. package/dist/api/gdpr.d.ts.map +1 -0
  7. package/dist/api/gdpr.js +229 -0
  8. package/dist/api/gdpr.js.map +1 -0
  9. package/dist/api/health-check.d.ts +13 -0
  10. package/dist/api/health-check.d.ts.map +1 -0
  11. package/dist/api/health-check.js +2 -0
  12. package/dist/api/health-check.js.map +1 -0
  13. package/dist/api/index.d.ts +7 -0
  14. package/dist/api/index.d.ts.map +1 -0
  15. package/dist/api/index.js +8 -0
  16. package/dist/api/index.js.map +1 -0
  17. package/dist/api/observability.d.ts +39 -0
  18. package/dist/api/observability.d.ts.map +1 -0
  19. package/dist/api/observability.js +132 -0
  20. package/dist/api/observability.js.map +1 -0
  21. package/dist/api/session-manager.d.ts +41 -0
  22. package/dist/api/session-manager.d.ts.map +1 -0
  23. package/dist/api/session-manager.js +129 -0
  24. package/dist/api/session-manager.js.map +1 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +7 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp/server.d.ts +8 -0
  30. package/dist/mcp/server.d.ts.map +1 -0
  31. package/dist/mcp/server.js +613 -0
  32. package/dist/mcp/server.js.map +1 -0
  33. package/dist/mcp/tools/configure-llm.d.ts +26 -0
  34. package/dist/mcp/tools/configure-llm.d.ts.map +1 -0
  35. package/dist/mcp/tools/configure-llm.js +32 -0
  36. package/dist/mcp/tools/configure-llm.js.map +1 -0
  37. package/dist/mcp/tools/context-compress.d.ts +15 -0
  38. package/dist/mcp/tools/context-compress.d.ts.map +1 -0
  39. package/dist/mcp/tools/context-compress.js +15 -0
  40. package/dist/mcp/tools/context-compress.js.map +1 -0
  41. package/dist/mcp/tools/dual-mode-execute.d.ts +78 -0
  42. package/dist/mcp/tools/dual-mode-execute.d.ts.map +1 -0
  43. package/dist/mcp/tools/dual-mode-execute.js +299 -0
  44. package/dist/mcp/tools/dual-mode-execute.js.map +1 -0
  45. package/dist/mcp/tools/index.d.ts +19 -0
  46. package/dist/mcp/tools/index.d.ts.map +1 -0
  47. package/dist/mcp/tools/index.js +20 -0
  48. package/dist/mcp/tools/index.js.map +1 -0
  49. package/dist/mcp/tools/intelligent-recall.d.ts +67 -0
  50. package/dist/mcp/tools/intelligent-recall.d.ts.map +1 -0
  51. package/dist/mcp/tools/intelligent-recall.js +208 -0
  52. package/dist/mcp/tools/intelligent-recall.js.map +1 -0
  53. package/dist/mcp/tools/memory-anchor.d.ts +13 -0
  54. package/dist/mcp/tools/memory-anchor.d.ts.map +1 -0
  55. package/dist/mcp/tools/memory-anchor.js +16 -0
  56. package/dist/mcp/tools/memory-anchor.js.map +1 -0
  57. package/dist/mcp/tools/memory-delete-batch.d.ts +16 -0
  58. package/dist/mcp/tools/memory-delete-batch.d.ts.map +1 -0
  59. package/dist/mcp/tools/memory-delete-batch.js +26 -0
  60. package/dist/mcp/tools/memory-delete-batch.js.map +1 -0
  61. package/dist/mcp/tools/memory-extract.d.ts +68 -0
  62. package/dist/mcp/tools/memory-extract.d.ts.map +1 -0
  63. package/dist/mcp/tools/memory-extract.js +280 -0
  64. package/dist/mcp/tools/memory-extract.js.map +1 -0
  65. package/dist/mcp/tools/memory-recall.d.ts +42 -0
  66. package/dist/mcp/tools/memory-recall.d.ts.map +1 -0
  67. package/dist/mcp/tools/memory-recall.js +37 -0
  68. package/dist/mcp/tools/memory-recall.js.map +1 -0
  69. package/dist/mcp/tools/memory-report-usage.d.ts +17 -0
  70. package/dist/mcp/tools/memory-report-usage.d.ts.map +1 -0
  71. package/dist/mcp/tools/memory-report-usage.js +15 -0
  72. package/dist/mcp/tools/memory-report-usage.js.map +1 -0
  73. package/dist/mcp/tools/memory-search.d.ts +43 -0
  74. package/dist/mcp/tools/memory-search.d.ts.map +1 -0
  75. package/dist/mcp/tools/memory-search.js +38 -0
  76. package/dist/mcp/tools/memory-search.js.map +1 -0
  77. package/dist/mcp/tools/memory-session.d.ts +118 -0
  78. package/dist/mcp/tools/memory-session.d.ts.map +1 -0
  79. package/dist/mcp/tools/memory-session.js +113 -0
  80. package/dist/mcp/tools/memory-session.js.map +1 -0
  81. package/dist/mcp/tools/memory-stats.d.ts +10 -0
  82. package/dist/mcp/tools/memory-stats.d.ts.map +1 -0
  83. package/dist/mcp/tools/memory-stats.js +35 -0
  84. package/dist/mcp/tools/memory-stats.js.map +1 -0
  85. package/dist/mcp/tools/memory-store-batch.d.ts +49 -0
  86. package/dist/mcp/tools/memory-store-batch.d.ts.map +1 -0
  87. package/dist/mcp/tools/memory-store-batch.js +48 -0
  88. package/dist/mcp/tools/memory-store-batch.js.map +1 -0
  89. package/dist/mcp/tools/memory-store.d.ts +37 -0
  90. package/dist/mcp/tools/memory-store.d.ts.map +1 -0
  91. package/dist/mcp/tools/memory-store.js +34 -0
  92. package/dist/mcp/tools/memory-store.js.map +1 -0
  93. package/dist/mcp/tools/project-create.d.ts +16 -0
  94. package/dist/mcp/tools/project-create.d.ts.map +1 -0
  95. package/dist/mcp/tools/project-create.js +14 -0
  96. package/dist/mcp/tools/project-create.js.map +1 -0
  97. package/dist/models/types.d.ts +88 -0
  98. package/dist/models/types.d.ts.map +1 -0
  99. package/dist/models/types.js +19 -0
  100. package/dist/models/types.js.map +1 -0
  101. package/dist/schema/compression.d.ts +7 -0
  102. package/dist/schema/compression.d.ts.map +1 -0
  103. package/dist/schema/compression.js +66 -0
  104. package/dist/schema/compression.js.map +1 -0
  105. package/dist/schema/fulltext-search.d.ts +10 -0
  106. package/dist/schema/fulltext-search.d.ts.map +1 -0
  107. package/dist/schema/fulltext-search.js +73 -0
  108. package/dist/schema/fulltext-search.js.map +1 -0
  109. package/dist/schema/index.d.ts +9 -0
  110. package/dist/schema/index.d.ts.map +1 -0
  111. package/dist/schema/index.js +9 -0
  112. package/dist/schema/index.js.map +1 -0
  113. package/dist/schema/knowledge-graph.d.ts +108 -0
  114. package/dist/schema/knowledge-graph.d.ts.map +1 -0
  115. package/dist/schema/knowledge-graph.js +372 -0
  116. package/dist/schema/knowledge-graph.js.map +1 -0
  117. package/dist/schema/memory-session.d.ts +62 -0
  118. package/dist/schema/memory-session.d.ts.map +1 -0
  119. package/dist/schema/memory-session.js +258 -0
  120. package/dist/schema/memory-session.js.map +1 -0
  121. package/dist/schema/memory.d.ts +84 -0
  122. package/dist/schema/memory.d.ts.map +1 -0
  123. package/dist/schema/memory.js +622 -0
  124. package/dist/schema/memory.js.map +1 -0
  125. package/dist/schema/project.d.ts +8 -0
  126. package/dist/schema/project.d.ts.map +1 -0
  127. package/dist/schema/project.js +68 -0
  128. package/dist/schema/project.js.map +1 -0
  129. package/dist/schema/schema-init.d.ts +2 -0
  130. package/dist/schema/schema-init.d.ts.map +1 -0
  131. package/dist/schema/schema-init.js +199 -0
  132. package/dist/schema/schema-init.js.map +1 -0
  133. package/dist/schema/vector-index.d.ts +28 -0
  134. package/dist/schema/vector-index.d.ts.map +1 -0
  135. package/dist/schema/vector-index.js +179 -0
  136. package/dist/schema/vector-index.js.map +1 -0
  137. package/dist/scripts/agents/base.d.ts +89 -0
  138. package/dist/scripts/agents/base.d.ts.map +1 -0
  139. package/dist/scripts/agents/base.js +148 -0
  140. package/dist/scripts/agents/base.js.map +1 -0
  141. package/dist/scripts/agents/base.ts +193 -0
  142. package/dist/scripts/agents/claude-code.d.ts +21 -0
  143. package/dist/scripts/agents/claude-code.d.ts.map +1 -0
  144. package/dist/scripts/agents/claude-code.js +33 -0
  145. package/dist/scripts/agents/claude-code.js.map +1 -0
  146. package/dist/scripts/agents/claude-code.ts +36 -0
  147. package/dist/scripts/agents/claude-desktop.d.ts +25 -0
  148. package/dist/scripts/agents/claude-desktop.d.ts.map +1 -0
  149. package/dist/scripts/agents/claude-desktop.js +36 -0
  150. package/dist/scripts/agents/claude-desktop.js.map +1 -0
  151. package/dist/scripts/agents/claude-desktop.ts +39 -0
  152. package/dist/scripts/agents/cline.d.ts +22 -0
  153. package/dist/scripts/agents/cline.d.ts.map +1 -0
  154. package/dist/scripts/agents/cline.js +35 -0
  155. package/dist/scripts/agents/cline.js.map +1 -0
  156. package/dist/scripts/agents/cline.ts +38 -0
  157. package/dist/scripts/agents/continue.d.ts +20 -0
  158. package/dist/scripts/agents/continue.d.ts.map +1 -0
  159. package/dist/scripts/agents/continue.js +35 -0
  160. package/dist/scripts/agents/continue.js.map +1 -0
  161. package/dist/scripts/agents/continue.ts +38 -0
  162. package/dist/scripts/agents/cursor.d.ts +27 -0
  163. package/dist/scripts/agents/cursor.d.ts.map +1 -0
  164. package/dist/scripts/agents/cursor.js +38 -0
  165. package/dist/scripts/agents/cursor.js.map +1 -0
  166. package/dist/scripts/agents/cursor.ts +41 -0
  167. package/dist/scripts/cli/config-gen.d.ts +59 -0
  168. package/dist/scripts/cli/config-gen.d.ts.map +1 -0
  169. package/dist/scripts/cli/config-gen.js +156 -0
  170. package/dist/scripts/cli/config-gen.js.map +1 -0
  171. package/dist/scripts/cli/config-gen.ts +164 -0
  172. package/dist/scripts/cli/detect.d.ts +42 -0
  173. package/dist/scripts/cli/detect.d.ts.map +1 -0
  174. package/dist/scripts/cli/detect.js +131 -0
  175. package/dist/scripts/cli/detect.js.map +1 -0
  176. package/dist/scripts/cli/detect.ts +162 -0
  177. package/dist/scripts/cli/install.d.ts +31 -0
  178. package/dist/scripts/cli/install.d.ts.map +1 -0
  179. package/dist/scripts/cli/install.js +125 -0
  180. package/dist/scripts/cli/install.js.map +1 -0
  181. package/dist/scripts/cli/install.ts +157 -0
  182. package/dist/scripts/cli/status.d.ts +8 -0
  183. package/dist/scripts/cli/status.d.ts.map +1 -0
  184. package/dist/scripts/cli/status.js +39 -0
  185. package/dist/scripts/cli/status.js.map +1 -0
  186. package/dist/scripts/cli/status.ts +48 -0
  187. package/dist/scripts/cli/uninstall.d.ts +22 -0
  188. package/dist/scripts/cli/uninstall.d.ts.map +1 -0
  189. package/dist/scripts/cli/uninstall.js +141 -0
  190. package/dist/scripts/cli/uninstall.js.map +1 -0
  191. package/dist/scripts/cli/uninstall.ts +157 -0
  192. package/dist/scripts/cli.d.ts +23 -0
  193. package/dist/scripts/cli.d.ts.map +1 -0
  194. package/dist/scripts/cli.js +166 -0
  195. package/dist/scripts/cli.js.map +1 -0
  196. package/dist/scripts/cli.ts +173 -0
  197. package/dist/services/classifier/index.d.ts +36 -0
  198. package/dist/services/classifier/index.d.ts.map +1 -0
  199. package/dist/services/classifier/index.js +104 -0
  200. package/dist/services/classifier/index.js.map +1 -0
  201. package/dist/services/classifier/llm.d.ts +37 -0
  202. package/dist/services/classifier/llm.d.ts.map +1 -0
  203. package/dist/services/classifier/llm.js +119 -0
  204. package/dist/services/classifier/llm.js.map +1 -0
  205. package/dist/services/classifier/rules.d.ts +22 -0
  206. package/dist/services/classifier/rules.d.ts.map +1 -0
  207. package/dist/services/classifier/rules.js +98 -0
  208. package/dist/services/classifier/rules.js.map +1 -0
  209. package/dist/services/compressor/index.d.ts +3 -0
  210. package/dist/services/compressor/index.d.ts.map +1 -0
  211. package/dist/services/compressor/index.js +3 -0
  212. package/dist/services/compressor/index.js.map +1 -0
  213. package/dist/services/compressor/threshold.d.ts +35 -0
  214. package/dist/services/compressor/threshold.d.ts.map +1 -0
  215. package/dist/services/compressor/threshold.js +60 -0
  216. package/dist/services/compressor/threshold.js.map +1 -0
  217. package/dist/services/compressor/trigger.d.ts +24 -0
  218. package/dist/services/compressor/trigger.d.ts.map +1 -0
  219. package/dist/services/compressor/trigger.js +91 -0
  220. package/dist/services/compressor/trigger.js.map +1 -0
  221. package/dist/services/constraint-extractor.d.ts +25 -0
  222. package/dist/services/constraint-extractor.d.ts.map +1 -0
  223. package/dist/services/constraint-extractor.js +97 -0
  224. package/dist/services/constraint-extractor.js.map +1 -0
  225. package/dist/services/database-health.d.ts +22 -0
  226. package/dist/services/database-health.d.ts.map +1 -0
  227. package/dist/services/database-health.js +122 -0
  228. package/dist/services/database-health.js.map +1 -0
  229. package/dist/services/embedding-fixed.d.ts +9 -0
  230. package/dist/services/embedding-fixed.d.ts.map +1 -0
  231. package/dist/services/embedding-fixed.js +70 -0
  232. package/dist/services/embedding-fixed.js.map +1 -0
  233. package/dist/services/embedding-provider.d.ts +79 -0
  234. package/dist/services/embedding-provider.d.ts.map +1 -0
  235. package/dist/services/embedding-provider.js +229 -0
  236. package/dist/services/embedding-provider.js.map +1 -0
  237. package/dist/services/embedding.d.ts +17 -0
  238. package/dist/services/embedding.d.ts.map +1 -0
  239. package/dist/services/embedding.js +99 -0
  240. package/dist/services/embedding.js.map +1 -0
  241. package/dist/services/hnsw-index.d.ts +76 -0
  242. package/dist/services/hnsw-index.d.ts.map +1 -0
  243. package/dist/services/hnsw-index.js +301 -0
  244. package/dist/services/hnsw-index.js.map +1 -0
  245. package/dist/services/llm.d.ts +39 -0
  246. package/dist/services/llm.d.ts.map +1 -0
  247. package/dist/services/llm.js +207 -0
  248. package/dist/services/llm.js.map +1 -0
  249. package/dist/services/memory-tiers.d.ts +75 -0
  250. package/dist/services/memory-tiers.d.ts.map +1 -0
  251. package/dist/services/memory-tiers.js +275 -0
  252. package/dist/services/memory-tiers.js.map +1 -0
  253. package/dist/services/memory.d.ts +33 -0
  254. package/dist/services/memory.d.ts.map +1 -0
  255. package/dist/services/memory.js +209 -0
  256. package/dist/services/memory.js.map +1 -0
  257. package/dist/services/multi-agent-sharing.d.ts +83 -0
  258. package/dist/services/multi-agent-sharing.d.ts.map +1 -0
  259. package/dist/services/multi-agent-sharing.js +278 -0
  260. package/dist/services/multi-agent-sharing.js.map +1 -0
  261. package/dist/services/reranker.d.ts +88 -0
  262. package/dist/services/reranker.d.ts.map +1 -0
  263. package/dist/services/reranker.js +234 -0
  264. package/dist/services/reranker.js.map +1 -0
  265. package/dist/services/triple-extractor.d.ts +35 -0
  266. package/dist/services/triple-extractor.d.ts.map +1 -0
  267. package/dist/services/triple-extractor.js +293 -0
  268. package/dist/services/triple-extractor.js.map +1 -0
  269. package/dist/services/vector-provider.d.ts +40 -0
  270. package/dist/services/vector-provider.d.ts.map +1 -0
  271. package/dist/services/vector-provider.js +225 -0
  272. package/dist/services/vector-provider.js.map +1 -0
  273. package/dist/utils/after-chain-executor.d.ts +26 -0
  274. package/dist/utils/after-chain-executor.d.ts.map +1 -0
  275. package/dist/utils/after-chain-executor.js +135 -0
  276. package/dist/utils/after-chain-executor.js.map +1 -0
  277. package/dist/utils/after-chain.d.ts +94 -0
  278. package/dist/utils/after-chain.d.ts.map +1 -0
  279. package/dist/utils/after-chain.js +155 -0
  280. package/dist/utils/after-chain.js.map +1 -0
  281. package/dist/utils/db.d.ts +29 -0
  282. package/dist/utils/db.d.ts.map +1 -0
  283. package/dist/utils/db.js +201 -0
  284. package/dist/utils/db.js.map +1 -0
  285. package/dist/utils/encryption.d.ts +87 -0
  286. package/dist/utils/encryption.d.ts.map +1 -0
  287. package/dist/utils/encryption.js +175 -0
  288. package/dist/utils/encryption.js.map +1 -0
  289. package/dist/utils/errors.d.ts +35 -0
  290. package/dist/utils/errors.d.ts.map +1 -0
  291. package/dist/utils/errors.js +56 -0
  292. package/dist/utils/errors.js.map +1 -0
  293. package/dist/utils/logger.d.ts +27 -0
  294. package/dist/utils/logger.d.ts.map +1 -0
  295. package/dist/utils/logger.js +177 -0
  296. package/dist/utils/logger.js.map +1 -0
  297. package/dist/utils/priority.d.ts +26 -0
  298. package/dist/utils/priority.d.ts.map +1 -0
  299. package/dist/utils/priority.js +43 -0
  300. package/dist/utils/priority.js.map +1 -0
  301. package/dist/utils/watchdog.d.ts +57 -0
  302. package/dist/utils/watchdog.d.ts.map +1 -0
  303. package/dist/utils/watchdog.js +164 -0
  304. package/dist/utils/watchdog.js.map +1 -0
  305. package/package.json +78 -0
package/README.zh.md ADDED
@@ -0,0 +1,765 @@
1
+ # Context Gatekeeper
2
+
3
+ MCP 上下文管理服务 - 让 AI Agent 始终保持在 **100k token 聪明区** 高效运行。
4
+
5
+ 通用安装 - 兼容**所有 MCP 智能体**:Cursor、Claude Desktop、Cline、Continue、Claude Code 等。
6
+
7
+ ## 目录
8
+
9
+ - [快速开始](#快速开始)
10
+ - [功能特性](#功能特性)
11
+ - [安装配置](#安装配置)
12
+ - [环境变量](#环境变量)
13
+ - [工具参考](#工具参考)
14
+ - [跨智能体兼容性测试](#跨智能体兼容性测试)
15
+ - [架构设计](#架构设计)
16
+ - [故障排查](#故障排查)
17
+ - [最佳实践](#最佳实践)
18
+ - [开发指南](#开发指南)
19
+
20
+ ## 快速开始
21
+
22
+ ### 1. 通过 CLI 一键安装
23
+
24
+ CLI 自动检测本机所有支持的智能体,并把配置写入每个智能体期望的位置。无需手写 JSON。
25
+
26
+ ```bash
27
+ # 安装到所有检测到的智能体(推荐)
28
+ npx -y context-gatekeeper-cli install --all
29
+
30
+ # 也可以指定单个或多个智能体
31
+ npx -y context-gatekeeper-cli install cursor claude-desktop claude-code
32
+
33
+ # 查看 CLI 会写入哪些位置
34
+ npx -y context-gatekeeper-cli status
35
+
36
+ # 稍后卸载
37
+ npx -y context-gatekeeper-cli uninstall --all
38
+ ```
39
+
40
+ 支持的智能体:`cursor`、`claude-desktop`、`cline`、`continue`、`claude-code`。
41
+ 加 `--local` 改为写入项目级配置(如 `./.cursor/mcp.json`);`claude-desktop` 始终只能全局。
42
+
43
+ ### 2. 手动配置(进阶)
44
+
45
+ 如果想自己写 JSON,所有智能体都接受同一启动命令(`npx -y context-gatekeeper`)。
46
+
47
+ **Cursor**(`.cursor/mcp.json`):
48
+ ```json
49
+ {
50
+ "mcpServers": {
51
+ "context-gatekeeper": {
52
+ "command": "npx",
53
+ "args": ["-y", "context-gatekeeper"]
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ **Claude Desktop**(`~/Library/Application Support/Claude/claude_desktop_config.json`):
60
+ ```json
61
+ {
62
+ "mcpServers": {
63
+ "context-gatekeeper": {
64
+ "command": "npx",
65
+ "args": ["-y", "context-gatekeeper"]
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ **Claude Code**(`.mcp.json`):
72
+ ```json
73
+ {
74
+ "mcpServers": {
75
+ "context-gatekeeper": {
76
+ "command": "npx",
77
+ "args": ["-y", "context-gatekeeper"]
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ Windows 上 GUI 程序(Cursor、Claude Desktop)可能不继承 shell PATH。
84
+ 若 `npx` 找不到,可用 `cmd /c` 包裹,或使用 `where npx` 返回的绝对路径。
85
+
86
+ ### 3. 设置环境变量(可选)
87
+
88
+ ```bash
89
+ # 认证(Watchdog 安全)
90
+ export CG_READ_TOKEN="your-read-only-token"
91
+ export CG_WRITE_TOKEN="your-write-token"
92
+ export CG_WATCHDOG_TOKEN="your-watchdog-token"
93
+
94
+ # 语义搜索(可选,默认为 TF-IDF)
95
+ export OPENAI_API_KEY="your-openai-key"
96
+ # 或使用 Cohere
97
+ export COHERE_API_KEY="your-cohere-key"
98
+ ```
99
+
100
+ ### 4. 开始使用
101
+
102
+ ```typescript
103
+ // 存储一条约束
104
+ memory_store({
105
+ content: "所有新文件必须使用 TypeScript 严格模式",
106
+ priority: "constraint",
107
+ project_tags: ["typescript", "code-style"]
108
+ });
109
+
110
+ // 检索相关记忆
111
+ memory_recall({
112
+ query: "TypeScript 配置",
113
+ limit: 5,
114
+ search_mode: "hybrid"
115
+ });
116
+ ```
117
+
118
+ ## 功能特性
119
+
120
+ - **通用 MCP**:兼容所有 MCP 智能体
121
+ - **14+ 工具**:存储、检索、搜索、锚定、压缩、批量操作、智能检索、双模式执行
122
+ - **智能搜索**:关键词 + 语义(TF-IDF/OpenAI/Cohere)+ 混合 + BM25 搜索
123
+ - **优先级系统**:anchored > constraint > decision > preference > fact
124
+ - **自动去重**:基于 SHA256 哈希的重复检测
125
+ - **上下文压缩**:自动清理低优先级记忆
126
+ - **Watchdog 安全**:基于 Token 的工具权限控制
127
+ - **After-Chain 自动化**:工具执行后自动触发后续工具
128
+ - **纯 JavaScript**:无需原生编译(sql.js)
129
+ - **结构化日志**:JSON 格式输出,便于日志聚合
130
+
131
+ ### Phase 1:AutoSkill 风格约束提取
132
+
133
+ 从对话轮次中分析提取持久化约束:
134
+
135
+ ```typescript
136
+ memory_extract({
137
+ conversation_turns: [
138
+ { role: "user", content: "我始终偏好使用 TypeScript 严格模式。" },
139
+ { role: "assistant", content: "我将启用严格模式。" }
140
+ ],
141
+ extract_mode: "all",
142
+ min_confidence: 0.5
143
+ });
144
+ ```
145
+
146
+ ### Phase 2:MemGate 风格智能检索
147
+
148
+ 语义相似度 + 学习到的相关性模式:
149
+
150
+ ```typescript
151
+ intelligent_recall({
152
+ query: "API 实现指南",
153
+ conversation_context: "构建新的 REST 服务",
154
+ relevance_threshold: 0.07,
155
+ enable_soft_guidance: true
156
+ });
157
+ ```
158
+
159
+ ### Phase 3:MPR 风格双模式执行
160
+
161
+ 软引导 + 硬可接受性检查:
162
+
163
+ ```typescript
164
+ dual_mode_execute({
165
+ action: "使用 var 关键字定义这个变量",
166
+ context: "编写 JavaScript 代码",
167
+ mode: "dual",
168
+ soft_guidance_style: "concise"
169
+ });
170
+ ```
171
+
172
+ ## 安装配置
173
+
174
+ ### 一行命令通过 CLI 安装
175
+
176
+ 包自带 `context-gatekeeper-cli` 二进制,会自动检测本机所有支持的 MCP 智能体并把配置写入对应的配置文件。具体命令见 [快速开始](#快速开始)。卸载时运行 `context-gatekeeper-cli uninstall`。
177
+
178
+ ### 全局安装
179
+
180
+ ```bash
181
+ npm install -g context-gatekeeper
182
+ npm run build
183
+ ```
184
+
185
+ ### 本地安装
186
+
187
+ ```bash
188
+ npm install context-gatekeeper
189
+ npm run build
190
+ ```
191
+
192
+ ### 验证安装
193
+
194
+ ```bash
195
+ node dist/mcp/server.js --help
196
+ ```
197
+
198
+ ### CLI 参考
199
+
200
+ `context-gatekeeper-cli` 支持的子命令:
201
+
202
+ ```
203
+ context-gatekeeper-cli install [agent ...] [--all] [--local] [--cwd <dir>]
204
+ context-gatekeeper-cli uninstall [agent ...] [--all] [--local] [--cwd <dir>]
205
+ context-gatekeeper-cli status [--local] [--cwd <dir>]
206
+ context-gatekeeper-cli help
207
+ ```
208
+
209
+ 支持的智能体:`cursor`、`claude-desktop`、`cline`、`continue`、`claude-code`。
210
+
211
+ - `--all` 作用于所有智能体;没有传位置参数且没有 `--all` 时会报错。
212
+ - `--local` 写入项目级配置(如 `./.cursor/mcp.json`);`claude-desktop` 仅全局,会被跳过。
213
+ - `--cwd <dir>` 覆盖 `--local` 使用的项目根目录,便于在 CI 或 pre-commit hook 中脚本化安装。
214
+
215
+ ## 环境变量
216
+
217
+ ### 认证(Watchdog 安全)
218
+
219
+ | 变量 | 描述 | 必填 |
220
+ |------|------|------|
221
+ | `CG_READ_TOKEN` | 只读操作的 Token | 否 |
222
+ | `CG_WRITE_TOKEN` | 读写操作的 Token | 否 |
223
+ | `CG_WATCHDOG_TOKEN` | 完全访问 Token(绕过所有限制) | 否 |
224
+
225
+ 如果不设置 Token,服务器以宽容模式运行(所有工具可访问)。
226
+
227
+ ### 向量嵌入提供商
228
+
229
+ | 变量 | 描述 | 默认值 |
230
+ |------|------|--------|
231
+ | `OPENAI_API_KEY` | OpenAI API Key | - |
232
+ | `COHERE_API_KEY` | Cohere API Key | - |
233
+ | `OPENAI_EMBEDDING_BASE_URL` | 自定义 OpenAI 兼容端点 | https://api.openai.com/v1 |
234
+ | `CG_EMBEDDING_PROVIDER` | 嵌入提供商:`tfidf`、`openai`、`cohere` | `tfidf` |
235
+
236
+ ### 日志配置
237
+
238
+ | 变量 | 描述 | 默认值 |
239
+ |------|------|--------|
240
+ | `CG_LOG_LEVEL` | 最小日志级别:`trace`、`debug`、`info`、`warn`、`error` | `info` |
241
+ | `CG_LOG_PRETTY` | 格式化 JSON 输出(`true` 或 `1`) | - |
242
+ | `CG_LOG_TO_FILE` | 启用文件日志(`true` 或 `1`) | - |
243
+ | `CG_LOG_FILE_PATH` | 自定义日志文件路径 | `context-gatekeeper.log` |
244
+
245
+ 日志示例输出:
246
+ ```json
247
+ {"level":"info","timestamp":"2026-06-25T14:00:00.000Z","message":"Tool completed","data":{"tool":"memory_store","latencyMs":42,"success":true}}
248
+ ```
249
+
250
+ ### 数据库配置
251
+
252
+ | 变量 | 描述 | 默认值 |
253
+ |------|------|--------|
254
+ | `DATA_DIR` | 数据库文件位置 | 平台相关 |
255
+ | `CG_DB_FLUSH_INTERVAL_MS` | 定期刷新到磁盘的间隔(毫秒) | 30000 |
256
+
257
+ 默认 `DATA_DIR` 位置:
258
+ - **Windows**:`%APPDATA%/context-gatekeeper`
259
+ - **macOS**:`~/Library/Application Support/context-gatekeeper`
260
+ - **Linux**:`~/.context-gatekeeper`
261
+
262
+ ### 运行时配置
263
+
264
+ 使用 `configure_llm` 工具在运行时设置 LLM:
265
+
266
+ ```typescript
267
+ // 配置 OpenAI
268
+ configure_llm({
269
+ provider: "openai",
270
+ apiKey: "sk-...",
271
+ model: "gpt-4"
272
+ });
273
+
274
+ // 配置 Ollama(本地)
275
+ configure_llm({
276
+ provider: "ollama",
277
+ model: "llama3.2",
278
+ baseUrl: "http://localhost:11434"
279
+ });
280
+
281
+ // 配置 Anthropic
282
+ configure_llm({
283
+ provider: "anthropic",
284
+ apiKey: "sk-ant-...",
285
+ model: "claude-3-haiku"
286
+ });
287
+ ```
288
+
289
+ ## 工具参考
290
+
291
+ ### 记忆操作
292
+
293
+ | 工具 | 描述 | 所需权限 |
294
+ |------|------|----------|
295
+ | `memory_store` | 存储新记忆(带优先级) | write |
296
+ | `memory_recall` | 检索记忆(4 种搜索模式) | read |
297
+ | `memory_search` | 全文搜索记忆 | read |
298
+ | `memory_anchor` | 永久锚定记忆 | write |
299
+ | `memory_stats` | 获取记忆统计 | read |
300
+
301
+ ### 批量操作
302
+
303
+ | 工具 | 描述 | 所需权限 |
304
+ |------|------|----------|
305
+ | `memory_store_batch` | 批量存储记忆 | write |
306
+ | `memory_delete_batch` | 批量删除记忆 | write |
307
+
308
+ ### 上下文管理
309
+
310
+ | 工具 | 描述 | 所需权限 |
311
+ |------|------|----------|
312
+ | `memory_report_usage` | 报告 Token 使用量 | read |
313
+ | `context_compress` | 触发上下文压缩 | write |
314
+
315
+ ### Phase 2 智能检索
316
+
317
+ | 工具 | 描述 | 所需权限 |
318
+ |------|------|----------|
319
+ | `intelligent_recall` | MemGate 风格相关性检索 | read |
320
+
321
+ ### Phase 1 约束提取
322
+
323
+ | 工具 | 描述 | 所需权限 |
324
+ |------|------|----------|
325
+ | `memory_extract` | 从对话中提取约束 | read |
326
+
327
+ ### Phase 3 双模式执行
328
+
329
+ | 工具 | 描述 | 所需权限 |
330
+ |------|------|----------|
331
+ | `dual_mode_execute` | 双模式验证操作 | read(软)/ write(硬) |
332
+
333
+ ### 会话管理
334
+
335
+ | 工具 | 描述 | 所需权限 |
336
+ |------|------|----------|
337
+ | `session_store` | 存储会话数据 | write |
338
+ | `session_get` | 获取会话数据 | read |
339
+ | `session_list` | 列出会话键 | read |
340
+ | `session_delete` | 删除会话数据 | write |
341
+
342
+ ### 配置与基础设施
343
+
344
+ | 工具 | 描述 | 所需权限 |
345
+ |------|------|----------|
346
+ | `configure_llm` | 配置 LLM 提供商 | write |
347
+ | `after_chain_configure` | 配置 After-Chain 编排 | write |
348
+ | `project_create` | 创建项目 | write |
349
+ | `db_flush` | 刷新内存数据库到磁盘 | write |
350
+ | `watchdog_manage` | 管理 Watchdog Token | write |
351
+
352
+ ### GDPR 合规
353
+
354
+ | 工具 | 描述 | 所需权限 |
355
+ |------|------|----------|
356
+ | `gdpr_export` | 导出所有记忆为 JSON | write |
357
+ | `gdpr_delete` | 删除记忆 | write |
358
+ | `data_summary` | 获取数据摘要 | read |
359
+
360
+ ### 搜索模式
361
+
362
+ `memory_recall` 工具支持 4 种搜索模式:
363
+
364
+ | 模式 | 描述 | 适用场景 |
365
+ |------|------|----------|
366
+ | `keyword` | 简单子字符串匹配 | 快速、精确匹配 |
367
+ | `semantic` | TF-IDF/OpenAI/Cohere 嵌入向量 | 基于语义的检索 |
368
+ | `hybrid` | 关键词 + 语义组合 | 平衡准确性 |
369
+ | `bm25` | Okapi BM25 排序 | 文本检索 |
370
+
371
+ ### After-Chain 配置
372
+
373
+ ```typescript
374
+ // 列出所有链
375
+ after_chain_configure({ action: "list_chains" });
376
+
377
+ // 禁用某个链
378
+ after_chain_configure({
379
+ action: "toggle_chain",
380
+ chain_name: "store-then-extract",
381
+ enabled: false
382
+ });
383
+
384
+ // 注册自定义链
385
+ after_chain_configure({
386
+ action: "register_chain",
387
+ chain_config: {
388
+ name: "store-then-recall",
389
+ triggerTool: "memory_store",
390
+ followupTool: "memory_recall",
391
+ async: true
392
+ }
393
+ });
394
+ ```
395
+
396
+ ## 跨智能体兼容性测试
397
+
398
+ 除了单元测试,Context Gatekeeper 还附带一个端到端兼容性测试框架,在**与每个受支持的智能体运行时完全一致的 JSON-RPC 契约**下验证 MCP 服务器的行为。
399
+
400
+ ### 测试范围
401
+
402
+ 针对每个受支持的智能体,框架对全新 spawn 的 MCP 服务器进程执行四类场景:
403
+
404
+ | 类别 | 覆盖内容 | 重要性 |
405
+ |------|---------|--------|
406
+ | **协议握手** | `initialize` + `tools/list` + 读工具调用 | 确认 MCP 服务器能启动、暴露 24 个工具、正确响应 JSON-RPC |
407
+ | **CRUD** | `memory_store` -> `memory_recall` 往返、4 种搜索模式(`keyword`、`semantic`、`hybrid`、`auto`)、`memory_delete_batch`、`memory_anchor` | 验证智能体 stdio 传输下的核心存储路径 |
408
+ | **After-Chain** | `after_chain_configure` list/toggle + `memory_store` 触发 `memory_extract` 后续 | 确认进程内链式执行器在跨智能体场景下正确连接 |
409
+ | **Watchdog** | 4x4 权限矩阵:`no-token-strict`、`read-token`、`write-token`、`watchdog-token` 对读写探针 | 确保 Token 强制符合安全模型 |
410
+
411
+ ### 受支持的智能体
412
+
413
+ - **Cursor** - 使用 `.cursor/mcp.json` 配置格式
414
+ - **Claude Desktop** - 使用 `claude_desktop_config.json` 配置格式
415
+ - **Cline** - VSCode workspace MCP 服务器配置
416
+ - **Continue.dev** - 使用 `experimental.modelContextProtocolServers` 配置格式
417
+ - **Claude Code** - 使用 `.mcp.json` 配置格式
418
+
419
+ ### 运行测试
420
+
421
+ ```bash
422
+ # 对全部 5 个智能体运行
423
+ npm run test:agents
424
+
425
+ # 对单个智能体运行
426
+ npm run test:agents -- cursor
427
+
428
+ # 对子集运行
429
+ npm run test:agents -- cursor cline claude-code
430
+ ```
431
+
432
+ ### 工作原理
433
+
434
+ 每个适配器将智能体的精确 MCP 配置 JSON 写入临时目录,然后使用智能体运行时使用的相同 `command` + `args` spawn MCP 服务器。框架通过 stdio 发送真实的 MCP JSON-RPC 消息 - 与 Cursor、Claude Desktop 等内部使用的线协议完全相同。
435
+
436
+ 关键设计选择:
437
+
438
+ - **每个场景一个进程**:每个测试用例 spawn 新的 MCP 服务器,因此失败指向具体场景,而非共享状态
439
+ - **隔离的 `DATA_DIR`**:每个智能体拥有独立的数据库目录,消除跨测试污染
440
+ - **通过环境变量注入 Token**:`CG_READ_TOKEN`、`CG_WRITE_TOKEN`、`CG_WATCHDOG_TOKEN` 作为环境变量传递,与生产部署一致
441
+ - **两种报告格式**:JSON 用于 CI 集成,Markdown 用于人工审查
442
+
443
+ ### 报告输出
444
+
445
+ 运行结束后,`scripts/reports/` 下生成两个文件:
446
+
447
+ ```
448
+ scripts/reports/report-<timestamp>.json # 机器可读
449
+ scripts/reports/report-<timestamp>.md # 人类可读
450
+ ```
451
+
452
+ Markdown 报告按智能体分组:
453
+
454
+ ```
455
+ ## cursor
456
+ Status: 14/14 passed
457
+
458
+ | Tool | Success | Latency (ms) | Error |
459
+ |------|---------|--------------|-------|
460
+ | initialize+memory_stats | OK | 528 | |
461
+ | memory_store | OK | 9 | |
462
+ ...
463
+ ```
464
+
465
+ ### 运行示例
466
+
467
+ ```
468
+ [cursor] handshake ... handshakeOk=true tools=24 sampleOk=true 528ms
469
+ [cursor] CRUD ... 8/8 scenarios passed (2508ms)
470
+ [cursor] after-chain ... allOk=true 479ms
471
+ [cursor] watchdog ... 4/4 cells ok (9985ms)
472
+
473
+ [cross-agent-test] Summary:
474
+ Total: 70
475
+ Passed: 70
476
+ Failed: 0
477
+ ```
478
+
479
+ ### 添加新智能体
480
+
481
+ 1. 创建 `scripts/agents/my-agent.ts`,继承 `BaseAgentAdapter`
482
+ 2. 实现 `name` 和 `buildSpawnCommand()`(或重写 `spawnAgent()`)
483
+ 3. 添加静态 `buildMcpConfig(mcpBin)` 返回智能体的精确配置格式
484
+ 4. 在 `scripts/cross-agent-test.ts` 注册适配器
485
+
486
+ 框架通过 `buildAdapters()` 自动接入任何新适配器。
487
+
488
+ ## 架构设计
489
+
490
+ ### 系统概览
491
+
492
+ ```
493
+ ┌─────────────────────────────────────────────────────────────────┐
494
+ │ MCP 智能体(Cursor / Claude / Cline / Continue / Claude Code) │
495
+ └─────────────────────────┬───────────────────────────────────────┘
496
+ │ MCP 协议
497
+
498
+ ┌─────────────────────────────────────────────────────────────────┐
499
+ │ Context Gatekeeper MCP 服务器 │
500
+ │ │
501
+ │ ┌──────────────────────────────────────────────────────────┐ │
502
+ │ │ Watchdog 安全 │ │
503
+ │ │ Token 验证 → 权限检查 → 工具执行 │ │
504
+ │ └──────────────────────────────────────────────────────────┘ │
505
+ │ │
506
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
507
+ │ │ After-Chain │ │ LLM │ │ 嵌入向量提供商 │ │
508
+ │ │ 执行器 │ │ 服务 │ │ (TF-IDF/OpenAI/Cohere) │ │
509
+ │ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
510
+ │ │
511
+ │ ┌──────────────────────────────────────────────────────────┐ │
512
+ │ │ 记忆服务 / 约束提取器 / 智能检索 / 双模式执行 │ │
513
+ │ └──────────────────────────────────────────────────────────┘ │
514
+ └─────────────────────────┬───────────────────────────────────────┘
515
+
516
+
517
+ ┌─────────────────────────────────────────────────────────────────┐
518
+ │ SQLite 数据库(sql.js) │
519
+ │ WAL 模式 + 定期刷新 │
520
+ └─────────────────────────────────────────────────────────────────┘
521
+ ```
522
+
523
+ ### Watchdog 架构
524
+
525
+ Watchdog 安全模型提供基于 Token 的访问控制:
526
+
527
+ ```
528
+ ┌──────────────────────────────────────────────────────────────────┐
529
+ │ Token 类型: │
530
+ ├──────────────────────────────────────────────────────────────────┤
531
+ │ ┌────────────┬────────────┬──────────────────────┐ │
532
+ │ │ read │ write │ watchdog │ │
533
+ │ ├────────────┼────────────┼──────────────────────┤ │
534
+ │ │ recall │ store │ 所有操作 │ │
535
+ │ │ search │ anchor │ (绕过所有 │ │
536
+ │ │ stats │ compress │ 限制) │ │
537
+ │ │ intelligent│ batch │ │ │
538
+ │ │ recall │ delete │ │ │
539
+ │ │ (软模式)│ create │ │ │
540
+ │ └────────────┴────────────┴──────────────────────┘ │
541
+ └──────────────────────────────────────────────────────────────────┘
542
+ ```
543
+
544
+ ### 目录结构
545
+
546
+ ```
547
+ src/
548
+ ├── mcp/ # MCP 服务器实现
549
+ │ ├── server.ts # 主入口
550
+ │ └── tools/ # 工具实现
551
+ │ ├── memory-store.ts
552
+ │ ├── memory-recall.ts
553
+ │ ├── memory-extract.ts # Phase 1: AutoSkill
554
+ │ ├── intelligent-recall.ts # Phase 2: MemGate
555
+ │ ├── dual-mode-execute.ts # Phase 3: MPR
556
+ │ └── ...
557
+ ├── schema/ # 数据库 Schema 和操作
558
+ ├── services/ # 业务逻辑
559
+ │ ├── embedding-provider.ts # 多提供商支持
560
+ │ ├── llm.ts # LLM 总结
561
+ │ └── compressor/ # 上下文压缩
562
+ ├── utils/
563
+ │ ├── db.ts # 数据库包装(sql.js)
564
+ │ ├── watchdog.ts # 基于 Token 的安全
565
+ │ ├── after-chain.ts # 工具链编排
566
+ │ └── logger.ts # 结构化 JSON 日志
567
+ └── models/ # 类型定义
568
+ ```
569
+
570
+ ## 故障排查
571
+
572
+ ### "Permission denied" 错误
573
+
574
+ **原因**:使用只读 Token 调用写操作工具。
575
+
576
+ **解决方案**:
577
+ 1. 检查智能体使用的 Token 类型
578
+ 2. 升级到写操作 Token
579
+ 3. 或使用 watchdog Token 获取完全访问权限
580
+
581
+ ### "Database not initialized" 错误
582
+
583
+ **原因**:数据库在使用前未正确初始化。
584
+
585
+ **解决方案**:
586
+ ```bash
587
+ export DATA_DIR="/path/to/writable/directory"
588
+ ```
589
+
590
+ ### 记忆去重不生效
591
+
592
+ **原因**:语义相同的记忆内容产生了不同的哈希值。
593
+
594
+ **解决方案**:
595
+ 1. 使用完全相同的措辞存储重复记忆
596
+ 2. 哈希基于标准化后的内容计算——细微差异会产生不同哈希
597
+
598
+ ### 搜索返回意外结果
599
+
600
+ **原因**:搜索模式或嵌入提供商选择不当。
601
+
602
+ **解决方案**:
603
+ ```typescript
604
+ // 精确匹配,使用 keyword 模式
605
+ memory_recall({
606
+ query: "精确短语",
607
+ search_mode: "keyword"
608
+ });
609
+
610
+ // 语义检索,使用 hybrid 或 semantic
611
+ memory_recall({
612
+ query: "认证相关",
613
+ search_mode: "hybrid"
614
+ });
615
+ ```
616
+
617
+ ### LLM 提取失败
618
+
619
+ **原因**:LLM 提供商未配置或 API 错误。
620
+
621
+ **解决方案**:
622
+ ```typescript
623
+ // 先配置 LLM
624
+ configure_llm({
625
+ provider: "openai",
626
+ apiKey: "your-key",
627
+ model: "gpt-3.5-turbo"
628
+ });
629
+
630
+ // LLM 不可用时,回退到规则提取
631
+ memory_extract({
632
+ conversation_turns: [...],
633
+ min_confidence: 0.3 // 降低阈值
634
+ });
635
+ ```
636
+
637
+ ## 最佳实践
638
+
639
+ ### 优先级分配
640
+
641
+ | 优先级 | 使用场景 |
642
+ |--------|----------|
643
+ | `anchored` | 绝对不能违反的关键规则 |
644
+ | `constraint` | API 约定、编码规范 |
645
+ | `decision` | 架构选择、已确定的方案 |
646
+ | `preference` | 代码风格、工作流偏好 |
647
+ | `fact` | 项目详情、历史上下文 |
648
+
649
+ ```typescript
650
+ // 好:关键的全项目约束
651
+ memory_store({
652
+ content: "永远不要直接提交到 main 分支",
653
+ priority: "anchored",
654
+ project_tags: ["git-workflow"]
655
+ });
656
+
657
+ // 避免:常识性知识
658
+ memory_store({
659
+ content: "JavaScript 使用 camelCase",
660
+ priority: "fact"
661
+ });
662
+ ```
663
+
664
+ ### 项目标签策略
665
+
666
+ 使用一致的、分层的标签:
667
+
668
+ ```typescript
669
+ memory_store({
670
+ content: "新功能使用 React 18",
671
+ project_tags: ["frontend:react", "version:18"]
672
+ });
673
+ ```
674
+
675
+ ### Token 预算管理
676
+
677
+ 定期监控和压缩上下文:
678
+
679
+ ```typescript
680
+ // 接近上限时报告 Token 使用量
681
+ memory_report_usage({
682
+ used_tokens: 85000,
683
+ max_tokens: 100000
684
+ });
685
+
686
+ // 需要时触发压缩
687
+ context_compress({
688
+ target_ratio: 0.6 // 目标占用上限的 60%
689
+ });
690
+ ```
691
+
692
+ ### Watchdog Token 安全
693
+
694
+ 遵循最小权限原则:
695
+
696
+ ```bash
697
+ # 主智能体:只读 Token
698
+ CG_READ_TOKEN="agent-read-token"
699
+
700
+ # 管理员智能体:写 Token
701
+ CG_WRITE_TOKEN="admin-write-token"
702
+
703
+ # 紧急情况:watchdog Token(仅限可信进程)
704
+ CG_WATCHDOG_TOKEN="emergency-token"
705
+ ```
706
+
707
+ ### 搜索模式选择
708
+
709
+ | 场景 | 推荐模式 |
710
+ |------|----------|
711
+ | 精确代码片段 | `keyword` |
712
+ | 已知约束文本 | `keyword` |
713
+ | 通用概念检索 | `semantic` 或 `hybrid` |
714
+ | 多样化知识检索 | `bm25` |
715
+ | 意图驱动的检索 | `hybrid` |
716
+
717
+ ### After-Chain 使用
718
+
719
+ 启用自动工具链以减少手动工具调用:
720
+
721
+ ```typescript
722
+ // 存储记忆后自动提取约束
723
+ after_chain_configure({
724
+ action: "toggle_chain",
725
+ chain_name: "store-then-extract",
726
+ enabled: true
727
+ });
728
+ ```
729
+
730
+ ## 开发指南
731
+
732
+ ```bash
733
+ # 安装依赖
734
+ npm install
735
+
736
+ # 构建 TypeScript
737
+ npm run build
738
+
739
+ # 运行单元测试
740
+ npm test
741
+
742
+ # 跨智能体兼容性测试(在所有受支持的智能体中 spawn MCP 服务器)
743
+ npm run test:agents
744
+
745
+ # 针对单个智能体的跨智能体测试
746
+ npm run test:agents -- cursor
747
+
748
+ # 监视模式(自动重构建)
749
+ npm run dev
750
+
751
+ # 类型检查
752
+ npm run lint
753
+ ```
754
+
755
+ 详情参见[跨智能体兼容性测试](#跨智能体兼容性测试),了解 `scripts/agents/` 和 `scripts/tests/` 下的测试框架。
756
+
757
+ ## 技术灵感
758
+
759
+ - **AutoSkill**:从对话中提取经验的技能
760
+ - **MemGate**:推理时通过学习到的相关性过滤记忆
761
+ - **Meta-Policy Reflexion (MPR)**:软引导 + 硬可接受性检查
762
+
763
+ ## 许可证
764
+
765
+ MIT