@memtensor/memos-local-openclaw-plugin 1.0.6-beta.8 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/openclaw.plugin.json +1 -1
  2. package/package.json +3 -5
  3. package/prebuilds/darwin-arm64/better_sqlite3.node +0 -0
  4. package/prebuilds/darwin-x64/better_sqlite3.node +0 -0
  5. package/prebuilds/linux-x64/better_sqlite3.node +0 -0
  6. package/prebuilds/win32-x64/better_sqlite3.node +0 -0
  7. package/scripts/postinstall.cjs +44 -44
  8. package/skill/memos-memory-guide/SKILL.md +20 -0
  9. package/src/update-check.ts +2 -7
  10. package/src/viewer/html.ts +4 -4
  11. package/src/viewer/server.ts +13 -3
  12. package/telemetry.credentials.json +5 -0
  13. package/dist/capture/index.d.ts +0 -26
  14. package/dist/capture/index.d.ts.map +0 -1
  15. package/dist/capture/index.js +0 -283
  16. package/dist/capture/index.js.map +0 -1
  17. package/dist/client/connector.d.ts +0 -34
  18. package/dist/client/connector.d.ts.map +0 -1
  19. package/dist/client/connector.js +0 -381
  20. package/dist/client/connector.js.map +0 -1
  21. package/dist/client/hub.d.ts +0 -61
  22. package/dist/client/hub.d.ts.map +0 -1
  23. package/dist/client/hub.js +0 -174
  24. package/dist/client/hub.js.map +0 -1
  25. package/dist/client/skill-sync.d.ts +0 -36
  26. package/dist/client/skill-sync.d.ts.map +0 -1
  27. package/dist/client/skill-sync.js +0 -226
  28. package/dist/client/skill-sync.js.map +0 -1
  29. package/dist/config.d.ts +0 -5
  30. package/dist/config.d.ts.map +0 -1
  31. package/dist/config.js +0 -171
  32. package/dist/config.js.map +0 -1
  33. package/dist/embedding/index.d.ts +0 -14
  34. package/dist/embedding/index.d.ts.map +0 -1
  35. package/dist/embedding/index.js +0 -105
  36. package/dist/embedding/index.js.map +0 -1
  37. package/dist/embedding/local.d.ts +0 -3
  38. package/dist/embedding/local.d.ts.map +0 -1
  39. package/dist/embedding/local.js +0 -66
  40. package/dist/embedding/local.js.map +0 -1
  41. package/dist/embedding/providers/cohere.d.ts +0 -4
  42. package/dist/embedding/providers/cohere.d.ts.map +0 -1
  43. package/dist/embedding/providers/cohere.js +0 -57
  44. package/dist/embedding/providers/cohere.js.map +0 -1
  45. package/dist/embedding/providers/gemini.d.ts +0 -3
  46. package/dist/embedding/providers/gemini.d.ts.map +0 -1
  47. package/dist/embedding/providers/gemini.js +0 -31
  48. package/dist/embedding/providers/gemini.js.map +0 -1
  49. package/dist/embedding/providers/mistral.d.ts +0 -3
  50. package/dist/embedding/providers/mistral.d.ts.map +0 -1
  51. package/dist/embedding/providers/mistral.js +0 -25
  52. package/dist/embedding/providers/mistral.js.map +0 -1
  53. package/dist/embedding/providers/openai.d.ts +0 -3
  54. package/dist/embedding/providers/openai.d.ts.map +0 -1
  55. package/dist/embedding/providers/openai.js +0 -35
  56. package/dist/embedding/providers/openai.js.map +0 -1
  57. package/dist/embedding/providers/voyage.d.ts +0 -3
  58. package/dist/embedding/providers/voyage.d.ts.map +0 -1
  59. package/dist/embedding/providers/voyage.js +0 -25
  60. package/dist/embedding/providers/voyage.js.map +0 -1
  61. package/dist/hub/auth.d.ts +0 -19
  62. package/dist/hub/auth.d.ts.map +0 -1
  63. package/dist/hub/auth.js +0 -70
  64. package/dist/hub/auth.js.map +0 -1
  65. package/dist/hub/server.d.ts +0 -52
  66. package/dist/hub/server.d.ts.map +0 -1
  67. package/dist/hub/server.js +0 -1197
  68. package/dist/hub/server.js.map +0 -1
  69. package/dist/hub/user-manager.d.ts +0 -40
  70. package/dist/hub/user-manager.d.ts.map +0 -1
  71. package/dist/hub/user-manager.js +0 -153
  72. package/dist/hub/user-manager.js.map +0 -1
  73. package/dist/index.d.ts +0 -46
  74. package/dist/index.d.ts.map +0 -1
  75. package/dist/index.js +0 -82
  76. package/dist/index.js.map +0 -1
  77. package/dist/ingest/chunker.d.ts +0 -15
  78. package/dist/ingest/chunker.d.ts.map +0 -1
  79. package/dist/ingest/chunker.js +0 -192
  80. package/dist/ingest/chunker.js.map +0 -1
  81. package/dist/ingest/dedup.d.ts +0 -19
  82. package/dist/ingest/dedup.d.ts.map +0 -1
  83. package/dist/ingest/dedup.js +0 -50
  84. package/dist/ingest/dedup.js.map +0 -1
  85. package/dist/ingest/providers/anthropic.d.ts +0 -21
  86. package/dist/ingest/providers/anthropic.d.ts.map +0 -1
  87. package/dist/ingest/providers/anthropic.js +0 -314
  88. package/dist/ingest/providers/anthropic.js.map +0 -1
  89. package/dist/ingest/providers/bedrock.d.ts +0 -21
  90. package/dist/ingest/providers/bedrock.d.ts.map +0 -1
  91. package/dist/ingest/providers/bedrock.js +0 -313
  92. package/dist/ingest/providers/bedrock.js.map +0 -1
  93. package/dist/ingest/providers/gemini.d.ts +0 -21
  94. package/dist/ingest/providers/gemini.d.ts.map +0 -1
  95. package/dist/ingest/providers/gemini.js +0 -298
  96. package/dist/ingest/providers/gemini.js.map +0 -1
  97. package/dist/ingest/providers/index.d.ts +0 -68
  98. package/dist/ingest/providers/index.d.ts.map +0 -1
  99. package/dist/ingest/providers/index.js +0 -611
  100. package/dist/ingest/providers/index.js.map +0 -1
  101. package/dist/ingest/providers/openai.d.ts +0 -30
  102. package/dist/ingest/providers/openai.d.ts.map +0 -1
  103. package/dist/ingest/providers/openai.js +0 -387
  104. package/dist/ingest/providers/openai.js.map +0 -1
  105. package/dist/ingest/task-processor.d.ts +0 -91
  106. package/dist/ingest/task-processor.d.ts.map +0 -1
  107. package/dist/ingest/task-processor.js +0 -478
  108. package/dist/ingest/task-processor.js.map +0 -1
  109. package/dist/ingest/worker.d.ts +0 -23
  110. package/dist/ingest/worker.d.ts.map +0 -1
  111. package/dist/ingest/worker.js +0 -255
  112. package/dist/ingest/worker.js.map +0 -1
  113. package/dist/openclaw-api.d.ts +0 -53
  114. package/dist/openclaw-api.d.ts.map +0 -1
  115. package/dist/openclaw-api.js +0 -189
  116. package/dist/openclaw-api.js.map +0 -1
  117. package/dist/recall/engine.d.ts +0 -28
  118. package/dist/recall/engine.d.ts.map +0 -1
  119. package/dist/recall/engine.js +0 -343
  120. package/dist/recall/engine.js.map +0 -1
  121. package/dist/recall/mmr.d.ts +0 -17
  122. package/dist/recall/mmr.d.ts.map +0 -1
  123. package/dist/recall/mmr.js +0 -53
  124. package/dist/recall/mmr.js.map +0 -1
  125. package/dist/recall/recency.d.ts +0 -20
  126. package/dist/recall/recency.d.ts.map +0 -1
  127. package/dist/recall/recency.js +0 -26
  128. package/dist/recall/recency.js.map +0 -1
  129. package/dist/recall/rrf.d.ts +0 -16
  130. package/dist/recall/rrf.d.ts.map +0 -1
  131. package/dist/recall/rrf.js +0 -15
  132. package/dist/recall/rrf.js.map +0 -1
  133. package/dist/shared/llm-call.d.ts +0 -30
  134. package/dist/shared/llm-call.d.ts.map +0 -1
  135. package/dist/shared/llm-call.js +0 -253
  136. package/dist/shared/llm-call.js.map +0 -1
  137. package/dist/sharing/types.contract.d.ts +0 -2
  138. package/dist/sharing/types.contract.d.ts.map +0 -1
  139. package/dist/sharing/types.contract.js +0 -3
  140. package/dist/sharing/types.contract.js.map +0 -1
  141. package/dist/sharing/types.d.ts +0 -80
  142. package/dist/sharing/types.d.ts.map +0 -1
  143. package/dist/sharing/types.js +0 -3
  144. package/dist/sharing/types.js.map +0 -1
  145. package/dist/skill/bundled-memory-guide.d.ts +0 -2
  146. package/dist/skill/bundled-memory-guide.d.ts.map +0 -1
  147. package/dist/skill/bundled-memory-guide.js +0 -45
  148. package/dist/skill/bundled-memory-guide.js.map +0 -1
  149. package/dist/skill/evaluator.d.ts +0 -28
  150. package/dist/skill/evaluator.d.ts.map +0 -1
  151. package/dist/skill/evaluator.js +0 -169
  152. package/dist/skill/evaluator.js.map +0 -1
  153. package/dist/skill/evolver.d.ts +0 -48
  154. package/dist/skill/evolver.d.ts.map +0 -1
  155. package/dist/skill/evolver.js +0 -406
  156. package/dist/skill/evolver.js.map +0 -1
  157. package/dist/skill/generator.d.ts +0 -26
  158. package/dist/skill/generator.d.ts.map +0 -1
  159. package/dist/skill/generator.js +0 -521
  160. package/dist/skill/generator.js.map +0 -1
  161. package/dist/skill/installer.d.ts +0 -42
  162. package/dist/skill/installer.d.ts.map +0 -1
  163. package/dist/skill/installer.js +0 -165
  164. package/dist/skill/installer.js.map +0 -1
  165. package/dist/skill/upgrader.d.ts +0 -19
  166. package/dist/skill/upgrader.d.ts.map +0 -1
  167. package/dist/skill/upgrader.js +0 -366
  168. package/dist/skill/upgrader.js.map +0 -1
  169. package/dist/skill/validator.d.ts +0 -30
  170. package/dist/skill/validator.d.ts.map +0 -1
  171. package/dist/skill/validator.js +0 -272
  172. package/dist/skill/validator.js.map +0 -1
  173. package/dist/storage/ensure-binding.d.ts +0 -12
  174. package/dist/storage/ensure-binding.d.ts.map +0 -1
  175. package/dist/storage/ensure-binding.js +0 -53
  176. package/dist/storage/ensure-binding.js.map +0 -1
  177. package/dist/storage/sqlite.d.ts +0 -649
  178. package/dist/storage/sqlite.d.ts.map +0 -1
  179. package/dist/storage/sqlite.js +0 -2657
  180. package/dist/storage/sqlite.js.map +0 -1
  181. package/dist/storage/vector.d.ts +0 -12
  182. package/dist/storage/vector.d.ts.map +0 -1
  183. package/dist/storage/vector.js +0 -34
  184. package/dist/storage/vector.js.map +0 -1
  185. package/dist/telemetry.d.ts +0 -47
  186. package/dist/telemetry.d.ts.map +0 -1
  187. package/dist/telemetry.js +0 -312
  188. package/dist/telemetry.js.map +0 -1
  189. package/dist/tools/index.d.ts +0 -5
  190. package/dist/tools/index.d.ts.map +0 -1
  191. package/dist/tools/index.js +0 -12
  192. package/dist/tools/index.js.map +0 -1
  193. package/dist/tools/memory-get.d.ts +0 -4
  194. package/dist/tools/memory-get.d.ts.map +0 -1
  195. package/dist/tools/memory-get.js +0 -64
  196. package/dist/tools/memory-get.js.map +0 -1
  197. package/dist/tools/memory-search.d.ts +0 -7
  198. package/dist/tools/memory-search.d.ts.map +0 -1
  199. package/dist/tools/memory-search.js +0 -84
  200. package/dist/tools/memory-search.js.map +0 -1
  201. package/dist/tools/memory-timeline.d.ts +0 -4
  202. package/dist/tools/memory-timeline.d.ts.map +0 -1
  203. package/dist/tools/memory-timeline.js +0 -73
  204. package/dist/tools/memory-timeline.js.map +0 -1
  205. package/dist/tools/network-memory-detail.d.ts +0 -4
  206. package/dist/tools/network-memory-detail.d.ts.map +0 -1
  207. package/dist/tools/network-memory-detail.js +0 -34
  208. package/dist/tools/network-memory-detail.js.map +0 -1
  209. package/dist/types.d.ts +0 -330
  210. package/dist/types.d.ts.map +0 -1
  211. package/dist/types.js +0 -38
  212. package/dist/types.js.map +0 -1
  213. package/dist/update-check.d.ts +0 -21
  214. package/dist/update-check.d.ts.map +0 -1
  215. package/dist/update-check.js +0 -110
  216. package/dist/update-check.js.map +0 -1
  217. package/dist/viewer/html.d.ts +0 -2
  218. package/dist/viewer/html.d.ts.map +0 -1
  219. package/dist/viewer/html.js +0 -9168
  220. package/dist/viewer/html.js.map +0 -1
  221. package/dist/viewer/server.d.ts +0 -205
  222. package/dist/viewer/server.d.ts.map +0 -1
  223. package/dist/viewer/server.js +0 -4876
  224. package/dist/viewer/server.js.map +0 -1
@@ -1,343 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RecallEngine = void 0;
4
- const vector_1 = require("../storage/vector");
5
- const rrf_1 = require("./rrf");
6
- const mmr_1 = require("./mmr");
7
- const recency_1 = require("./recency");
8
- const providers_1 = require("../ingest/providers");
9
- const MAX_RECENT_QUERIES = 20;
10
- class RecallEngine {
11
- store;
12
- embedder;
13
- ctx;
14
- recentQueries = [];
15
- constructor(store, embedder, ctx) {
16
- this.store = store;
17
- this.embedder = embedder;
18
- this.ctx = ctx;
19
- }
20
- async search(opts) {
21
- const recallCfg = this.ctx.config.recall;
22
- const maxResults = Math.min(opts.maxResults ?? recallCfg.maxResultsDefault, recallCfg.maxResultsMax);
23
- const minScore = opts.minScore ?? recallCfg.minScoreDefault;
24
- const query = opts.query ?? "";
25
- const roleFilter = opts.role;
26
- const repeatNote = this.checkRepeat(query, maxResults, minScore);
27
- const candidatePool = maxResults * 5;
28
- const ownerFilter = opts.ownerFilter;
29
- // Step 1: Gather candidates from FTS, vector search, and pattern search
30
- const ftsCandidates = query
31
- ? this.store.ftsSearch(query, candidatePool, ownerFilter)
32
- : [];
33
- let vecCandidates = [];
34
- if (query) {
35
- try {
36
- const queryVec = await this.embedder.embedQuery(query);
37
- const maxChunks = recallCfg.vectorSearchMaxChunks && recallCfg.vectorSearchMaxChunks > 0
38
- ? recallCfg.vectorSearchMaxChunks
39
- : undefined;
40
- vecCandidates = (0, vector_1.vectorSearch)(this.store, queryVec, candidatePool, maxChunks, ownerFilter);
41
- }
42
- catch (err) {
43
- this.ctx.log.warn(`Vector search failed, using FTS only: ${err}`);
44
- }
45
- }
46
- // Step 1b: Pattern search (LIKE-based) as fallback for short terms that
47
- // trigram FTS cannot match (trigram requires >= 3 chars).
48
- // For CJK text without spaces, extract bigrams (2-char sliding windows)
49
- // so that queries like "唐波是谁" produce ["唐波", "波是", "是谁"].
50
- const cleaned = query.replace(/[."""(){}[\]*:^~!@#$%&\\/<>,;'`??。,!、:""''()【】《》]/g, " ");
51
- const spaceSplit = cleaned.split(/\s+/).filter((t) => t.length === 2);
52
- const cjkBigrams = [];
53
- const cjkRuns = cleaned.match(/[\u4e00-\u9fff\u3400-\u4dbf\uF900-\uFAFF]{2,}/g);
54
- if (cjkRuns) {
55
- for (const run of cjkRuns) {
56
- for (let i = 0; i <= run.length - 2; i++) {
57
- cjkBigrams.push(run.slice(i, i + 2));
58
- }
59
- }
60
- }
61
- const shortTerms = [...new Set([...spaceSplit, ...cjkBigrams])];
62
- const patternHits = shortTerms.length > 0
63
- ? this.store.patternSearch(shortTerms, { limit: candidatePool })
64
- : [];
65
- const patternRanked = patternHits.map((h, i) => ({
66
- id: h.chunkId,
67
- score: 1 / (i + 1),
68
- }));
69
- // Step 1c: Hub memories — FTS + pattern + cached embeddings (same strategy as chunks/skills).
70
- let hubMemFtsRanked = [];
71
- let hubMemVecRanked = [];
72
- let hubMemPatternRanked = [];
73
- if (query && this.ctx.config.sharing?.enabled && this.ctx.config.sharing.role === "hub") {
74
- try {
75
- const hubFtsHits = this.store.searchHubMemories(query, { maxResults: candidatePool });
76
- hubMemFtsRanked = hubFtsHits.map(({ hit }, i) => ({ id: `hubmem:${hit.id}`, score: 1 / (i + 1) }));
77
- }
78
- catch { /* hub_memories table may not exist */ }
79
- if (shortTerms.length > 0) {
80
- try {
81
- const hubPatternHits = this.store.hubMemoryPatternSearch(shortTerms, { limit: candidatePool });
82
- hubMemPatternRanked = hubPatternHits.map((h, i) => ({ id: `hubmem:${h.memoryId}`, score: 1 / (i + 1) }));
83
- }
84
- catch { /* best-effort */ }
85
- }
86
- try {
87
- const qv = await this.embedder.embedQuery(query).catch(() => null);
88
- if (qv) {
89
- const memEmbs = this.store.getVisibleHubMemoryEmbeddings("__hub__");
90
- const scored = [];
91
- for (const e of memEmbs) {
92
- let dot = 0, nA = 0, nB = 0;
93
- const len = Math.min(qv.length, e.vector.length);
94
- for (let i = 0; i < len; i++) {
95
- dot += qv[i] * e.vector[i];
96
- nA += qv[i] * qv[i];
97
- nB += e.vector[i] * e.vector[i];
98
- }
99
- const sim = nA > 0 && nB > 0 ? dot / (Math.sqrt(nA) * Math.sqrt(nB)) : 0;
100
- if (sim > 0.3)
101
- scored.push({ id: `hubmem:${e.memoryId}`, score: sim });
102
- }
103
- scored.sort((a, b) => b.score - a.score);
104
- hubMemVecRanked = scored.slice(0, candidatePool);
105
- }
106
- }
107
- catch { /* best-effort */ }
108
- const hubTotal = hubMemFtsRanked.length + hubMemVecRanked.length + hubMemPatternRanked.length;
109
- if (hubTotal > 0) {
110
- this.ctx.log.debug(`recall: hub_memories candidates: fts=${hubMemFtsRanked.length}, vec=${hubMemVecRanked.length}, pattern=${hubMemPatternRanked.length}`);
111
- }
112
- }
113
- // Step 2: RRF fusion
114
- const ftsRanked = ftsCandidates.map((c) => ({ id: c.chunkId, score: c.score }));
115
- const vecRanked = vecCandidates.map((c) => ({ id: c.chunkId, score: c.score }));
116
- const allRankedLists = [ftsRanked, vecRanked, patternRanked];
117
- if (hubMemFtsRanked.length > 0)
118
- allRankedLists.push(hubMemFtsRanked);
119
- if (hubMemVecRanked.length > 0)
120
- allRankedLists.push(hubMemVecRanked);
121
- if (hubMemPatternRanked.length > 0)
122
- allRankedLists.push(hubMemPatternRanked);
123
- const rrfScores = (0, rrf_1.rrfFuse)(allRankedLists, recallCfg.rrfK);
124
- if (rrfScores.size === 0) {
125
- this.recordQuery(query, maxResults, minScore, 0);
126
- return {
127
- hits: [],
128
- meta: {
129
- usedMinScore: minScore,
130
- usedMaxResults: maxResults,
131
- totalCandidates: 0,
132
- note: repeatNote ?? "No candidates found for the given query.",
133
- },
134
- };
135
- }
136
- // Step 3: MMR re-ranking
137
- const rrfList = [...rrfScores.entries()]
138
- .map(([id, score]) => ({ id, score }))
139
- .sort((a, b) => b.score - a.score);
140
- const mmrResults = (0, mmr_1.mmrRerank)(rrfList, this.store, recallCfg.mmrLambda, maxResults * 2);
141
- // Step 4: Time decay
142
- const withTs = mmrResults.map((r) => {
143
- if (r.id.startsWith("hubmem:")) {
144
- const memId = r.id.slice(7);
145
- const mem = this.store.getHubMemoryById(memId);
146
- return { ...r, createdAt: mem?.createdAt ?? 0 };
147
- }
148
- const chunk = this.store.getChunk(r.id);
149
- return { ...r, createdAt: chunk?.createdAt ?? 0 };
150
- });
151
- const decayed = (0, recency_1.applyRecencyDecay)(withTs, recallCfg.recencyHalfLifeDays);
152
- // Step 5: Apply relative threshold on raw scores, then normalize to [0,1]
153
- const sorted = [...decayed].sort((a, b) => b.score - a.score);
154
- const topScore = sorted.length > 0 ? sorted[0].score : 0;
155
- const absoluteFloor = topScore * minScore * 0.3;
156
- // When role filter is active, keep a larger pool before slicing so we don't
157
- // discard target-role candidates that rank below non-target ones.
158
- const preSliceLimit = roleFilter ? maxResults * 5 : maxResults;
159
- const filtered = sorted
160
- .filter((d) => d.score >= absoluteFloor)
161
- .slice(0, preSliceLimit);
162
- const displayMax = filtered.length > 0 ? filtered[0].score : 1;
163
- const normalized = filtered.map((d) => ({
164
- ...d,
165
- score: d.score / displayMax,
166
- }));
167
- // Step 6: Build hits (with optional role filter), applying maxResults cap at the end
168
- const hits = [];
169
- for (const candidate of normalized) {
170
- if (hits.length >= maxResults)
171
- break;
172
- if (candidate.id.startsWith("hubmem:")) {
173
- const memId = candidate.id.slice(7);
174
- const mem = this.store.getHubMemoryById(memId);
175
- if (!mem)
176
- continue;
177
- if (roleFilter && mem.role !== roleFilter)
178
- continue;
179
- hits.push({
180
- summary: mem.summary || mem.content.slice(0, 200),
181
- original_excerpt: mem.content,
182
- ref: {
183
- sessionKey: `hub-shared:${mem.sourceUserId}`,
184
- chunkId: mem.id,
185
- turnId: "",
186
- seq: 0,
187
- },
188
- score: Math.round(candidate.score * 1000) / 1000,
189
- taskId: null,
190
- skillId: null,
191
- owner: `hub-user:${mem.sourceUserId}`,
192
- origin: "hub-memory",
193
- source: {
194
- ts: mem.createdAt,
195
- role: (mem.role || "assistant"),
196
- sessionKey: `hub-shared:${mem.sourceUserId}`,
197
- },
198
- });
199
- continue;
200
- }
201
- const chunk = this.store.getChunk(candidate.id);
202
- if (!chunk)
203
- continue;
204
- if (roleFilter && chunk.role !== roleFilter)
205
- continue;
206
- const excerpt = (chunk.mergeCount ?? 0) > 0 ? chunk.summary : makeExcerpt(chunk.content);
207
- hits.push({
208
- summary: chunk.summary,
209
- original_excerpt: excerpt,
210
- ref: {
211
- sessionKey: chunk.sessionKey,
212
- chunkId: chunk.id,
213
- turnId: chunk.turnId,
214
- seq: chunk.seq,
215
- },
216
- score: Math.round(candidate.score * 1000) / 1000,
217
- taskId: chunk.taskId,
218
- skillId: chunk.skillId,
219
- origin: chunk.owner === "public" ? "local-shared" : "local",
220
- source: {
221
- ts: chunk.createdAt,
222
- role: chunk.role,
223
- sessionKey: chunk.sessionKey,
224
- },
225
- });
226
- }
227
- this.recordQuery(query, maxResults, minScore, hits.length);
228
- return {
229
- hits,
230
- meta: {
231
- usedMinScore: minScore,
232
- usedMaxResults: maxResults,
233
- totalCandidates: rrfScores.size,
234
- ...(repeatNote ? { note: repeatNote } : {}),
235
- },
236
- };
237
- }
238
- /**
239
- * PRD §6.1: Detect repeated identical/similar queries and produce a
240
- * warning note so the model knows to vary its approach.
241
- */
242
- checkRepeat(query, maxResults, minScore) {
243
- const normalized = query.toLowerCase().trim();
244
- if (!normalized)
245
- return undefined;
246
- const dup = this.recentQueries.find((q) => q.query === normalized && q.maxResults === maxResults && q.minScore === minScore);
247
- if (dup) {
248
- if (dup.hitCount === 0) {
249
- return "This exact query with the same parameters was already tried and returned 0 results. Try rephrasing with different keywords, or adjust maxResults/minScore.";
250
- }
251
- return "This exact query with the same parameters was already executed. Consider varying the query or expanding parameters to get different results.";
252
- }
253
- return undefined;
254
- }
255
- recordQuery(query, maxResults, minScore, hitCount) {
256
- const normalized = query.toLowerCase().trim();
257
- if (!normalized)
258
- return;
259
- this.recentQueries = this.recentQueries.filter((q) => !(q.query === normalized && q.maxResults === maxResults && q.minScore === minScore));
260
- this.recentQueries.push({ query: normalized, maxResults, minScore, hitCount });
261
- if (this.recentQueries.length > MAX_RECENT_QUERIES) {
262
- this.recentQueries.shift();
263
- }
264
- }
265
- async searchSkills(query, scope, currentOwner) {
266
- const RRF_K = 60;
267
- const TOP_CANDIDATES = 20;
268
- // FTS on name + description
269
- const ftsCandidates = this.store.skillFtsSearch(query, TOP_CANDIDATES, scope, currentOwner);
270
- // Vector search on description embedding
271
- let vecCandidates = [];
272
- try {
273
- const queryVec = await this.embedder.embedQuery(query);
274
- const allEmb = this.store.getSkillEmbeddings(scope, currentOwner);
275
- vecCandidates = allEmb.map((row) => ({
276
- skillId: row.skillId,
277
- score: (0, vector_1.cosineSimilarity)(queryVec, row.vector),
278
- }));
279
- vecCandidates.sort((a, b) => b.score - a.score);
280
- vecCandidates = vecCandidates.slice(0, TOP_CANDIDATES);
281
- }
282
- catch (err) {
283
- this.ctx.log.warn(`Skill vector search failed, using FTS only: ${err}`);
284
- }
285
- // RRF fusion
286
- const ftsRanked = ftsCandidates.map((c) => ({ id: c.skillId, score: c.score }));
287
- const vecRanked = vecCandidates.map((c) => ({ id: c.skillId, score: c.score }));
288
- const rrfScores = (0, rrf_1.rrfFuse)([ftsRanked, vecRanked], RRF_K);
289
- if (rrfScores.size === 0)
290
- return [];
291
- const sorted = [...rrfScores.entries()]
292
- .map(([id, score]) => ({ id, score }))
293
- .sort((a, b) => b.score - a.score)
294
- .slice(0, TOP_CANDIDATES);
295
- // Load skill details for LLM judgment
296
- const candidateSkills = [];
297
- for (const item of sorted) {
298
- const skill = this.store.getSkill(item.id);
299
- if (skill)
300
- candidateSkills.push({ skill, rrfScore: item.score });
301
- }
302
- if (candidateSkills.length === 0)
303
- return [];
304
- // LLM relevance judgment
305
- const summarizer = new providers_1.Summarizer(this.ctx.config.summarizer, this.ctx.log, this.ctx.openclawAPI);
306
- const relevantIndices = await this.judgeSkillRelevance(summarizer, query, candidateSkills);
307
- return relevantIndices.map((idx) => {
308
- const { skill, rrfScore } = candidateSkills[idx];
309
- return {
310
- skillId: skill.id,
311
- name: skill.name,
312
- description: skill.description,
313
- owner: skill.owner,
314
- visibility: skill.visibility,
315
- score: rrfScore,
316
- reason: "relevant",
317
- };
318
- });
319
- }
320
- async judgeSkillRelevance(summarizer, query, candidates) {
321
- const candidateList = candidates.map((c, i) => ({
322
- index: i,
323
- role: "skill",
324
- content: `[${c.skill.name}] ${c.skill.description}`,
325
- }));
326
- try {
327
- const result = await summarizer.filterRelevant(query, candidateList);
328
- if (result && result.relevant.length > 0) {
329
- return result.relevant.map((r) => r);
330
- }
331
- }
332
- catch (err) {
333
- this.ctx.log.warn(`Skill relevance judgment failed, returning all: ${err}`);
334
- }
335
- // Fallback: return all candidates
336
- return candidates.map((_, i) => i);
337
- }
338
- }
339
- exports.RecallEngine = RecallEngine;
340
- function makeExcerpt(content) {
341
- return content;
342
- }
343
- //# sourceMappingURL=engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/recall/engine.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { SqliteStore } from "../storage/sqlite";
2
- /**
3
- * Maximal Marginal Relevance (PRD §5.3)
4
- *
5
- * Re-ranks candidates to balance relevance with diversity,
6
- * preventing top-K results from being too similar.
7
- *
8
- * MMR = λ · sim(q, d) - (1-λ) · max(sim(d, d_selected))
9
- */
10
- export declare function mmrRerank(candidates: Array<{
11
- id: string;
12
- score: number;
13
- }>, store: SqliteStore, lambda?: number, topK?: number): Array<{
14
- id: string;
15
- score: number;
16
- }>;
17
- //# sourceMappingURL=mmr.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mmr.d.ts","sourceRoot":"","sources":["../../src/recall/mmr.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,MAAY,EACpB,IAAI,GAAE,MAAW,GAChB,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CtC"}
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mmrRerank = mmrRerank;
4
- const vector_1 = require("../storage/vector");
5
- /**
6
- * Maximal Marginal Relevance (PRD §5.3)
7
- *
8
- * Re-ranks candidates to balance relevance with diversity,
9
- * preventing top-K results from being too similar.
10
- *
11
- * MMR = λ · sim(q, d) - (1-λ) · max(sim(d, d_selected))
12
- */
13
- function mmrRerank(candidates, store, lambda = 0.7, topK = 20) {
14
- if (candidates.length <= 1)
15
- return candidates;
16
- const embeddings = new Map();
17
- for (const c of candidates) {
18
- const vec = store.getEmbedding(c.id);
19
- if (vec)
20
- embeddings.set(c.id, vec);
21
- }
22
- const selected = [];
23
- const remaining = [...candidates];
24
- while (selected.length < topK && remaining.length > 0) {
25
- let bestIdx = 0;
26
- let bestMmr = -Infinity;
27
- for (let i = 0; i < remaining.length; i++) {
28
- const cand = remaining[i];
29
- const candVec = embeddings.get(cand.id);
30
- let maxSimToSelected = 0;
31
- if (candVec && selected.length > 0) {
32
- for (const s of selected) {
33
- const sVec = embeddings.get(s.id);
34
- if (sVec) {
35
- const sim = (0, vector_1.cosineSimilarity)(candVec, sVec);
36
- maxSimToSelected = Math.max(maxSimToSelected, sim);
37
- }
38
- }
39
- }
40
- const mmrScore = lambda * cand.score - (1 - lambda) * maxSimToSelected;
41
- if (mmrScore > bestMmr) {
42
- bestMmr = mmrScore;
43
- bestIdx = i;
44
- }
45
- }
46
- const chosen = remaining.splice(bestIdx, 1)[0];
47
- // Preserve original RRF score for downstream filtering;
48
- // MMR only determines selection order, not the score value.
49
- selected.push({ id: chosen.id, score: chosen.score });
50
- }
51
- return selected;
52
- }
53
- //# sourceMappingURL=mmr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mmr.js","sourceRoot":"","sources":["../../src/recall/mmr.ts"],"names":[],"mappings":";;AAWA,8BAkDC;AA7DD,8CAAqD;AAGrD;;;;;;;GAOG;AACH,SAAgB,SAAS,CACvB,UAAgD,EAChD,KAAkB,EAClB,SAAiB,GAAG,EACpB,OAAe,EAAE;IAEjB,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAE9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,GAAG;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAyC,EAAE,CAAC;IAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IAElC,OAAO,QAAQ,CAAC,MAAM,GAAG,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAExC,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,GAAG,GAAG,IAAA,yBAAgB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBAC5C,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,gBAAgB,CAAC;YACvE,IAAI,QAAQ,GAAG,OAAO,EAAE,CAAC;gBACvB,OAAO,GAAG,QAAQ,CAAC;gBACnB,OAAO,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,wDAAwD;QACxD,4DAA4D;QAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Time decay scoring (PRD §5.3)
3
- *
4
- * Applies exponential decay based on document age, biasing towards
5
- * more recent memories. Uses configurable half-life (default 14 days).
6
- *
7
- * decay(t) = 0.5 ^ (age_days / half_life)
8
- * final = base_score * (alpha + (1-alpha) * decay)
9
- *
10
- * alpha=0.3 ensures old but highly relevant results are not zeroed out.
11
- */
12
- export declare function applyRecencyDecay(candidates: Array<{
13
- id: string;
14
- score: number;
15
- createdAt: number;
16
- }>, halfLifeDays?: number, now?: number): Array<{
17
- id: string;
18
- score: number;
19
- }>;
20
- //# sourceMappingURL=recency.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recency.d.ts","sourceRoot":"","sources":["../../src/recall/recency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACnE,YAAY,GAAE,MAAW,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWtC"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyRecencyDecay = applyRecencyDecay;
4
- /**
5
- * Time decay scoring (PRD §5.3)
6
- *
7
- * Applies exponential decay based on document age, biasing towards
8
- * more recent memories. Uses configurable half-life (default 14 days).
9
- *
10
- * decay(t) = 0.5 ^ (age_days / half_life)
11
- * final = base_score * (alpha + (1-alpha) * decay)
12
- *
13
- * alpha=0.3 ensures old but highly relevant results are not zeroed out.
14
- */
15
- function applyRecencyDecay(candidates, halfLifeDays = 14, now) {
16
- const currentTime = now ?? Date.now();
17
- const halfLifeMs = halfLifeDays * 24 * 60 * 60 * 1000;
18
- const alpha = 0.3;
19
- return candidates.map((c) => {
20
- const ageMs = Math.max(0, currentTime - c.createdAt);
21
- const decay = Math.pow(0.5, ageMs / halfLifeMs);
22
- const adjustedScore = c.score * (alpha + (1 - alpha) * decay);
23
- return { id: c.id, score: adjustedScore };
24
- });
25
- }
26
- //# sourceMappingURL=recency.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recency.js","sourceRoot":"","sources":["../../src/recall/recency.ts"],"names":[],"mappings":";;AAWA,8CAeC;AA1BD;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAC/B,UAAmE,EACnE,eAAuB,EAAE,EACzB,GAAY;IAEZ,MAAM,WAAW,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC;IAElB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9D,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Reciprocal Rank Fusion (PRD §5.2)
3
- *
4
- * Merges ranked lists from different retrieval sources (FTS, vector)
5
- * into a single ranking. Handles score scale mismatch between BM25
6
- * and cosine similarity.
7
- *
8
- * RRF(d) = Σ 1 / (k + rank_i(d))
9
- * where k is a constant (default 60) and rank_i is the rank in list i.
10
- */
11
- export interface RankedItem {
12
- id: string;
13
- score: number;
14
- }
15
- export declare function rrfFuse(lists: RankedItem[][], k?: number): Map<string, number>;
16
- //# sourceMappingURL=rrf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rrf.d.ts","sourceRoot":"","sources":["../../src/recall/rrf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,UAAU,EAAE,EAAE,EACrB,CAAC,GAAE,MAAW,GACb,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYrB"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rrfFuse = rrfFuse;
4
- function rrfFuse(lists, k = 60) {
5
- const scores = new Map();
6
- for (const list of lists) {
7
- for (let rank = 0; rank < list.length; rank++) {
8
- const item = list[rank];
9
- const prev = scores.get(item.id) ?? 0;
10
- scores.set(item.id, prev + 1 / (k + rank + 1));
11
- }
12
- }
13
- return scores;
14
- }
15
- //# sourceMappingURL=rrf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rrf.js","sourceRoot":"","sources":["../../src/recall/rrf.ts"],"names":[],"mappings":";;AAeA,0BAeC;AAfD,SAAgB,OAAO,CACrB,KAAqB,EACrB,IAAY,EAAE;IAEd,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,30 +0,0 @@
1
- import type { SummarizerConfig, Logger, PluginContext, OpenClawAPI } from "../types";
2
- /**
3
- * Build a SummarizerConfig from OpenClaw's native model configuration (openclaw.json).
4
- * Final fallback when both strongCfg and plugin summarizer fail or are absent.
5
- */
6
- export declare function loadOpenClawFallbackConfig(log: Logger): SummarizerConfig | undefined;
7
- /**
8
- * Build the ordered fallback chain for skill-related LLM calls:
9
- * skillEvolution.summarizer → plugin summarizer → OpenClaw native model
10
- */
11
- export declare function buildSkillConfigChain(ctx: PluginContext): SummarizerConfig[];
12
- export interface LLMCallOptions {
13
- maxTokens?: number;
14
- temperature?: number;
15
- timeoutMs?: number;
16
- /** Pass ctx.openclawAPI so callLLMOnce can handle provider === "openclaw" */
17
- openclawAPI?: OpenClawAPI;
18
- }
19
- /**
20
- * Make a single LLM call with the given config. Throws on failure.
21
- * When cfg.provider === "openclaw", delegates to the OpenClaw host completion API.
22
- * Dispatches to Anthropic or OpenAI-compatible format based on provider.
23
- */
24
- export declare function callLLMOnce(cfg: SummarizerConfig, prompt: string, opts?: LLMCallOptions): Promise<string>;
25
- /**
26
- * Call LLM with fallback chain: tries each config in order until one succeeds.
27
- * Returns the result string, or throws if ALL configs fail.
28
- */
29
- export declare function callLLMWithFallback(chain: SummarizerConfig[], prompt: string, log: Logger, label: string, opts?: LLMCallOptions): Promise<string>;
30
- //# sourceMappingURL=llm-call.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-call.d.ts","sourceRoot":"","sources":["../../src/shared/llm-call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AA8BtG;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAuCpF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAS5E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAoBD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmBjB;AA2ED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,gBAAgB,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}