mindgraph-core 0.1.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 (169) hide show
  1. package/dist/embeddings/embedder-interface.d.ts +15 -0
  2. package/dist/embeddings/embedder-interface.d.ts.map +1 -0
  3. package/dist/embeddings/embedder-interface.js +2 -0
  4. package/dist/embeddings/embedder-interface.js.map +1 -0
  5. package/dist/embeddings/ollama-embedder.d.ts +21 -0
  6. package/dist/embeddings/ollama-embedder.d.ts.map +1 -0
  7. package/dist/embeddings/ollama-embedder.js +78 -0
  8. package/dist/embeddings/ollama-embedder.js.map +1 -0
  9. package/dist/embeddings/transformers-embedder.d.ts +20 -0
  10. package/dist/embeddings/transformers-embedder.d.ts.map +1 -0
  11. package/dist/embeddings/transformers-embedder.js +61 -0
  12. package/dist/embeddings/transformers-embedder.js.map +1 -0
  13. package/dist/extraction/anthropic-extractor.d.ts +17 -0
  14. package/dist/extraction/anthropic-extractor.d.ts.map +1 -0
  15. package/dist/extraction/anthropic-extractor.js +43 -0
  16. package/dist/extraction/anthropic-extractor.js.map +1 -0
  17. package/dist/extraction/basic-extractor.d.ts +17 -0
  18. package/dist/extraction/basic-extractor.d.ts.map +1 -0
  19. package/dist/extraction/basic-extractor.js +135 -0
  20. package/dist/extraction/basic-extractor.js.map +1 -0
  21. package/dist/extraction/confidence-gate.d.ts +7 -0
  22. package/dist/extraction/confidence-gate.d.ts.map +1 -0
  23. package/dist/extraction/confidence-gate.js +13 -0
  24. package/dist/extraction/confidence-gate.js.map +1 -0
  25. package/dist/extraction/contradiction-detector.d.ts +46 -0
  26. package/dist/extraction/contradiction-detector.d.ts.map +1 -0
  27. package/dist/extraction/contradiction-detector.js +205 -0
  28. package/dist/extraction/contradiction-detector.js.map +1 -0
  29. package/dist/extraction/entity-index.d.ts +31 -0
  30. package/dist/extraction/entity-index.d.ts.map +1 -0
  31. package/dist/extraction/entity-index.js +90 -0
  32. package/dist/extraction/entity-index.js.map +1 -0
  33. package/dist/extraction/entity-resolver.d.ts +28 -0
  34. package/dist/extraction/entity-resolver.d.ts.map +1 -0
  35. package/dist/extraction/entity-resolver.js +111 -0
  36. package/dist/extraction/entity-resolver.js.map +1 -0
  37. package/dist/extraction/extractor-interface.d.ts +51 -0
  38. package/dist/extraction/extractor-interface.d.ts.map +1 -0
  39. package/dist/extraction/extractor-interface.js +2 -0
  40. package/dist/extraction/extractor-interface.js.map +1 -0
  41. package/dist/extraction/llm-extractor.d.ts +21 -0
  42. package/dist/extraction/llm-extractor.d.ts.map +1 -0
  43. package/dist/extraction/llm-extractor.js +97 -0
  44. package/dist/extraction/llm-extractor.js.map +1 -0
  45. package/dist/extraction/ollama-extractor.d.ts +18 -0
  46. package/dist/extraction/ollama-extractor.d.ts.map +1 -0
  47. package/dist/extraction/ollama-extractor.js +50 -0
  48. package/dist/extraction/ollama-extractor.js.map +1 -0
  49. package/dist/extraction/open-loop-detector.d.ts +24 -0
  50. package/dist/extraction/open-loop-detector.d.ts.map +1 -0
  51. package/dist/extraction/open-loop-detector.js +187 -0
  52. package/dist/extraction/open-loop-detector.js.map +1 -0
  53. package/dist/extraction/openai-extractor.d.ts +20 -0
  54. package/dist/extraction/openai-extractor.d.ts.map +1 -0
  55. package/dist/extraction/openai-extractor.js +44 -0
  56. package/dist/extraction/openai-extractor.js.map +1 -0
  57. package/dist/extraction/prompts/entity-extraction.d.ts +2 -0
  58. package/dist/extraction/prompts/entity-extraction.d.ts.map +1 -0
  59. package/dist/extraction/prompts/entity-extraction.js +42 -0
  60. package/dist/extraction/prompts/entity-extraction.js.map +1 -0
  61. package/dist/extraction/prompts/proposition-extraction.d.ts +2 -0
  62. package/dist/extraction/prompts/proposition-extraction.d.ts.map +1 -0
  63. package/dist/extraction/prompts/proposition-extraction.js +39 -0
  64. package/dist/extraction/prompts/proposition-extraction.js.map +1 -0
  65. package/dist/extraction/prompts/thought-extraction.d.ts +2 -0
  66. package/dist/extraction/prompts/thought-extraction.d.ts.map +1 -0
  67. package/dist/extraction/prompts/thought-extraction.js +41 -0
  68. package/dist/extraction/prompts/thought-extraction.js.map +1 -0
  69. package/dist/index.d.ts +41 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +33 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/ingestion/chunk-id.d.ts +27 -0
  74. package/dist/ingestion/chunk-id.d.ts.map +1 -0
  75. package/dist/ingestion/chunk-id.js +45 -0
  76. package/dist/ingestion/chunk-id.js.map +1 -0
  77. package/dist/ingestion/chunker.d.ts +29 -0
  78. package/dist/ingestion/chunker.d.ts.map +1 -0
  79. package/dist/ingestion/chunker.js +182 -0
  80. package/dist/ingestion/chunker.js.map +1 -0
  81. package/dist/ingestion/hasher.d.ts +7 -0
  82. package/dist/ingestion/hasher.d.ts.map +1 -0
  83. package/dist/ingestion/hasher.js +18 -0
  84. package/dist/ingestion/hasher.js.map +1 -0
  85. package/dist/ingestion/pipeline.d.ts +58 -0
  86. package/dist/ingestion/pipeline.d.ts.map +1 -0
  87. package/dist/ingestion/pipeline.js +653 -0
  88. package/dist/ingestion/pipeline.js.map +1 -0
  89. package/dist/models/citation.d.ts +2 -0
  90. package/dist/models/citation.d.ts.map +1 -0
  91. package/dist/models/citation.js +2 -0
  92. package/dist/models/citation.js.map +1 -0
  93. package/dist/models/extraction-result.d.ts +2 -0
  94. package/dist/models/extraction-result.d.ts.map +1 -0
  95. package/dist/models/extraction-result.js +2 -0
  96. package/dist/models/extraction-result.js.map +1 -0
  97. package/dist/models/query-result.d.ts +2 -0
  98. package/dist/models/query-result.d.ts.map +1 -0
  99. package/dist/models/query-result.js +2 -0
  100. package/dist/models/query-result.js.map +1 -0
  101. package/dist/query/answer-builder.d.ts +15 -0
  102. package/dist/query/answer-builder.d.ts.map +1 -0
  103. package/dist/query/answer-builder.js +51 -0
  104. package/dist/query/answer-builder.js.map +1 -0
  105. package/dist/query/citation-builder.d.ts +19 -0
  106. package/dist/query/citation-builder.d.ts.map +1 -0
  107. package/dist/query/citation-builder.js +54 -0
  108. package/dist/query/citation-builder.js.map +1 -0
  109. package/dist/query/graph-data.d.ts +39 -0
  110. package/dist/query/graph-data.d.ts.map +1 -0
  111. package/dist/query/graph-data.js +115 -0
  112. package/dist/query/graph-data.js.map +1 -0
  113. package/dist/query/graph-search.d.ts +43 -0
  114. package/dist/query/graph-search.d.ts.map +1 -0
  115. package/dist/query/graph-search.js +315 -0
  116. package/dist/query/graph-search.js.map +1 -0
  117. package/dist/query/query-engine.d.ts +41 -0
  118. package/dist/query/query-engine.d.ts.map +1 -0
  119. package/dist/query/query-engine.js +178 -0
  120. package/dist/query/query-engine.js.map +1 -0
  121. package/dist/query/semantic-search.d.ts +26 -0
  122. package/dist/query/semantic-search.d.ts.map +1 -0
  123. package/dist/query/semantic-search.js +132 -0
  124. package/dist/query/semantic-search.js.map +1 -0
  125. package/dist/schema/edge-types.d.ts +95 -0
  126. package/dist/schema/edge-types.d.ts.map +1 -0
  127. package/dist/schema/edge-types.js +6 -0
  128. package/dist/schema/edge-types.js.map +1 -0
  129. package/dist/schema/node-types.d.ts +100 -0
  130. package/dist/schema/node-types.d.ts.map +1 -0
  131. package/dist/schema/node-types.js +6 -0
  132. package/dist/schema/node-types.js.map +1 -0
  133. package/dist/schema/types.d.ts +134 -0
  134. package/dist/schema/types.d.ts.map +1 -0
  135. package/dist/schema/types.js +52 -0
  136. package/dist/schema/types.js.map +1 -0
  137. package/dist/schema/validation.d.ts +6 -0
  138. package/dist/schema/validation.d.ts.map +1 -0
  139. package/dist/schema/validation.js +140 -0
  140. package/dist/schema/validation.js.map +1 -0
  141. package/dist/storage/export-import.d.ts +28 -0
  142. package/dist/storage/export-import.d.ts.map +1 -0
  143. package/dist/storage/export-import.js +189 -0
  144. package/dist/storage/export-import.js.map +1 -0
  145. package/dist/storage/memory/memory-adapter.d.ts +36 -0
  146. package/dist/storage/memory/memory-adapter.d.ts.map +1 -0
  147. package/dist/storage/memory/memory-adapter.js +231 -0
  148. package/dist/storage/memory/memory-adapter.js.map +1 -0
  149. package/dist/storage/sqlite/graph-traversal.d.ts +11 -0
  150. package/dist/storage/sqlite/graph-traversal.d.ts.map +1 -0
  151. package/dist/storage/sqlite/graph-traversal.js +79 -0
  152. package/dist/storage/sqlite/graph-traversal.js.map +1 -0
  153. package/dist/storage/sqlite/query-builder.d.ts +8 -0
  154. package/dist/storage/sqlite/query-builder.d.ts.map +1 -0
  155. package/dist/storage/sqlite/query-builder.js +55 -0
  156. package/dist/storage/sqlite/query-builder.js.map +1 -0
  157. package/dist/storage/sqlite/sqlite-adapter.d.ts +53 -0
  158. package/dist/storage/sqlite/sqlite-adapter.d.ts.map +1 -0
  159. package/dist/storage/sqlite/sqlite-adapter.js +497 -0
  160. package/dist/storage/sqlite/sqlite-adapter.js.map +1 -0
  161. package/dist/storage/storage-interface.d.ts +64 -0
  162. package/dist/storage/storage-interface.d.ts.map +1 -0
  163. package/dist/storage/storage-interface.js +2 -0
  164. package/dist/storage/storage-interface.js.map +1 -0
  165. package/dist/utils/retry-fetch.d.ts +20 -0
  166. package/dist/utils/retry-fetch.d.ts.map +1 -0
  167. package/dist/utils/retry-fetch.js +71 -0
  168. package/dist/utils/retry-fetch.js.map +1 -0
  169. package/package.json +28 -0
@@ -0,0 +1,315 @@
1
+ import { NodeType, RelType } from '../schema/types.js';
2
+ const DEFAULT_AGENT_ID = 'agent:self';
3
+ /**
4
+ * Graph-based search for beliefs, contradictions, and temporal queries.
5
+ */
6
+ export class GraphSearch {
7
+ constructor(storage) {
8
+ this.storage = storage;
9
+ }
10
+ /**
11
+ * "What do I believe about X?"
12
+ * Finds propositions and thoughts related to a topic.
13
+ */
14
+ async queryBeliefs(topic, limit = 20) {
15
+ // Find entities/concepts matching the topic
16
+ const relatedNodes = await this.findTopicNodes(topic);
17
+ if (relatedNodes.length === 0) {
18
+ // Fallback: search propositions by keyword
19
+ return this.searchBeliefsByKeyword(topic, limit);
20
+ }
21
+ const beliefs = [];
22
+ for (const topicNode of relatedNodes) {
23
+ // Find propositions/thoughts ABOUT this entity/concept
24
+ const aboutEdges = await this.storage.queryEdges({
25
+ targetId: topicNode.id,
26
+ relType: RelType.ABOUT,
27
+ });
28
+ for (const edge of aboutEdges) {
29
+ const belief = await this.buildBeliefEntry(edge.sourceId);
30
+ if (belief)
31
+ beliefs.push(belief);
32
+ }
33
+ // Also find chunks that MENTION this entity and their derived propositions
34
+ const mentionEdges = await this.storage.queryEdges({
35
+ targetId: topicNode.id,
36
+ relType: RelType.MENTIONS,
37
+ });
38
+ for (const mentionEdge of mentionEdges) {
39
+ // Find propositions derived from this chunk
40
+ const derivedEdges = await this.storage.queryEdges({
41
+ targetId: mentionEdge.sourceId,
42
+ relType: RelType.DERIVED_FROM,
43
+ });
44
+ for (const derivedEdge of derivedEdges) {
45
+ const node = await this.storage.getNode(derivedEdge.sourceId);
46
+ if (node &&
47
+ (node.nodeType === NodeType.Proposition || node.nodeType === NodeType.Thought)) {
48
+ const belief = await this.buildBeliefEntry(node.id);
49
+ if (belief && !beliefs.find((b) => b.propositionId === belief.propositionId)) {
50
+ beliefs.push(belief);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ // Sort by confidence descending, then by date
57
+ beliefs.sort((a, b) => b.confidence - a.confidence);
58
+ return beliefs.slice(0, limit);
59
+ }
60
+ /**
61
+ * "Show contradictions about X"
62
+ * Finds conflicting proposition pairs about a topic.
63
+ */
64
+ async queryContradictions(topic) {
65
+ const beliefs = await this.queryBeliefs(topic, 100);
66
+ const contradictions = [];
67
+ for (const belief of beliefs) {
68
+ // Check if this proposition has CONTRADICTS edges
69
+ const contradictEdges = await this.storage.queryEdges({
70
+ sourceId: belief.propositionId,
71
+ relType: RelType.CONTRADICTS,
72
+ });
73
+ for (const edge of contradictEdges) {
74
+ const otherBelief = await this.buildBeliefEntry(edge.targetId);
75
+ if (otherBelief) {
76
+ // Avoid duplicates (A contradicts B = B contradicts A)
77
+ const alreadyFound = contradictions.some((c) => (c.propositionA.propositionId === belief.propositionId &&
78
+ c.propositionB.propositionId === otherBelief.propositionId) ||
79
+ (c.propositionA.propositionId === otherBelief.propositionId &&
80
+ c.propositionB.propositionId === belief.propositionId));
81
+ if (!alreadyFound) {
82
+ contradictions.push({
83
+ propositionA: belief,
84
+ propositionB: otherBelief,
85
+ edgeId: edge.id,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return contradictions;
92
+ }
93
+ /**
94
+ * "How has my view changed about X?"
95
+ * Returns beliefs ordered by note date.
96
+ */
97
+ async queryBeliefTimeline(topic) {
98
+ const beliefs = await this.queryBeliefs(topic, 100);
99
+ // Sort by noteDate ascending for chronological view
100
+ beliefs.sort((a, b) => a.noteDate.localeCompare(b.noteDate));
101
+ return beliefs;
102
+ }
103
+ /**
104
+ * Get all extracted objects for a specific note.
105
+ */
106
+ async getExtractionsForNote(notePath) {
107
+ // Find all chunks for this note
108
+ const noteNodes = await this.storage.queryNodes({
109
+ nodeType: NodeType.Note,
110
+ where: { path: notePath },
111
+ });
112
+ if (noteNodes.length === 0) {
113
+ return { entities: [], concepts: [], propositions: [], thoughts: [] };
114
+ }
115
+ const noteId = noteNodes[0].id;
116
+ const chunkEdges = await this.storage.queryEdges({
117
+ sourceId: noteId,
118
+ relType: RelType.HAS_CHUNK,
119
+ });
120
+ const entities = new Map();
121
+ const concepts = new Map();
122
+ const propositions = new Map();
123
+ const thoughts = new Map();
124
+ for (const chunkEdge of chunkEdges) {
125
+ // Find entities/concepts mentioned in this chunk
126
+ const mentionEdges = await this.storage.queryEdges({
127
+ sourceId: chunkEdge.targetId,
128
+ relType: RelType.MENTIONS,
129
+ });
130
+ for (const e of mentionEdges) {
131
+ const node = await this.storage.getNode(e.targetId);
132
+ if (node) {
133
+ if (node.nodeType === NodeType.Entity)
134
+ entities.set(node.id, node);
135
+ if (node.nodeType === NodeType.Concept)
136
+ concepts.set(node.id, node);
137
+ }
138
+ }
139
+ // Find propositions/thoughts derived from this chunk
140
+ const derivedEdges = await this.storage.queryEdges({
141
+ targetId: chunkEdge.targetId,
142
+ relType: RelType.DERIVED_FROM,
143
+ });
144
+ for (const e of derivedEdges) {
145
+ const node = await this.storage.getNode(e.sourceId);
146
+ if (node) {
147
+ if (node.nodeType === NodeType.Proposition)
148
+ propositions.set(node.id, node);
149
+ if (node.nodeType === NodeType.Thought)
150
+ thoughts.set(node.id, node);
151
+ }
152
+ }
153
+ }
154
+ return {
155
+ entities: Array.from(entities.values()),
156
+ concepts: Array.from(concepts.values()),
157
+ propositions: Array.from(propositions.values()),
158
+ thoughts: Array.from(thoughts.values()),
159
+ };
160
+ }
161
+ /**
162
+ * Build a belief card aggregating beliefs about a topic.
163
+ * Returns confidence, date range, citations, contradiction count.
164
+ */
165
+ async queryBeliefCard(topic) {
166
+ const beliefs = await this.queryBeliefs(topic, 50);
167
+ const entries = [];
168
+ for (const belief of beliefs) {
169
+ // Get all dates for this proposition
170
+ const allDates = belief.citations
171
+ .map((c) => c.notePath)
172
+ .filter(Boolean);
173
+ // Count contradictions
174
+ const contradictEdges = await this.storage.queryEdges({
175
+ sourceId: belief.propositionId,
176
+ relType: RelType.CONTRADICTS,
177
+ });
178
+ const reverseContradictEdges = await this.storage.queryEdges({
179
+ targetId: belief.propositionId,
180
+ relType: RelType.CONTRADICTS,
181
+ });
182
+ const contradictionCount = contradictEdges.length + reverseContradictEdges.length;
183
+ // Get top 3 citations
184
+ const topCitations = belief.citations.slice(0, 3);
185
+ entries.push({
186
+ propositionId: belief.propositionId,
187
+ statement: belief.statement,
188
+ confidence: belief.confidence,
189
+ firstSeen: belief.noteDate,
190
+ lastSeen: belief.noteDate,
191
+ citations: topCitations,
192
+ contradictionCount,
193
+ });
194
+ }
195
+ // Sort by confidence descending, take top 10
196
+ entries.sort((a, b) => b.confidence - a.confidence);
197
+ const topEntries = entries.slice(0, 10);
198
+ const allDates = topEntries.map((e) => e.firstSeen).filter(Boolean);
199
+ const avgConfidence = topEntries.length > 0
200
+ ? topEntries.reduce((s, e) => s + e.confidence, 0) / topEntries.length
201
+ : 0;
202
+ return {
203
+ topic,
204
+ entries: topEntries,
205
+ totalPropositions: beliefs.length,
206
+ avgConfidence: Math.round(avgConfidence * 100) / 100,
207
+ dateRange: {
208
+ from: allDates.length > 0 ? allDates.sort()[0] : '',
209
+ to: allDates.length > 0 ? allDates.sort().pop() : '',
210
+ },
211
+ };
212
+ }
213
+ // ─── Private helpers ─────────────────────────────────────────────
214
+ async findTopicNodes(topic) {
215
+ const topicLower = topic.toLowerCase();
216
+ const results = [];
217
+ // Search entities
218
+ const entities = await this.storage.queryNodes({ nodeType: NodeType.Entity });
219
+ for (const entity of entities) {
220
+ const name = entity.data.name;
221
+ const aliases = entity.data.aliases ?? [];
222
+ if (name.toLowerCase().includes(topicLower) ||
223
+ aliases.some((a) => a.toLowerCase().includes(topicLower))) {
224
+ results.push(entity);
225
+ }
226
+ }
227
+ // Search concepts
228
+ const concepts = await this.storage.queryNodes({ nodeType: NodeType.Concept });
229
+ for (const concept of concepts) {
230
+ const name = concept.data.name;
231
+ if (name.toLowerCase().includes(topicLower)) {
232
+ results.push(concept);
233
+ }
234
+ }
235
+ return results;
236
+ }
237
+ async searchBeliefsByKeyword(keyword, limit) {
238
+ const keywordLower = keyword.toLowerCase();
239
+ const beliefs = [];
240
+ // Search propositions by statement text
241
+ const propositions = await this.storage.queryNodes({
242
+ nodeType: NodeType.Proposition,
243
+ limit: limit * 2,
244
+ });
245
+ for (const prop of propositions) {
246
+ const data = prop.data;
247
+ if (data.statement.toLowerCase().includes(keywordLower)) {
248
+ const belief = await this.buildBeliefEntry(prop.id);
249
+ if (belief)
250
+ beliefs.push(belief);
251
+ }
252
+ }
253
+ // Search thoughts
254
+ const thoughts = await this.storage.queryNodes({
255
+ nodeType: NodeType.Thought,
256
+ limit: limit * 2,
257
+ });
258
+ for (const thought of thoughts) {
259
+ const data = thought.data;
260
+ if (data.statement.toLowerCase().includes(keywordLower)) {
261
+ const belief = await this.buildBeliefEntry(thought.id);
262
+ if (belief)
263
+ beliefs.push(belief);
264
+ }
265
+ }
266
+ return beliefs.slice(0, limit);
267
+ }
268
+ async buildBeliefEntry(nodeId) {
269
+ const node = await this.storage.getNode(nodeId);
270
+ if (!node)
271
+ return null;
272
+ const isProp = node.nodeType === NodeType.Proposition;
273
+ const isThought = node.nodeType === NodeType.Thought;
274
+ if (!isProp && !isThought)
275
+ return null;
276
+ const data = node.data;
277
+ // Get BELIEVES (for Proposition) or ENDORSES (for Thought) edge
278
+ const edgeRelType = isProp ? RelType.BELIEVES : RelType.ENDORSES;
279
+ const believesEdges = await this.storage.queryEdges({
280
+ sourceId: DEFAULT_AGENT_ID,
281
+ targetId: nodeId,
282
+ relType: edgeRelType,
283
+ });
284
+ const believesData = believesEdges.length > 0
285
+ ? believesEdges[0].data
286
+ : null;
287
+ // Get DERIVED_FROM edges to find provenance/citations
288
+ const derivedEdges = await this.storage.queryEdges({
289
+ sourceId: nodeId,
290
+ relType: RelType.DERIVED_FROM,
291
+ });
292
+ const citations = [];
293
+ for (const edge of derivedEdges) {
294
+ const edgeData = edge.data;
295
+ if (edgeData.provenance) {
296
+ citations.push({
297
+ notePath: edgeData.provenance.notePath,
298
+ startOffset: edgeData.provenance.startOffset,
299
+ endOffset: edgeData.provenance.endOffset,
300
+ quoteText: edgeData.provenance.quoteText,
301
+ chunkId: edgeData.provenance.chunkId,
302
+ });
303
+ }
304
+ }
305
+ return {
306
+ propositionId: nodeId,
307
+ statement: data.statement,
308
+ confidence: believesData?.confidence ?? data.confidence,
309
+ stance: isThought ? data.stance : 'for',
310
+ noteDate: believesData?.asOf ?? node.createdAt,
311
+ citations,
312
+ };
313
+ }
314
+ }
315
+ //# sourceMappingURL=graph-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-search.js","sourceRoot":"","sources":["../../src/query/graph-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { StorageAdapter } from '../storage/storage-interface.js';
2
+ import type { EmbeddingProvider } from '../embeddings/embedder-interface.js';
3
+ import type { QueryResult } from '../schema/types.js';
4
+ export type QueryMode = 'search' | 'beliefs' | 'contradictions' | 'timeline' | 'beliefCard' | 'openLoops';
5
+ export interface QueryOptions {
6
+ mode?: QueryMode;
7
+ topK?: number;
8
+ threshold?: number;
9
+ }
10
+ /**
11
+ * Hybrid retrieval orchestrator.
12
+ * Routes queries to the appropriate engine and builds cited results.
13
+ */
14
+ export declare class QueryEngine {
15
+ private storage;
16
+ private semanticSearch;
17
+ private graphSearch;
18
+ private citationBuilder;
19
+ private answerBuilder;
20
+ private openLoopDetector;
21
+ constructor(storage: StorageAdapter, embedder: EmbeddingProvider | null);
22
+ query(queryText: string, options?: QueryOptions): Promise<QueryResult>;
23
+ /**
24
+ * Get all extractions for a specific note.
25
+ */
26
+ getExtractionsForNote(notePath: string): Promise<{
27
+ entities: import("../index.js").GraphNode[];
28
+ concepts: import("../index.js").GraphNode[];
29
+ propositions: import("../index.js").GraphNode[];
30
+ thoughts: import("../index.js").GraphNode[];
31
+ }>;
32
+ private querySearch;
33
+ private queryBeliefs;
34
+ private queryContradictions;
35
+ private queryTimeline;
36
+ private queryBeliefCard;
37
+ private queryOpenLoops;
38
+ private detectMode;
39
+ private extractTopic;
40
+ }
41
+ //# sourceMappingURL=query-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-engine.d.ts","sourceRoot":"","sources":["../../src/query/query-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAwD,MAAM,oBAAoB,CAAC;AAO5G,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,WAAW;IAQpB,OAAO,CAAC,OAAO;IAPjB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;gBAGjC,OAAO,EAAE,cAAc,EAC/B,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAS9B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBhF;;OAEG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM;;;;;;YAM9B,WAAW;YAYX,YAAY;YAQZ,mBAAmB;YA4BnB,aAAa;YAyBb,eAAe;YAyBf,cAAc;IAyB5B,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,YAAY;CAcrB"}
@@ -0,0 +1,178 @@
1
+ import { SemanticSearch } from './semantic-search.js';
2
+ import { GraphSearch } from './graph-search.js';
3
+ import { CitationBuilder } from './citation-builder.js';
4
+ import { AnswerBuilder } from './answer-builder.js';
5
+ import { OpenLoopDetector } from '../extraction/open-loop-detector.js';
6
+ /**
7
+ * Hybrid retrieval orchestrator.
8
+ * Routes queries to the appropriate engine and builds cited results.
9
+ */
10
+ export class QueryEngine {
11
+ constructor(storage, embedder) {
12
+ this.storage = storage;
13
+ this.semanticSearch = new SemanticSearch(storage, embedder);
14
+ this.graphSearch = new GraphSearch(storage);
15
+ this.citationBuilder = new CitationBuilder(storage);
16
+ this.answerBuilder = new AnswerBuilder();
17
+ this.openLoopDetector = new OpenLoopDetector(storage);
18
+ }
19
+ async query(queryText, options = {}) {
20
+ const mode = options.mode ?? this.detectMode(queryText);
21
+ switch (mode) {
22
+ case 'beliefs':
23
+ return this.queryBeliefs(queryText, options);
24
+ case 'contradictions':
25
+ return this.queryContradictions(queryText);
26
+ case 'timeline':
27
+ return this.queryTimeline(queryText);
28
+ case 'beliefCard':
29
+ return this.queryBeliefCard(queryText);
30
+ case 'openLoops':
31
+ return this.queryOpenLoops(options);
32
+ case 'search':
33
+ default:
34
+ return this.querySearch(queryText, options);
35
+ }
36
+ }
37
+ /**
38
+ * Get all extractions for a specific note.
39
+ */
40
+ async getExtractionsForNote(notePath) {
41
+ return this.graphSearch.getExtractionsForNote(notePath);
42
+ }
43
+ // ─── Private query modes ─────────────────────────────────────────
44
+ async querySearch(queryText, options) {
45
+ const results = await this.semanticSearch.search(queryText, {
46
+ topK: options.topK ?? 10,
47
+ threshold: options.threshold ?? 0.3,
48
+ });
49
+ const chunkIds = results.map((r) => r.chunkId);
50
+ const citations = await this.citationBuilder.getCitationsForChunks(chunkIds);
51
+ return this.answerBuilder.buildFromSearchResults(queryText, results, citations);
52
+ }
53
+ async queryBeliefs(queryText, options) {
54
+ // Extract the topic from the query
55
+ const topic = this.extractTopic(queryText);
56
+ const beliefs = await this.graphSearch.queryBeliefs(topic, options.topK ?? 20);
57
+ return this.answerBuilder.buildFromBeliefs(topic, beliefs);
58
+ }
59
+ async queryContradictions(queryText) {
60
+ const topic = this.extractTopic(queryText);
61
+ const contradictions = await this.graphSearch.queryContradictions(topic);
62
+ if (contradictions.length === 0) {
63
+ return {
64
+ answer: `No contradictions found about: "${topic}"`,
65
+ citations: [],
66
+ contradictions: [],
67
+ };
68
+ }
69
+ const lines = contradictions.map((c, i) => {
70
+ return `[${i + 1}] "${c.propositionA.statement}" vs "${c.propositionB.statement}"`;
71
+ });
72
+ const allCitations = contradictions.flatMap((c) => [
73
+ ...c.propositionA.citations,
74
+ ...c.propositionB.citations,
75
+ ]);
76
+ return {
77
+ answer: `Found ${contradictions.length} contradiction(s) about "${topic}":\n\n${lines.join('\n\n')}`,
78
+ citations: allCitations,
79
+ contradictions,
80
+ };
81
+ }
82
+ async queryTimeline(queryText) {
83
+ const topic = this.extractTopic(queryText);
84
+ const timeline = await this.graphSearch.queryBeliefTimeline(topic);
85
+ if (timeline.length === 0) {
86
+ return {
87
+ answer: `No belief history found about: "${topic}"`,
88
+ citations: [],
89
+ beliefs: [],
90
+ };
91
+ }
92
+ const lines = timeline.map((b, i) => {
93
+ const date = b.noteDate.split('T')[0];
94
+ const stance = b.stance === 'for' ? '+' : b.stance === 'against' ? '-' : '~';
95
+ return `[${date}] (${stance}) ${b.statement}`;
96
+ });
97
+ return {
98
+ answer: `Belief timeline for "${topic}":\n\n${lines.join('\n')}`,
99
+ citations: timeline.flatMap((b) => b.citations),
100
+ beliefs: timeline,
101
+ };
102
+ }
103
+ async queryBeliefCard(queryText) {
104
+ const topic = this.extractTopic(queryText);
105
+ const beliefCard = await this.graphSearch.queryBeliefCard(topic);
106
+ if (beliefCard.entries.length === 0) {
107
+ return {
108
+ answer: `No beliefs found about: "${topic}"`,
109
+ citations: [],
110
+ beliefCard,
111
+ };
112
+ }
113
+ const lines = beliefCard.entries.map((e, i) => {
114
+ const conf = Math.round(e.confidence * 100);
115
+ const contradictions = e.contradictionCount > 0 ? ` [${e.contradictionCount} contradiction(s)]` : '';
116
+ return `[${i + 1}] (${conf}%) ${e.statement}${contradictions}`;
117
+ });
118
+ return {
119
+ answer: `Belief card for "${topic}" (${beliefCard.totalPropositions} beliefs, avg ${Math.round(beliefCard.avgConfidence * 100)}% confidence):\n\n${lines.join('\n')}`,
120
+ citations: beliefCard.entries.flatMap((e) => e.citations),
121
+ beliefCard,
122
+ };
123
+ }
124
+ async queryOpenLoops(options) {
125
+ const openLoops = await this.openLoopDetector.findOpenLoops(options.topK ?? 20);
126
+ if (openLoops.length === 0) {
127
+ return {
128
+ answer: 'No open loops found.',
129
+ citations: [],
130
+ openLoops: [],
131
+ };
132
+ }
133
+ const lines = openLoops.map((l, i) => {
134
+ const topic = l.topic ? ` [${l.topic}]` : '';
135
+ return `[${i + 1}] (${l.status}) ${l.statement}${topic}`;
136
+ });
137
+ return {
138
+ answer: `Found ${openLoops.length} open loop(s):\n\n${lines.join('\n')}`,
139
+ citations: openLoops.flatMap((l) => l.citations),
140
+ openLoops,
141
+ };
142
+ }
143
+ // ─── Helpers ─────────────────────────────────────────────────────
144
+ detectMode(query) {
145
+ const lower = query.toLowerCase();
146
+ if (lower.includes('belief card') || lower.includes('summarize beliefs')) {
147
+ return 'beliefCard';
148
+ }
149
+ if (lower.includes('open loop') || lower.includes('unresolved') || lower.includes('todo') || lower.includes('i wonder')) {
150
+ return 'openLoops';
151
+ }
152
+ if (lower.startsWith('what do i believe') || lower.includes('my beliefs about')) {
153
+ return 'beliefs';
154
+ }
155
+ if (lower.includes('contradict') || lower.includes('conflicting')) {
156
+ return 'contradictions';
157
+ }
158
+ if (lower.includes('how has my view') || lower.includes('timeline') || lower.includes('over time')) {
159
+ return 'timeline';
160
+ }
161
+ return 'search';
162
+ }
163
+ extractTopic(query) {
164
+ // Strip common query prefixes to get the topic
165
+ return query
166
+ .replace(/^what do i believe about\s*/i, '')
167
+ .replace(/^show contradictions about\s*/i, '')
168
+ .replace(/^how has my view changed about\s*/i, '')
169
+ .replace(/^my beliefs about\s*/i, '')
170
+ .replace(/^contradictions? (about|in)\s*/i, '')
171
+ .replace(/^timeline (for|of)\s*/i, '')
172
+ .replace(/^belief card (for|about)\s*/i, '')
173
+ .replace(/^summarize beliefs (about|for)\s*/i, '')
174
+ .replace(/\?$/, '')
175
+ .trim();
176
+ }
177
+ }
178
+ //# sourceMappingURL=query-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-engine.js","sourceRoot":"","sources":["../../src/query/query-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { StorageAdapter } from '../storage/storage-interface.js';
2
+ import type { EmbeddingProvider } from '../embeddings/embedder-interface.js';
3
+ import { type SearchResult } from '../schema/types.js';
4
+ export interface SemanticSearchOptions {
5
+ topK?: number;
6
+ threshold?: number;
7
+ hybridWeight?: number;
8
+ }
9
+ /**
10
+ * Hybrid semantic + full-text search.
11
+ * Combines vector similarity with FTS5 for best results.
12
+ */
13
+ export declare class SemanticSearch {
14
+ private storage;
15
+ private embedder;
16
+ constructor(storage: StorageAdapter, embedder: EmbeddingProvider | null);
17
+ search(query: string, options?: SemanticSearchOptions): Promise<SearchResult[]>;
18
+ /**
19
+ * TypeScript-side ranking heuristics for "smart search" without FTS5.
20
+ */
21
+ private applyRankingHeuristics;
22
+ private vectorSearch;
23
+ private ftsSearch;
24
+ private mergeResults;
25
+ }
26
+ //# sourceMappingURL=semantic-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../src/query/semantic-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,iCAAiC,CAAC;AACtG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;gBADR,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAGtC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAuBzF;;OAEG;YACW,sBAAsB;YA0DtB,YAAY;YAeZ,SAAS;IAavB,OAAO,CAAC,YAAY;CA2CrB"}