squish-memory 0.9.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +58 -2
  3. package/config/plugin-manifest.json +152 -0
  4. package/config/plugin-manifest.schema.json +244 -0
  5. package/dist/algorithms/{merge/analytics → analytics}/token-estimator.d.ts +1 -1
  6. package/dist/algorithms/analytics/token-estimator.d.ts.map +1 -0
  7. package/dist/algorithms/{merge/analytics → analytics}/token-estimator.js +3 -3
  8. package/dist/algorithms/analytics/token-estimator.js.map +1 -0
  9. package/dist/algorithms/detection/hash-filters.d.ts.map +1 -0
  10. package/dist/algorithms/detection/hash-filters.js.map +1 -0
  11. package/dist/algorithms/{merge/detection → detection}/semantic-ranker.d.ts +1 -1
  12. package/dist/algorithms/detection/semantic-ranker.d.ts.map +1 -0
  13. package/dist/algorithms/{merge/detection → detection}/semantic-ranker.js +1 -1
  14. package/dist/algorithms/detection/semantic-ranker.js.map +1 -0
  15. package/dist/algorithms/{merge/detection → detection}/two-stage-detector.d.ts +1 -1
  16. package/dist/algorithms/detection/two-stage-detector.d.ts.map +1 -0
  17. package/dist/algorithms/{merge/detection → detection}/two-stage-detector.js +4 -4
  18. package/dist/algorithms/detection/two-stage-detector.js.map +1 -0
  19. package/dist/algorithms/handlers/approve-merge.d.ts.map +1 -0
  20. package/dist/algorithms/{merge/handlers → handlers}/approve-merge.js +4 -4
  21. package/dist/algorithms/handlers/approve-merge.js.map +1 -0
  22. package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.d.ts +1 -1
  23. package/dist/algorithms/handlers/detect-duplicates.d.ts.map +1 -0
  24. package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.js +55 -75
  25. package/dist/algorithms/handlers/detect-duplicates.js.map +1 -0
  26. package/dist/algorithms/handlers/get-stats.d.ts.map +1 -0
  27. package/dist/algorithms/{merge/handlers → handlers}/get-stats.js +3 -3
  28. package/dist/algorithms/handlers/get-stats.js.map +1 -0
  29. package/dist/algorithms/handlers/list-proposals.d.ts.map +1 -0
  30. package/dist/algorithms/{merge/handlers → handlers}/list-proposals.js +3 -3
  31. package/dist/algorithms/handlers/list-proposals.js.map +1 -0
  32. package/dist/algorithms/handlers/preview-merge.d.ts.map +1 -0
  33. package/dist/algorithms/{merge/handlers → handlers}/preview-merge.js +3 -3
  34. package/dist/algorithms/handlers/preview-merge.js.map +1 -0
  35. package/dist/algorithms/handlers/reject-merge.d.ts.map +1 -0
  36. package/dist/algorithms/{merge/handlers → handlers}/reject-merge.js +3 -3
  37. package/dist/algorithms/handlers/reject-merge.js.map +1 -0
  38. package/dist/algorithms/handlers/reverse-merge.d.ts.map +1 -0
  39. package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.js +3 -3
  40. package/dist/algorithms/handlers/reverse-merge.js.map +1 -0
  41. package/dist/algorithms/{merge/safety → safety}/safety-checks.d.ts +1 -1
  42. package/dist/algorithms/safety/safety-checks.d.ts.map +1 -0
  43. package/dist/algorithms/safety/safety-checks.js +179 -0
  44. package/dist/algorithms/safety/safety-checks.js.map +1 -0
  45. package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.d.ts +1 -1
  46. package/dist/algorithms/strategies/merge-strategies.d.ts.map +1 -0
  47. package/dist/algorithms/strategies/merge-strategies.js.map +1 -0
  48. package/dist/algorithms/utils/response-builder.d.ts +28 -0
  49. package/dist/algorithms/utils/response-builder.d.ts.map +1 -0
  50. package/dist/algorithms/utils/response-builder.js +37 -0
  51. package/dist/algorithms/utils/response-builder.js.map +1 -0
  52. package/dist/api/web/web.d.ts.map +1 -1
  53. package/dist/api/web/web.js +0 -21
  54. package/dist/api/web/web.js.map +1 -1
  55. package/dist/commands/mcp-server.js +1 -1
  56. package/dist/config.d.ts +1 -1
  57. package/dist/config.d.ts.map +1 -1
  58. package/dist/config.js +30 -38
  59. package/dist/config.js.map +1 -1
  60. package/dist/core/associations.js +2 -2
  61. package/dist/core/associations.js.map +1 -1
  62. package/dist/core/layers/generator.d.ts +25 -0
  63. package/dist/core/layers/generator.d.ts.map +1 -0
  64. package/dist/core/layers/generator.js +76 -0
  65. package/dist/core/layers/generator.js.map +1 -0
  66. package/dist/core/mcp/tools.d.ts.map +1 -1
  67. package/dist/core/mcp/tools.js +71 -0
  68. package/dist/core/mcp/tools.js.map +1 -1
  69. package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
  70. package/dist/core/memory/hybrid-retrieval.js +49 -1
  71. package/dist/core/memory/hybrid-retrieval.js.map +1 -1
  72. package/dist/core/memory/hybrid-search.d.ts.map +1 -1
  73. package/dist/core/memory/hybrid-search.js +0 -7
  74. package/dist/core/memory/hybrid-search.js.map +1 -1
  75. package/dist/core/memory/memories.d.ts.map +1 -1
  76. package/dist/core/memory/memories.js +47 -53
  77. package/dist/core/memory/memories.js.map +1 -1
  78. package/dist/core/memory/progressive-disclosure.d.ts.map +1 -1
  79. package/dist/core/memory/progressive-disclosure.js.map +1 -1
  80. package/dist/core/namespaces/index.d.ts +71 -0
  81. package/dist/core/namespaces/index.d.ts.map +1 -0
  82. package/dist/core/namespaces/index.js +296 -0
  83. package/dist/core/namespaces/index.js.map +1 -0
  84. package/dist/core/namespaces/uri-parser.d.ts +31 -0
  85. package/dist/core/namespaces/uri-parser.d.ts.map +1 -0
  86. package/dist/core/namespaces/uri-parser.js +74 -0
  87. package/dist/core/namespaces/uri-parser.js.map +1 -0
  88. package/dist/core/observations.d.ts.map +1 -1
  89. package/dist/core/observations.js +3 -12
  90. package/dist/core/observations.js.map +1 -1
  91. package/dist/core/projects.d.ts.map +1 -1
  92. package/dist/core/projects.js +0 -12
  93. package/dist/core/projects.js.map +1 -1
  94. package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -1
  95. package/dist/core/scheduler/cron-scheduler.js +14 -0
  96. package/dist/core/scheduler/cron-scheduler.js.map +1 -1
  97. package/dist/core/session-hooks/self-iteration-job.d.ts +20 -0
  98. package/dist/core/session-hooks/self-iteration-job.d.ts.map +1 -0
  99. package/dist/core/session-hooks/self-iteration-job.js +278 -0
  100. package/dist/core/session-hooks/self-iteration-job.js.map +1 -0
  101. package/dist/core/session-hooks/session-hooks.d.ts +18 -0
  102. package/dist/core/session-hooks/session-hooks.d.ts.map +1 -0
  103. package/dist/core/session-hooks/session-hooks.js +55 -0
  104. package/dist/core/session-hooks/session-hooks.js.map +1 -0
  105. package/dist/core/tracing/collector.d.ts +111 -0
  106. package/dist/core/tracing/collector.d.ts.map +1 -0
  107. package/dist/core/tracing/collector.js +338 -0
  108. package/dist/core/tracing/collector.js.map +1 -0
  109. package/dist/core/tracing/visualizer.d.ts +32 -0
  110. package/dist/core/tracing/visualizer.d.ts.map +1 -0
  111. package/dist/core/tracing/visualizer.js +165 -0
  112. package/dist/core/tracing/visualizer.js.map +1 -0
  113. package/dist/drizzle/schema-sqlite.d.ts +384 -0
  114. package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
  115. package/dist/drizzle/schema-sqlite.js +65 -0
  116. package/dist/drizzle/schema-sqlite.js.map +1 -1
  117. package/dist/drizzle/schema.d.ts +368 -0
  118. package/dist/drizzle/schema.d.ts.map +1 -1
  119. package/dist/drizzle/schema.js +63 -0
  120. package/dist/drizzle/schema.js.map +1 -1
  121. package/dist/index.d.ts +4 -4
  122. package/dist/index.js +101 -62
  123. package/dist/index.js.map +1 -1
  124. package/generated/mcp/manifest.json +23 -0
  125. package/generated/mcp/mcp-servers.json +25 -0
  126. package/generated/mcp/mcporter.json +34 -0
  127. package/generated/mcp/openclaw-memory-qmd.json +17 -0
  128. package/generated/mcp/runtime.json +12 -0
  129. package/package.json +50 -9
  130. package/packages/plugin-claude-code/README.md +73 -0
  131. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +35 -0
  132. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +1 -0
  133. package/packages/plugin-claude-code/dist/plugin-wrapper.js +191 -0
  134. package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +1 -0
  135. package/packages/plugin-claude-code/package.json +31 -0
  136. package/packages/plugin-openclaw/README.md +70 -0
  137. package/packages/plugin-openclaw/dist/index.d.ts +49 -0
  138. package/packages/plugin-openclaw/dist/index.d.ts.map +1 -0
  139. package/packages/plugin-openclaw/dist/index.js +262 -0
  140. package/packages/plugin-openclaw/dist/index.js.map +1 -0
  141. package/packages/plugin-openclaw/openclaw.plugin.json +94 -0
  142. package/packages/plugin-openclaw/package.json +31 -0
  143. package/packages/plugin-opencode/install.mjs +217 -0
  144. package/packages/plugin-opencode/package.json +21 -0
  145. package/scripts/dependency-manager.mjs +217 -0
  146. package/scripts/detect-clients.mjs +78 -0
  147. package/scripts/install-interactive.mjs +674 -0
  148. package/scripts/install-plugin.mjs +415 -0
  149. package/scripts/test-interactive.mjs +131 -0
  150. package/commands/managed-sync.ts +0 -69
  151. package/commands/mcp-server.ts +0 -519
  152. package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +0 -1
  153. package/dist/algorithms/merge/analytics/token-estimator.js.map +0 -1
  154. package/dist/algorithms/merge/detection/hash-filters.d.ts.map +0 -1
  155. package/dist/algorithms/merge/detection/hash-filters.js.map +0 -1
  156. package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +0 -1
  157. package/dist/algorithms/merge/detection/semantic-ranker.js.map +0 -1
  158. package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +0 -1
  159. package/dist/algorithms/merge/detection/two-stage-detector.js.map +0 -1
  160. package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +0 -1
  161. package/dist/algorithms/merge/handlers/approve-merge.js.map +0 -1
  162. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +0 -1
  163. package/dist/algorithms/merge/handlers/detect-duplicates.js.map +0 -1
  164. package/dist/algorithms/merge/handlers/get-stats.d.ts.map +0 -1
  165. package/dist/algorithms/merge/handlers/get-stats.js.map +0 -1
  166. package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +0 -1
  167. package/dist/algorithms/merge/handlers/list-proposals.js.map +0 -1
  168. package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +0 -1
  169. package/dist/algorithms/merge/handlers/preview-merge.js.map +0 -1
  170. package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +0 -1
  171. package/dist/algorithms/merge/handlers/reject-merge.js.map +0 -1
  172. package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +0 -1
  173. package/dist/algorithms/merge/handlers/reverse-merge.js.map +0 -1
  174. package/dist/algorithms/merge/safety/safety-checks.d.ts.map +0 -1
  175. package/dist/algorithms/merge/safety/safety-checks.js +0 -215
  176. package/dist/algorithms/merge/safety/safety-checks.js.map +0 -1
  177. package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +0 -1
  178. package/dist/algorithms/merge/strategies/merge-strategies.js.map +0 -1
  179. package/dist/core/embeddings/qmd-provider.d.ts +0 -65
  180. package/dist/core/embeddings/qmd-provider.d.ts.map +0 -1
  181. package/dist/core/embeddings/qmd-provider.js +0 -133
  182. package/dist/core/embeddings/qmd-provider.js.map +0 -1
  183. package/scripts/init-dirs.ts +0 -15
  184. /package/dist/algorithms/{merge/detection → detection}/hash-filters.d.ts +0 -0
  185. /package/dist/algorithms/{merge/detection → detection}/hash-filters.js +0 -0
  186. /package/dist/algorithms/{merge/handlers → handlers}/approve-merge.d.ts +0 -0
  187. /package/dist/algorithms/{merge/handlers → handlers}/get-stats.d.ts +0 -0
  188. /package/dist/algorithms/{merge/handlers → handlers}/list-proposals.d.ts +0 -0
  189. /package/dist/algorithms/{merge/handlers → handlers}/preview-merge.d.ts +0 -0
  190. /package/dist/algorithms/{merge/handlers → handlers}/reject-merge.d.ts +0 -0
  191. /package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.d.ts +0 -0
  192. /package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.js +0 -0
@@ -0,0 +1,338 @@
1
+ /** Trace Collector - Collects search pipeline traces for debugging and performance analysis
2
+ *
3
+ * Trace storage format - All search operations are logged with timing information
4
+ * Trace retrieval - Get traces by session or ID
5
+ */
6
+ import { logger } from '../logger.js';
7
+ import { getDb } from '../../db/index.js';
8
+ import { getSchema } from '../../db/schema.js';
9
+ import { eq, desc, sql } from 'drizzle-orm';
10
+ /**
11
+ * Start a new search trace collection
12
+ */
13
+ export async function startTrace(sessionId, query) {
14
+ const db = await getDb();
15
+ if (!db) {
16
+ logger.error('Database unavailable for trace collection');
17
+ return '';
18
+ }
19
+ const schema = await getSchema();
20
+ const traceId = crypto.randomUUID();
21
+ const timestamp = new Date();
22
+ // Create trace record
23
+ await db.insert(schema.searchTraces).values({
24
+ id: traceId,
25
+ sessionId,
26
+ query,
27
+ timestamp,
28
+ resultCount: 0,
29
+ totalDurationMs: 0,
30
+ });
31
+ logger.info(`[Tracing] Started trace ${traceId}`);
32
+ return traceId;
33
+ }
34
+ /**
35
+ * Add query rewrite stage data
36
+ */
37
+ export async function addQueryRewriteStage(traceId, stage) {
38
+ const db = await getDb();
39
+ if (!db)
40
+ return;
41
+ const schema = await getSchema();
42
+ const data = JSON.stringify(stage);
43
+ await db.update(schema.searchTraces)
44
+ .set({
45
+ queryRewrite: sql `CAST(? AS jsonb)`,
46
+ })
47
+ .where(eq(schema.searchTraces.id, traceId))
48
+ .set({ queryRewrite: data });
49
+ logger.debug(`[Tracing] Added queryRewrite stage to trace ${traceId}`);
50
+ }
51
+ /**
52
+ * Add candidate retrieval stage data
53
+ */
54
+ export async function addCandidateRetrievalStage(traceId, stage) {
55
+ const db = await getDb();
56
+ if (!db)
57
+ return;
58
+ const schema = await getSchema();
59
+ const data = JSON.stringify(stage);
60
+ await db.update(schema.searchTraces)
61
+ .set({ candidateRetrieval: data })
62
+ .where(eq(schema.searchTraces.id, traceId));
63
+ logger.debug(`[Tracing] Added candidateRetrieval stage to trace ${traceId}`);
64
+ }
65
+ /**
66
+ * Add entity filtering stage data
67
+ */
68
+ export async function addEntityFilteringStage(traceId, stage) {
69
+ const db = await getDb();
70
+ if (!db)
71
+ return;
72
+ const schema = await getSchema();
73
+ const data = JSON.stringify(stage);
74
+ await db.update(schema.searchTraces)
75
+ .set({ entityFiltering: data })
76
+ .where(eq(schema.searchTraces.id, traceId));
77
+ logger.debug(`[Tracing] Added entityFiltering stage to trace ${traceId}`);
78
+ }
79
+ /**
80
+ * Add hybrid scoring stage data
81
+ */
82
+ export async function addHybridScoringStage(traceId, stage) {
83
+ const db = await getDb();
84
+ if (!db)
85
+ return;
86
+ const schema = await getSchema();
87
+ const data = JSON.stringify(stage);
88
+ await db.update(schema.searchTraces)
89
+ .set({ hybridScoring: data })
90
+ .where(eq(schema.searchTraces.id, traceId));
91
+ logger.debug(`[Tracing] Added hybridScoring stage to trace ${traceId}`);
92
+ }
93
+ /**
94
+ * Add reranking stage data
95
+ */
96
+ export async function addRerankingStage(traceId, stage) {
97
+ const db = await getDb();
98
+ if (!db)
99
+ return;
100
+ const schema = await getSchema();
101
+ const data = JSON.stringify(stage);
102
+ await db.update(schema.searchTraces)
103
+ .set({ reranking: data })
104
+ .where(eq(schema.searchTraces.id, traceId));
105
+ logger.debug(`[Tracing] Added reranking stage to trace ${traceId}`);
106
+ }
107
+ /**
108
+ * Complete current trace (all stages done)
109
+ */
110
+ export async function completeTrace(traceId, results) {
111
+ const db = await getDb();
112
+ if (!db)
113
+ return;
114
+ const schema = await getSchema();
115
+ // Get trace
116
+ const rows = await db.select()
117
+ .from(schema.searchTraces)
118
+ .where(eq(schema.searchTraces.id, traceId))
119
+ .limit(1);
120
+ if (!rows || rows.length === 0) {
121
+ logger.warn(`[Tracing] Trace ${traceId} not found`);
122
+ return;
123
+ }
124
+ const trace = rows[0];
125
+ const startTime = trace.timestamp.getTime();
126
+ const endTime = Date.now();
127
+ const totalDurationMs = endTime - startTime;
128
+ const resultCount = results.length;
129
+ const topResults = results.slice(0, 10);
130
+ await db.update(schema.searchTraces)
131
+ .set({
132
+ resultCount,
133
+ topResults: JSON.stringify(topResults),
134
+ totalDurationMs,
135
+ })
136
+ .where(eq(schema.searchTraces.id, traceId));
137
+ logger.info(`[Tracing] Completed trace ${traceId} with ${resultCount} results`);
138
+ }
139
+ /**
140
+ * Get traces for a session
141
+ */
142
+ export async function getTraces(options = {}) {
143
+ const db = await getDb();
144
+ if (!db)
145
+ return [];
146
+ const schema = await getSchema();
147
+ let conditions = [];
148
+ if (options.sessionId) {
149
+ conditions.push(eq(schema.searchTraces.sessionId, options.sessionId));
150
+ }
151
+ if (options.session && options.session.length > 0) {
152
+ conditions.push(eq(schema.searchTraces.sessionId, options.session));
153
+ }
154
+ const query = db.select()
155
+ .from(schema.searchTraces)
156
+ .where(conditions.length > 0 ? eq(schema.searchTraces.sessionId, options.sessionId || options.session || '') : undefined)
157
+ .orderBy(desc(schema.searchTraces.timestamp));
158
+ if (options.limit) {
159
+ query.limit(options.limit);
160
+ }
161
+ const traces = await query;
162
+ return traces.map((row) => ({
163
+ id: row.id,
164
+ sessionId: row.session_id,
165
+ query: row.query,
166
+ timestamp: row.timestamp,
167
+ totalDurationMs: row.total_duration_ms,
168
+ metadata: row.metadata ? JSON.parse(String(row.metadata)) : {},
169
+ queryRewrite: row.query_rewrite ? JSON.parse(String(row.query_rewrite)) : undefined,
170
+ candidateRetrieval: row.candidate_retrieval ? JSON.parse(String(row.candidate_retrieval)) : undefined,
171
+ entityFiltering: row.entity_filtering ? JSON.parse(String(row.entity_filtering)) : undefined,
172
+ hybridScoring: row.hybrid_scoring ? JSON.parse(String(row.hybrid_scoring)) : undefined,
173
+ reranking: row.reranking ? JSON.parse(String(row.reranking)) : undefined,
174
+ resultCount: row.result_count,
175
+ topResults: row.top_results ? JSON.parse(String(row.top_results)) : undefined,
176
+ }));
177
+ }
178
+ /**
179
+ * Get a specific trace by ID
180
+ */
181
+ export async function getTraceById(traceId) {
182
+ const db = await getDb();
183
+ if (!db)
184
+ return null;
185
+ const schema = await getSchema();
186
+ const rows = await db.select()
187
+ .from(schema.searchTraces)
188
+ .where(eq(schema.searchTraces.id, traceId))
189
+ .limit(1);
190
+ if (rows.length === 0)
191
+ return null;
192
+ const row = rows[0];
193
+ return {
194
+ id: row.id,
195
+ sessionId: row.session_id,
196
+ query: row.query,
197
+ timestamp: row.timestamp,
198
+ totalDurationMs: row.total_duration_ms,
199
+ metadata: row.metadata ? JSON.parse(String(row.metadata)) : {},
200
+ queryRewrite: row.query_rewrite ? JSON.parse(String(row.query_rewrite)) : undefined,
201
+ candidateRetrieval: row.candidate_retrieval ? JSON.parse(String(row.candidate_retrieval)) : undefined,
202
+ entityFiltering: row.entity_filtering ? JSON.parse(String(row.entity_filtering)) : undefined,
203
+ hybridScoring: row.hybrid_scoring ? JSON.parse(String(row.hybrid_scoring)) : undefined,
204
+ reranking: row.reranking ? JSON.parse(String(row.reranking)) : undefined,
205
+ resultCount: row.result_count,
206
+ topResults: row.top_results ? JSON.parse(String(row.top_results)) : undefined,
207
+ };
208
+ }
209
+ /**
210
+ * Get recent traces (limited)
211
+ */
212
+ export async function getRecentTraces(limit = 10) {
213
+ const db = await getDb();
214
+ if (!db)
215
+ return [];
216
+ const schema = await getSchema();
217
+ const traces = await db.select()
218
+ .from(schema.searchTraces)
219
+ .orderBy(desc(schema.searchTraces.timestamp))
220
+ .limit(limit);
221
+ return traces.map((row) => ({
222
+ id: row.id,
223
+ sessionId: row.session_id,
224
+ query: row.query,
225
+ timestamp: row.timestamp,
226
+ totalDurationMs: row.total_duration_ms,
227
+ metadata: row.metadata ? JSON.parse(String(row.metadata)) : {},
228
+ queryRewrite: row.query_rewrite ? JSON.parse(String(row.query_rewrite)) : undefined,
229
+ candidateRetrieval: row.candidate_retrieval ? JSON.parse(String(row.candidate_retrieval)) : undefined,
230
+ entityFiltering: row.entity_filtering ? JSON.parse(String(row.entity_filtering)) : undefined,
231
+ hybridScoring: row.hybrid_scoring ? JSON.parse(String(row.hybrid_scoring)) : undefined,
232
+ reranking: row.reranking ? JSON.parse(String(row.reranking)) : undefined,
233
+ resultCount: row.result_count,
234
+ topResults: row.top_results ? JSON.parse(String(row.top_results)) : undefined,
235
+ }));
236
+ }
237
+ /**
238
+ * Get recent session summary traces (aggregated by session)
239
+ */
240
+ export async function getSessionTraces(sessionId) {
241
+ const db = await getDb();
242
+ if (!db)
243
+ return [];
244
+ const schema = await getSchema();
245
+ // Get all traces for this session
246
+ const traces = await db.select()
247
+ .from(schema.searchTraces)
248
+ .where(eq(schema.searchTraces.sessionId, sessionId))
249
+ .orderBy(desc(schema.searchTraces.timestamp));
250
+ if (traces.length === 0)
251
+ return [];
252
+ return traces.map((row) => ({
253
+ id: row.id,
254
+ sessionId: row.session_id,
255
+ query: row.query,
256
+ timestamp: row.timestamp,
257
+ totalDurationMs: row.total_duration_ms,
258
+ metadata: row.metadata ? JSON.parse(String(row.metadata)) : {},
259
+ queryRewrite: row.query_rewrite ? JSON.parse(String(row.query_rewrite)) : undefined,
260
+ candidateRetrieval: row.candidate_retrieval ? JSON.parse(String(row.candidate_retrieval)) : undefined,
261
+ entityFiltering: row.entity_filtering ? JSON.parse(String(row.entity_filtering)) : undefined,
262
+ hybridScoring: row.hybrid_scoring ? JSON.parse(String(row.hybrid_scoring)) : undefined,
263
+ reranking: row.reranking ? JSON.parse(String(row.reranking)) : undefined,
264
+ resultCount: row.result_count,
265
+ topResults: row.top_results ? JSON.parse(String(row.top_results)) : undefined,
266
+ }));
267
+ }
268
+ /**
269
+ * Create visual ASCII visualization of a trace
270
+ */
271
+ export function visualizeTrace(trace) {
272
+ const lines = [];
273
+ // Header
274
+ lines.push(`Search Trace: ${trace.id}`);
275
+ lines.push(`Session: ${trace.sessionId || 'N/A'}`);
276
+ lines.push(`Query: "${trace.query}"`);
277
+ lines.push('');
278
+ // Total duration
279
+ lines.push(`Duration: ${trace.totalDurationMs}ms (${(trace.totalDurationMs / 1000).toFixed(2)}s)`);
280
+ lines.push('');
281
+ // Stages summary
282
+ const stageNames = [];
283
+ if (trace.queryRewrite)
284
+ stageNames.push(`Query Rewrite (${trace.queryRewrite.timeMs || 0}ms)`);
285
+ if (trace.candidateRetrieval)
286
+ stageNames.push(`Candidate Retrieval (${trace.candidateRetrieval.timeMs || 0}ms)`);
287
+ if (trace.entityFiltering)
288
+ stageNames.push(`Entity Filtering (${trace.entityFiltering.timeMs || 0}ms)`);
289
+ if (trace.hybridScoring)
290
+ stageNames.push(`Hybrid Scoring (${trace.hybridScoring.timeMs || 0}ms)`);
291
+ if (trace.reranking)
292
+ stageNames.push(`Reranking (${trace.reranking.timeMs || 0}ms)`);
293
+ if (stageNames.length > 0) {
294
+ lines.push('Stages:');
295
+ stageNames.forEach(name => lines.push(` - ${name}`));
296
+ }
297
+ lines.push('');
298
+ // Top results
299
+ if (trace.topResults && trace.topResults.length > 0) {
300
+ lines.push(`Top Results (${trace.topResults.length}):`);
301
+ trace.topResults.slice(0, 5).forEach((result, i) => lines.push(` ${i + 1}. [${result.type || 'memory'}] ${result.content?.substring(0, 50)}... (score: ${result.hybridScore?.toFixed(2)})`));
302
+ }
303
+ return lines.join('\n');
304
+ }
305
+ /**
306
+ * Get trace statistics (performance metrics)
307
+ */
308
+ export async function getTraceStats() {
309
+ const db = await getDb();
310
+ if (!db) {
311
+ return {
312
+ totalTraces: 0,
313
+ totalDurationMs: 0,
314
+ avgDurationMs: 0,
315
+ recentSessions: 0,
316
+ totalErrors: 0,
317
+ errorRate: 0,
318
+ };
319
+ }
320
+ const schema = await getSchema();
321
+ const traces = await db.select()
322
+ .from(schema.searchTraces)
323
+ .limit(100);
324
+ const totalTraces = traces.length;
325
+ const totalDurationMs = traces.reduce((sum, t) => sum + (t.total_duration_ms || 0), 0);
326
+ const avgDurationMs = totalTraces > 0 ? Math.round(totalDurationMs / totalTraces) : 0;
327
+ const uniqueSessions = new Set(traces.map((t) => t.session_id).filter(Boolean));
328
+ const recentSessions = uniqueSessions.size;
329
+ return {
330
+ totalTraces,
331
+ totalDurationMs,
332
+ avgDurationMs,
333
+ recentSessions,
334
+ totalErrors: 0,
335
+ errorRate: 0,
336
+ };
337
+ }
338
+ //# sourceMappingURL=collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../../core/tracing/collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /** Trace Visualizer - Creates ASCII visualizations of search traces
2
+ *
3
+ * Provides tree-format output showing search pipeline stages and timing
4
+ */
5
+ import { SearchTrace } from './collector.js';
6
+ /**
7
+ * Create visual ASCII visualization of a trace
8
+ */
9
+ export declare function visualizeTrace(trace: SearchTrace): string;
10
+ /**
11
+ * Create compact single-line trace summary
12
+ */
13
+ export declare function summarizeTrace(trace: SearchTrace): string;
14
+ /**
15
+ * Compare multiple traces
16
+ */
17
+ export declare function compareTraces(traces: SearchTrace[]): string;
18
+ /**
19
+ * Get stage breakdown table
20
+ */
21
+ export declare function getStageBreakdown(trace: SearchTrace): string;
22
+ /**
23
+ * Export all visualizer functions
24
+ */
25
+ declare const _default: {
26
+ visualizeTrace: typeof visualizeTrace;
27
+ summarizeTrace: typeof summarizeTrace;
28
+ compareTraces: typeof compareTraces;
29
+ getStageBreakdown: typeof getStageBreakdown;
30
+ };
31
+ export default _default;
32
+ //# sourceMappingURL=visualizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizer.d.ts","sourceRoot":"","sources":["../../../core/tracing/visualizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAmGzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CASzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAmB3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA+B5D;AAED;;GAEG;;;;;;;AACH,wBAKE"}
@@ -0,0 +1,165 @@
1
+ /** Trace Visualizer - Creates ASCII visualizations of search traces
2
+ *
3
+ * Provides tree-format output showing search pipeline stages and timing
4
+ */
5
+ /**
6
+ * Create visual ASCII visualization of a trace
7
+ */
8
+ export function visualizeTrace(trace) {
9
+ const lines = [];
10
+ // Header
11
+ lines.push('='.repeat(60));
12
+ lines.push(`Search Trace: ${trace.id}`);
13
+ lines.push(`Session: ${trace.sessionId || 'N/A'}`);
14
+ lines.push(`Query: "${trace.query}"`);
15
+ lines.push('='.repeat(60));
16
+ lines.push('');
17
+ // Total duration
18
+ lines.push(`Total Duration: ${trace.totalDurationMs}ms (${(trace.totalDurationMs / 1000).toFixed(2)}s)`);
19
+ lines.push('');
20
+ // Stage timeline visualization
21
+ lines.push('─'.repeat(60));
22
+ lines.push('Pipeline Stages:');
23
+ lines.push('─'.repeat(60));
24
+ lines.push('');
25
+ const stageNames = [];
26
+ const stageTimings = [];
27
+ if (trace.queryRewrite) {
28
+ stageNames.push('Query Rewrite');
29
+ stageTimings.push(trace.queryRewrite.timeMs || 0);
30
+ }
31
+ if (trace.candidateRetrieval) {
32
+ stageNames.push('Candidate Retrieval');
33
+ stageTimings.push(trace.candidateRetrieval.timeMs || 0);
34
+ }
35
+ if (trace.entityFiltering) {
36
+ stageNames.push('Entity Filtering');
37
+ stageTimings.push(trace.entityFiltering.timeMs || 0);
38
+ }
39
+ if (trace.hybridScoring) {
40
+ stageNames.push('Hybrid Scoring');
41
+ stageTimings.push(trace.hybridScoring.timeMs || 0);
42
+ }
43
+ if (trace.reranking) {
44
+ stageNames.push('Reranking');
45
+ stageTimings.push(trace.reranking.timeMs || 0);
46
+ }
47
+ if (stageNames.length > 0) {
48
+ let cumulativeTime = 0;
49
+ const maxStageNameLength = Math.max(...stageNames.map(n => n.length));
50
+ stageNames.forEach((name, i) => {
51
+ const duration = stageTimings[i] || 0;
52
+ cumulativeTime += duration;
53
+ const progressPercent = ((cumulativeTime / trace.totalDurationMs) * 100).toFixed(1);
54
+ const barLength = Math.max(0, Math.min(40, Math.round((duration / trace.totalDurationMs) * 40)));
55
+ // Stage name with timing
56
+ const paddedName = name.padEnd(maxStageNameLength + 2);
57
+ lines.push(`${paddedName} │ ${duration.toString().padStart(4)}ms │ ${progressPercent.padStart(5)}%`);
58
+ // Visualization bar
59
+ const bar = '█'.repeat(barLength) + '░'.repeat(40 - barLength);
60
+ lines.push(` └─ ${bar}`);
61
+ lines.push('');
62
+ });
63
+ }
64
+ else {
65
+ lines.push(' No stage data available');
66
+ lines.push('');
67
+ }
68
+ // Top results
69
+ if (trace.topResults && trace.topResults.length > 0) {
70
+ lines.push('─'.repeat(60));
71
+ lines.push(`Top Results (${trace.topResults.length}):`);
72
+ lines.push('─'.repeat(60));
73
+ lines.push('');
74
+ trace.topResults.slice(0, 5).forEach((result, i) => {
75
+ const type = result.type || 'memory';
76
+ const content = result.content?.substring(0, 60) || '';
77
+ const score = result.hybridScore?.toFixed(2) || 'N/A';
78
+ lines.push(`${(i + 1).toString().padStart(2)}. [${type.padEnd(8)}] (score: ${score})`);
79
+ if (content.length > 0) {
80
+ lines.push(` ${content}`);
81
+ }
82
+ lines.push('');
83
+ });
84
+ }
85
+ else if (trace.resultCount !== undefined) {
86
+ lines.push('─'.repeat(60));
87
+ lines.push(`Results: ${trace.resultCount} returned`);
88
+ lines.push('─'.repeat(60));
89
+ lines.push('');
90
+ }
91
+ // Footer
92
+ lines.push('='.repeat(60));
93
+ lines.push('');
94
+ return lines.join('\n');
95
+ }
96
+ /**
97
+ * Create compact single-line trace summary
98
+ */
99
+ export function summarizeTrace(trace) {
100
+ const parts = [];
101
+ parts.push(`[${trace.id.substring(0, 8)}]`);
102
+ parts.push(`"${trace.query.substring(0, 30)}${trace.query.length > 30 ? '...' : ''}"`);
103
+ parts.push(`${trace.totalDurationMs}ms`);
104
+ parts.push(trace.resultCount !== undefined ? `${trace.resultCount} results` : 'unknown');
105
+ return parts.join(' | ');
106
+ }
107
+ /**
108
+ * Compare multiple traces
109
+ */
110
+ export function compareTraces(traces) {
111
+ const lines = [];
112
+ lines.push('─'.repeat(80));
113
+ lines.push('Trace Comparison');
114
+ lines.push('─'.repeat(80));
115
+ lines.push('');
116
+ lines.push('ID'.padEnd(10) + ' | ' + 'Query'.padEnd(30) + ' | ' + 'Duration'.padEnd(10) + ' | ' + 'Results');
117
+ lines.push('─'.repeat(80));
118
+ traces.forEach(trace => {
119
+ const id = trace.id.substring(0, 8);
120
+ const query = trace.query.substring(0, 30);
121
+ const duration = `${trace.totalDurationMs}ms`;
122
+ const results = trace.resultCount !== undefined ? trace.resultCount.toString() : '?';
123
+ lines.push(`${id.padEnd(10)} | ${query.padEnd(30)} | ${duration.padEnd(10)} | ${results.padEnd(8)}`);
124
+ });
125
+ return lines.join('\n');
126
+ }
127
+ /**
128
+ * Get stage breakdown table
129
+ */
130
+ export function getStageBreakdown(trace) {
131
+ const lines = [];
132
+ lines.push('Stage Timing Breakdown:');
133
+ lines.push('');
134
+ const stages = [
135
+ { name: 'Query Rewrite', data: trace.queryRewrite, timeMs: trace.queryRewrite?.timeMs || 0 },
136
+ { name: 'Candidate Retrieval', data: trace.candidateRetrieval, timeMs: trace.candidateRetrieval?.timeMs || 0 },
137
+ { name: 'Entity Filtering', data: trace.entityFiltering, timeMs: trace.entityFiltering?.timeMs || 0 },
138
+ { name: 'Hybrid Scoring', data: trace.hybridScoring, timeMs: trace.hybridScoring?.timeMs || 0 },
139
+ { name: 'Reranking', data: trace.reranking, timeMs: trace.reranking?.timeMs || 0 },
140
+ ];
141
+ const validStages = stages.filter(s => s.data && s.timeMs !== undefined);
142
+ if (validStages.length > 0) {
143
+ const maxNameLength = Math.max(...validStages.map(s => s.name.length));
144
+ validStages.forEach(stage => {
145
+ const percentage = ((stage.timeMs / trace.totalDurationMs) * 100).toFixed(1);
146
+ lines.push(` ${stage.name.padEnd(maxNameLength)} │ ${stage.timeMs.toString().padStart(4)}ms │ ${percentage.padStart(5)}%`);
147
+ });
148
+ lines.push('');
149
+ lines.push(' ' + '─'.repeat(maxNameLength + 4 + 5 + 6));
150
+ }
151
+ else {
152
+ lines.push(' No stage timing data available');
153
+ }
154
+ return lines.join('\n');
155
+ }
156
+ /**
157
+ * Export all visualizer functions
158
+ */
159
+ export default {
160
+ visualizeTrace,
161
+ summarizeTrace,
162
+ compareTraces,
163
+ getStageBreakdown,
164
+ };
165
+ //# sourceMappingURL=visualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizer.js","sourceRoot":"","sources":["../../../core/tracing/visualizer.ts"],"names":[],"mappings":"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"}