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,278 @@
1
+ /**
2
+ * Multi-Agent Sharing Service
3
+ * Enables sharing memories and sessions across agents
4
+ */
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ import { getDatabase, query, run } from '../utils/db.js';
7
+ import { DatabaseError } from '../utils/errors.js';
8
+ import { getMemory } from '../schema/memory.js';
9
+ export function initMultiAgentSharing() {
10
+ const db = getDatabase();
11
+ try {
12
+ // Shared memories table
13
+ db.run(`
14
+ CREATE TABLE IF NOT EXISTS shared_memories (
15
+ id TEXT PRIMARY KEY,
16
+ memory_id TEXT NOT NULL,
17
+ shared_by_agent_id TEXT NOT NULL,
18
+ shared_to_agent_id TEXT NOT NULL,
19
+ shared_to_project_id TEXT NOT NULL,
20
+ permission TEXT NOT NULL CHECK (permission IN ('read', 'read_write', 'admin')),
21
+ shared_at TEXT NOT NULL DEFAULT (datetime('now')),
22
+ expires_at TEXT,
23
+ FOREIGN KEY (memory_id) REFERENCES memories(id)
24
+ )
25
+ `);
26
+ db.run(`CREATE INDEX IF NOT EXISTS idx_shared_memories_to_agent ON shared_memories(shared_to_agent_id)`);
27
+ db.run(`CREATE INDEX IF NOT EXISTS idx_shared_memories_to_project ON shared_memories(shared_to_project_id)`);
28
+ db.run(`CREATE INDEX IF NOT EXISTS idx_shared_memories_memory ON shared_memories(memory_id)`);
29
+ // Share tokens table (for one-time or limited-use shares)
30
+ db.run(`
31
+ CREATE TABLE IF NOT EXISTS share_tokens (
32
+ token TEXT PRIMARY KEY,
33
+ memory_id TEXT NOT NULL,
34
+ shared_by_agent_id TEXT NOT NULL,
35
+ permission TEXT NOT NULL CHECK (permission IN ('read', 'read_write')),
36
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
37
+ expires_at TEXT,
38
+ use_count INTEGER NOT NULL DEFAULT 0,
39
+ max_uses INTEGER,
40
+ FOREIGN KEY (memory_id) REFERENCES memories(id)
41
+ )
42
+ `);
43
+ db.run(`CREATE INDEX IF NOT EXISTS idx_share_tokens_memory ON share_tokens(memory_id)`);
44
+ }
45
+ catch (error) {
46
+ throw new DatabaseError('Failed to initialize multi-agent sharing', error);
47
+ }
48
+ }
49
+ // ============ Direct Sharing ============
50
+ /**
51
+ * Share a memory with specific agents
52
+ */
53
+ export function shareMemoryToAgents(memoryId, sharedByAgentId, targetAgentIds, targetProjectId, permission = 'read', expiresAt) {
54
+ const records = [];
55
+ for (const agentId of targetAgentIds) {
56
+ const record = shareMemory(memoryId, sharedByAgentId, agentId, targetProjectId, permission, expiresAt);
57
+ records.push(record);
58
+ }
59
+ return records;
60
+ }
61
+ /**
62
+ * Share a memory to a project (all agents in project)
63
+ */
64
+ export function shareMemoryToProject(memoryId, sharedByAgentId, targetProjectId, permission = 'read', expiresAt) {
65
+ // Use '*' as the agent ID to indicate project-wide sharing
66
+ return shareMemory(memoryId, sharedByAgentId, '*', targetProjectId, permission, expiresAt);
67
+ }
68
+ /**
69
+ * Internal share memory function
70
+ */
71
+ function shareMemory(memoryId, sharedByAgentId, sharedToAgentId, sharedToProjectId, permission, expiresAt) {
72
+ const id = uuidv4();
73
+ const now = new Date().toISOString();
74
+ try {
75
+ run(`INSERT INTO shared_memories (id, memory_id, shared_by_agent_id, shared_to_agent_id, shared_to_project_id, permission, shared_at, expires_at)
76
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
77
+ id,
78
+ memoryId,
79
+ sharedByAgentId,
80
+ sharedToAgentId,
81
+ sharedToProjectId,
82
+ permission,
83
+ now,
84
+ expiresAt?.toISOString() || null
85
+ ]);
86
+ return {
87
+ id,
88
+ memoryId,
89
+ sharedByAgentId,
90
+ sharedToAgentId,
91
+ sharedToProjectId,
92
+ permission,
93
+ sharedAt: new Date(now),
94
+ expiresAt: expiresAt || null
95
+ };
96
+ }
97
+ catch (error) {
98
+ throw new DatabaseError('Failed to share memory', error);
99
+ }
100
+ }
101
+ /**
102
+ * Get shared memories for an agent
103
+ */
104
+ export function getSharedMemoriesForAgent(agentId, projectId, includeExpired = false) {
105
+ try {
106
+ let sql = `
107
+ SELECT s.*, m.content, m.priority, m.project_tags, m.anchored, m.access_count, m.version, m.updated_by, m.parent_id, m.lineage, m.created_at as memory_created_at, m.updated_at as memory_updated_at, m.expires_at as memory_expires_at, m.deleted
108
+ FROM shared_memories s
109
+ JOIN memories m ON s.memory_id = m.id
110
+ WHERE (s.shared_to_agent_id = ? OR s.shared_to_agent_id = '*')
111
+ AND m.deleted = 0
112
+ `;
113
+ const params = [agentId];
114
+ if (projectId) {
115
+ sql += ' AND s.shared_to_project_id = ?';
116
+ params.push(projectId);
117
+ }
118
+ if (!includeExpired) {
119
+ sql += ' AND (s.expires_at IS NULL OR datetime(s.expires_at) > datetime(?))';
120
+ params.push(new Date().toISOString());
121
+ }
122
+ sql += ' ORDER BY s.shared_at DESC';
123
+ const rows = query(sql, params);
124
+ return rows.map(row => ({
125
+ id: row.id,
126
+ memoryId: row.memory_id,
127
+ sharedByAgentId: row.shared_by_agent_id,
128
+ sharedToAgentId: row.shared_to_agent_id,
129
+ sharedToProjectId: row.shared_to_project_id,
130
+ permission: row.permission,
131
+ sharedAt: new Date(row.shared_at),
132
+ expiresAt: row.expires_at ? new Date(row.expires_at) : null,
133
+ memory: mapMemoryRow(row)
134
+ }));
135
+ }
136
+ catch (error) {
137
+ throw new DatabaseError('Failed to get shared memories', error);
138
+ }
139
+ }
140
+ /**
141
+ * Revoke a shared memory
142
+ */
143
+ export function revokeSharedMemory(shareId) {
144
+ try {
145
+ run(`DELETE FROM shared_memories WHERE id = ?`, [shareId]);
146
+ }
147
+ catch (error) {
148
+ throw new DatabaseError('Failed to revoke shared memory', error);
149
+ }
150
+ }
151
+ /**
152
+ * Revoke all shares of a memory
153
+ */
154
+ export function revokeAllSharesForMemory(memoryId) {
155
+ try {
156
+ const result = run(`DELETE FROM shared_memories WHERE memory_id = ?`, [memoryId]);
157
+ return result.changes;
158
+ }
159
+ catch (error) {
160
+ throw new DatabaseError('Failed to revoke shared memories', error);
161
+ }
162
+ }
163
+ // ============ Token-Based Sharing ============
164
+ /**
165
+ * Create a share token for a memory
166
+ */
167
+ export function createShareToken(memoryId, sharedByAgentId, permission = 'read', options = {}) {
168
+ const token = uuidv4();
169
+ const now = new Date().toISOString();
170
+ try {
171
+ run(`INSERT INTO share_tokens (token, memory_id, shared_by_agent_id, permission, created_at, expires_at, max_uses)
172
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [
173
+ token,
174
+ memoryId,
175
+ sharedByAgentId,
176
+ permission,
177
+ now,
178
+ options.expiresAt?.toISOString() || null,
179
+ options.maxUses || null
180
+ ]);
181
+ return {
182
+ token,
183
+ memoryId,
184
+ sharedByAgentId,
185
+ permission,
186
+ createdAt: new Date(now),
187
+ expiresAt: options.expiresAt || null,
188
+ useCount: 0,
189
+ maxUses: options.maxUses || null
190
+ };
191
+ }
192
+ catch (error) {
193
+ throw new DatabaseError('Failed to create share token', error);
194
+ }
195
+ }
196
+ /**
197
+ * Redeem a share token
198
+ */
199
+ export function redeemShareToken(token) {
200
+ try {
201
+ // Get token
202
+ const tokenRows = query(`SELECT * FROM share_tokens WHERE token = ?`, [token]);
203
+ if (tokenRows.length === 0) {
204
+ return null;
205
+ }
206
+ const tokenRow = tokenRows[0];
207
+ const now = new Date();
208
+ // Check expiration
209
+ if (tokenRow.expires_at && new Date(tokenRow.expires_at) < now) {
210
+ return null;
211
+ }
212
+ // Check max uses
213
+ if (tokenRow.max_uses !== null && tokenRow.use_count >= tokenRow.max_uses) {
214
+ return null;
215
+ }
216
+ // Get memory
217
+ const memory = getMemory(tokenRow.memory_id);
218
+ if (!memory) {
219
+ return null;
220
+ }
221
+ // Increment use count
222
+ run(`UPDATE share_tokens SET use_count = use_count + 1 WHERE token = ?`, [token]);
223
+ return {
224
+ memory,
225
+ permission: tokenRow.permission
226
+ };
227
+ }
228
+ catch (error) {
229
+ throw new DatabaseError('Failed to redeem share token', error);
230
+ }
231
+ }
232
+ /**
233
+ * Delete expired tokens
234
+ */
235
+ export function cleanupExpiredTokens() {
236
+ try {
237
+ const result = run(`DELETE FROM share_tokens WHERE expires_at IS NOT NULL AND datetime(expires_at) < datetime(?)`, [new Date().toISOString()]);
238
+ return result.changes;
239
+ }
240
+ catch (error) {
241
+ throw new DatabaseError('Failed to cleanup expired tokens', error);
242
+ }
243
+ }
244
+ function mapMemoryRow(row) {
245
+ return {
246
+ id: row.id,
247
+ userId: row.user_id,
248
+ agentId: row.agent_id,
249
+ projectId: row.project_id,
250
+ content: row.content,
251
+ priority: row.priority,
252
+ projectTags: JSON.parse(row.project_tags || '[]'),
253
+ anchored: row.anchored === 1,
254
+ accessCount: row.access_count,
255
+ version: row.version,
256
+ updatedBy: row.updated_by,
257
+ parentId: row.parent_id,
258
+ lineage: JSON.parse(row.lineage || '[]'),
259
+ createdAt: new Date(row.memory_created_at || row.created_at),
260
+ updatedAt: new Date(row.memory_updated_at || row.updated_at),
261
+ expiresAt: row.memory_expires_at ? new Date(row.memory_expires_at) : (row.expires_at ? new Date(row.expires_at) : null),
262
+ deleted: row.deleted === 1
263
+ };
264
+ }
265
+ // ============ Service Wrapper ============
266
+ export function getMultiAgentSharingService() {
267
+ return {
268
+ shareMemoryToAgents,
269
+ shareMemoryToProject,
270
+ getSharedMemoriesForAgent,
271
+ revokeSharedMemory,
272
+ revokeAllSharesForMemory,
273
+ createShareToken,
274
+ redeemShareToken,
275
+ cleanupExpiredTokens
276
+ };
277
+ }
278
+ //# sourceMappingURL=multi-agent-sharing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-agent-sharing.js","sourceRoot":"","sources":["../../src/services/multi-agent-sharing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Reranker Service
3
+ * Implements two-stage retrieval: recall candidates, then rerank with scoring
4
+ */
5
+ import { Memory, IsolationContext } from '../models/types.js';
6
+ export interface RerankConfig {
7
+ initialRecallLimit: number;
8
+ finalLimit: number;
9
+ rerankWeight: {
10
+ semantic: number;
11
+ keyword: number;
12
+ recency: number;
13
+ importance: number;
14
+ };
15
+ importanceThreshold: number;
16
+ }
17
+ export interface RerankedResult {
18
+ memory: Memory;
19
+ originalScore: number;
20
+ rerankedScore: number;
21
+ rerankFactors: {
22
+ semanticScore: number;
23
+ keywordScore: number;
24
+ recencyScore: number;
25
+ importanceScore: number;
26
+ };
27
+ }
28
+ export interface RerankedSearchResult {
29
+ results: RerankedResult[];
30
+ totalCandidates: number;
31
+ searchMode: string;
32
+ }
33
+ declare class RerankerService {
34
+ private config;
35
+ constructor(config?: Partial<RerankConfig>);
36
+ /**
37
+ * Two-stage retrieval with reranking
38
+ */
39
+ search(query: string, isolation?: IsolationContext, projectTags?: string[], mode?: 'semantic' | 'keyword' | 'hybrid'): Promise<RerankedSearchResult>;
40
+ /**
41
+ * Stage 1: Recall candidates using multiple strategies
42
+ */
43
+ private recallCandidates;
44
+ /**
45
+ * Stage 2: Rerank candidates using multiple signals
46
+ */
47
+ private rerank;
48
+ /**
49
+ * Compute individual reranking factors
50
+ */
51
+ private computeRerankFactors;
52
+ /**
53
+ * Compute semantic similarity score
54
+ */
55
+ private computeSemanticScore;
56
+ /**
57
+ * Compute keyword match score
58
+ */
59
+ private computeKeywordScore;
60
+ /**
61
+ * Compute recency score (exponential decay)
62
+ */
63
+ private computeRecencyScore;
64
+ /**
65
+ * Compute importance score
66
+ */
67
+ private computeImportanceScore;
68
+ /**
69
+ * Compute final score from factors
70
+ */
71
+ private computeFinalScore;
72
+ /**
73
+ * Filter results by importance threshold
74
+ */
75
+ filterByImportance(results: RerankedResult[]): RerankedResult[];
76
+ /**
77
+ * Get configuration
78
+ */
79
+ getConfig(): RerankConfig;
80
+ /**
81
+ * Update configuration
82
+ */
83
+ updateConfig(updates: Partial<RerankConfig>): void;
84
+ }
85
+ export declare function getRerankerService(config?: Partial<RerankConfig>): RerankerService;
86
+ export declare function resetRerankerService(): void;
87
+ export {};
88
+ //# sourceMappingURL=reranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../src/services/reranker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,YAAY;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAcD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAI9C;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,IAAI,GAAE,UAAU,GAAG,SAAS,GAAG,QAAmB,GACjD,OAAO,CAAC,oBAAoB,CAAC;IAchC;;OAEG;YACW,gBAAgB;IAkF9B;;OAEG;YACW,MAAM;IA2BpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IAI/D;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;CAGnD;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,eAAe,CAKlF;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Reranker Service
3
+ * Implements two-stage retrieval: recall candidates, then rerank with scoring
4
+ */
5
+ import { searchMemoriesVector, searchMemoriesHybrid, searchMemoriesBM25, listMemories } from '../schema/memory.js';
6
+ import { generateFixedEmbedding, generateFixedQueryEmbedding } from './embedding-fixed.js';
7
+ import { isHighPriority } from '../utils/priority.js';
8
+ const DEFAULT_RERANK_CONFIG = {
9
+ initialRecallLimit: 50,
10
+ finalLimit: 10,
11
+ rerankWeight: {
12
+ semantic: 0.4,
13
+ keyword: 0.3,
14
+ recency: 0.2,
15
+ importance: 0.1
16
+ },
17
+ importanceThreshold: 0.5
18
+ };
19
+ class RerankerService {
20
+ config;
21
+ constructor(config = {}) {
22
+ this.config = { ...DEFAULT_RERANK_CONFIG, ...config };
23
+ }
24
+ /**
25
+ * Two-stage retrieval with reranking
26
+ */
27
+ async search(query, isolation, projectTags, mode = 'hybrid') {
28
+ // Stage 1: Recall candidates
29
+ const candidates = await this.recallCandidates(query, isolation, projectTags, mode);
30
+ // Stage 2: Rerank
31
+ const reranked = await this.rerank(query, candidates, isolation);
32
+ return {
33
+ results: reranked.slice(0, this.config.finalLimit),
34
+ totalCandidates: candidates.length,
35
+ searchMode: mode
36
+ };
37
+ }
38
+ /**
39
+ * Stage 1: Recall candidates using multiple strategies
40
+ */
41
+ async recallCandidates(query, isolation, projectTags, mode = 'hybrid') {
42
+ const candidates = new Map();
43
+ const limit = this.config.initialRecallLimit;
44
+ // Semantic recall
45
+ if (mode === 'semantic' || mode === 'hybrid') {
46
+ try {
47
+ const queryEmbedding = generateFixedQueryEmbedding(query);
48
+ const semanticResults = searchMemoriesVector(queryEmbedding, projectTags, limit, 0.05, // Lower threshold for recall
49
+ isolation);
50
+ for (const result of semanticResults) {
51
+ candidates.set(result.id, { ...result, originalScore: result.similarity });
52
+ }
53
+ }
54
+ catch {
55
+ // Fallback to other methods
56
+ }
57
+ }
58
+ // Keyword recall
59
+ if (mode === 'keyword' || mode === 'hybrid') {
60
+ const keywordResults = searchMemoriesBM25(query, projectTags, limit, isolation);
61
+ for (const memory of keywordResults) {
62
+ if (!candidates.has(memory.id)) {
63
+ candidates.set(memory.id, { ...memory, originalScore: 0.5 });
64
+ }
65
+ }
66
+ }
67
+ // Hybrid recall
68
+ if (mode === 'hybrid') {
69
+ try {
70
+ const queryEmbedding = generateFixedQueryEmbedding(query);
71
+ const hybridResults = searchMemoriesHybrid(query, queryEmbedding, projectTags, limit, 0.5, 0.5, isolation);
72
+ for (const result of hybridResults) {
73
+ if (!candidates.has(result.id)) {
74
+ candidates.set(result.id, { ...result, originalScore: result.combinedScore });
75
+ }
76
+ }
77
+ }
78
+ catch {
79
+ // Ignore
80
+ }
81
+ }
82
+ // Add high-priority anchored memories regardless of search
83
+ const allMemories = listMemories(projectTags, isolation);
84
+ const anchoredHighPriority = allMemories.filter(m => m.anchored || isHighPriority(m.priority));
85
+ for (const memory of anchoredHighPriority) {
86
+ if (!candidates.has(memory.id)) {
87
+ candidates.set(memory.id, { ...memory, originalScore: 0.9 });
88
+ }
89
+ }
90
+ return Array.from(candidates.values());
91
+ }
92
+ /**
93
+ * Stage 2: Rerank candidates using multiple signals
94
+ */
95
+ async rerank(query, candidates, _isolation) {
96
+ const queryLower = query.toLowerCase();
97
+ const queryTerms = queryLower.split(/\s+/).filter(t => t.length > 2);
98
+ const reranked = [];
99
+ for (const candidate of candidates) {
100
+ const factors = this.computeRerankFactors(candidate, queryLower, queryTerms);
101
+ const rerankedScore = this.computeFinalScore(factors);
102
+ reranked.push({
103
+ memory: candidate,
104
+ originalScore: 'originalScore' in candidate ? candidate.originalScore : 0.5,
105
+ rerankedScore,
106
+ rerankFactors: factors
107
+ });
108
+ }
109
+ // Sort by reranked score
110
+ reranked.sort((a, b) => b.rerankedScore - a.rerankedScore);
111
+ return reranked;
112
+ }
113
+ /**
114
+ * Compute individual reranking factors
115
+ */
116
+ computeRerankFactors(memory, queryLower, queryTerms) {
117
+ // Semantic score (based on content similarity)
118
+ const semanticScore = this.computeSemanticScore(memory.content, queryLower);
119
+ // Keyword match score
120
+ const keywordScore = this.computeKeywordScore(memory.content, queryTerms);
121
+ // Recency score (decay over time)
122
+ const recencyScore = this.computeRecencyScore(memory.updatedAt);
123
+ // Importance score (based on priority and access patterns)
124
+ const importanceScore = this.computeImportanceScore(memory);
125
+ return {
126
+ semanticScore,
127
+ keywordScore,
128
+ recencyScore,
129
+ importanceScore
130
+ };
131
+ }
132
+ /**
133
+ * Compute semantic similarity score
134
+ */
135
+ computeSemanticScore(content, query) {
136
+ const contentEmbedding = generateFixedEmbedding(content);
137
+ const queryEmbedding = generateFixedQueryEmbedding(query);
138
+ // Compute cosine similarity
139
+ let dot = 0, normA = 0, normB = 0;
140
+ for (let i = 0; i < contentEmbedding.length && i < queryEmbedding.length; i++) {
141
+ dot += contentEmbedding[i] * queryEmbedding[i];
142
+ normA += contentEmbedding[i] * contentEmbedding[i];
143
+ normB += queryEmbedding[i] * queryEmbedding[i];
144
+ }
145
+ const cosine = normA > 0 && normB > 0 ? dot / (Math.sqrt(normA) * Math.sqrt(normB)) : 0;
146
+ return Math.max(0, Math.min(1, cosine));
147
+ }
148
+ /**
149
+ * Compute keyword match score
150
+ */
151
+ computeKeywordScore(content, queryTerms) {
152
+ if (queryTerms.length === 0)
153
+ return 0.5;
154
+ const contentLower = content.toLowerCase();
155
+ let matches = 0;
156
+ for (const term of queryTerms) {
157
+ if (contentLower.includes(term)) {
158
+ matches++;
159
+ }
160
+ }
161
+ return matches / queryTerms.length;
162
+ }
163
+ /**
164
+ * Compute recency score (exponential decay)
165
+ */
166
+ computeRecencyScore(updatedAt) {
167
+ const now = new Date();
168
+ const ageMs = now.getTime() - updatedAt.getTime();
169
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
170
+ // Exponential decay with half-life of 7 days
171
+ const halfLifeDays = 7;
172
+ const decay = Math.pow(0.5, ageDays / halfLifeDays);
173
+ return Math.max(0.1, Math.min(1, decay));
174
+ }
175
+ /**
176
+ * Compute importance score
177
+ */
178
+ computeImportanceScore(memory) {
179
+ // Base score from priority
180
+ const priorityScore = {
181
+ anchored: 1.0,
182
+ constraint: 0.9,
183
+ decision: 0.7,
184
+ preference: 0.5,
185
+ fact: 0.3
186
+ };
187
+ const baseScore = priorityScore[memory.priority] ?? 0.5;
188
+ // Boost for anchored memories
189
+ const anchoredBoost = memory.anchored ? 0.1 : 0;
190
+ // Boost for frequently accessed memories (logarithmic)
191
+ const accessBoost = Math.min(0.2, Math.log10(memory.accessCount + 1) * 0.1);
192
+ return Math.min(1, baseScore + anchoredBoost + accessBoost);
193
+ }
194
+ /**
195
+ * Compute final score from factors
196
+ */
197
+ computeFinalScore(factors) {
198
+ const { semantic, keyword, recency, importance } = this.config.rerankWeight;
199
+ return (factors.semanticScore * semantic +
200
+ factors.keywordScore * keyword +
201
+ factors.recencyScore * recency +
202
+ factors.importanceScore * importance);
203
+ }
204
+ /**
205
+ * Filter results by importance threshold
206
+ */
207
+ filterByImportance(results) {
208
+ return results.filter(r => r.rerankFactors.importanceScore >= this.config.importanceThreshold);
209
+ }
210
+ /**
211
+ * Get configuration
212
+ */
213
+ getConfig() {
214
+ return { ...this.config };
215
+ }
216
+ /**
217
+ * Update configuration
218
+ */
219
+ updateConfig(updates) {
220
+ this.config = { ...this.config, ...updates };
221
+ }
222
+ }
223
+ // ============ Singleton ============
224
+ let rerankerInstance = null;
225
+ export function getRerankerService(config) {
226
+ if (!rerankerInstance) {
227
+ rerankerInstance = new RerankerService(config);
228
+ }
229
+ return rerankerInstance;
230
+ }
231
+ export function resetRerankerService() {
232
+ rerankerInstance = null;
233
+ }
234
+ //# sourceMappingURL=reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/services/reranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Triple Extraction Pipeline
3
+ * Extracts knowledge graph triples (entity-relation-entity) from memories and conversations
4
+ */
5
+ import { getEntity, KGExtractionResult } from '../schema/knowledge-graph.js';
6
+ import type { Memory } from '../models/types.js';
7
+ export interface ExtractionConfig {
8
+ minConfidence?: number;
9
+ entityTypes?: string[];
10
+ includeFacts?: boolean;
11
+ }
12
+ /**
13
+ * Extract knowledge graph triples from a memory
14
+ */
15
+ export declare function extractTriplesFromMemory(memory: Memory, config?: ExtractionConfig): KGExtractionResult;
16
+ /**
17
+ * Extract triples from multiple memories
18
+ */
19
+ export declare function extractTriplesFromMemories(memories: Memory[], config?: ExtractionConfig): KGExtractionResult;
20
+ /**
21
+ * Extract triples from conversation turns
22
+ */
23
+ export interface ConversationTurn {
24
+ role: 'user' | 'assistant';
25
+ content: string;
26
+ }
27
+ export declare function extractTriplesFromConversation(turns: ConversationTurn[], config?: ExtractionConfig): KGExtractionResult;
28
+ /**
29
+ * Get context for a memory from the knowledge graph
30
+ */
31
+ export declare function getMemoryContext(_memoryId: string): {
32
+ relatedEntities: ReturnType<typeof getEntity>[];
33
+ relatedRelations: Awaited<ReturnType<typeof import('../schema/knowledge-graph.js').getRelationsByEntity>>;
34
+ };
35
+ //# sourceMappingURL=triple-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triple-extractor.d.ts","sourceRoot":"","sources":["../../src/services/triple-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAA4C,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAyHjD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,gBAAqB,GAAG,kBAAkB,CAuG1G;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,gBAAqB,GAAG,kBAAkB,CAqChH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,gBAAgB,EAAE,EACzB,MAAM,GAAE,gBAAqB,GAC5B,kBAAkB,CA2BpB;AA0BD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG;IACnD,eAAe,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,EAAE,CAAC;IAChD,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAC,cAAc,8BAA8B,EAAE,oBAAoB,CAAC,CAAC,CAAC;CAC3G,CAOA"}