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,41 @@
1
+ export const THOUGHT_EXTRACTION_PROMPT = `You are a thought and opinion extraction system. Analyze the following text and extract subjective interpretations, opinions, stances, and personal judgments.
2
+
3
+ A thought is a subjective statement — an opinion, belief, interpretation, or personal stance. Focus on:
4
+ - Opinions ("I think X is better than Y")
5
+ - Value judgments ("This approach is flawed")
6
+ - Interpretations ("This suggests that...")
7
+ - Preferences ("I prefer X over Y")
8
+ - Predictions based on judgment ("This will likely lead to...")
9
+
10
+ Do NOT include:
11
+ - Objective facts (those are "propositions")
12
+ - Questions
13
+ - Direct quotes from others (unless the author endorses them)
14
+
15
+ TEXT:
16
+ {{TEXT}}
17
+
18
+ Respond with ONLY valid JSON in this exact format:
19
+ {
20
+ "thoughts": [
21
+ {
22
+ "statement": "Clear restatement of the opinion/thought",
23
+ "stance": "for|against|neutral",
24
+ "subject": "What entity or concept this thought is about",
25
+ "confidence": 0.7,
26
+ "implications": ["What this thought implies"],
27
+ "quoteText": "exact text span from the source",
28
+ "quoteStart": 0,
29
+ "quoteEnd": 50
30
+ }
31
+ ]
32
+ }
33
+
34
+ Rules:
35
+ - stance is the author's position: "for" (positive/supportive), "against" (negative/critical), or "neutral" (ambivalent/observational)
36
+ - subject should name a specific entity or concept the thought is about
37
+ - confidence is 0.0 to 1.0 — how strongly the thought is expressed
38
+ - quoteText must be the EXACT substring from the source text
39
+ - implications are downstream consequences of holding this view
40
+ - statement should be self-contained`;
41
+ //# sourceMappingURL=thought-extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thought-extraction.js","sourceRoot":"","sources":["../../../src/extraction/prompts/thought-extraction.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAuCJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ export { NodeType, RelType } from './schema/types.js';
2
+ export type { GraphNode, GraphEdge, Provenance, EmbeddingRecord, SearchResult, Citation, BeliefEntry, ContradictionPair, QueryResult, BeliefCard, BeliefCardEntry, OpenLoop, } from './schema/types.js';
3
+ export type * from './schema/node-types.js';
4
+ export type * from './schema/edge-types.js';
5
+ export { validateNode, validateEdge, validateProvenance, passesConfidenceGate } from './schema/validation.js';
6
+ export type { StorageAdapter, NodeQuery, EdgeQuery, TraversalOptions, SimilarityQuery, FullTextQuery, } from './storage/storage-interface.js';
7
+ export { MemoryAdapter } from './storage/memory/memory-adapter.js';
8
+ export { SqliteAdapter } from './storage/sqlite/sqlite-adapter.js';
9
+ export { GraphExporter, GraphImporter } from './storage/export-import.js';
10
+ export type { ImportStrategy, ImportResult } from './storage/export-import.js';
11
+ export { chunkMarkdown, stripFrontmatter } from './ingestion/chunker.js';
12
+ export type { Chunk, ChunkerOptions } from './ingestion/chunker.js';
13
+ export { generateChunkId, generateNoteId, generateEntityId, generateConceptId, generatePropositionId, generateThoughtId } from './ingestion/chunk-id.js';
14
+ export { hashContent, hashStatement } from './ingestion/hasher.js';
15
+ export { IngestionPipeline } from './ingestion/pipeline.js';
16
+ export type { PipelineOptions, PipelineStats } from './ingestion/pipeline.js';
17
+ export type { ExtractionProvider, ExtractionResult, ExtractedEntity, ExtractedConcept, ExtractedProposition, ExtractedThought } from './extraction/extractor-interface.js';
18
+ export { BasicExtractor } from './extraction/basic-extractor.js';
19
+ export { OllamaExtractor } from './extraction/ollama-extractor.js';
20
+ export { LLMExtractor } from './extraction/llm-extractor.js';
21
+ export { OpenAIExtractor } from './extraction/openai-extractor.js';
22
+ export { AnthropicExtractor } from './extraction/anthropic-extractor.js';
23
+ export { EntityResolver } from './extraction/entity-resolver.js';
24
+ export { applyConfidenceGate } from './extraction/confidence-gate.js';
25
+ export { ContradictionDetector } from './extraction/contradiction-detector.js';
26
+ export { OpenLoopDetector } from './extraction/open-loop-detector.js';
27
+ export { EntityIndex } from './extraction/entity-index.js';
28
+ export type { EmbeddingProvider } from './embeddings/embedder-interface.js';
29
+ export { TransformersEmbedder } from './embeddings/transformers-embedder.js';
30
+ export { OllamaEmbedder } from './embeddings/ollama-embedder.js';
31
+ export { retryFetch, FetchError } from './utils/retry-fetch.js';
32
+ export type { RetryFetchOptions } from './utils/retry-fetch.js';
33
+ export { GraphDataProvider } from './query/graph-data.js';
34
+ export type { VisNode, VisEdge, GraphData } from './query/graph-data.js';
35
+ export { QueryEngine } from './query/query-engine.js';
36
+ export type { QueryMode, QueryOptions } from './query/query-engine.js';
37
+ export { SemanticSearch } from './query/semantic-search.js';
38
+ export { GraphSearch } from './query/graph-search.js';
39
+ export { CitationBuilder } from './query/citation-builder.js';
40
+ export { AnswerBuilder } from './query/answer-builder.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ // Schema
2
+ export { NodeType, RelType } from './schema/types.js';
3
+ export { validateNode, validateEdge, validateProvenance, passesConfidenceGate } from './schema/validation.js';
4
+ export { MemoryAdapter } from './storage/memory/memory-adapter.js';
5
+ export { SqliteAdapter } from './storage/sqlite/sqlite-adapter.js';
6
+ export { GraphExporter, GraphImporter } from './storage/export-import.js';
7
+ // Ingestion
8
+ export { chunkMarkdown, stripFrontmatter } from './ingestion/chunker.js';
9
+ export { generateChunkId, generateNoteId, generateEntityId, generateConceptId, generatePropositionId, generateThoughtId } from './ingestion/chunk-id.js';
10
+ export { hashContent, hashStatement } from './ingestion/hasher.js';
11
+ export { IngestionPipeline } from './ingestion/pipeline.js';
12
+ export { BasicExtractor } from './extraction/basic-extractor.js';
13
+ export { OllamaExtractor } from './extraction/ollama-extractor.js';
14
+ export { LLMExtractor } from './extraction/llm-extractor.js';
15
+ export { OpenAIExtractor } from './extraction/openai-extractor.js';
16
+ export { AnthropicExtractor } from './extraction/anthropic-extractor.js';
17
+ export { EntityResolver } from './extraction/entity-resolver.js';
18
+ export { applyConfidenceGate } from './extraction/confidence-gate.js';
19
+ export { ContradictionDetector } from './extraction/contradiction-detector.js';
20
+ export { OpenLoopDetector } from './extraction/open-loop-detector.js';
21
+ export { EntityIndex } from './extraction/entity-index.js';
22
+ export { TransformersEmbedder } from './embeddings/transformers-embedder.js';
23
+ export { OllamaEmbedder } from './embeddings/ollama-embedder.js';
24
+ // Utils
25
+ export { retryFetch, FetchError } from './utils/retry-fetch.js';
26
+ // Query
27
+ export { GraphDataProvider } from './query/graph-data.js';
28
+ export { QueryEngine } from './query/query-engine.js';
29
+ export { SemanticSearch } from './query/semantic-search.js';
30
+ export { GraphSearch } from './query/graph-search.js';
31
+ export { CitationBuilder } from './query/citation-builder.js';
32
+ export { AnswerBuilder } from './query/answer-builder.js';
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAiBtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAW9G,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG1E,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACzJ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGhE,QAAQ;AACR,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Generate a stable, deterministic chunk ID from its source note and position.
3
+ * This ensures the same chunk in the same note always gets the same ID,
4
+ * allowing idempotent re-indexing.
5
+ */
6
+ export declare function generateChunkId(notePath: string, index: number, text: string): string;
7
+ /**
8
+ * Generate a stable node ID for an entity extracted from a note.
9
+ */
10
+ export declare function generateEntityId(name: string): string;
11
+ /**
12
+ * Generate a stable node ID for a concept.
13
+ */
14
+ export declare function generateConceptId(name: string): string;
15
+ /**
16
+ * Generate a stable node ID for a proposition.
17
+ */
18
+ export declare function generatePropositionId(statementHash: string): string;
19
+ /**
20
+ * Generate a stable node ID for a thought.
21
+ */
22
+ export declare function generateThoughtId(statementHash: string): string;
23
+ /**
24
+ * Generate a note node ID from its vault path.
25
+ */
26
+ export declare function generateNoteId(notePath: string): string;
27
+ //# sourceMappingURL=chunk-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-id.d.ts","sourceRoot":"","sources":["../../src/ingestion/chunk-id.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,45 @@
1
+ import { hashContent } from './hasher.js';
2
+ /**
3
+ * Generate a stable, deterministic chunk ID from its source note and position.
4
+ * This ensures the same chunk in the same note always gets the same ID,
5
+ * allowing idempotent re-indexing.
6
+ */
7
+ export function generateChunkId(notePath, index, text) {
8
+ // Combine note path + chunk index for stability across content edits
9
+ const base = `${notePath}::${index}`;
10
+ const hash = hashContent(base + text.slice(0, 100));
11
+ return `chunk:${hashContent(notePath)}:${index}:${hash}`;
12
+ }
13
+ /**
14
+ * Generate a stable node ID for an entity extracted from a note.
15
+ */
16
+ export function generateEntityId(name) {
17
+ const normalized = name.toLowerCase().replace(/\s+/g, '_');
18
+ return `entity:${normalized}`;
19
+ }
20
+ /**
21
+ * Generate a stable node ID for a concept.
22
+ */
23
+ export function generateConceptId(name) {
24
+ const normalized = name.toLowerCase().replace(/\s+/g, '_');
25
+ return `concept:${normalized}`;
26
+ }
27
+ /**
28
+ * Generate a stable node ID for a proposition.
29
+ */
30
+ export function generatePropositionId(statementHash) {
31
+ return `prop:${statementHash}`;
32
+ }
33
+ /**
34
+ * Generate a stable node ID for a thought.
35
+ */
36
+ export function generateThoughtId(statementHash) {
37
+ return `thought:${statementHash}`;
38
+ }
39
+ /**
40
+ * Generate a note node ID from its vault path.
41
+ */
42
+ export function generateNoteId(notePath) {
43
+ return `note:${hashContent(notePath)}`;
44
+ }
45
+ //# sourceMappingURL=chunk-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-id.js","sourceRoot":"","sources":["../../src/ingestion/chunk-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAa,EAAE,IAAY;IAC3E,qEAAqE;IACrE,MAAM,IAAI,GAAG,GAAG,QAAQ,KAAK,KAAK,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACpD,OAAO,SAAS,WAAW,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO,UAAU,UAAU,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO,WAAW,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IACzD,OAAO,QAAQ,aAAa,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAqB;IACrD,OAAO,WAAW,aAAa,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,QAAQ,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,29 @@
1
+ export interface Chunk {
2
+ id: string;
3
+ notePath: string;
4
+ text: string;
5
+ heading: string | null;
6
+ headingLevel: number;
7
+ startOffset: number;
8
+ endOffset: number;
9
+ index: number;
10
+ contentHash: string;
11
+ }
12
+ export interface ChunkerOptions {
13
+ maxChunkSize?: number;
14
+ minChunkSize?: number;
15
+ overlapSize?: number;
16
+ }
17
+ /**
18
+ * Markdown-structure-aware chunker.
19
+ * Splits by heading hierarchy, then by paragraph boundaries within large sections.
20
+ */
21
+ export declare function chunkMarkdown(notePath: string, content: string, options?: ChunkerOptions): Chunk[];
22
+ /**
23
+ * Strip YAML frontmatter from markdown content.
24
+ */
25
+ export declare function stripFrontmatter(content: string): {
26
+ frontmatter: Record<string, unknown>;
27
+ body: string;
28
+ };
29
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/ingestion/chunker.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgBD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,cAAmB,GAC3B,KAAK,EAAE,CAgDT;AAuHD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAgCxG"}
@@ -0,0 +1,182 @@
1
+ import { generateChunkId } from './chunk-id.js';
2
+ import { hashContent } from './hasher.js';
3
+ const DEFAULT_OPTIONS = {
4
+ maxChunkSize: 6000,
5
+ minChunkSize: 200,
6
+ overlapSize: 200,
7
+ };
8
+ /**
9
+ * Markdown-structure-aware chunker.
10
+ * Splits by heading hierarchy, then by paragraph boundaries within large sections.
11
+ */
12
+ export function chunkMarkdown(notePath, content, options = {}) {
13
+ const opts = { ...DEFAULT_OPTIONS, ...options };
14
+ // Step 1: Split into sections by headings
15
+ const sections = splitBySections(content);
16
+ // Step 2: For each section, split into appropriately sized chunks
17
+ const chunks = [];
18
+ let chunkIndex = 0;
19
+ for (const section of sections) {
20
+ const sectionChunks = splitSectionIntoChunks(section, opts);
21
+ for (const text of sectionChunks) {
22
+ if (text.trim().length < opts.minChunkSize &&
23
+ chunks.length > 0 &&
24
+ chunks[chunks.length - 1].heading === section.heading) {
25
+ // Merge tiny trailing chunks into the previous chunk (same heading only)
26
+ const prev = chunks[chunks.length - 1];
27
+ prev.text += '\n' + text;
28
+ prev.endOffset = section.endOffset;
29
+ prev.contentHash = hashContent(prev.text);
30
+ continue;
31
+ }
32
+ // Calculate offsets within the section
33
+ const startOffset = section.startOffset + section.content.indexOf(text);
34
+ const endOffset = startOffset + text.length;
35
+ const id = generateChunkId(notePath, chunkIndex, text);
36
+ chunks.push({
37
+ id,
38
+ notePath,
39
+ text,
40
+ heading: section.heading,
41
+ headingLevel: section.headingLevel,
42
+ startOffset: Math.max(0, startOffset),
43
+ endOffset: Math.min(content.length, endOffset),
44
+ index: chunkIndex,
45
+ contentHash: hashContent(text),
46
+ });
47
+ chunkIndex++;
48
+ }
49
+ }
50
+ return chunks;
51
+ }
52
+ function splitBySections(content) {
53
+ const sections = [];
54
+ const headingRegex = /^(#{1,6})\s+(.+)$/gm;
55
+ let lastIndex = 0;
56
+ let lastHeading = null;
57
+ let lastHeadingLevel = 0;
58
+ let match;
59
+ while ((match = headingRegex.exec(content)) !== null) {
60
+ // Content before this heading
61
+ if (match.index > lastIndex) {
62
+ const text = content.slice(lastIndex, match.index).trim();
63
+ if (text) {
64
+ sections.push({
65
+ heading: lastHeading,
66
+ headingLevel: lastHeadingLevel,
67
+ content: text,
68
+ startOffset: lastIndex,
69
+ endOffset: match.index,
70
+ });
71
+ }
72
+ }
73
+ lastHeading = match[2];
74
+ lastHeadingLevel = match[1].length;
75
+ lastIndex = match.index;
76
+ }
77
+ // Remaining content after last heading
78
+ const remaining = content.slice(lastIndex).trim();
79
+ if (remaining) {
80
+ sections.push({
81
+ heading: lastHeading,
82
+ headingLevel: lastHeadingLevel,
83
+ content: remaining,
84
+ startOffset: lastIndex,
85
+ endOffset: content.length,
86
+ });
87
+ }
88
+ // If no sections found, treat entire content as one section
89
+ if (sections.length === 0 && content.trim()) {
90
+ sections.push({
91
+ heading: null,
92
+ headingLevel: 0,
93
+ content: content.trim(),
94
+ startOffset: 0,
95
+ endOffset: content.length,
96
+ });
97
+ }
98
+ return sections;
99
+ }
100
+ function splitSectionIntoChunks(section, opts) {
101
+ const content = section.content;
102
+ if (content.length <= opts.maxChunkSize) {
103
+ return [content];
104
+ }
105
+ const chunks = [];
106
+ // Split by paragraph boundaries (double newline)
107
+ const paragraphs = content.split(/\n\n+/);
108
+ let current = '';
109
+ for (const para of paragraphs) {
110
+ if (current.length + para.length + 2 > opts.maxChunkSize) {
111
+ if (current.trim()) {
112
+ chunks.push(current.trim());
113
+ }
114
+ // If a single paragraph exceeds max, split by sentences
115
+ if (para.length > opts.maxChunkSize) {
116
+ chunks.push(...splitBySize(para, opts.maxChunkSize));
117
+ }
118
+ else {
119
+ current = para;
120
+ }
121
+ }
122
+ else {
123
+ current += (current ? '\n\n' : '') + para;
124
+ }
125
+ }
126
+ if (current.trim()) {
127
+ chunks.push(current.trim());
128
+ }
129
+ return chunks;
130
+ }
131
+ function splitBySize(text, maxSize) {
132
+ const chunks = [];
133
+ // Try to split on sentence boundaries
134
+ const sentences = text.split(/(?<=[.!?])\s+/);
135
+ let current = '';
136
+ for (const sentence of sentences) {
137
+ if (current.length + sentence.length + 1 > maxSize) {
138
+ if (current.trim()) {
139
+ chunks.push(current.trim());
140
+ }
141
+ current = sentence;
142
+ }
143
+ else {
144
+ current += (current ? ' ' : '') + sentence;
145
+ }
146
+ }
147
+ if (current.trim()) {
148
+ chunks.push(current.trim());
149
+ }
150
+ return chunks;
151
+ }
152
+ /**
153
+ * Strip YAML frontmatter from markdown content.
154
+ */
155
+ export function stripFrontmatter(content) {
156
+ const fmRegex = /^---\n([\s\S]*?)\n---\n?/;
157
+ const match = content.match(fmRegex);
158
+ if (!match) {
159
+ return { frontmatter: {}, body: content };
160
+ }
161
+ const fmText = match[1];
162
+ const body = content.slice(match[0].length);
163
+ // Simple YAML parsing (key: value pairs)
164
+ const frontmatter = {};
165
+ for (const line of fmText.split('\n')) {
166
+ const colonIdx = line.indexOf(':');
167
+ if (colonIdx > 0) {
168
+ const key = line.slice(0, colonIdx).trim();
169
+ let value = line.slice(colonIdx + 1).trim();
170
+ // Handle arrays (simple inline format)
171
+ if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
172
+ value = value
173
+ .slice(1, -1)
174
+ .split(',')
175
+ .map((s) => s.trim().replace(/^["']|["']$/g, ''));
176
+ }
177
+ frontmatter[key] = value;
178
+ }
179
+ }
180
+ return { frontmatter, body };
181
+ }
182
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/ingestion/chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Content hashing for idempotent upsert detection.
3
+ * Uses a simple DJB2a-like hash for speed; not cryptographic.
4
+ */
5
+ export declare function hashContent(content: string): string;
6
+ export declare function hashStatement(statement: string): string;
7
+ //# sourceMappingURL=hasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.d.ts","sourceRoot":"","sources":["../../src/ingestion/hasher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIvD"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Content hashing for idempotent upsert detection.
3
+ * Uses a simple DJB2a-like hash for speed; not cryptographic.
4
+ */
5
+ export function hashContent(content) {
6
+ let hash = 5381;
7
+ for (let i = 0; i < content.length; i++) {
8
+ hash = ((hash << 5) + hash + content.charCodeAt(i)) | 0;
9
+ }
10
+ // Convert to unsigned 32-bit hex
11
+ return (hash >>> 0).toString(16).padStart(8, '0');
12
+ }
13
+ export function hashStatement(statement) {
14
+ // Normalize: lowercase, collapse whitespace, trim
15
+ const normalized = statement.toLowerCase().replace(/\s+/g, ' ').trim();
16
+ return hashContent(normalized);
17
+ }
18
+ //# sourceMappingURL=hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.js","sourceRoot":"","sources":["../../src/ingestion/hasher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,iCAAiC;IACjC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,kDAAkD;IAClD,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { StorageAdapter } from '../storage/storage-interface.js';
2
+ import type { EmbeddingProvider } from '../embeddings/embedder-interface.js';
3
+ import type { ExtractionProvider } from '../extraction/extractor-interface.js';
4
+ import { type ChunkerOptions } from './chunker.js';
5
+ export interface PipelineOptions {
6
+ chunkerOptions?: ChunkerOptions;
7
+ confidenceThreshold?: number;
8
+ enableContradictionDetection?: boolean;
9
+ }
10
+ export interface PipelineStats {
11
+ notePath: string;
12
+ chunksCreated: number;
13
+ entitiesExtracted: number;
14
+ conceptsExtracted: number;
15
+ propositionsExtracted: number;
16
+ thoughtsExtracted: number;
17
+ embeddingsCreated: number;
18
+ contradictionsDetected: number;
19
+ skipped: boolean;
20
+ }
21
+ /**
22
+ * The ingestion pipeline orchestrates:
23
+ * hash check → chunk → extract → embed → store → detect contradictions
24
+ */
25
+ export declare class IngestionPipeline {
26
+ private storage;
27
+ private embedder;
28
+ private extractor;
29
+ private options;
30
+ private entityResolver;
31
+ private contradictionDetector;
32
+ private entityIndex;
33
+ constructor(storage: StorageAdapter, embedder: EmbeddingProvider | null, extractor: ExtractionProvider, options?: PipelineOptions);
34
+ private getEntityIndex;
35
+ /**
36
+ * Index a single note. Idempotent — skips if content hash unchanged.
37
+ */
38
+ indexNote(notePath: string, content: string): Promise<PipelineStats>;
39
+ /**
40
+ * Remove a note and all its derived data.
41
+ */
42
+ forgetNote(notePath: string): Promise<void>;
43
+ /**
44
+ * Wipe all data.
45
+ */
46
+ wipeAll(): Promise<void>;
47
+ private processChunk;
48
+ private storeProposition;
49
+ private storeThought;
50
+ private createAboutEdgesFromChunkMentions;
51
+ private createAboutEdgesForThought;
52
+ private storeResolvedEntities;
53
+ cleanupOrphans(): Promise<number>;
54
+ private cleanupNoteChunks;
55
+ private cleanupOrphanedNodes;
56
+ private ensureDefaultAgent;
57
+ }
58
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/ingestion/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAoB,MAAM,sCAAsC,CAAC;AAKjG,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAKhG,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;GAGG;AACH,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,WAAW,CAA4B;gBAGrC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,SAAS,EAAE,kBAAkB,EAC7B,OAAO,GAAE,eAAoB;YAKzB,cAAc;IAQ5B;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAgG1E;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAShB,YAAY;YAmEZ,gBAAgB;YAgFhB,YAAY;YAmEZ,iCAAiC;YA+BjC,0BAA0B;YAyC1B,qBAAqB;IAgN7B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YAqBzB,iBAAiB;YAuBjB,oBAAoB;YAkBpB,kBAAkB;CAgBjC"}