@steno-ai/engine 0.1.4 → 0.1.6

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 (33) hide show
  1. package/dist/extraction/cross-linker.d.ts +23 -0
  2. package/dist/extraction/cross-linker.d.ts.map +1 -0
  3. package/dist/extraction/cross-linker.js +146 -0
  4. package/dist/extraction/cross-linker.js.map +1 -0
  5. package/dist/extraction/pipeline.d.ts.map +1 -1
  6. package/dist/extraction/pipeline.js +14 -5
  7. package/dist/extraction/pipeline.js.map +1 -1
  8. package/dist/scratchpad/scratchpad.d.ts.map +1 -1
  9. package/dist/scratchpad/scratchpad.js +35 -5
  10. package/dist/scratchpad/scratchpad.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/adapters/storage.d.ts +1 -0
  13. package/src/adapters/storage.d.ts.map +1 -1
  14. package/src/extraction/cross-linker.d.ts +23 -0
  15. package/src/extraction/cross-linker.d.ts.map +1 -0
  16. package/src/extraction/cross-linker.js +146 -0
  17. package/src/extraction/cross-linker.js.map +1 -0
  18. package/src/extraction/cross-linker.ts +166 -0
  19. package/src/extraction/llm-extractor.d.ts.map +1 -1
  20. package/src/extraction/llm-extractor.js +5 -3
  21. package/src/extraction/llm-extractor.js.map +1 -1
  22. package/src/extraction/pipeline.d.ts.map +1 -1
  23. package/src/extraction/pipeline.js +22 -7
  24. package/src/extraction/pipeline.js.map +1 -1
  25. package/src/extraction/pipeline.ts +15 -5
  26. package/src/extraction/prompts.d.ts +2 -2
  27. package/src/extraction/prompts.d.ts.map +1 -1
  28. package/src/extraction/prompts.js +12 -3
  29. package/src/extraction/prompts.js.map +1 -1
  30. package/src/scratchpad/scratchpad.d.ts.map +1 -1
  31. package/src/scratchpad/scratchpad.js +35 -5
  32. package/src/scratchpad/scratchpad.js.map +1 -1
  33. package/src/scratchpad/scratchpad.ts +36 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-linker.js","sourceRoot":"","sources":["cross-linker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Cross-Fact Edge Linker — Intelligent Relationship Detection
3
+ *
4
+ * After extraction, finds existing facts that share entities with new facts
5
+ * AND are semantically similar (not just any shared entity). Creates
6
+ * 'relates_to' edges only when facts are actually about the same topic.
7
+ *
8
+ * Heuristics:
9
+ * 1. Shared entity (required) — both facts mention the same entity
10
+ * 2. Content similarity (required) — facts have overlapping keywords (>30% overlap)
11
+ * 3. Temporal proximity (bonus) — facts created within 7 days get priority
12
+ * 4. Skip generic entities — "user" entity is too broad to link on
13
+ */
14
+
15
+ import type { StorageAdapter } from '../adapters/storage.js';
16
+ import type { Fact } from '../models/fact.js';
17
+
18
+ const GENERIC_ENTITIES = new Set(['user', 'assistant', 'navia', 'steno']);
19
+ const MIN_KEYWORD_OVERLAP = 0.25; // 25% of keywords must overlap
20
+ const MAX_LINKS_PER_FACT = 3; // Don't create too many edges per new fact
21
+ const TEMPORAL_WINDOW_DAYS = 14; // Prefer facts within 2 weeks
22
+
23
+ /**
24
+ * Extract meaningful keywords from fact content for similarity comparison.
25
+ * Strips stop words, lowercases, returns unique tokens.
26
+ */
27
+ function extractKeywords(content: string): Set<string> {
28
+ const stopWords = new Set([
29
+ 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
30
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
31
+ 'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
32
+ 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
33
+ 'before', 'after', 'above', 'below', 'between', 'and', 'but', 'or',
34
+ 'not', 'no', 'nor', 'so', 'yet', 'both', 'each', 'few', 'more',
35
+ 'most', 'other', 'some', 'such', 'than', 'too', 'very', 'just',
36
+ 'about', 'up', 'out', 'if', 'then', 'that', 'this', 'these', 'those',
37
+ 'it', 'its', 'user', 'users', 'they', 'them', 'their', 'he', 'she',
38
+ ]);
39
+
40
+ return new Set(
41
+ content.toLowerCase()
42
+ .replace(/[^a-z0-9\s-]/g, ' ')
43
+ .split(/\s+/)
44
+ .filter(w => w.length >= 3 && !stopWords.has(w))
45
+ );
46
+ }
47
+
48
+ /**
49
+ * Calculate keyword overlap ratio between two facts.
50
+ * Returns 0-1 where 1 = identical keywords.
51
+ */
52
+ function keywordOverlap(a: Set<string>, b: Set<string>): number {
53
+ if (a.size === 0 || b.size === 0) return 0;
54
+ let shared = 0;
55
+ for (const word of a) {
56
+ if (b.has(word)) shared++;
57
+ }
58
+ const minSize = Math.min(a.size, b.size);
59
+ return shared / minSize;
60
+ }
61
+
62
+ /**
63
+ * Check if two facts are temporally close (within TEMPORAL_WINDOW_DAYS).
64
+ */
65
+ function isTemporallyClose(a: Fact, b: Fact): boolean {
66
+ const aDate = new Date(a.createdAt).getTime();
67
+ const bDate = new Date(b.createdAt).getTime();
68
+ const diffDays = Math.abs(aDate - bDate) / (1000 * 60 * 60 * 24);
69
+ return diffDays <= TEMPORAL_WINDOW_DAYS;
70
+ }
71
+
72
+ /**
73
+ * Link newly created facts to existing related facts through shared entities.
74
+ * Uses keyword overlap + temporal proximity to determine relevance.
75
+ *
76
+ * Only creates edges when facts are genuinely related — not just because
77
+ * they both mention "Steno" or "user".
78
+ */
79
+ export async function linkRelatedFacts(
80
+ storage: StorageAdapter,
81
+ tenantId: string,
82
+ newFactIds: string[],
83
+ entityIdMap: Map<string, string>,
84
+ ): Promise<number> {
85
+ if (newFactIds.length === 0 || entityIdMap.size === 0) return 0;
86
+
87
+ let edgesCreated = 0;
88
+
89
+ // Get the new facts' content for keyword extraction
90
+ const newFacts = await storage.getFactsByIds(tenantId, newFactIds);
91
+ if (newFacts.length === 0) return 0;
92
+
93
+ const newFactKeywords = new Map<string, Set<string>>();
94
+ for (const f of newFacts) {
95
+ newFactKeywords.set(f.id, extractKeywords(f.content));
96
+ }
97
+
98
+ // For each NON-GENERIC entity, find existing facts that also mention it
99
+ for (const [canonicalName, entityId] of entityIdMap) {
100
+ if (GENERIC_ENTITIES.has(canonicalName)) continue; // Skip "user", "navia", etc.
101
+
102
+ try {
103
+ const linkedFacts = await storage.getFactsForEntity(tenantId, entityId, { limit: 20 });
104
+ if (linkedFacts.data.length < 2) continue;
105
+
106
+ const newFactSet = new Set(newFactIds);
107
+ const existingFacts = linkedFacts.data.filter(f =>
108
+ !newFactSet.has(f.id) &&
109
+ !f.tags?.includes('scratchpad') // Skip scratchpad blobs
110
+ );
111
+
112
+ for (const newFact of newFacts) {
113
+ const newKw = newFactKeywords.get(newFact.id);
114
+ if (!newKw || newKw.size < 2) continue; // Too short to compare
115
+
116
+ let linksForThisFact = 0;
117
+
118
+ for (const existingFact of existingFacts) {
119
+ if (linksForThisFact >= MAX_LINKS_PER_FACT) break;
120
+
121
+ const existingKw = extractKeywords(existingFact.content);
122
+ const overlap = keywordOverlap(newKw, existingKw);
123
+
124
+ // Must have meaningful keyword overlap
125
+ if (overlap < MIN_KEYWORD_OVERLAP) continue;
126
+
127
+ // Boost score for temporal proximity
128
+ const temporalBoost = isTemporallyClose(newFact, existingFact) ? 0.1 : 0;
129
+ const relevanceScore = overlap + temporalBoost;
130
+
131
+ try {
132
+ await storage.createEdge({
133
+ id: crypto.randomUUID(),
134
+ tenantId,
135
+ sourceId: entityId,
136
+ targetId: entityId,
137
+ relation: 'relates_to',
138
+ edgeType: 'associative',
139
+ weight: Math.min(relevanceScore, 1.0),
140
+ factId: newFact.id,
141
+ confidence: overlap,
142
+ metadata: {
143
+ linkedFactId: existingFact.id,
144
+ reason: 'shared_entity_and_content',
145
+ entity: canonicalName,
146
+ keywordOverlap: overlap.toFixed(2),
147
+ },
148
+ });
149
+ edgesCreated++;
150
+ linksForThisFact++;
151
+ } catch {
152
+ // Duplicate or constraint — skip
153
+ }
154
+ }
155
+ }
156
+ } catch {
157
+ // Entity lookup failed — continue
158
+ }
159
+ }
160
+
161
+ if (edgesCreated > 0) {
162
+ console.error(`[steno] Cross-linked ${edgesCreated} related facts via shared entities`);
163
+ }
164
+
165
+ return edgesCreated;
166
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"llm-extractor.d.ts","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAiD,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5D,OAAO,CAAC,gBAAgB,CAAC,CA8M3B;AAsBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAavD"}
1
+ {"version":3,"file":"llm-extractor.d.ts","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAiD,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5D,OAAO,CAAC,gBAAgB,CAAC,CAgN3B;AAsBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAavD"}
@@ -45,7 +45,7 @@ export async function extractWithLLM(config, input, existingFacts) {
45
45
  if (typeof f === 'string') {
46
46
  const trimmed = f.trim();
47
47
  if (trimmed.length > 0)
48
- entries.push({ text: trimmed, importance: 0.5, sourceChunk: seg.contextWindow });
48
+ entries.push({ text: trimmed, importance: 0.5, sourceChunk: seg.contextWindow, isPattern: false });
49
49
  }
50
50
  else if (f && typeof f === 'object') {
51
51
  const obj = f;
@@ -53,6 +53,7 @@ export async function extractWithLLM(config, input, existingFacts) {
53
53
  const importance = typeof obj.i === 'number' ? obj.i : typeof obj.importance === 'number' ? obj.importance : 0.5;
54
54
  const eventDate = obj.ed ? new Date(obj.ed) : undefined;
55
55
  const documentDate = obj.dd ? new Date(obj.dd) : undefined;
56
+ const isPattern = obj.p === true;
56
57
  if (text.length > 0)
57
58
  entries.push({
58
59
  text,
@@ -60,6 +61,7 @@ export async function extractWithLLM(config, input, existingFacts) {
60
61
  sourceChunk: seg.contextWindow,
61
62
  eventDate: eventDate && !isNaN(eventDate.getTime()) ? eventDate : undefined,
62
63
  documentDate: documentDate && !isNaN(documentDate.getTime()) ? documentDate : undefined,
64
+ isPattern,
63
65
  });
64
66
  }
65
67
  }
@@ -91,13 +93,13 @@ export async function extractWithLLM(config, input, existingFacts) {
91
93
  return emptyResult(config.tier, config.llm.model);
92
94
  }
93
95
  // Build ExtractedFact objects from parsed entries with LLM-scored importance
94
- const facts = factEntries.map(({ text, importance, sourceChunk, eventDate, documentDate }) => ({
96
+ const facts = factEntries.map(({ text, importance, sourceChunk, eventDate, documentDate, isPattern }) => ({
95
97
  content: text,
96
98
  importance,
97
99
  confidence: 0.8,
98
100
  sourceType: 'conversation',
99
101
  modality: 'text',
100
- tags: [],
102
+ tags: isPattern ? ['pattern'] : [],
101
103
  originalContent: input,
102
104
  entityCanonicalNames: [],
103
105
  sourceChunk,
@@ -1 +1 @@
1
- {"version":3,"file":"llm-extractor.js","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-extractor.js","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EAEhB,MAAM,YAAY,CAAC;AASpB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,cAAc,CAAC,EAAE,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAiB1D;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,aAAa,EAAE,EAC1B,GAAG,EAAE,aAAa,EAAE,GACnB,aAAa,EAAE,CAIjB;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,eAAe,EAAE,EAC5B,GAAG,EAAE,eAAe,EAAE,GACrB,eAAe,EAAE,CAQnB;AAwUD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CA0EzB;AAMD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EAEhB,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,cAAc,CAAC,EAAE,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAiB1D;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,aAAa,EAAE,EAC1B,GAAG,EAAE,aAAa,EAAE,GACnB,aAAa,EAAE,CAIjB;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,eAAe,EAAE,EAC5B,GAAG,EAAE,eAAe,EAAE,GACrB,eAAe,EAAE,CAQnB;AAiVD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAiFzB;AAMD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
@@ -3,6 +3,7 @@ import { extractWithLLM, normalizeEntityName } from './llm-extractor.js';
3
3
  import { deduplicateFacts } from './dedup.js';
4
4
  import { processContradictions } from './contradiction.js';
5
5
  import { buildEntityIdMap, persistEdges } from './entity-extractor.js';
6
+ import { linkRelatedFacts } from './cross-linker.js';
6
7
  import { hashInput } from './hasher.js';
7
8
  import { updateScratchpad } from '../scratchpad/scratchpad.js';
8
9
  // ---------------------------------------------------------------------------
@@ -142,6 +143,8 @@ async function executeExtraction(config, extractionId, input, startTime) {
142
143
  entitiesCreated = newEntitiesCreated;
143
144
  // Collect the first persisted factId to anchor edges (edges reference a fact).
144
145
  let firstFactId;
146
+ // Track all created fact IDs for cross-linking
147
+ const createdFactIds = [];
145
148
  // ── BATCH EMBED all extracted facts at once (1 API call instead of N) ──
146
149
  const factsToEmbed = contradictionResults.filter(r => r.fact.operation !== 'noop');
147
150
  const factTexts = factsToEmbed.map(r => r.fact.contextualContent ?? r.fact.content);
@@ -197,21 +200,20 @@ async function executeExtraction(config, extractionId, input, startTime) {
197
200
  },
198
201
  sourceChunk: fact.sourceChunk,
199
202
  eventDate: fact.eventDate,
200
- documentDate: fact.documentDate,
203
+ documentDate: fact.documentDate ?? new Date(), // Always set — when the conversation happened
201
204
  });
202
205
  // Track counts — Git-style append-only: NEVER invalidate old facts.
203
206
  // Updates create new versions with same lineageId. Recency scoring
204
207
  // naturally prefers newer versions. Old versions remain searchable
205
208
  // for temporal reasoning ("what was my old X?").
209
+ createdFactIds.push(factId);
206
210
  if (fact.operation === 'update') {
207
211
  factsUpdated++;
208
- // No invalidation — old fact stays visible with valid_until = NULL
209
212
  }
210
213
  else if (fact.operation === 'invalidate') {
211
214
  factsInvalidated++;
212
215
  }
213
216
  else {
214
- // 'add', 'contradict', undefined → new fact created
215
217
  factsCreated++;
216
218
  }
217
219
  // Link only the entities that THIS fact mentions.
@@ -240,9 +242,16 @@ async function executeExtraction(config, extractionId, input, startTime) {
240
242
  }
241
243
  }
242
244
  }
243
- // Raw chunk storage removed raw chunks diluted search results and the compound
244
- // search SQL already excludes raw_chunk tagged facts. Extracted atomic facts are
245
- // sufficient for retrieval quality.
245
+ // Cross-link new facts to existing related facts via shared entities + keyword overlap
246
+ if (createdFactIds.length > 0) {
247
+ try {
248
+ const crossLinked = await linkRelatedFacts(config.storage, input.tenantId, createdFactIds, entityIdMap);
249
+ edgesCreated += crossLinked;
250
+ }
251
+ catch (err) {
252
+ console.error('[steno] Cross-linking failed:', err instanceof Error ? err.message : err);
253
+ }
254
+ }
246
255
  // Create edges ONCE after all facts are persisted.
247
256
  console.error(`[steno] Edge creation: ${mergedEdges.length} edges to persist, firstFactId=${firstFactId ? 'set' : 'MISSING'}`);
248
257
  if (mergedEdges.length > 0) {
@@ -318,6 +327,10 @@ export async function runExtractionPipeline(config, input) {
318
327
  durationMs: existing.durationMs ?? 0,
319
328
  };
320
329
  }
330
+ // If a previous extraction with the same hash failed, delete it so we can retry
331
+ if (existing && existing.status === 'failed') {
332
+ await config.storage.deleteExtraction(input.tenantId, existing.id);
333
+ }
321
334
  // 3. Create extraction record with status='queued'
322
335
  // Handle race condition: concurrent workers may try to create the same hash simultaneously
323
336
  const extractionId = crypto.randomUUID();
@@ -335,7 +348,9 @@ export async function runExtractionPipeline(config, input) {
335
348
  sessionId: input.sessionId,
336
349
  });
337
350
  }
338
- catch {
351
+ catch (createErr) {
352
+ // Log the actual error so it's not silently swallowed
353
+ console.error(`[steno] createExtraction failed:`, createErr instanceof Error ? createErr.message : createErr);
339
354
  // Duplicate hash — another worker beat us. Return their result.
340
355
  const raceWinner = await config.storage.getExtractionByHash(input.tenantId, inputHash);
341
356
  if (raceWinner) {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAgB/D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,KAAsB;IAChD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAQ,IAAI,CAAC,QAAsB;iBAChC,MAAM,CAAC,CAAC,CAAC,EAA0C,EAAE,CACpD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;gBACnC,OAAQ,CAA6B,CAAC,IAAI,KAAK,QAAQ;gBACvD,OAAQ,CAA6B,CAAC,OAAO,KAAK,QAAQ,CAC3D;iBACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,SAA0B,EAC1B,GAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAA4B,EAC5B,GAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,KAAK,UAAU,iBAAiB,CAC9B,MAAsB,EACtB,YAAoB,EACpB,KAAsB,EACtB,SAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC;IAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,oCAAoC;IACpC,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACtD,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE5B,IAAI,WAAW,GAAoB,eAAe,CAAC,KAAK,CAAC;IACzD,IAAI,cAAc,GAAsB,eAAe,CAAC,QAAQ,CAAC;IACjE,IAAI,WAAW,GAAoB,eAAe,CAAC,KAAK,CAAC;IAEzD,6CAA6C;IAC7C,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChG,MAAM,OAAO,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QAElE,wFAAwF;QACxF,IAAI,mBAAmB,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvD,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAChF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;oBAChD,SAAS,EAAE,cAAc;oBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,EAAE;oBACT,aAAa,EAAE,GAAG;oBAClB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACtC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;wBACxC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;qBACxB,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,cAAc,CACpC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,EAC9G,WAAW,EACX,mBAAmB,CACpB,CAAC;QAEF,gBAAgB,IAAI,SAAS,CAAC,WAAW,CAAC;QAC1C,iBAAiB,IAAI,SAAS,CAAC,YAAY,CAAC;QAC5C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAExB,6CAA6C;QAC7C,IAAI,cAAc,GAAG,SAAS,CAAC;QAC/B,IACE,IAAI,KAAK,MAAM;YACf,SAAS,CAAC,UAAU,GAAG,GAAG;YAC1B,MAAM,CAAC,QAAQ,EACf,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,EACzH,WAAW,EACX,mBAAmB,CACpB,CAAC;YACF,gBAAgB,IAAI,WAAW,CAAC,WAAW,CAAC;YAC5C,iBAAiB,IAAI,WAAW,CAAC,YAAY,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;QAED,oCAAoC;QACpC,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QAEtE,mEAAmE;QACnE,cAAc,GAAG,aAAa,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClF,WAAW,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,8CAA8C;IAC9C,MAAM,YAAY,GAAG,MAAM,gBAAgB,CACzC;QACE,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,QAAQ;KACrB,EACD,WAAW,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;IAEF,yBAAyB;IACzB,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAEjE,gBAAgB;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,iCAAiC;IACjC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAA2B,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9E,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC7C,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAEhE,kFAAkF;IAClF,+EAA+E;IAC/E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,EAAE,CAAC;QAC1D,cAAc,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,MAAM;YACrB,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,MAAM,gBAAgB,CACjF,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,EAChB,KAAK,CAAC,QAAQ,EACd,cAAc,CACf,CAAC;IACF,eAAe,GAAG,kBAAkB,CAAC;IAErC,+EAA+E;IAC/E,IAAI,WAA+B,CAAC;IAEpC,+CAA+C;IAC/C,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,0EAA0E;IAC1E,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,4CAA4C;IAC5C,KAAK,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,aAAa,EAAE,IAAI,oBAAoB,EAAE,CAAC;QAChF,kBAAkB;QAClB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM;YAAE,SAAS;QAExC,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW;YAAE,WAAW,GAAG,MAAM,CAAC;QAEvC,IAAI,SAAiB,CAAC;QAEtB,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1D,yCAAyC;YACzC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC;QAED,mCAAmC;QACnC,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7F,yBAAyB;QACzB,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9B,EAAE,EAAE,MAAM;YACV,SAAS;YACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9E,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACtC,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;YAC7D,mBAAmB;YACnB,aAAa,EAAE,aAAa,IAAI,SAAS;YACzC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY;YACZ,cAAc,EAAE,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;YAClE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE;gBACR,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC7D,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;aACjE;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE,EAAE,8CAA8C;SAC9F,CAAC,CAAC;QAEH,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,iDAAiD;QACjD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChC,YAAY,EAAE,CAAC;QACjB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YAC3C,gBAAgB,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,kDAAkD;QAClD,2EAA2E;QAC3E,2FAA2F;QAC3F,wDAAwD;QACxD,IAAI,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC9C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAChD,aAAa,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC1C,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;oBAC7B,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACxE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;qBAAM,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC7E,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,uFAAuF;IACvF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;YACxG,YAAY,IAAI,WAAW,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,OAAO,CAAC,KAAK,CAAC,0BAA0B,WAAW,CAAC,MAAM,kCAAkC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/H,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,UAAU,QAAQ,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,YAAY,GAAG,MAAM,YAAY,CAC/B,MAAM,CAAC,OAAO,EACd,KAAK,CAAC,QAAQ,EACd,WAAW,EACX,WAAW,EACX,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1C,0CAA0C;IAC1C,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE;QAClE,MAAM,EAAE,WAAW;QACnB,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,YAAY;QACZ,eAAe,EAAE,gBAAgB;QACjC,gBAAgB,EAAE,iBAAiB;QACnC,UAAU;QACV,WAAW,EAAE,IAAI,IAAI,EAAE;KACxB,CAAC,CAAC;IAEH,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,oBAAoB;aACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IAED,kBAAkB;IAClB,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CACjC,KAAK,CAAC,QAAQ,EACd,gBAAgB,GAAG,iBAAiB,EACpC,CAAC,EACD,CAAC,EACD,CAAC,CACF,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,YAAY;QACZ,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,gBAAgB;QACjC,gBAAgB,EAAE,iBAAiB;QACnC,UAAU;KACX,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,KAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,0BAA0B;IAC1B,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/E,gCAAgC;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChD,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,EAAE;YACzB,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,IAAI,EAAE,QAAQ,CAAC,QAAQ,IAAI,WAAW;YACtC,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;SACrC,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,mDAAmD;IACnD,8FAA8F;IAC9F,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACpC,EAAE,EAAE,YAAY;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,WAAW;YACtB,SAAS;YACT,SAAS,EAAE,WAAW,CAAC,MAAM;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,sDAAsD;QACtD,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9G,gEAAgE;QAChE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvF,IAAI,UAAU,EAAE,CAAC;YACf,OAAO;gBACL,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;gBAC7C,eAAe,EAAE,UAAU,CAAC,eAAe;gBAC3C,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,IAAI,EAAE,UAAU,CAAC,QAAQ,IAAI,WAAW;gBACxC,eAAe,EAAE,UAAU,CAAC,eAAe;gBAC3C,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;gBAC7C,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,CAAC;aACvC,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,mCAAmC;IACnC,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE;QAClE,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE;YAClE,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAsB,EACtB,YAAoB,EACpB,KAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,gCAAgC;IAChC,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE;QAClE,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE;YAClE,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -14,6 +14,7 @@ import { extractWithLLM, normalizeEntityName } from './llm-extractor.js';
14
14
  import { deduplicateFacts } from './dedup.js';
15
15
  import { processContradictions } from './contradiction.js';
16
16
  import { buildEntityIdMap, persistEdges } from './entity-extractor.js';
17
+ import { linkRelatedFacts } from './cross-linker.js';
17
18
  import { hashInput } from './hasher.js';
18
19
  import { updateScratchpad } from '../scratchpad/scratchpad.js';
19
20
 
@@ -223,6 +224,9 @@ async function executeExtraction(
223
224
  // Collect the first persisted factId to anchor edges (edges reference a fact).
224
225
  let firstFactId: string | undefined;
225
226
 
227
+ // Track all created fact IDs for cross-linking
228
+ const createdFactIds: string[] = [];
229
+
226
230
  // ── BATCH EMBED all extracted facts at once (1 API call instead of N) ──
227
231
  const factsToEmbed = contradictionResults.filter(r => r.fact.operation !== 'noop');
228
232
  const factTexts = factsToEmbed.map(r => r.fact.contextualContent ?? r.fact.content);
@@ -288,13 +292,13 @@ async function executeExtraction(
288
292
  // Updates create new versions with same lineageId. Recency scoring
289
293
  // naturally prefers newer versions. Old versions remain searchable
290
294
  // for temporal reasoning ("what was my old X?").
295
+ createdFactIds.push(factId);
296
+
291
297
  if (fact.operation === 'update') {
292
298
  factsUpdated++;
293
- // No invalidation — old fact stays visible with valid_until = NULL
294
299
  } else if (fact.operation === 'invalidate') {
295
300
  factsInvalidated++;
296
301
  } else {
297
- // 'add', 'contradict', undefined → new fact created
298
302
  factsCreated++;
299
303
  }
300
304
 
@@ -324,9 +328,15 @@ async function executeExtraction(
324
328
  }
325
329
  }
326
330
 
327
- // Raw chunk storage removed raw chunks diluted search results and the compound
328
- // search SQL already excludes raw_chunk tagged facts. Extracted atomic facts are
329
- // sufficient for retrieval quality.
331
+ // Cross-link new facts to existing related facts via shared entities + keyword overlap
332
+ if (createdFactIds.length > 0) {
333
+ try {
334
+ const crossLinked = await linkRelatedFacts(config.storage, input.tenantId, createdFactIds, entityIdMap);
335
+ edgesCreated += crossLinked;
336
+ } catch (err) {
337
+ console.error('[steno] Cross-linking failed:', err instanceof Error ? err.message : err);
338
+ }
339
+ }
330
340
 
331
341
  // Create edges ONCE after all facts are persisted.
332
342
  console.error(`[steno] Edge creation: ${mergedEdges.length} edges to persist, firstFactId=${firstFactId ? 'set' : 'MISSING'}`);
@@ -1,6 +1,6 @@
1
1
  import type { LLMMessage } from '../adapters/llm.js';
2
2
  import type { DomainEntityType } from '../config.js';
3
- export declare const FACT_EXTRACTION_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n If the conversation header says \"[This conversation took place on 8 May, 2023]\", set \"dd\" to \"2023-05-08\" for all facts.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\"facts\": [{\"t\": \"fact text here\", \"i\": 0.7, \"ed\": \"2023-05-07\", \"dd\": \"2023-05-08\"}, {\"t\": \"another fact\", \"i\": 0.3, \"ed\": null, \"dd\": \"2023-05-08\"}]}\n\n- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal\n- dd (documentDate): ISO date string of when the conversation took place, from context header\n\nScore importance (i) from 0.0 to 1.0:\n- 0.9-1.0: Identity, health conditions, allergies, life events (birth, marriage, death)\n- 0.7-0.8: Relationships, employment, education, strong preferences, plans\n- 0.4-0.6: Activities, opinions, moderate preferences, daily events\n- 0.1-0.3: Casual mentions, weather, trivial observations\n\nNothing else. No explanation, no markdown.";
3
+ export declare const FACT_EXTRACTION_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n - If only a month is mentioned (e.g., \"in March 2026\") and today IS in that month, use TODAY's date from the header.\n - If only a month is mentioned and it's a PAST month, use the 15th as midpoint.\n Set \"dd\" (document date) to today's date from the header for ALL facts \u2014 this is when the conversation happened.\n\n9. PATTERN DETECTION: If the text reveals a recurring behavior, preference, routine, or coping strategy, extract it as a pattern fact with higher importance (0.7-0.9).\n - \"I always procrastinate on Mondays\" \u2192 {\"t\": \"User tends to procrastinate on Mondays\", \"i\": 0.8, \"ed\": null, \"dd\": \"...\", \"p\": true}\n - \"Coffee helps me focus\" \u2192 {\"t\": \"User finds that coffee helps with focus\", \"i\": 0.7, \"ed\": null, \"dd\": \"...\", \"p\": true}\n Patterns are behavioral insights \u2014 routines, coping strategies, energy patterns, recurring struggles.\n Mark patterns with \"p\": true in the output. Regular facts use \"p\": false.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\"facts\": [{\"t\": \"fact text here\", \"i\": 0.7, \"ed\": \"2023-05-07\", \"dd\": \"2023-05-08\", \"p\": false}, {\"t\": \"another fact\", \"i\": 0.3, \"ed\": null, \"dd\": \"2023-05-08\", \"p\": false}]}\n\n- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal\n- dd (documentDate): ISO date string of when the conversation took place, from context header\n\nScore importance (i) from 0.0 to 1.0:\n- 0.9-1.0: Identity, health conditions, allergies, life events (birth, marriage, death)\n- 0.7-0.8: Relationships, employment, education, strong preferences, plans\n- 0.4-0.6: Activities, opinions, moderate preferences, daily events\n- 0.1-0.3: Casual mentions, weather, trivial observations\n\nNothing else. No explanation, no markdown.";
4
4
  export declare const GRAPH_EXTRACTION_PROMPT = "You are a knowledge graph builder. Given a list of facts about a person, extract entities and relationships.\n\n## ENTITIES\n\nExtract only IMPORTANT named entities \u2014 proper nouns and specific things worth remembering. Aim for 3-8 entities total, not 40.\n\nDO extract: People (Casey, Jamie), Organizations (Brightwell Capital), Places (Harbor Point), Products/Projects (LifePath, AirPods Max), Named activities (Catan, D&D)\nDO NOT extract: Generic nouns (team, boss, meeting, work, food, gym), abstract concepts (motivation, stress), common objects (pizza, chair, phone)\n\n## RELATIONSHIPS\n\nExtract relationships between entities. Be SMART \u2014 infer from context:\n- \"User works at Google\" \u2192 user works_at google\n- \"User loves Casey, plans to propose\" \u2192 user partner_of casey\n- \"User's friend Jamie came over\" \u2192 user friend_of jamie\n\nUse snake_case relation names: works_at, partner_of, friend_of, lives_in, uses, studies, prefers, etc.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\n \"entities\": [\n {\"name\": \"Casey\", \"entity_type\": \"person\"},\n {\"name\": \"Brightwell Capital\", \"entity_type\": \"organization\"}\n ],\n \"edges\": [\n {\"source\": \"user\", \"target\": \"casey\", \"relation\": \"partner_of\"},\n {\"source\": \"user\", \"target\": \"brightwell capital\", \"relation\": \"works_at\"}\n ]\n}\n\nentity_type must be one of: {ENTITY_TYPES}.\nEntity names must be clean: no punctuation, no articles, no sentence fragments.\nReturn ONLY valid JSON.";
5
5
  export declare const DEFAULT_ENTITY_TYPES: string[];
6
6
  export declare const DEDUP_PROMPT = "You are a memory deduplication engine. Given NEW facts and EXISTING facts in a memory store, classify each new fact.\n\nFor each new fact, decide:\n- ADD: entirely new information, not covered by existing facts\n- UPDATE: replaces or refines an existing fact (provide the index). The new fact SUPERSEDES the old one.\n- EXTEND: adds new detail to an existing fact WITHOUT contradicting it (provide the index)\n- NOOP: already covered by an existing fact \u2014 skip it\n- CONTRADICT: conflicts with an existing fact (provide the index)\n\nReturn a JSON array:\n[\n {\"fact\": \"...\", \"operation\": \"ADD\"},\n {\"fact\": \"...\", \"operation\": \"UPDATE\", \"existing_index\": 3},\n {\"fact\": \"...\", \"operation\": \"EXTEND\", \"existing_index\": 5},\n {\"fact\": \"...\", \"operation\": \"NOOP\"},\n {\"fact\": \"...\", \"operation\": \"CONTRADICT\", \"existing_index\": 7}\n]\n\nBe conservative: prefer NOOP over ADD if the information is substantially similar.\nPrefer EXTEND over UPDATE when the new fact adds detail without changing the core meaning.";
@@ -23,6 +23,6 @@ export declare function buildGraphExtractionPrompt(facts: string[], entityTypes?
23
23
  * Compares new facts against existing facts.
24
24
  */
25
25
  export declare function buildDedupPrompt(newFacts: string[], existingFacts: ExistingFact[]): LLMMessage[];
26
- export declare const EXTRACTION_SYSTEM_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n If the conversation header says \"[This conversation took place on 8 May, 2023]\", set \"dd\" to \"2023-05-08\" for all facts.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\"facts\": [{\"t\": \"fact text here\", \"i\": 0.7, \"ed\": \"2023-05-07\", \"dd\": \"2023-05-08\"}, {\"t\": \"another fact\", \"i\": 0.3, \"ed\": null, \"dd\": \"2023-05-08\"}]}\n\n- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal\n- dd (documentDate): ISO date string of when the conversation took place, from context header\n\nScore importance (i) from 0.0 to 1.0:\n- 0.9-1.0: Identity, health conditions, allergies, life events (birth, marriage, death)\n- 0.7-0.8: Relationships, employment, education, strong preferences, plans\n- 0.4-0.6: Activities, opinions, moderate preferences, daily events\n- 0.1-0.3: Casual mentions, weather, trivial observations\n\nNothing else. No explanation, no markdown.";
26
+ export declare const EXTRACTION_SYSTEM_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n - If only a month is mentioned (e.g., \"in March 2026\") and today IS in that month, use TODAY's date from the header.\n - If only a month is mentioned and it's a PAST month, use the 15th as midpoint.\n Set \"dd\" (document date) to today's date from the header for ALL facts \u2014 this is when the conversation happened.\n\n9. PATTERN DETECTION: If the text reveals a recurring behavior, preference, routine, or coping strategy, extract it as a pattern fact with higher importance (0.7-0.9).\n - \"I always procrastinate on Mondays\" \u2192 {\"t\": \"User tends to procrastinate on Mondays\", \"i\": 0.8, \"ed\": null, \"dd\": \"...\", \"p\": true}\n - \"Coffee helps me focus\" \u2192 {\"t\": \"User finds that coffee helps with focus\", \"i\": 0.7, \"ed\": null, \"dd\": \"...\", \"p\": true}\n Patterns are behavioral insights \u2014 routines, coping strategies, energy patterns, recurring struggles.\n Mark patterns with \"p\": true in the output. Regular facts use \"p\": false.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\"facts\": [{\"t\": \"fact text here\", \"i\": 0.7, \"ed\": \"2023-05-07\", \"dd\": \"2023-05-08\", \"p\": false}, {\"t\": \"another fact\", \"i\": 0.3, \"ed\": null, \"dd\": \"2023-05-08\", \"p\": false}]}\n\n- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal\n- dd (documentDate): ISO date string of when the conversation took place, from context header\n\nScore importance (i) from 0.0 to 1.0:\n- 0.9-1.0: Identity, health conditions, allergies, life events (birth, marriage, death)\n- 0.7-0.8: Relationships, employment, education, strong preferences, plans\n- 0.4-0.6: Activities, opinions, moderate preferences, daily events\n- 0.1-0.3: Casual mentions, weather, trivial observations\n\nNothing else. No explanation, no markdown.";
27
27
  export declare function buildExtractionPrompt(input: string, existingFacts?: ExistingFact[]): LLMMessage[];
28
28
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMrD,eAAO,MAAM,sBAAsB,s/GA8DQ,CAAC;AAM5C,eAAO,MAAM,uBAAuB,6/CAkCZ,CAAC;AAEzB,eAAO,MAAM,oBAAoB,UAA2E,CAAC;AAM7G,eAAO,MAAM,YAAY,8iCAmBkE,CAAC;AAM5F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAKrE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,GACrC,UAAU,EAAE,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,CAOhG;AAMD,eAAO,MAAM,wBAAwB,s/GAAyB,CAAC;AAE/D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,YAAY,EAAE,GAC7B,UAAU,EAAE,CAcd"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMrD,eAAO,MAAM,sBAAsB,y3IAsEQ,CAAC;AAM5C,eAAO,MAAM,uBAAuB,6/CAkCZ,CAAC;AAEzB,eAAO,MAAM,oBAAoB,UAA2E,CAAC;AAM7G,eAAO,MAAM,YAAY,8iCAmBkE,CAAC;AAM5F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAMrE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,GACrC,UAAU,EAAE,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,CAOhG;AAMD,eAAO,MAAM,wBAAwB,y3IAAyB,CAAC;AAE/D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,YAAY,EAAE,GAC7B,UAAU,EAAE,CAcd"}
@@ -47,12 +47,20 @@ For identity/trait facts, state them DIRECTLY:
47
47
  8. For EVERY fact, include "ed" (event date) if the fact describes something that happened at a specific time.
48
48
  - "User went to the gym on May 7" → ed: "2023-05-07"
49
49
  - "User prefers dark mode" → ed: null (timeless preference)
50
- If the conversation header says "[This conversation took place on 8 May, 2023]", set "dd" to "2023-05-08" for all facts.
50
+ - If only a month is mentioned (e.g., "in March 2026") and today IS in that month, use TODAY's date from the header.
51
+ - If only a month is mentioned and it's a PAST month, use the 15th as midpoint.
52
+ Set "dd" (document date) to today's date from the header for ALL facts — this is when the conversation happened.
53
+
54
+ 9. PATTERN DETECTION: If the text reveals a recurring behavior, preference, routine, or coping strategy, extract it as a pattern fact with higher importance (0.7-0.9).
55
+ - "I always procrastinate on Mondays" → {"t": "User tends to procrastinate on Mondays", "i": 0.8, "ed": null, "dd": "...", "p": true}
56
+ - "Coffee helps me focus" → {"t": "User finds that coffee helps with focus", "i": 0.7, "ed": null, "dd": "...", "p": true}
57
+ Patterns are behavioral insights — routines, coping strategies, energy patterns, recurring struggles.
58
+ Mark patterns with "p": true in the output. Regular facts use "p": false.
51
59
 
52
60
  ## OUTPUT
53
61
 
54
62
  Return ONLY a JSON object:
55
- {"facts": [{"t": "fact text here", "i": 0.7, "ed": "2023-05-07", "dd": "2023-05-08"}, {"t": "another fact", "i": 0.3, "ed": null, "dd": "2023-05-08"}]}
63
+ {"facts": [{"t": "fact text here", "i": 0.7, "ed": "2023-05-07", "dd": "2023-05-08", "p": false}, {"t": "another fact", "i": 0.3, "ed": null, "dd": "2023-05-08", "p": false}]}
56
64
 
57
65
  - ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal
58
66
  - dd (documentDate): ISO date string of when the conversation took place, from context header
@@ -131,9 +139,10 @@ Prefer EXTEND over UPDATE when the new fact adds detail without changing the cor
131
139
  * Simple: extract facts as strings.
132
140
  */
133
141
  export function buildFactExtractionPrompt(input) {
142
+ const today = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
134
143
  return [
135
144
  { role: 'system', content: FACT_EXTRACTION_PROMPT },
136
- { role: 'user', content: `Extract facts from this text:\n\n${input}` },
145
+ { role: 'user', content: `[Today's date: ${today}]\n\nExtract facts from this text:\n\n${input}` },
137
146
  ];
138
147
  }
139
148
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scratchpad.d.ts","sourceRoot":"","sources":["scratchpad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB1F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
1
+ {"version":3,"file":"scratchpad.d.ts","sourceRoot":"","sources":["scratchpad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAiDf;AA0BD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB1F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAoBjB"}