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
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Triple Extraction Pipeline
3
+ * Extracts knowledge graph triples (entity-relation-entity) from memories and conversations
4
+ */
5
+ import { getEntity, createEntity, createRelation, createFact } from '../schema/knowledge-graph.js';
6
+ const ENTITY_PATTERNS = [
7
+ // Project names: "project X", "using project Y"
8
+ {
9
+ pattern: /\b(?:project|app|tool|framework|library|package)\s+([A-Z][a-zA-Z0-9_-]+)/gi,
10
+ entityType: 'project',
11
+ extractor: (m) => ({ name: m[1], properties: { context: 'mentioned' } })
12
+ },
13
+ // Framework names: "React", "Vue", "Angular"
14
+ {
15
+ pattern: /\b(React|Vue|Angular|Svelte|Next\.?js|Nuxt\.?js|Laravel|Django|Flask|Rails|Spring)\b/gi,
16
+ entityType: 'framework',
17
+ extractor: (m) => ({ name: m[1] })
18
+ },
19
+ // Language names
20
+ {
21
+ pattern: /\b(JavaScript|TypeScript|Python|Java|Go|Rust|C\+\+|Ruby|PHP|Swift|Kotlin)\b/gi,
22
+ entityType: 'language',
23
+ extractor: (m) => ({ name: m[1] })
24
+ },
25
+ // Database names
26
+ {
27
+ pattern: /\b(PostgreSQL|MySQL|SQLite|MongoDB|Redis|Elasticsearch|Neo4j|Pinecone|Weaviate|Chroma)\b/gi,
28
+ entityType: 'database',
29
+ extractor: (m) => ({ name: m[1] })
30
+ },
31
+ // Cloud services
32
+ {
33
+ pattern: /\b(AWS|Azure|GCP|AWS\s+S3|AWS\s+Lambda|Azure\s+Functions|Google\s+Cloud)\b/gi,
34
+ entityType: 'cloud_service',
35
+ extractor: (m) => ({ name: m[1] })
36
+ },
37
+ // API names
38
+ {
39
+ pattern: /\b(OpenAI|Anthropic|Hugging\s+Face|Replicate|Cohere)\b/gi,
40
+ entityType: 'api_service',
41
+ extractor: (m) => ({ name: m[1] })
42
+ },
43
+ // User preferences (sentences with preference indicators)
44
+ {
45
+ pattern: /(?:I\s+prefer|I\s+like|I\s+wish|I\s+hate|I\s+always\s+use|I\s+never\s+use)\s+([^.]+)/gi,
46
+ entityType: 'preference',
47
+ extractor: (m) => ({ name: m[1].trim(), properties: { type: 'user_preference' } })
48
+ },
49
+ // Requirement sentences
50
+ {
51
+ pattern: /(?:must|should|need to|has to|requires|ensure)\s+([^.]+)/gi,
52
+ entityType: 'requirement',
53
+ extractor: (m) => ({ name: m[1].trim(), properties: { type: 'constraint' } })
54
+ },
55
+ // Decision sentences
56
+ {
57
+ pattern: /(?:decided|chose|selected|picked|going with|will use)\s+([^.]+)/gi,
58
+ entityType: 'decision',
59
+ extractor: (m) => ({ name: m[1].trim(), properties: { type: 'decision' } })
60
+ },
61
+ ];
62
+ const RELATION_PATTERNS = [
63
+ // uses/uses technology
64
+ {
65
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+(?:uses|using|uses\s+the)\s+([A-Z][a-zA-Z0-9_-]+)/gi,
66
+ relationType: 'uses',
67
+ extractor: (m) => ({ source: m[1], target: m[2] })
68
+ },
69
+ // depends on
70
+ {
71
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+depends\s+on\s+([A-Z][a-zA-Z0-9_-]+)/gi,
72
+ relationType: 'depends_on',
73
+ extractor: (m) => ({ source: m[1], target: m[2] })
74
+ },
75
+ // built with
76
+ {
77
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+built\s+with\s+([A-Z][a-zA-Z0-9_-]+)/gi,
78
+ relationType: 'built_with',
79
+ extractor: (m) => ({ source: m[1], target: m[2] })
80
+ },
81
+ // stored in
82
+ {
83
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+(?:stored|persisted|saved)\s+in\s+([A-Z][a-zA-Z0-9_-]+)/gi,
84
+ relationType: 'stored_in',
85
+ extractor: (m) => ({ source: m[1], target: m[2] })
86
+ },
87
+ // hosted on
88
+ {
89
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+hosted\s+(?:on|in)\s+([A-Z][a-zA-Z0-9_-]+)/gi,
90
+ relationType: 'hosted_on',
91
+ extractor: (m) => ({ source: m[1], target: m[2] })
92
+ },
93
+ // implements
94
+ {
95
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+implements\s+([A-Z][a-zA-Z0-9_-]+)/gi,
96
+ relationType: 'implements',
97
+ extractor: (m) => ({ source: m[1], target: m[2] })
98
+ },
99
+ // follows
100
+ {
101
+ pattern: /\b([A-Z][a-zA-Z0-9_-]+)\s+follows?\s+([A-Z][a-zA-Z0-9_-]+)/gi,
102
+ relationType: 'follows',
103
+ extractor: (m) => ({ source: m[1], target: m[2] })
104
+ },
105
+ ];
106
+ const DEFAULT_CONFIG = {
107
+ minConfidence: 0.5,
108
+ includeFacts: true
109
+ };
110
+ /**
111
+ * Extract knowledge graph triples from a memory
112
+ */
113
+ export function extractTriplesFromMemory(memory, config = {}) {
114
+ const { minConfidence = 0.5, includeFacts = true } = { ...DEFAULT_CONFIG, ...config };
115
+ const content = memory.content;
116
+ const sourceMemoryId = memory.id;
117
+ const entities = [];
118
+ const relations = [];
119
+ const facts = [];
120
+ const seenEntities = new Map();
121
+ const seenRelations = new Map();
122
+ // Extract entities
123
+ for (const pattern of ENTITY_PATTERNS) {
124
+ if (config.entityTypes && !config.entityTypes.includes(pattern.entityType)) {
125
+ continue;
126
+ }
127
+ let match;
128
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
129
+ while ((match = regex.exec(content)) !== null) {
130
+ const extracted = pattern.extractor(match);
131
+ const entityKey = `${extracted.name.toLowerCase()}:${pattern.entityType}`;
132
+ if (!seenEntities.has(entityKey)) {
133
+ seenEntities.set(entityKey, true);
134
+ const entity = createEntity({
135
+ name: extracted.name,
136
+ type: pattern.entityType,
137
+ properties: extracted.properties,
138
+ sourceMemoryId,
139
+ confidence: minConfidence + 0.1
140
+ });
141
+ entities.push(entity);
142
+ // Create facts for entity properties
143
+ if (includeFacts && extracted.properties) {
144
+ for (const [predicate, value] of Object.entries(extracted.properties)) {
145
+ facts.push(createFact({
146
+ entityId: entity.id,
147
+ predicate,
148
+ value: String(value),
149
+ sourceMemoryId,
150
+ confidence: minConfidence + 0.1
151
+ }));
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ // Extract relations
158
+ for (const pattern of RELATION_PATTERNS) {
159
+ let match;
160
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
161
+ while ((match = regex.exec(content)) !== null) {
162
+ const extracted = pattern.extractor(match);
163
+ const sourceEntity = findOrCreateEntity(extracted.source, 'entity', entities);
164
+ const targetEntity = findOrCreateEntity(extracted.target, 'entity', entities);
165
+ const relationKey = `${sourceEntity.id}:${pattern.relationType}:${targetEntity.id}`;
166
+ if (!seenRelations.has(relationKey)) {
167
+ seenRelations.set(relationKey, true);
168
+ // Create source entity if doesn't exist
169
+ let sourceKGEntity = getEntity(sourceEntity.id);
170
+ if (!sourceKGEntity) {
171
+ sourceKGEntity = createEntity({
172
+ name: extracted.source,
173
+ type: 'entity',
174
+ sourceMemoryId,
175
+ confidence: minConfidence
176
+ });
177
+ }
178
+ // Create target entity if doesn't exist
179
+ let targetKGEntity = getEntity(targetEntity.id);
180
+ if (!targetKGEntity) {
181
+ targetKGEntity = createEntity({
182
+ name: extracted.target,
183
+ type: 'entity',
184
+ sourceMemoryId,
185
+ confidence: minConfidence
186
+ });
187
+ }
188
+ const relation = createRelation({
189
+ sourceEntityId: sourceKGEntity.id,
190
+ targetEntityId: targetKGEntity.id,
191
+ relationType: pattern.relationType,
192
+ properties: extracted.properties,
193
+ sourceMemoryId,
194
+ confidence: minConfidence + 0.1,
195
+ bidirectional: pattern.bidirectional
196
+ });
197
+ relations.push(relation);
198
+ }
199
+ }
200
+ }
201
+ return { entities, relations, facts };
202
+ }
203
+ /**
204
+ * Extract triples from multiple memories
205
+ */
206
+ export function extractTriplesFromMemories(memories, config = {}) {
207
+ const result = {
208
+ entities: [],
209
+ relations: [],
210
+ facts: []
211
+ };
212
+ for (const memory of memories) {
213
+ const extracted = extractTriplesFromMemory(memory, config);
214
+ result.entities.push(...extracted.entities);
215
+ result.relations.push(...extracted.relations);
216
+ result.facts.push(...extracted.facts);
217
+ }
218
+ // Deduplicate
219
+ const seenEntityIds = new Set();
220
+ result.entities = result.entities.filter(e => {
221
+ if (seenEntityIds.has(e.id))
222
+ return false;
223
+ seenEntityIds.add(e.id);
224
+ return true;
225
+ });
226
+ const seenRelationIds = new Set();
227
+ result.relations = result.relations.filter(r => {
228
+ if (seenRelationIds.has(r.id))
229
+ return false;
230
+ seenRelationIds.add(r.id);
231
+ return true;
232
+ });
233
+ const seenFactIds = new Set();
234
+ result.facts = result.facts.filter(f => {
235
+ if (seenFactIds.has(f.id))
236
+ return false;
237
+ seenFactIds.add(f.id);
238
+ return true;
239
+ });
240
+ return result;
241
+ }
242
+ export function extractTriplesFromConversation(turns, config = {}) {
243
+ // Only process user turns for constraints/preferences
244
+ const userTurns = turns.filter(t => t.role === 'user');
245
+ const content = userTurns.map(t => t.content).join(' ');
246
+ // Create a synthetic memory-like object
247
+ const syntheticMemory = {
248
+ id: `conv-${Date.now()}`,
249
+ userId: 'default',
250
+ agentId: 'default',
251
+ projectId: 'default',
252
+ content,
253
+ priority: 'fact',
254
+ projectTags: [],
255
+ anchored: false,
256
+ accessCount: 0,
257
+ version: 1,
258
+ updatedBy: null,
259
+ parentId: null,
260
+ lineage: [],
261
+ createdAt: new Date(),
262
+ updatedAt: new Date(),
263
+ expiresAt: null,
264
+ deleted: false
265
+ };
266
+ return extractTriplesFromMemory(syntheticMemory, config);
267
+ }
268
+ function findOrCreateEntity(name, type, extractedEntities) {
269
+ const existing = extractedEntities.find(e => e.name.toLowerCase() === name.toLowerCase() && e.type === type);
270
+ if (existing) {
271
+ return existing;
272
+ }
273
+ // Create a temporary entity
274
+ const tempEntity = {
275
+ id: `temp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
276
+ name,
277
+ type
278
+ };
279
+ extractedEntities.push(tempEntity);
280
+ return tempEntity;
281
+ }
282
+ /**
283
+ * Get context for a memory from the knowledge graph
284
+ */
285
+ export function getMemoryContext(_memoryId) {
286
+ // This would integrate with the KG schema once memory-to-entity mappings exist
287
+ // For now, return empty context
288
+ return {
289
+ relatedEntities: [],
290
+ relatedRelations: []
291
+ };
292
+ }
293
+ //# sourceMappingURL=triple-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triple-extractor.js","sourceRoot":"","sources":["../../src/services/triple-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Vector provider abstraction for external embedding services
3
+ * Supports multiple backends: local (TF-IDF), OpenAI, Ollama, Anthropic
4
+ */
5
+ export type VectorProviderType = 'local' | 'openai' | 'ollama' | 'anthropic';
6
+ export interface EmbeddingResult {
7
+ embedding: number[];
8
+ model: string;
9
+ dimension: number;
10
+ provider: VectorProviderType;
11
+ }
12
+ export interface VectorProviderConfig {
13
+ provider: VectorProviderType;
14
+ apiKey?: string;
15
+ baseUrl?: string;
16
+ model?: string;
17
+ dimension?: number;
18
+ }
19
+ export interface VectorProvider {
20
+ readonly type: VectorProviderType;
21
+ readonly model: string;
22
+ readonly dimension: number;
23
+ /**
24
+ * Generate embedding for a single text
25
+ */
26
+ embed(text: string): Promise<EmbeddingResult>;
27
+ /**
28
+ * Generate embeddings for multiple texts (batch)
29
+ */
30
+ embedBatch(texts: string[]): Promise<EmbeddingResult[]>;
31
+ /**
32
+ * Check if the provider is available/healthy
33
+ */
34
+ healthCheck(): Promise<boolean>;
35
+ }
36
+ export declare function getCurrentProvider(): VectorProvider | null;
37
+ export declare function getCurrentConfig(): VectorProviderConfig | null;
38
+ export declare function configureProvider(config: VectorProviderConfig): VectorProvider;
39
+ export declare function getDefaultProvider(): VectorProvider;
40
+ //# sourceMappingURL=vector-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-provider.d.ts","sourceRoot":"","sources":["../../src/services/vector-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE9C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAExD;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAKD,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAE1D;AAED,wBAAgB,gBAAgB,IAAI,oBAAoB,GAAG,IAAI,CAE9D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAsB9E;AA4ND,wBAAgB,kBAAkB,IAAI,cAAc,CAKnD"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Vector provider abstraction for external embedding services
3
+ * Supports multiple backends: local (TF-IDF), OpenAI, Ollama, Anthropic
4
+ */
5
+ import { VECTOR_DIM } from './embedding.js';
6
+ let currentProvider = null;
7
+ let currentConfig = null;
8
+ export function getCurrentProvider() {
9
+ return currentProvider;
10
+ }
11
+ export function getCurrentConfig() {
12
+ return currentConfig;
13
+ }
14
+ export function configureProvider(config) {
15
+ const { provider, apiKey, baseUrl, model, dimension } = config;
16
+ switch (provider) {
17
+ case 'local':
18
+ currentProvider = new LocalVectorProvider(model, dimension);
19
+ break;
20
+ case 'openai':
21
+ currentProvider = new OpenAIVectorProvider(apiKey, baseUrl, model || 'text-embedding-3-small', dimension);
22
+ break;
23
+ case 'ollama':
24
+ currentProvider = new OllamaVectorProvider(baseUrl || 'http://localhost:11434', model || 'nomic-embed-text', dimension);
25
+ break;
26
+ case 'anthropic':
27
+ currentProvider = new AnthropicVectorProvider(apiKey, model, dimension);
28
+ break;
29
+ default:
30
+ throw new Error(`Unknown vector provider: ${provider}`);
31
+ }
32
+ currentConfig = config;
33
+ return currentProvider;
34
+ }
35
+ // ============ Local (TF-IDF) Provider ============
36
+ class LocalVectorProvider {
37
+ type = 'local';
38
+ model;
39
+ dimension;
40
+ constructor(model = 'local-tfidf', dimension = VECTOR_DIM) {
41
+ this.model = model;
42
+ this.dimension = dimension;
43
+ }
44
+ async embed(text) {
45
+ const { generateEmbedding } = await import('./embedding.js');
46
+ return {
47
+ embedding: generateEmbedding(text),
48
+ model: this.model,
49
+ dimension: this.dimension,
50
+ provider: 'local'
51
+ };
52
+ }
53
+ async embedBatch(texts) {
54
+ const { generateEmbedding } = await import('./embedding.js');
55
+ return texts.map(text => ({
56
+ embedding: generateEmbedding(text, texts),
57
+ model: this.model,
58
+ dimension: this.dimension,
59
+ provider: 'local'
60
+ }));
61
+ }
62
+ async healthCheck() {
63
+ return true;
64
+ }
65
+ }
66
+ // ============ OpenAI Provider ============
67
+ class OpenAIVectorProvider {
68
+ type = 'openai';
69
+ model;
70
+ dimension;
71
+ apiKey;
72
+ baseUrl;
73
+ constructor(apiKey, baseUrl, model = 'text-embedding-3-small', dimension = 1536) {
74
+ this.apiKey = apiKey;
75
+ this.baseUrl = baseUrl || 'https://api.openai.com/v1';
76
+ this.model = model;
77
+ this.dimension = dimension;
78
+ }
79
+ async embed(text) {
80
+ const response = await fetch(`${this.baseUrl}/embeddings`, {
81
+ method: 'POST',
82
+ headers: {
83
+ 'Content-Type': 'application/json',
84
+ 'Authorization': `Bearer ${this.apiKey}`
85
+ },
86
+ body: JSON.stringify({
87
+ input: text,
88
+ model: this.model
89
+ })
90
+ });
91
+ if (!response.ok) {
92
+ throw new Error(`OpenAI API error: ${response.status}`);
93
+ }
94
+ const data = await response.json();
95
+ const embedding = data.data[0]?.embedding || new Array(this.dimension).fill(0);
96
+ return {
97
+ embedding,
98
+ model: this.model,
99
+ dimension: embedding.length,
100
+ provider: 'openai'
101
+ };
102
+ }
103
+ async embedBatch(texts) {
104
+ const response = await fetch(`${this.baseUrl}/embeddings`, {
105
+ method: 'POST',
106
+ headers: {
107
+ 'Content-Type': 'application/json',
108
+ 'Authorization': `Bearer ${this.apiKey}`
109
+ },
110
+ body: JSON.stringify({
111
+ input: texts,
112
+ model: this.model
113
+ })
114
+ });
115
+ if (!response.ok) {
116
+ throw new Error(`OpenAI API error: ${response.status}`);
117
+ }
118
+ const data = await response.json();
119
+ return data.data.map(item => ({
120
+ embedding: item.embedding,
121
+ model: this.model,
122
+ dimension: item.embedding.length,
123
+ provider: 'openai'
124
+ }));
125
+ }
126
+ async healthCheck() {
127
+ try {
128
+ const response = await fetch(`${this.baseUrl}/models`, {
129
+ headers: { 'Authorization': `Bearer ${this.apiKey}` }
130
+ });
131
+ return response.ok;
132
+ }
133
+ catch {
134
+ return false;
135
+ }
136
+ }
137
+ }
138
+ // ============ Ollama Provider ============
139
+ class OllamaVectorProvider {
140
+ type = 'ollama';
141
+ model;
142
+ dimension;
143
+ baseUrl;
144
+ constructor(baseUrl = 'http://localhost:11434', model = 'nomic-embed-text', dimension = 768) {
145
+ this.baseUrl = baseUrl;
146
+ this.model = model;
147
+ this.dimension = dimension;
148
+ }
149
+ async embed(text) {
150
+ const response = await fetch(`${this.baseUrl}/api/embeddings`, {
151
+ method: 'POST',
152
+ headers: { 'Content-Type': 'application/json' },
153
+ body: JSON.stringify({
154
+ model: this.model,
155
+ prompt: text
156
+ })
157
+ });
158
+ if (!response.ok) {
159
+ throw new Error(`Ollama API error: ${response.status}`);
160
+ }
161
+ const data = await response.json();
162
+ return {
163
+ embedding: data.embedding,
164
+ model: this.model,
165
+ dimension: data.embedding.length,
166
+ provider: 'ollama'
167
+ };
168
+ }
169
+ async embedBatch(texts) {
170
+ const results = [];
171
+ for (const text of texts) {
172
+ results.push(await this.embed(text));
173
+ }
174
+ return results;
175
+ }
176
+ async healthCheck() {
177
+ try {
178
+ const response = await fetch(`${this.baseUrl}/api/tags`);
179
+ return response.ok;
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ }
186
+ // ============ Anthropic Provider ============
187
+ class AnthropicVectorProvider {
188
+ type = 'anthropic';
189
+ model;
190
+ dimension;
191
+ constructor(_apiKey, model = 'claude-3-5-sonnet-20241022', dimension = 1024) {
192
+ this.model = model;
193
+ this.dimension = dimension;
194
+ }
195
+ async embed(_text) {
196
+ // Anthropic doesn't have a public embeddings API yet
197
+ // Fall back to local provider
198
+ const { generateEmbedding } = await import('./embedding.js');
199
+ return {
200
+ embedding: generateEmbedding(_text),
201
+ model: 'anthropic-fallback',
202
+ dimension: this.dimension,
203
+ provider: 'local'
204
+ };
205
+ }
206
+ async embedBatch(texts) {
207
+ const results = [];
208
+ for (const text of texts) {
209
+ results.push(await this.embed(text));
210
+ }
211
+ return results;
212
+ }
213
+ async healthCheck() {
214
+ // Anthropic doesn't have embeddings API, so always returns false for direct use
215
+ return false;
216
+ }
217
+ }
218
+ // ============ Default Provider ============
219
+ export function getDefaultProvider() {
220
+ if (!currentProvider) {
221
+ currentProvider = new LocalVectorProvider();
222
+ }
223
+ return currentProvider;
224
+ }
225
+ //# sourceMappingURL=vector-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-provider.js","sourceRoot":"","sources":["../../src/services/vector-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * After-Chain 执行器
3
+ *
4
+ * 负责执行 After-Chain 编排逻辑:
5
+ * - 在工具返回后触发后续工具
6
+ * - 管理会话上下文(传递 conversation_turns 给 memory_extract)
7
+ */
8
+ /** 记录对话轮次(供 after-chain 使用) */
9
+ export declare function recordConversationTurn(role: 'user' | 'assistant', content: string): void;
10
+ /** 清空会话上下文 */
11
+ export declare function clearSessionContext(): void;
12
+ /** 工具处理器接口 */
13
+ interface ToolHandler {
14
+ (params: Record<string, unknown>): Promise<unknown>;
15
+ }
16
+ /** 注册工具处理器 */
17
+ export declare function registerToolHandler(toolName: string, handler: ToolHandler): void;
18
+ /** 执行 After-Chain 钩子 */
19
+ export declare function executeAfterChain(triggerTool: string, input: unknown, output: unknown): Promise<void>;
20
+ /** 从会话上下文获取最近的对话轮次 */
21
+ export declare function getRecentConversationTurns(limit?: number): Array<{
22
+ role: 'user' | 'assistant';
23
+ content: string;
24
+ }>;
25
+ export {};
26
+ //# sourceMappingURL=after-chain-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"after-chain-executor.d.ts","sourceRoot":"","sources":["../../src/utils/after-chain-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,+BAA+B;AAC/B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAUxF;AAED,cAAc;AACd,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,cAAc;AACd,UAAU,WAAW;IACnB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAKD,cAAc;AACd,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAEhF;AA8ED,wBAAwB;AACxB,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,sBAAsB;AACtB,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAGjH"}