@steno-ai/engine 0.1.1 → 0.1.3

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 (116) hide show
  1. package/dist/adapters/storage.d.ts +1 -0
  2. package/dist/adapters/storage.d.ts.map +1 -1
  3. package/dist/extraction/llm-extractor.d.ts.map +1 -1
  4. package/dist/extraction/llm-extractor.js +5 -3
  5. package/dist/extraction/llm-extractor.js.map +1 -1
  6. package/dist/extraction/pipeline.d.ts.map +1 -1
  7. package/dist/extraction/pipeline.js +5 -1
  8. package/dist/extraction/pipeline.js.map +1 -1
  9. package/dist/extraction/prompts.d.ts +2 -2
  10. package/dist/extraction/prompts.d.ts.map +1 -1
  11. package/dist/extraction/prompts.js +12 -3
  12. package/dist/extraction/prompts.js.map +1 -1
  13. package/package.json +6 -2
  14. package/src/adapters/cache.js +2 -0
  15. package/src/adapters/embedding.js +2 -0
  16. package/src/adapters/llm.js +2 -0
  17. package/src/adapters/perplexity-embedding.js +78 -0
  18. package/src/adapters/storage.js +2 -0
  19. package/src/adapters/storage.ts +1 -0
  20. package/src/config.d.ts +211 -1
  21. package/src/config.d.ts.map +1 -1
  22. package/src/config.js +92 -0
  23. package/src/config.js.map +1 -1
  24. package/src/extraction/contradiction.js +23 -0
  25. package/src/extraction/dedup.js +93 -0
  26. package/src/extraction/dedup.js.map +1 -1
  27. package/src/extraction/entity-extractor.d.ts.map +1 -1
  28. package/src/extraction/entity-extractor.js +145 -0
  29. package/src/extraction/entity-extractor.js.map +1 -1
  30. package/src/extraction/hasher.js +8 -0
  31. package/src/extraction/heuristic.js +282 -0
  32. package/src/extraction/llm-extractor.d.ts +3 -1
  33. package/src/extraction/llm-extractor.d.ts.map +1 -1
  34. package/src/extraction/llm-extractor.js +238 -0
  35. package/src/extraction/llm-extractor.js.map +1 -1
  36. package/src/extraction/llm-extractor.ts +7 -5
  37. package/src/extraction/pipeline.d.ts +3 -0
  38. package/src/extraction/pipeline.d.ts.map +1 -1
  39. package/src/extraction/pipeline.js +398 -0
  40. package/src/extraction/pipeline.js.map +1 -1
  41. package/src/extraction/pipeline.ts +6 -1
  42. package/src/extraction/prompts.d.ts +28 -0
  43. package/src/extraction/prompts.d.ts.map +1 -0
  44. package/src/extraction/prompts.js +196 -0
  45. package/src/extraction/prompts.js.map +1 -1
  46. package/src/extraction/prompts.ts +12 -3
  47. package/src/extraction/sliding-window.js +84 -0
  48. package/src/extraction/sliding-window.js.map +1 -1
  49. package/src/extraction/types.d.ts +12 -0
  50. package/src/extraction/types.d.ts.map +1 -1
  51. package/src/extraction/types.js +2 -0
  52. package/src/feedback/tracker.js +90 -0
  53. package/src/models/api-key.d.ts +2 -2
  54. package/src/models/api-key.js +21 -0
  55. package/src/models/edge.d.ts +6 -6
  56. package/src/models/edge.js +29 -0
  57. package/src/models/entity.d.ts +2 -2
  58. package/src/models/entity.js +22 -0
  59. package/src/models/extraction.d.ts +6 -6
  60. package/src/models/extraction.js +40 -0
  61. package/src/models/fact-entity.js +14 -0
  62. package/src/models/fact.d.ts +191 -0
  63. package/src/models/fact.d.ts.map +1 -0
  64. package/src/models/fact.js +72 -0
  65. package/src/models/fact.js.map +1 -0
  66. package/src/models/index.js +13 -0
  67. package/src/models/memory-access.d.ts +4 -4
  68. package/src/models/memory-access.js +33 -0
  69. package/src/models/session.js +23 -0
  70. package/src/models/tenant.d.ts +248 -14
  71. package/src/models/tenant.d.ts.map +1 -1
  72. package/src/models/tenant.js +23 -0
  73. package/src/models/trigger.d.ts +5 -5
  74. package/src/models/trigger.js +41 -0
  75. package/src/models/usage-record.js +14 -0
  76. package/src/models/webhook.d.ts +1 -1
  77. package/src/models/webhook.js +25 -0
  78. package/src/retrieval/compound-search.d.ts.map +1 -1
  79. package/src/retrieval/compound-search.js +87 -0
  80. package/src/retrieval/compound-search.js.map +1 -1
  81. package/src/retrieval/contradiction-surfacer.js +64 -0
  82. package/src/retrieval/embedding-cache.js +56 -0
  83. package/src/retrieval/fusion.d.ts +1 -0
  84. package/src/retrieval/fusion.d.ts.map +1 -1
  85. package/src/retrieval/fusion.js +87 -0
  86. package/src/retrieval/fusion.js.map +1 -1
  87. package/src/retrieval/graph-traversal.d.ts +2 -1
  88. package/src/retrieval/graph-traversal.d.ts.map +1 -1
  89. package/src/retrieval/graph-traversal.js +208 -0
  90. package/src/retrieval/graph-traversal.js.map +1 -1
  91. package/src/retrieval/query-expansion.js +76 -0
  92. package/src/retrieval/reranker.js +47 -0
  93. package/src/retrieval/salience-scorer.js +41 -0
  94. package/src/retrieval/search.d.ts.map +1 -1
  95. package/src/retrieval/search.js +228 -0
  96. package/src/retrieval/search.js.map +1 -1
  97. package/src/retrieval/temporal-scorer.d.ts +18 -0
  98. package/src/retrieval/temporal-scorer.d.ts.map +1 -0
  99. package/src/retrieval/temporal-scorer.js +106 -0
  100. package/src/retrieval/temporal-scorer.js.map +1 -0
  101. package/src/retrieval/trigger-matcher.d.ts.map +1 -1
  102. package/src/retrieval/trigger-matcher.js +134 -0
  103. package/src/retrieval/trigger-matcher.js.map +1 -1
  104. package/src/retrieval/types.d.ts +4 -0
  105. package/src/retrieval/types.d.ts.map +1 -1
  106. package/src/retrieval/types.js +9 -0
  107. package/src/retrieval/types.js.map +1 -1
  108. package/src/retrieval/vector-search.d.ts.map +1 -1
  109. package/src/retrieval/vector-search.js +24 -0
  110. package/src/retrieval/vector-search.js.map +1 -1
  111. package/src/salience/decay.js +15 -0
  112. package/src/scratchpad/scratchpad.js +107 -0
  113. package/src/sessions/manager.d.ts +11 -0
  114. package/src/sessions/manager.d.ts.map +1 -0
  115. package/src/sessions/manager.js +63 -0
  116. package/src/sessions/manager.js.map +1 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Score all candidates with recency and salience signals.
3
+ *
4
+ * recencyScore = pure time decay (how recently the fact was accessed)
5
+ * salienceScore = importance x frequency factor (how important and reinforced)
6
+ *
7
+ * These are separate signals that feed into fusion with independent weights.
8
+ */
9
+ export function scoreSalience(candidates, config) {
10
+ const halfLifeDays = config?.halfLifeDays ?? 30;
11
+ const normalizationK = config?.normalizationK ?? 50;
12
+ return candidates.map(candidate => {
13
+ const { fact } = candidate;
14
+ // Recency: blend of access recency + creation recency
15
+ // Access recency = how recently the fact was recalled (reinforcement)
16
+ // Creation recency = how recently the fact was created (freshness)
17
+ // Git-style versioning needs creation recency so newer versions of
18
+ // the same lineage naturally rank higher.
19
+ const lambda = Math.LN2 / halfLifeDays;
20
+ const daysSinceAccess = fact.lastAccessed
21
+ ? (Date.now() - new Date(fact.lastAccessed).getTime()) / (1000 * 60 * 60 * 24)
22
+ : Infinity;
23
+ const accessRecency = fact.lastAccessed ? Math.exp(-lambda * daysSinceAccess) : 0;
24
+ const daysSinceCreation = fact.createdAt
25
+ ? (Date.now() - new Date(fact.createdAt).getTime()) / (1000 * 60 * 60 * 24)
26
+ : Infinity;
27
+ const creationRecency = fact.createdAt ? Math.exp(-lambda * daysSinceCreation) : 0;
28
+ // Blend: 50% access recency + 50% creation recency
29
+ const recencyScore = 0.5 * accessRecency + 0.5 * creationRecency;
30
+ // Salience: importance x frequency factor
31
+ // This captures "how important is this fact AND how often has it been reinforced"
32
+ const frequencyFactor = Math.min(1.0, Math.log(1 + fact.frequency) / Math.log(1 + normalizationK));
33
+ const salienceScore = fact.importance * frequencyFactor;
34
+ return {
35
+ ...candidate,
36
+ recencyScore: Math.max(0, Math.min(1, recencyScore)),
37
+ salienceScore: Math.max(0, Math.min(1, salienceScore)),
38
+ };
39
+ });
40
+ }
41
+ //# sourceMappingURL=salience-scorer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.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,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAa1F,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,wBAAsB,MAAM,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA0KzB"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.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,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAc1F,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,wBAAsB,MAAM,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA6NzB"}
@@ -0,0 +1,228 @@
1
+ import { DEFAULT_FUSION_WEIGHTS } from './types.js';
2
+ import { compoundSearchSignal } from './compound-search.js';
3
+ import { graphSearch } from './graph-traversal.js';
4
+ import { matchTriggers } from './trigger-matcher.js';
5
+ import { scoreSalience } from './salience-scorer.js';
6
+ import { fuseAndRank } from './fusion.js';
7
+ import { surfaceContradictions } from './contradiction-surfacer.js';
8
+ import { recordAccesses } from '../feedback/tracker.js';
9
+ import { CachedEmbeddingAdapter } from './embedding-cache.js';
10
+ import { extractTimeReference, scoreTemporalRelevance } from './temporal-scorer.js';
11
+ export async function search(config, options) {
12
+ const startTime = Date.now();
13
+ const limit = Math.min(options.limit ?? 10, 100);
14
+ const weights = options.weights ?? config.defaultWeights ?? DEFAULT_FUSION_WEIGHTS;
15
+ const fetchMultiplier = 3; // fetch 3x limit from each signal for better fusion
16
+ // Wrap embedding with cache if available
17
+ const effectiveEmbedding = config.cache
18
+ ? new CachedEmbeddingAdapter(config.embedding, config.cache)
19
+ : config.embedding;
20
+ // 1. Run all signals in PARALLEL — ONE compound search (not multiple)
21
+ // Multi-query expansion adds latency (3× embedding calls). Instead:
22
+ // - Single compound search with original query (vector + keyword in 1 DB call)
23
+ // - Graph search with original query
24
+ // - Trigger matching
25
+ // All parallel = single round trip time.
26
+ const t0 = Date.now();
27
+ const tCompound = Date.now();
28
+ const compoundPromise = compoundSearchSignal(config.storage, effectiveEmbedding, options.query, options.tenantId, options.scope, options.scopeId, limit * fetchMultiplier).catch(() => ({ vectorCandidates: [], keywordCandidates: [] }));
29
+ const tGraph = Date.now();
30
+ const graphPromise = graphSearch(config.storage, effectiveEmbedding, options.query, options.tenantId, options.scope, options.scopeId, limit * fetchMultiplier, { maxDepth: config.graphMaxDepth, maxEntities: config.graphMaxEntities, asOf: options.temporalFilter?.asOf }).catch(() => []);
31
+ const tTrigger = Date.now();
32
+ const triggerPromise = matchTriggers(config.storage, effectiveEmbedding, options.query, options.tenantId, options.scope, options.scopeId).catch(() => ({ candidates: [], triggersMatched: [] }));
33
+ const [compoundResult, graphSettled, triggerSettled] = await Promise.all([
34
+ compoundPromise.then(r => { console.error(`[steno-search] compound: ${Date.now() - tCompound}ms (vec=${r.vectorCandidates.length}, kw=${r.keywordCandidates.length})`); return r; }),
35
+ graphPromise.then(r => { console.error(`[steno-search] graph: ${Date.now() - tGraph}ms (${Array.isArray(r) ? r.length : 0} candidates)`); return r; }),
36
+ triggerPromise.then(r => { console.error(`[steno-search] trigger: ${Date.now() - tTrigger}ms`); return r; }),
37
+ ]);
38
+ console.error(`[steno-search] Signals total: ${Date.now() - t0}ms`);
39
+ const vectorCandidates = compoundResult.vectorCandidates;
40
+ const keywordCandidates = compoundResult.keywordCandidates;
41
+ const graphCandidates = Array.isArray(graphSettled) ? graphSettled : [];
42
+ const triggerResult = triggerSettled;
43
+ const triggersMatched = triggerResult.triggersMatched;
44
+ // 2. Triple-tier pre-fusion reranking — rerank each stream INDEPENDENTLY
45
+ // Only rerank when there are enough candidates to justify the embedding cost
46
+ // before fusion, like Hydra DB's triple-tier architecture.
47
+ const t1 = Date.now();
48
+ // Batch-embed query + all unique candidate contents in ONE call
49
+ const allPreRerankCandidates = [...vectorCandidates, ...graphCandidates];
50
+ let queryEmbedding = null;
51
+ const candidateEmbeddings = new Map();
52
+ // Only rerank if we have >10 candidates — for small sets the original order is fine
53
+ if (allPreRerankCandidates.length > 10) {
54
+ try {
55
+ const uniqueTexts = new Map();
56
+ for (const c of allPreRerankCandidates) {
57
+ if (!uniqueTexts.has(c.fact.id))
58
+ uniqueTexts.set(c.fact.id, c.fact.content);
59
+ }
60
+ const textsToEmbed = [options.query, ...uniqueTexts.values()];
61
+ const embeddings = await effectiveEmbedding.embedBatch(textsToEmbed);
62
+ queryEmbedding = embeddings[0];
63
+ let idx = 1;
64
+ for (const [factId] of uniqueTexts) {
65
+ candidateEmbeddings.set(factId, embeddings[idx++]);
66
+ }
67
+ }
68
+ catch {
69
+ // Reranking fails silently — proceed without it
70
+ }
71
+ }
72
+ // Rerank vector candidates
73
+ if (queryEmbedding && vectorCandidates.length > 1) {
74
+ const RERANK_W = 0.4;
75
+ for (const c of vectorCandidates) {
76
+ const factEmb = candidateEmbeddings.get(c.fact.id);
77
+ if (factEmb) {
78
+ const sim = cosineSim(queryEmbedding, factEmb);
79
+ c.vectorScore = c.vectorScore * (1 - RERANK_W) + sim * RERANK_W;
80
+ }
81
+ }
82
+ vectorCandidates.sort((a, b) => b.vectorScore - a.vectorScore);
83
+ }
84
+ // Rerank graph candidates
85
+ if (queryEmbedding && graphCandidates.length > 1) {
86
+ const RERANK_W = 0.4;
87
+ for (const c of graphCandidates) {
88
+ const factEmb = candidateEmbeddings.get(c.fact.id);
89
+ if (factEmb) {
90
+ const sim = cosineSim(queryEmbedding, factEmb);
91
+ c.graphScore = c.graphScore * (1 - RERANK_W) + sim * RERANK_W;
92
+ }
93
+ }
94
+ graphCandidates.sort((a, b) => b.graphScore - a.graphScore);
95
+ }
96
+ // Keyword candidates skip reranking — FTS scores shouldn't be overridden by embeddings
97
+ console.error(`[steno-search] Pre-fusion rerank: ${Date.now() - t1}ms`);
98
+ // 3. Merge all pre-reranked streams
99
+ const allCandidates = [
100
+ ...vectorCandidates,
101
+ ...keywordCandidates,
102
+ ...graphCandidates,
103
+ ...triggerResult.candidates,
104
+ ];
105
+ if (allCandidates.length === 0) {
106
+ return {
107
+ results: [],
108
+ triggersMatched,
109
+ totalCandidates: 0,
110
+ durationMs: Date.now() - startTime,
111
+ };
112
+ }
113
+ // 4. Score salience + recency on all candidates
114
+ const scoredCandidates = scoreSalience(allCandidates, {
115
+ halfLifeDays: config.salienceHalfLifeDays,
116
+ normalizationK: config.salienceNormalizationK,
117
+ });
118
+ // 4b. Score temporal relevance if query has time reference
119
+ const timeRef = extractTimeReference(options.query);
120
+ if (timeRef) {
121
+ scoreTemporalRelevance(scoredCandidates, timeRef);
122
+ }
123
+ // 5. Fuse and rank
124
+ const fusionResults = fuseAndRank(scoredCandidates, weights, limit);
125
+ // 5b. Lineage dedup — keep only the NEWEST version per lineage
126
+ // Git-style append-only means multiple versions coexist. For normal queries,
127
+ // show only the latest version (by createdAt). For "includeHistory", show all.
128
+ let dedupedResults = fusionResults;
129
+ if (!options.includeHistory) {
130
+ const lineageBest = new Map();
131
+ for (let i = 0; i < fusionResults.length; i++) {
132
+ const r = fusionResults[i];
133
+ const lid = r.fact.lineageId;
134
+ if (!lid)
135
+ continue;
136
+ const existing = lineageBest.get(lid);
137
+ const createdAt = new Date(r.fact.createdAt);
138
+ if (!existing || createdAt > existing.createdAt) {
139
+ lineageBest.set(lid, { idx: i, createdAt, score: r.score });
140
+ }
141
+ }
142
+ const keepIndices = new Set(Array.from(lineageBest.values()).map(v => v.idx));
143
+ // Also keep facts with no lineage match (unique facts)
144
+ dedupedResults = fusionResults.filter((r, idx) => {
145
+ const lid = r.fact.lineageId;
146
+ if (!lid)
147
+ return true;
148
+ return keepIndices.has(idx);
149
+ });
150
+ }
151
+ // 5c. Knowledge chain resolution — if a result has metadata.relationType === 'updates',
152
+ // check if the fact it updates is ALSO in results. If so, suppress the older one.
153
+ const updatedFactIds = new Set();
154
+ for (const r of dedupedResults) {
155
+ const meta = r.fact.metadata;
156
+ if (meta?.relationType === 'updates' && meta?.relatedFactId) {
157
+ updatedFactIds.add(meta.relatedFactId);
158
+ }
159
+ }
160
+ if (updatedFactIds.size > 0) {
161
+ dedupedResults = dedupedResults.filter(r => !updatedFactIds.has(r.fact.id));
162
+ }
163
+ // 5d. Token budget trimming — keep highest-scored results that fit within budget
164
+ if (options.tokenBudget && options.tokenBudget > 0) {
165
+ let tokenCount = 0;
166
+ const budgetResults = [];
167
+ for (const r of dedupedResults) {
168
+ // Rough token estimate: content chars / 4, plus sourceChunk if present
169
+ const factTokens = Math.ceil(r.fact.content.length / 4) +
170
+ (r.fact.sourceChunk ? Math.ceil(r.fact.sourceChunk.length / 4) : 0);
171
+ if (tokenCount + factTokens > options.tokenBudget)
172
+ break;
173
+ tokenCount += factTokens;
174
+ budgetResults.push(r);
175
+ }
176
+ dedupedResults = budgetResults;
177
+ }
178
+ // 6. Enrich with contradiction context
179
+ let results = await surfaceContradictions(config.storage, options.tenantId, dedupedResults);
180
+ console.error(`[steno-search] Fusion + dedup: ${Date.now() - t1}ms, Total: ${Date.now() - startTime}ms`);
181
+ // 6. Optionally enrich with graph context
182
+ if (options.includeGraph) {
183
+ for (const result of results) {
184
+ const entities = await config.storage.getEntitiesForFact(result.fact.id);
185
+ const edges = [];
186
+ for (const entity of entities) {
187
+ const entityEdges = await config.storage.getEdgesForEntity(options.tenantId, entity.id);
188
+ edges.push(...entityEdges);
189
+ }
190
+ result.graph = { entities, edges };
191
+ }
192
+ }
193
+ // 7. Optionally enrich with fact history (previous versions)
194
+ if (options.includeHistory) {
195
+ for (const result of results) {
196
+ const history = await config.storage.getFactsByLineage(options.tenantId, result.fact.lineageId);
197
+ // Filter out the current fact, sort by version ascending
198
+ result.history = history
199
+ .filter(f => f.id !== result.fact.id)
200
+ .sort((a, b) => a.version - b.version);
201
+ }
202
+ }
203
+ // 8. Record memory accesses for metamemory + update decay scores (fire-and-forget)
204
+ void recordAccesses(config.storage, options.tenantId, options.query, results, {
205
+ halfLifeDays: config.salienceHalfLifeDays,
206
+ normalizationK: config.salienceNormalizationK,
207
+ }).catch(err => console.error('[steno] Failed to record memory accesses:', err));
208
+ return {
209
+ results,
210
+ triggersMatched,
211
+ totalCandidates: allCandidates.length,
212
+ durationMs: Date.now() - startTime,
213
+ };
214
+ }
215
+ /** Fast cosine similarity for pre-fusion reranking */
216
+ function cosineSim(a, b) {
217
+ if (a.length !== b.length || a.length === 0)
218
+ return 0;
219
+ let dot = 0, normA = 0, normB = 0;
220
+ for (let i = 0; i < a.length; i++) {
221
+ dot += a[i] * b[i];
222
+ normA += a[i] * a[i];
223
+ normB += b[i] * b[i];
224
+ }
225
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
226
+ return denom === 0 ? 0 : dot / denom;
227
+ }
228
+ //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Candidate } from './types.js';
2
+ export interface TimeReference {
3
+ year?: number;
4
+ month?: number;
5
+ day?: number;
6
+ ordering?: 'first' | 'last';
7
+ }
8
+ /**
9
+ * Extract temporal references from a search query.
10
+ * Returns null if query has no temporal component.
11
+ */
12
+ export declare function extractTimeReference(query: string): TimeReference | null;
13
+ /**
14
+ * Score candidates by temporal proximity to the query's time reference.
15
+ * Mutates candidates in place, setting their `temporalScore`.
16
+ */
17
+ export declare function scoreTemporalRelevance(candidates: Candidate[], timeRef: TimeReference): void;
18
+ //# sourceMappingURL=temporal-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-scorer.d.ts","sourceRoot":"","sources":["temporal-scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAWD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA8CxE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAoC5F"}
@@ -0,0 +1,106 @@
1
+ const MONTH_NAMES = [
2
+ 'january', 'february', 'march', 'april', 'may', 'june',
3
+ 'july', 'august', 'september', 'october', 'november', 'december',
4
+ ];
5
+ const MONTH_ABBR = [
6
+ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',
7
+ 'jul', 'aug', 'sep', 'oct', 'nov', 'dec',
8
+ ];
9
+ /**
10
+ * Extract temporal references from a search query.
11
+ * Returns null if query has no temporal component.
12
+ */
13
+ export function extractTimeReference(query) {
14
+ const lower = query.toLowerCase();
15
+ let ordering;
16
+ if (/\bfirst\b/.test(lower))
17
+ ordering = 'first';
18
+ if (/\blast\b/.test(lower) && !/\blast\s+(week|month|year)\b/.test(lower))
19
+ ordering = 'last';
20
+ // Try explicit date: "March 15th", "March 15, 2023"
21
+ for (let i = 0; i < MONTH_NAMES.length; i++) {
22
+ const name = MONTH_NAMES[i];
23
+ const abbr = MONTH_ABBR[i];
24
+ const monthPattern = new RegExp(`(?:${name}|${abbr})\\.?\\s+(\\d{1,2})(?:st|nd|rd|th)?(?:[,\\s]+(\\d{4}))?`, 'i');
25
+ const match = lower.match(monthPattern);
26
+ if (match) {
27
+ return { month: i, day: parseInt(match[1], 10), year: match[2] ? parseInt(match[2], 10) : undefined, ordering };
28
+ }
29
+ const reversePattern = new RegExp(`(\\d{1,2})(?:st|nd|rd|th)?\\s+(?:${name}|${abbr})(?:[,\\s]+(\\d{4}))?`, 'i');
30
+ const revMatch = lower.match(reversePattern);
31
+ if (revMatch) {
32
+ return { month: i, day: parseInt(revMatch[1], 10), year: revMatch[2] ? parseInt(revMatch[2], 10) : undefined, ordering };
33
+ }
34
+ }
35
+ // Month-only: "in February", "during March"
36
+ for (let i = 0; i < MONTH_NAMES.length; i++) {
37
+ if (lower.includes(MONTH_NAMES[i]) || lower.includes(MONTH_ABBR[i])) {
38
+ return { month: i, ordering };
39
+ }
40
+ }
41
+ // Relative: "yesterday", "last week", "last month"
42
+ if (/\byesterday\b/.test(lower)) {
43
+ const d = new Date();
44
+ d.setDate(d.getDate() - 1);
45
+ return { year: d.getFullYear(), month: d.getMonth(), day: d.getDate(), ordering };
46
+ }
47
+ if (/\blast\s+week\b/.test(lower)) {
48
+ const d = new Date();
49
+ d.setDate(d.getDate() - 7);
50
+ return { year: d.getFullYear(), month: d.getMonth(), day: d.getDate(), ordering };
51
+ }
52
+ if (/\blast\s+month\b/.test(lower)) {
53
+ const d = new Date();
54
+ d.setMonth(d.getMonth() - 1);
55
+ return { year: d.getFullYear(), month: d.getMonth(), ordering };
56
+ }
57
+ if (ordering)
58
+ return { ordering };
59
+ return null;
60
+ }
61
+ /**
62
+ * Score candidates by temporal proximity to the query's time reference.
63
+ * Mutates candidates in place, setting their `temporalScore`.
64
+ */
65
+ export function scoreTemporalRelevance(candidates, timeRef) {
66
+ // For ordering queries ("which first/last"), score by eventDate order
67
+ if (timeRef.ordering && !timeRef.month && !timeRef.day && !timeRef.year) {
68
+ const withDates = candidates.filter(c => c.fact.eventDate != null);
69
+ if (withDates.length === 0)
70
+ return;
71
+ withDates.sort((a, b) => {
72
+ const aDate = new Date(a.fact.eventDate).getTime();
73
+ const bDate = new Date(b.fact.eventDate).getTime();
74
+ return timeRef.ordering === 'first' ? aDate - bDate : bDate - aDate;
75
+ });
76
+ for (let i = 0; i < withDates.length; i++) {
77
+ withDates[i].temporalScore = 1.0 - (i / withDates.length);
78
+ }
79
+ return;
80
+ }
81
+ // For date-proximity queries, score by distance to reference date
82
+ const now = new Date();
83
+ const refDate = new Date(timeRef.year ?? now.getFullYear(), timeRef.month ?? 0, timeRef.day ?? 15);
84
+ const refTime = refDate.getTime();
85
+ let maxDistance = 0;
86
+ for (const c of candidates) {
87
+ const eventDate = c.fact.eventDate ?? c.fact.documentDate;
88
+ if (!eventDate)
89
+ continue;
90
+ const dist = Math.abs(new Date(eventDate).getTime() - refTime);
91
+ if (dist > maxDistance)
92
+ maxDistance = dist;
93
+ }
94
+ if (maxDistance === 0)
95
+ return;
96
+ for (const c of candidates) {
97
+ const eventDate = c.fact.eventDate ?? c.fact.documentDate;
98
+ if (!eventDate) {
99
+ c.temporalScore = 0;
100
+ continue;
101
+ }
102
+ const dist = Math.abs(new Date(eventDate).getTime() - refTime);
103
+ c.temporalScore = 1.0 - (dist / maxDistance);
104
+ }
105
+ }
106
+ //# sourceMappingURL=temporal-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-scorer.js","sourceRoot":"","sources":["temporal-scorer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-matcher.d.ts","sourceRoot":"","sources":["trigger-matcher.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,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8EjE;AAED,sDAAsD;AACtD,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,OAAO,CAAC,CA2DlB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYjE"}
1
+ {"version":3,"file":"trigger-matcher.d.ts","sourceRoot":"","sources":["trigger-matcher.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,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgFjE;AAED,sDAAsD;AACtD,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,OAAO,CAAC,CA2DlB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYjE"}
@@ -0,0 +1,134 @@
1
+ import { vectorSearch } from './vector-search.js';
2
+ export async function matchTriggers(storage, embedding, query, tenantId, scope, scopeId) {
3
+ // 1. Get active triggers, sorted by priority descending
4
+ const triggers = await storage.getActiveTriggers(tenantId, scope, scopeId);
5
+ // triggers should already be sorted by priority DESC from storage
6
+ const candidates = [];
7
+ const triggersMatched = [];
8
+ // 2. Evaluate each trigger
9
+ for (const trigger of triggers) {
10
+ const matches = await evaluateCondition(trigger.condition, query, {
11
+ storage,
12
+ embedding,
13
+ tenantId,
14
+ scope,
15
+ scopeId,
16
+ });
17
+ if (matches) {
18
+ triggersMatched.push(trigger.id);
19
+ // Surface facts from factIds (batch fetch)
20
+ if (trigger.factIds && trigger.factIds.length > 0) {
21
+ const facts = await storage.getFactsByIds(tenantId, trigger.factIds);
22
+ for (const fact of facts) {
23
+ if (fact.validUntil === null) {
24
+ candidates.push({
25
+ fact,
26
+ vectorScore: 0,
27
+ keywordScore: 0,
28
+ graphScore: 0,
29
+ recencyScore: 0,
30
+ salienceScore: 0,
31
+ temporalScore: 0,
32
+ source: 'trigger',
33
+ triggeredBy: trigger.id,
34
+ });
35
+ }
36
+ }
37
+ }
38
+ // Surface facts for entityIds
39
+ if (trigger.entityIds && trigger.entityIds.length > 0) {
40
+ for (const entityId of trigger.entityIds) {
41
+ const result = await storage.getFactsForEntity(tenantId, entityId, { limit: 10 });
42
+ for (const fact of result.data) {
43
+ if (fact.validUntil === null) {
44
+ candidates.push({
45
+ fact,
46
+ vectorScore: 0,
47
+ keywordScore: 0,
48
+ graphScore: 0,
49
+ recencyScore: 0,
50
+ salienceScore: 0,
51
+ temporalScore: 0,
52
+ source: 'trigger',
53
+ triggeredBy: trigger.id,
54
+ });
55
+ }
56
+ }
57
+ }
58
+ }
59
+ // Handle queryTemplate — run a vector sub-search with the template
60
+ if (trigger.queryTemplate) {
61
+ const templateResults = await vectorSearch(storage, embedding, trigger.queryTemplate, tenantId, scope, scopeId, 5);
62
+ for (const c of templateResults) {
63
+ candidates.push({ ...c, source: 'trigger', triggeredBy: trigger.id });
64
+ }
65
+ }
66
+ // Increment trigger fire count (fire and forget)
67
+ void storage.incrementTriggerFired(tenantId, trigger.id).catch(() => { });
68
+ }
69
+ }
70
+ return { candidates, triggersMatched };
71
+ }
72
+ /** Evaluate a trigger condition against query text */
73
+ export async function evaluateCondition(condition, query, context) {
74
+ const lowerQuery = query.toLowerCase();
75
+ // AND: all sub-conditions must match (checked first — if present, only AND logic applies)
76
+ if (condition.AND && condition.AND.length > 0) {
77
+ const results = await Promise.all(condition.AND.map((sub) => evaluateCondition(sub, query, context)));
78
+ return results.every(Boolean);
79
+ }
80
+ // OR: any sub-condition must match (checked second — if present, only OR logic applies)
81
+ if (condition.OR && condition.OR.length > 0) {
82
+ const results = await Promise.all(condition.OR.map((sub) => evaluateCondition(sub, query, context)));
83
+ return results.some(Boolean);
84
+ }
85
+ // topic_match: any topic word appears in query
86
+ if (condition.topic_match && condition.topic_match.length > 0) {
87
+ if (condition.topic_match.some((topic) => lowerQuery.includes(topic.toLowerCase()))) {
88
+ return true;
89
+ }
90
+ }
91
+ // keyword_any: any keyword appears in query
92
+ if (condition.keyword_any && condition.keyword_any.length > 0) {
93
+ if (condition.keyword_any.some((kw) => lowerQuery.includes(kw.toLowerCase()))) {
94
+ return true;
95
+ }
96
+ }
97
+ // entity_present: check if entities of given type(s) exist for this tenant
98
+ // NOTE: entity_present currently checks tenant-wide, not scope-specific.
99
+ // A scope-filtered version would require joining through fact_entities → facts.
100
+ // This is acceptable for v1 but should be improved when per-scope entity queries are added.
101
+ if (condition.entity_present && condition.entity_present.length > 0) {
102
+ const entities = await context.storage.getEntitiesForTenant(context.tenantId, { limit: 100 });
103
+ const hasMatchingEntity = entities.data.some((e) => condition.entity_present.some((type) => e.entityType.toLowerCase() === type.toLowerCase()));
104
+ if (hasMatchingEntity)
105
+ return true;
106
+ }
107
+ // semantic_similarity: embed both texts and compare
108
+ if (condition.semantic_similarity) {
109
+ const { text, threshold } = condition.semantic_similarity;
110
+ const [queryEmb, condEmb] = await Promise.all([
111
+ context.embedding.embed(query),
112
+ context.embedding.embed(text),
113
+ ]);
114
+ const similarity = cosineSimilarity(queryEmb, condEmb);
115
+ if (similarity >= threshold)
116
+ return true;
117
+ }
118
+ return false;
119
+ }
120
+ export function cosineSimilarity(a, b) {
121
+ if (a.length !== b.length || a.length === 0)
122
+ return 0;
123
+ let dot = 0;
124
+ let normA = 0;
125
+ let normB = 0;
126
+ for (let i = 0; i < a.length; i++) {
127
+ dot += a[i] * b[i];
128
+ normA += a[i] * a[i];
129
+ normB += b[i] * b[i];
130
+ }
131
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
132
+ return denom === 0 ? 0 : dot / denom;
133
+ }
134
+ //# sourceMappingURL=trigger-matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-matcher.js","sourceRoot":"","sources":["trigger-matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trigger-matcher.js","sourceRoot":"","sources":["trigger-matcher.ts"],"names":[],"mappings":"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"}