squish-memory 0.8.2 → 0.9.1

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 (266) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.env.mcp +30 -0
  4. package/.mcp.json +2 -5
  5. package/CHANGELOG.md +111 -0
  6. package/QUICK-START.md +65 -0
  7. package/README.md +188 -530
  8. package/commands/managed-sync.ts +69 -0
  9. package/commands/mcp-server.ts +519 -0
  10. package/config/mcp-cli-fallback-policy.json +22 -0
  11. package/config/mcp-migration-map.json +22 -0
  12. package/config/mcp-mode-semantics.json +21 -0
  13. package/config/mcp-remote-auth.json +36 -0
  14. package/config/mcp-universal.schema.json +48 -0
  15. package/config/mcp.json +38 -0
  16. package/config/remote-memory-policy.json +32 -0
  17. package/dist/algorithms/merge/detection/hash-filters.js +2 -2
  18. package/dist/algorithms/merge/detection/hash-filters.js.map +1 -1
  19. package/dist/algorithms/merge/detection/two-stage-detector.d.ts +5 -2
  20. package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -1
  21. package/dist/algorithms/merge/detection/two-stage-detector.js +139 -22
  22. package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -1
  23. package/dist/commands/managed-sync.d.ts +10 -0
  24. package/dist/commands/managed-sync.d.ts.map +1 -0
  25. package/dist/commands/managed-sync.js +64 -0
  26. package/dist/commands/managed-sync.js.map +1 -0
  27. package/dist/commands/mcp-server.d.ts +3 -0
  28. package/dist/commands/mcp-server.d.ts.map +1 -0
  29. package/dist/commands/mcp-server.js +389 -0
  30. package/dist/commands/mcp-server.js.map +1 -0
  31. package/dist/config.d.ts +24 -1
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/config.js +32 -1
  34. package/dist/config.js.map +1 -1
  35. package/dist/core/associations.d.ts +1 -1
  36. package/dist/core/associations.d.ts.map +1 -1
  37. package/dist/core/consolidation.d.ts +31 -0
  38. package/dist/core/consolidation.d.ts.map +1 -1
  39. package/dist/core/consolidation.js +237 -29
  40. package/dist/core/consolidation.js.map +1 -1
  41. package/dist/core/embeddings/google-multimodal.d.ts +14 -0
  42. package/dist/core/embeddings/google-multimodal.d.ts.map +1 -0
  43. package/dist/core/embeddings/google-multimodal.js +142 -0
  44. package/dist/core/embeddings/google-multimodal.js.map +1 -0
  45. package/dist/core/embeddings.d.ts +3 -2
  46. package/dist/core/embeddings.d.ts.map +1 -1
  47. package/dist/core/embeddings.js +61 -39
  48. package/dist/core/embeddings.js.map +1 -1
  49. package/dist/core/mcp/client.d.ts +17 -0
  50. package/dist/core/mcp/client.d.ts.map +1 -0
  51. package/dist/core/mcp/client.js +101 -0
  52. package/dist/core/mcp/client.js.map +1 -0
  53. package/dist/core/mcp/index.d.ts +6 -0
  54. package/dist/core/mcp/index.d.ts.map +1 -0
  55. package/dist/core/mcp/index.js +6 -0
  56. package/dist/core/mcp/index.js.map +1 -0
  57. package/dist/core/mcp/server.d.ts +18 -0
  58. package/dist/core/mcp/server.d.ts.map +1 -0
  59. package/dist/core/mcp/server.js +131 -0
  60. package/dist/core/mcp/server.js.map +1 -0
  61. package/dist/core/mcp/standalone-server.d.ts +13 -0
  62. package/dist/core/mcp/standalone-server.d.ts.map +1 -0
  63. package/dist/core/mcp/standalone-server.js +46 -0
  64. package/dist/core/mcp/standalone-server.js.map +1 -0
  65. package/dist/core/mcp/tools.d.ts +9 -0
  66. package/dist/core/mcp/tools.d.ts.map +1 -0
  67. package/dist/core/mcp/tools.js +262 -0
  68. package/dist/core/mcp/tools.js.map +1 -0
  69. package/dist/core/mcp/types.d.ts +315 -0
  70. package/dist/core/mcp/types.d.ts.map +1 -0
  71. package/dist/core/mcp/types.js +48 -0
  72. package/dist/core/mcp/types.js.map +1 -0
  73. package/dist/core/memory/categorizer.d.ts +27 -0
  74. package/dist/core/memory/categorizer.d.ts.map +1 -0
  75. package/dist/core/memory/categorizer.js +304 -0
  76. package/dist/core/memory/categorizer.js.map +1 -0
  77. package/dist/core/memory/conflict-detector.d.ts +7 -0
  78. package/dist/core/memory/conflict-detector.d.ts.map +1 -0
  79. package/dist/core/memory/conflict-detector.js +43 -0
  80. package/dist/core/memory/conflict-detector.js.map +1 -0
  81. package/dist/core/memory/context-collector.d.ts +10 -0
  82. package/dist/core/memory/context-collector.d.ts.map +1 -0
  83. package/dist/core/memory/context-collector.js +55 -0
  84. package/dist/core/memory/context-collector.js.map +1 -0
  85. package/dist/core/memory/contradiction-resolver.d.ts +40 -0
  86. package/dist/core/memory/contradiction-resolver.d.ts.map +1 -0
  87. package/dist/core/memory/contradiction-resolver.js +368 -0
  88. package/dist/core/memory/contradiction-resolver.js.map +1 -0
  89. package/dist/core/memory/edit-workflow.d.ts +19 -0
  90. package/dist/core/memory/edit-workflow.d.ts.map +1 -0
  91. package/dist/core/memory/edit-workflow.js +120 -0
  92. package/dist/core/memory/edit-workflow.js.map +1 -0
  93. package/dist/core/memory/feedback-tracker.d.ts +12 -0
  94. package/dist/core/memory/feedback-tracker.d.ts.map +1 -0
  95. package/dist/core/memory/feedback-tracker.js +151 -0
  96. package/dist/core/memory/feedback-tracker.js.map +1 -0
  97. package/dist/core/memory/hybrid-retrieval.d.ts +11 -12
  98. package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
  99. package/dist/core/memory/hybrid-retrieval.js +56 -28
  100. package/dist/core/memory/hybrid-retrieval.js.map +1 -1
  101. package/dist/core/memory/hybrid-scorer.d.ts +5 -16
  102. package/dist/core/memory/hybrid-scorer.d.ts.map +1 -1
  103. package/dist/core/memory/hybrid-scorer.js +161 -125
  104. package/dist/core/memory/hybrid-scorer.js.map +1 -1
  105. package/dist/core/memory/hybrid-search.js +53 -19
  106. package/dist/core/memory/hybrid-search.js.map +1 -1
  107. package/dist/core/memory/memories.d.ts +4 -0
  108. package/dist/core/memory/memories.d.ts.map +1 -1
  109. package/dist/core/memory/memories.js +133 -60
  110. package/dist/core/memory/memories.js.map +1 -1
  111. package/dist/core/memory/progressive-disclosure.d.ts +43 -0
  112. package/dist/core/memory/progressive-disclosure.d.ts.map +1 -0
  113. package/dist/core/memory/progressive-disclosure.js +280 -0
  114. package/dist/core/memory/progressive-disclosure.js.map +1 -0
  115. package/dist/core/memory/query-rewriter.d.ts +13 -0
  116. package/dist/core/memory/query-rewriter.d.ts.map +1 -0
  117. package/dist/core/memory/query-rewriter.js +118 -0
  118. package/dist/core/memory/query-rewriter.js.map +1 -0
  119. package/dist/core/memory/response-analyzer.d.ts +9 -0
  120. package/dist/core/memory/response-analyzer.d.ts.map +1 -0
  121. package/dist/core/memory/response-analyzer.js +61 -0
  122. package/dist/core/memory/response-analyzer.js.map +1 -0
  123. package/dist/core/memory/stats.d.ts +17 -0
  124. package/dist/core/memory/stats.d.ts.map +1 -0
  125. package/dist/core/memory/stats.js +87 -0
  126. package/dist/core/memory/stats.js.map +1 -0
  127. package/dist/core/memory/telemetry.d.ts +69 -0
  128. package/dist/core/memory/telemetry.d.ts.map +1 -0
  129. package/dist/core/memory/telemetry.js +313 -0
  130. package/dist/core/memory/telemetry.js.map +1 -0
  131. package/dist/core/memory/temporal-facts.d.ts +41 -0
  132. package/dist/core/memory/temporal-facts.d.ts.map +1 -0
  133. package/dist/core/memory/temporal-facts.js +262 -0
  134. package/dist/core/memory/temporal-facts.js.map +1 -0
  135. package/dist/core/memory/trigger-detector.d.ts +14 -0
  136. package/dist/core/memory/trigger-detector.d.ts.map +1 -0
  137. package/dist/core/memory/trigger-detector.js +42 -0
  138. package/dist/core/memory/trigger-detector.js.map +1 -0
  139. package/dist/core/memory/write-gate.d.ts +54 -0
  140. package/dist/core/memory/write-gate.d.ts.map +1 -0
  141. package/dist/core/memory/write-gate.js +210 -0
  142. package/dist/core/memory/write-gate.js.map +1 -0
  143. package/dist/core/projects.d.ts +2 -0
  144. package/dist/core/projects.d.ts.map +1 -1
  145. package/dist/core/projects.js +33 -0
  146. package/dist/core/projects.js.map +1 -1
  147. package/dist/core/scheduler/cron-scheduler.d.ts +32 -0
  148. package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -0
  149. package/dist/core/scheduler/cron-scheduler.js +238 -0
  150. package/dist/core/scheduler/cron-scheduler.js.map +1 -0
  151. package/dist/core/scheduler/heartbeat.d.ts +11 -0
  152. package/dist/core/scheduler/heartbeat.d.ts.map +1 -0
  153. package/dist/core/scheduler/heartbeat.js +73 -0
  154. package/dist/core/scheduler/heartbeat.js.map +1 -0
  155. package/dist/core/scheduler/index.d.ts +8 -0
  156. package/dist/core/scheduler/index.d.ts.map +1 -0
  157. package/dist/core/scheduler/index.js +8 -0
  158. package/dist/core/scheduler/index.js.map +1 -0
  159. package/dist/core/scheduler/job-runner.d.ts +11 -0
  160. package/dist/core/scheduler/job-runner.d.ts.map +1 -0
  161. package/dist/core/scheduler/job-runner.js +161 -0
  162. package/dist/core/scheduler/job-runner.js.map +1 -0
  163. package/dist/core/session/auto-load.d.ts +6 -0
  164. package/dist/core/session/auto-load.d.ts.map +1 -0
  165. package/dist/core/session/auto-load.js +119 -0
  166. package/dist/core/session/auto-load.js.map +1 -0
  167. package/dist/core/session/index.d.ts +7 -0
  168. package/dist/core/session/index.d.ts.map +1 -0
  169. package/dist/core/session/index.js +7 -0
  170. package/dist/core/session/index.js.map +1 -0
  171. package/dist/core/session/types.d.ts +26 -0
  172. package/dist/core/session/types.d.ts.map +1 -0
  173. package/dist/core/session/types.js +10 -0
  174. package/dist/core/session/types.js.map +1 -0
  175. package/dist/core/snapshots/comparison.d.ts.map +1 -1
  176. package/dist/core/snapshots/comparison.js +8 -2
  177. package/dist/core/snapshots/comparison.js.map +1 -1
  178. package/dist/core/utils/content-extraction.d.ts.map +1 -1
  179. package/dist/core/utils/content-extraction.js +11 -1
  180. package/dist/core/utils/content-extraction.js.map +1 -1
  181. package/dist/core/utils/summarization-helpers.d.ts.map +1 -1
  182. package/dist/core/utils/summarization-helpers.js +4 -1
  183. package/dist/core/utils/summarization-helpers.js.map +1 -1
  184. package/dist/core/utils.d.ts.map +1 -1
  185. package/dist/core/utils.js +26 -3
  186. package/dist/core/utils.js.map +1 -1
  187. package/dist/core/worker.d.ts +20 -0
  188. package/dist/core/worker.d.ts.map +1 -1
  189. package/dist/core/worker.js +86 -0
  190. package/dist/core/worker.js.map +1 -1
  191. package/dist/db/adapter.d.ts +1 -5
  192. package/dist/db/adapter.d.ts.map +1 -1
  193. package/dist/db/adapter.js +125 -12
  194. package/dist/db/adapter.js.map +1 -1
  195. package/dist/db/bootstrap.d.ts.map +1 -1
  196. package/dist/db/bootstrap.js +178 -3
  197. package/dist/db/bootstrap.js.map +1 -1
  198. package/dist/db/index.d.ts +1 -5
  199. package/dist/db/index.d.ts.map +1 -1
  200. package/dist/db/index.js +7 -4
  201. package/dist/db/index.js.map +1 -1
  202. package/dist/drizzle/schema-sqlite.d.ts +1953 -612
  203. package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
  204. package/dist/drizzle/schema-sqlite.js +134 -0
  205. package/dist/drizzle/schema-sqlite.js.map +1 -1
  206. package/dist/drizzle/schema.d.ts +684 -3
  207. package/dist/drizzle/schema.d.ts.map +1 -1
  208. package/dist/drizzle/schema.js +81 -1
  209. package/dist/drizzle/schema.js.map +1 -1
  210. package/dist/index.d.ts +3 -3
  211. package/dist/index.js +152 -13
  212. package/dist/index.js.map +1 -1
  213. package/package.json +125 -103
  214. package/scripts/build-release.sh +33 -0
  215. package/scripts/db/check-db.mjs +88 -0
  216. package/scripts/db/fix-all-columns.mjs +52 -0
  217. package/scripts/db/fix-schema-all.mjs +55 -0
  218. package/scripts/db/fix-schema-full.mjs +46 -0
  219. package/scripts/db/fix-schema.mjs +38 -0
  220. package/scripts/db/init-db.mjs +13 -0
  221. package/scripts/db/recreate-db.mjs +14 -0
  222. package/scripts/generate-mcp.mjs +264 -0
  223. package/scripts/github-release.sh +61 -0
  224. package/scripts/init-dirs.mjs +13 -0
  225. package/scripts/init-dirs.ts +15 -0
  226. package/scripts/install-mcp.mjs +116 -0
  227. package/scripts/install-web.sh +120 -0
  228. package/scripts/install.mjs +340 -0
  229. package/scripts/openclaw-bootstrap.mjs +127 -0
  230. package/scripts/package-release.sh +71 -0
  231. package/scripts/remote-preflight.mjs +62 -0
  232. package/scripts/squish-fallback.mjs +132 -0
  233. package/scripts/test/test-all-systems.mjs +139 -0
  234. package/scripts/test/test-memory-system.mjs +139 -0
  235. package/scripts/test/test-v0.5.0.mjs +210 -0
  236. package/scripts/verify-mcp.mjs +214 -0
  237. package/skills/memory-guide/SKILL.md +181 -123
  238. package/skills/squish-cli/SKILL.md +200 -0
  239. package/skills/squish-mcp/SKILL.md +311 -0
  240. package/skills/squish-memory/SKILL.md +100 -62
  241. package/skills/squish-memory/claude-desktop.json +12 -0
  242. package/skills/squish-memory/install.mjs +335 -0
  243. package/skills/squish-memory/install.sh +94 -62
  244. package/skills/squish-memory/openclaw.json +13 -0
  245. package/skills/squish-memory/opencode.json +14 -0
  246. package/skills/squish-memory/skill.json +32 -0
  247. package/dist/adapters/claude-code/capture.d.ts +0 -11
  248. package/dist/adapters/claude-code/capture.d.ts.map +0 -1
  249. package/dist/adapters/claude-code/capture.js +0 -100
  250. package/dist/adapters/claude-code/capture.js.map +0 -1
  251. package/dist/adapters/claude-code/index.d.ts +0 -5
  252. package/dist/adapters/claude-code/index.d.ts.map +0 -1
  253. package/dist/adapters/claude-code/index.js +0 -6
  254. package/dist/adapters/claude-code/index.js.map +0 -1
  255. package/dist/adapters/claude-code/injection.d.ts +0 -34
  256. package/dist/adapters/claude-code/injection.d.ts.map +0 -1
  257. package/dist/adapters/claude-code/injection.js +0 -127
  258. package/dist/adapters/claude-code/injection.js.map +0 -1
  259. package/dist/adapters/claude-code/plugin-wrapper.d.ts +0 -21
  260. package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +0 -1
  261. package/dist/adapters/claude-code/plugin-wrapper.js +0 -239
  262. package/dist/adapters/claude-code/plugin-wrapper.js.map +0 -1
  263. package/dist/adapters/claude-code/types.d.ts +0 -46
  264. package/dist/adapters/claude-code/types.d.ts.map +0 -1
  265. package/dist/adapters/claude-code/types.js +0 -6
  266. package/dist/adapters/claude-code/types.js.map +0 -1
@@ -0,0 +1,151 @@
1
+ /** Feedback Tracker - Track memory usage in responses for Echo/Fizzle loop */
2
+ import { logger } from '../logger.js';
3
+ import { config } from '../../config.js';
4
+ import { getDb } from '../../db/index.js';
5
+ import { memoryFeedback, memories } from '../../drizzle/schema-sqlite.js';
6
+ import { eq, and } from 'drizzle-orm';
7
+ import { analyzeResponseForMemoryReferences, mightContainMemoryReferences } from './response-analyzer.js';
8
+ const injectionTracker = new Map();
9
+ export async function recordInjection(sessionId, memoryIds, memoryContent) {
10
+ if (!config.feedbackTrackingEnabled)
11
+ return;
12
+ injectionTracker.set(sessionId, {
13
+ memoryIds,
14
+ memoryContent,
15
+ injectedAt: new Date(),
16
+ });
17
+ const db = await getDb();
18
+ if (!db)
19
+ return;
20
+ try {
21
+ const now = new Date();
22
+ for (const memoryId of memoryIds) {
23
+ await db.insert(memoryFeedback).values({
24
+ memoryId,
25
+ sessionId,
26
+ wasInjected: true,
27
+ wasReferenced: false,
28
+ referenceCount: 0,
29
+ retrievalPriorityDelta: 0,
30
+ injectedAt: now,
31
+ }).onConflictDoNothing();
32
+ }
33
+ logger.debug(`[FeedbackTracker] Recorded injection of ${memoryIds.length} memories for session ${sessionId}`);
34
+ }
35
+ catch (error) {
36
+ logger.error('[FeedbackTracker] Failed to record injection:', error);
37
+ }
38
+ }
39
+ export async function analyzeAndRecordFeedback(sessionId, responseText) {
40
+ if (!config.feedbackTrackingEnabled)
41
+ return;
42
+ const injection = injectionTracker.get(sessionId);
43
+ if (!injection) {
44
+ logger.debug(`[FeedbackTracker] No injection record for session ${sessionId}`);
45
+ return;
46
+ }
47
+ if (!mightContainMemoryReferences(responseText)) {
48
+ await applyFizzlePenalty(injection.memoryIds);
49
+ injectionTracker.delete(sessionId);
50
+ return;
51
+ }
52
+ const analysis = analyzeResponseForMemoryReferences(responseText, injection.memoryIds, injection.memoryContent);
53
+ const db = await getDb();
54
+ if (!db)
55
+ return;
56
+ try {
57
+ const now = new Date();
58
+ for (const memoryId of injection.memoryIds) {
59
+ const wasReferenced = analysis.referencedMemoryIds.includes(memoryId);
60
+ const delta = wasReferenced ? config.feedbackEchoBonus : -config.feedbackFizzlePenalty;
61
+ const existing = await db
62
+ .select()
63
+ .from(memoryFeedback)
64
+ .where(and(eq(memoryFeedback.memoryId, memoryId), eq(memoryFeedback.sessionId, sessionId)))
65
+ .limit(1);
66
+ if (existing.length > 0) {
67
+ await db
68
+ .update(memoryFeedback)
69
+ .set({
70
+ wasReferenced,
71
+ referenceCount: wasReferenced ? 1 : 0,
72
+ retrievalPriorityDelta: delta,
73
+ referencedAt: wasReferenced ? now : null,
74
+ })
75
+ .where(eq(memoryFeedback.id, existing[0].id));
76
+ }
77
+ await updateRetrievalPriority(memoryId, delta);
78
+ }
79
+ logger.info(`[FeedbackTracker] Feedback recorded: ${analysis.referenceCount} echoes, ${injection.memoryIds.length - analysis.referenceCount} fizzles`);
80
+ injectionTracker.delete(sessionId);
81
+ }
82
+ catch (error) {
83
+ logger.error('[FeedbackTracker] Failed to record feedback:', error);
84
+ }
85
+ }
86
+ async function applyFizzlePenalty(memoryIds) {
87
+ try {
88
+ for (const memoryId of memoryIds) {
89
+ await updateRetrievalPriority(memoryId, -config.feedbackFizzlePenalty);
90
+ }
91
+ logger.debug(`[FeedbackTracker] Applied fizzle penalty to ${memoryIds.length} memories`);
92
+ }
93
+ catch (error) {
94
+ logger.error('[FeedbackTracker] Failed to apply fizzle penalty:', error);
95
+ }
96
+ }
97
+ export async function updateRetrievalPriority(memoryId, delta) {
98
+ const db = await getDb();
99
+ if (!db)
100
+ return;
101
+ try {
102
+ const [memory] = await db
103
+ .select({ retrievalPriority: memories.retrievalPriority })
104
+ .from(memories)
105
+ .where(eq(memories.id, memoryId))
106
+ .limit(1);
107
+ if (!memory)
108
+ return;
109
+ const currentPriority = memory.retrievalPriority ?? 50;
110
+ const newPriority = Math.max(0, Math.min(100, currentPriority + delta));
111
+ await db
112
+ .update(memories)
113
+ .set({ retrievalPriority: newPriority })
114
+ .where(eq(memories.id, memoryId));
115
+ logger.debug(`[FeedbackTracker] Updated priority for ${memoryId}: ${currentPriority} -> ${newPriority}`);
116
+ }
117
+ catch (error) {
118
+ logger.error('[FeedbackTracker] Failed to update retrieval priority:', error);
119
+ }
120
+ }
121
+ export async function getMemoryFeedbackStats(memoryId) {
122
+ const db = await getDb();
123
+ if (!db) {
124
+ return { totalInjections: 0, totalReferences: 0, echoRate: 0, averagePriorityDelta: 0 };
125
+ }
126
+ try {
127
+ const records = await db
128
+ .select()
129
+ .from(memoryFeedback)
130
+ .where(eq(memoryFeedback.memoryId, memoryId));
131
+ const totalInjections = records.filter((r) => r.wasInjected).length;
132
+ const totalReferences = records.filter((r) => r.wasReferenced).length;
133
+ const echoRate = totalInjections > 0 ? totalReferences / totalInjections : 0;
134
+ const totalDelta = records.reduce((sum, r) => sum + (r.retrievalPriorityDelta ?? 0), 0);
135
+ const averagePriorityDelta = records.length > 0 ? totalDelta / records.length : 0;
136
+ return { totalInjections, totalReferences, echoRate, averagePriorityDelta };
137
+ }
138
+ catch (error) {
139
+ logger.error('[FeedbackTracker] Failed to get feedback stats:', error);
140
+ return { totalInjections: 0, totalReferences: 0, echoRate: 0, averagePriorityDelta: 0 };
141
+ }
142
+ }
143
+ export function cleanupInjectionTracker(maxAgeMs = 3600000) {
144
+ const now = Date.now();
145
+ for (const [sessionId, injection] of injectionTracker.entries()) {
146
+ if (now - injection.injectedAt.getTime() > maxAgeMs) {
147
+ injectionTracker.delete(sessionId);
148
+ }
149
+ }
150
+ }
151
+ //# sourceMappingURL=feedback-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-tracker.js","sourceRoot":"","sources":["../../../core/memory/feedback-tracker.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAuB,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAQ1G,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,SAAmB,EACnB,aAAkC;IAElC,IAAI,CAAC,MAAM,CAAC,uBAAuB;QAAE,OAAO;IAE5C,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE;QAC9B,SAAS;QACT,aAAa;QACb,UAAU,EAAE,IAAI,IAAI,EAAE;KACvB,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE;QAAE,OAAO;IAEhB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;gBACrC,QAAQ;gBACR,SAAS;gBACT,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,KAAK;gBACpB,cAAc,EAAE,CAAC;gBACjB,sBAAsB,EAAE,CAAC;gBACzB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC,mBAAmB,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,2CAA2C,SAAS,CAAC,MAAM,yBAAyB,SAAS,EAAE,CAAC,CAAC;IAChH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAiB,EACjB,YAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,uBAAuB;QAAE,OAAO;IAE5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qDAAqD,SAAS,EAAE,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,MAAM,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9C,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,kCAAkC,CACjD,YAAY,EACZ,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,aAAa,CACxB,CAAC;IAEF,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE;QAAE,OAAO;IAEhB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC;YAEvF,MAAM,QAAQ,GAAG,MAAM,EAAE;iBACtB,MAAM,EAAE;iBACR,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACrC,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CACxC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,CAAC;YAEZ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,EAAE;qBACL,MAAM,CAAC,cAAc,CAAC;qBACtB,GAAG,CAAC;oBACH,aAAa;oBACb,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,sBAAsB,EAAE,KAAK;oBAC7B,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;iBACzC,CAAC;qBACD,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CACT,wCAAwC,QAAQ,CAAC,cAAc,YAAY,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,cAAc,UAAU,CAC1I,CAAC;QAEF,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAmB;IACnD,IAAI,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,uBAAuB,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,+CAA+C,SAAS,CAAC,MAAM,WAAW,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAgB,EAAE,KAAa;IAC3E,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE;QAAE,OAAO;IAEhB,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;aACtB,MAAM,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;aACzD,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;aAChC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEZ,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC;QAExE,MAAM,EAAE;aACL,MAAM,CAAC,QAAQ,CAAC;aAChB,GAAG,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC;aACvC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEpC,MAAM,CAAC,KAAK,CAAC,0CAA0C,QAAQ,KAAK,eAAe,OAAO,WAAW,EAAE,CAAC,CAAC;IAC3G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IAM3D,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE;aACrB,MAAM,EAAE;aACR,IAAI,CAAC,cAAc,CAAC;aACpB,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEhD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QACpF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QACtF,MAAM,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAiB,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChH,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,WAAmB,OAAO;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QAChE,IAAI,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;YACpD,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,10 +1,12 @@
1
- import { HybridScorerOptions } from './hybrid-scorer.js';
1
+ import { hybridScore, HybridScorerOptions } from './hybrid-scorer.js';
2
2
  import { SearchInput, MemoryRecord } from './memories.js';
3
3
  export interface HybridSearchOptions extends SearchInput {
4
4
  candidateLimit?: number;
5
5
  resultLimit?: number;
6
6
  hybridOptions?: HybridScorerOptions;
7
7
  queryEntities?: string[];
8
+ sessionId?: string;
9
+ skipRewrite?: boolean;
8
10
  }
9
11
  export interface HybridSearchResult extends MemoryRecord {
10
12
  hybridScore: number;
@@ -12,19 +14,16 @@ export interface HybridSearchResult extends MemoryRecord {
12
14
  recencyScore: number;
13
15
  coactivationScore: number;
14
16
  importanceScore: number;
17
+ confidenceScore: number;
18
+ feedbackScore: number;
15
19
  entityBoost: number;
16
20
  rank: number;
21
+ queryRewrite?: {
22
+ original: string;
23
+ rewritten: string;
24
+ method: string;
25
+ };
17
26
  }
18
- /**
19
- * Hybrid search with multi-factor re-ranking + entity filtering
20
- *
21
- * Algorithm:
22
- * 1. Fetch N candidates using vector similarity
23
- * 2. Filter/boost by entity relevance (Phase 3)
24
- * 3. Re-rank using hybrid scoring (semantic + recency + coactivation + importance)
25
- * 4. Return top M results
26
- *
27
- * This provides better relevance than pure vector search
28
- */
27
+ export declare function applyEntityBoostAndRerank(scored: Awaited<ReturnType<typeof hybridScore>>): Awaited<ReturnType<typeof hybridScore>>;
29
28
  export declare function hybridSearch(options: HybridSearchOptions): Promise<HybridSearchResult[]>;
30
29
  //# sourceMappingURL=hybrid-retrieval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-retrieval.d.ts","sourceRoot":"","sources":["../../../core/memory/hybrid-retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG1E,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0D/B"}
1
+ {"version":3,"file":"hybrid-retrieval.d.ts","sourceRoot":"","sources":["../../../core/memory/hybrid-retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAO1E,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAiBlI;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0E9F"}
@@ -2,53 +2,78 @@ import { hybridScore } from './hybrid-scorer.js';
2
2
  import { getEmbedding } from '../embeddings.js';
3
3
  import { searchMemories } from './memories.js';
4
4
  import { filterByEntities } from './entity-resolver.js';
5
- /**
6
- * Hybrid search with multi-factor re-ranking + entity filtering
7
- *
8
- * Algorithm:
9
- * 1. Fetch N candidates using vector similarity
10
- * 2. Filter/boost by entity relevance (Phase 3)
11
- * 3. Re-rank using hybrid scoring (semantic + recency + coactivation + importance)
12
- * 4. Return top M results
13
- *
14
- * This provides better relevance than pure vector search
15
- */
5
+ import { rewriteQuery, wouldBenefitFromRewrite } from './query-rewriter.js';
6
+ import { collectRecentContext } from './context-collector.js';
7
+ import { config } from '../../config.js';
8
+ import { logger } from '../logger.js';
9
+ export function applyEntityBoostAndRerank(scored) {
10
+ const boosted = scored.map((item) => {
11
+ const rawBoost = item.memory._entityBoost;
12
+ const entityBoost = typeof rawBoost === 'number' ? rawBoost : 0.5;
13
+ const multiplier = 0.8 + entityBoost * 0.4;
14
+ return {
15
+ ...item,
16
+ totalScore: Math.min(100, Math.round(item.totalScore * multiplier * 100) / 100),
17
+ };
18
+ });
19
+ boosted.sort((a, b) => b.totalScore - a.totalScore);
20
+ for (let i = 0; i < boosted.length; i++) {
21
+ boosted[i].rank = i + 1;
22
+ }
23
+ return boosted;
24
+ }
16
25
  export async function hybridSearch(options) {
17
26
  const candidateLimit = options.candidateLimit ?? 50;
18
27
  const resultLimit = options.resultLimit ?? options.limit ?? 5;
19
- // Get query embedding
20
- const queryEmbedding = await getEmbedding(options.query);
21
- // Step 1: Fetch candidates using vector search
22
- // We fetch more than we need to allow re-ranking
28
+ let query = options.query;
29
+ let rewriteInfo = null;
30
+ if (config.queryRewritingEnabled && !options.skipRewrite && options.sessionId) {
31
+ try {
32
+ const context = await collectRecentContext(options.sessionId, config.queryRewritingContextMessages);
33
+ if (wouldBenefitFromRewrite(query) || context.length > 0) {
34
+ const result = await rewriteQuery(query, context);
35
+ if (result.rewritten !== result.original) {
36
+ rewriteInfo = {
37
+ original: result.original,
38
+ rewritten: result.rewritten,
39
+ method: result.method,
40
+ };
41
+ query = result.rewritten;
42
+ logger.info(`[HybridSearch] Query rewritten: "${result.original}" -> "${result.rewritten}" (${result.method})`);
43
+ }
44
+ }
45
+ }
46
+ catch (error) {
47
+ logger.warn(`[HybridSearch] Query rewriting failed: ${error instanceof Error ? error.message : String(error)}`);
48
+ }
49
+ }
50
+ const queryEmbedding = await getEmbedding(query);
23
51
  const candidates = await searchMemories({
24
52
  ...options,
25
53
  limit: candidateLimit,
26
54
  });
27
- if (candidates.length === 0) {
55
+ if (candidates.length === 0)
28
56
  return [];
29
- }
30
- // Step 2: Entity filtering/boosting (Phase 3)
31
57
  const entityScored = filterByEntities(candidates, options.queryEntities || []);
32
- // Apply entity boost to memory metadata for scoring
33
58
  const boostedCandidates = entityScored.map(({ memory, entityBoost }) => ({
34
59
  ...memory,
35
60
  _entityBoost: entityBoost,
36
61
  }));
37
- // Step 3: Re-rank using hybrid scoring
38
62
  const scored = await hybridScore(queryEmbedding, boostedCandidates, {
39
63
  ...options.hybridOptions,
40
64
  weights: {
41
- semantic: 0.35, // Vector similarity
42
- recency: 0.25, // Time decay (favor recent)
43
- coactivation: 0.20, // Graph associations
44
- importance: 0.20, // Confidence + tier
65
+ semantic: 0.30,
66
+ recency: 0.20,
67
+ coactivation: 0.10,
68
+ importance: 0.15,
69
+ confidence: 0.15,
70
+ feedback: 0.10,
45
71
  ...options.hybridOptions?.weights,
46
72
  },
47
- decayDays: 7, // Weekly decay for benchmark data
73
+ decayDays: 7,
48
74
  });
49
- // Step 4: Take top N results
50
- const topResults = scored.slice(0, resultLimit);
51
- // Format results
75
+ const reranked = applyEntityBoostAndRerank(scored);
76
+ const topResults = reranked.slice(0, resultLimit);
52
77
  return topResults.map((scoredItem, index) => ({
53
78
  ...scoredItem.memory,
54
79
  hybridScore: scoredItem.totalScore,
@@ -56,8 +81,11 @@ export async function hybridSearch(options) {
56
81
  recencyScore: scoredItem.components.recency,
57
82
  coactivationScore: scoredItem.components.coactivation,
58
83
  importanceScore: scoredItem.components.importance,
84
+ confidenceScore: scoredItem.components.confidence,
85
+ feedbackScore: scoredItem.components.feedback,
59
86
  entityBoost: scoredItem.memory._entityBoost || 0.5,
60
87
  rank: index + 1,
88
+ ...(rewriteInfo && { queryRewrite: rewriteInfo }),
61
89
  }));
62
90
  }
63
91
  //# sourceMappingURL=hybrid-retrieval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-retrieval.js","sourceRoot":"","sources":["../../../core/memory/hybrid-retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA6B,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAmBxD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IAE9D,sBAAsB;IACtB,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEzD,+CAA+C;IAC/C,iDAAiD;IACjD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC;QACtC,GAAG,OAAO;QACV,KAAK,EAAE,cAAc;KACtB,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,8CAA8C;IAC9C,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAE/E,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,GAAG,MAAM;QACT,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAC,CAAC;IAEJ,uCAAuC;IACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,cAAc,EACd,iBAAiB,EACjB;QACE,GAAG,OAAO,CAAC,aAAa;QACxB,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI,EAAK,oBAAoB;YACvC,OAAO,EAAE,IAAI,EAAM,4BAA4B;YAC/C,YAAY,EAAE,IAAI,EAAE,qBAAqB;YACzC,UAAU,EAAE,IAAI,EAAG,oBAAoB;YACvC,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO;SAClC;QACD,SAAS,EAAE,CAAC,EAAE,kCAAkC;KACjD,CACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAEhD,iBAAiB;IACjB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,GAAG,UAAU,CAAC,MAAM;QACpB,WAAW,EAAE,UAAU,CAAC,UAAU;QAClC,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ;QAC7C,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO;QAC3C,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY;QACrD,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,UAAU;QACjD,WAAW,EAAG,UAAU,CAAC,MAAc,CAAC,YAAY,IAAI,GAAG;QAC3D,IAAI,EAAE,KAAK,GAAG,CAAC;KAChB,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"hybrid-retrieval.js","sourceRoot":"","sources":["../../../core/memory/hybrid-retrieval.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /**
2
- * Hybrid Scorer
3
- * Multi-factor relevance scoring combining semantic similarity, recency, co-activation, and importance
4
- * Provides normalized scores (0-100) for memory ranking
5
- */
1
+ /** Hybrid Scorer - Multi-factor relevance scoring for memory ranking */
6
2
  export interface ScoredMemory {
7
3
  memoryId: string;
8
4
  memory: any;
@@ -12,6 +8,8 @@ export interface ScoredMemory {
12
8
  recency: number;
13
9
  coactivation: number;
14
10
  importance: number;
11
+ confidence: number;
12
+ feedback: number;
15
13
  };
16
14
  rank: number;
17
15
  explanation: string;
@@ -22,24 +20,15 @@ export interface HybridScorerOptions {
22
20
  recency?: number;
23
21
  coactivation?: number;
24
22
  importance?: number;
23
+ confidence?: number;
24
+ feedback?: number;
25
25
  };
26
26
  decayDays?: number;
27
27
  minSemanticScore?: number;
28
28
  includeExplanation?: boolean;
29
29
  }
30
- /**
31
- * Calculate hybrid relevance score for memories
32
- * Combines: semantic similarity, recency, co-activation, and importance
33
- */
34
30
  export declare function hybridScore(queryEmbedding: number[] | null, memories: any[], options?: HybridScorerOptions): Promise<ScoredMemory[]>;
35
- /**
36
- * Score and rank memories by relevance
37
- * Convenience function combining scoring and ranking
38
- */
39
31
  export declare function scoreAndRankMemories(queryEmbedding: number[] | null, memories: any[], topK?: number, options?: HybridScorerOptions): Promise<ScoredMemory[]>;
40
- /**
41
- * Get score distribution for diagnostics
42
- */
43
32
  export declare function getScoreDistribution(scored: ScoredMemory[]): {
44
33
  min: number;
45
34
  max: number;
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-scorer.d.ts","sourceRoot":"","sources":["../../../core/memory/hybrid-scorer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,EAC/B,QAAQ,EAAE,GAAG,EAAE,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CA+DzB;AAsLD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,EAC/B,QAAQ,EAAE,GAAG,EAAE,EACf,IAAI,GAAE,MAAW,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EAAE,GACrB;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAeA"}
1
+ {"version":3,"file":"hybrid-scorer.d.ts","sourceRoot":"","sources":["../../../core/memory/hybrid-scorer.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAIxE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,EAC/B,QAAQ,EAAE,GAAG,EAAE,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAkEzB;AAwMD,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,EAC/B,QAAQ,EAAE,GAAG,EAAE,EACf,IAAI,GAAE,MAAW,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAUzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAeA"}