mem-os-python 1.6.27__py3-none-any.whl

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 (253) hide show
  1. mem_os_python-1.6.27.dist-info/METADATA +1032 -0
  2. mem_os_python-1.6.27.dist-info/RECORD +253 -0
  3. mem_os_python-1.6.27.dist-info/WHEEL +4 -0
  4. mem_os_python-1.6.27.dist-info/entry_points.txt +2 -0
  5. mem_os_python-1.6.27.dist-info/licenses/LICENSE +21 -0
  6. memos/__init__.py +16 -0
  7. memos/_js/adapters/anthropic.d.ts +279 -0
  8. memos/_js/adapters/anthropic.d.ts.map +1 -0
  9. memos/_js/adapters/anthropic.js +348 -0
  10. memos/_js/adapters/anthropic.js.map +1 -0
  11. memos/_js/adapters/base.d.ts +10 -0
  12. memos/_js/adapters/base.d.ts.map +1 -0
  13. memos/_js/adapters/base.js +2 -0
  14. memos/_js/adapters/base.js.map +1 -0
  15. memos/_js/adapters/openai.d.ts +264 -0
  16. memos/_js/adapters/openai.d.ts.map +1 -0
  17. memos/_js/adapters/openai.js +342 -0
  18. memos/_js/adapters/openai.js.map +1 -0
  19. memos/_js/apps/explorer.d.ts +244 -0
  20. memos/_js/apps/explorer.d.ts.map +1 -0
  21. memos/_js/apps/explorer.js +738 -0
  22. memos/_js/apps/explorer.js.map +1 -0
  23. memos/_js/citations.d.ts +65 -0
  24. memos/_js/citations.d.ts.map +1 -0
  25. memos/_js/citations.js +143 -0
  26. memos/_js/citations.js.map +1 -0
  27. memos/_js/cli-browse.d.ts +3 -0
  28. memos/_js/cli-browse.d.ts.map +1 -0
  29. memos/_js/cli-browse.js +129 -0
  30. memos/_js/cli-browse.js.map +1 -0
  31. memos/_js/cli-completion.d.ts +31 -0
  32. memos/_js/cli-completion.d.ts.map +1 -0
  33. memos/_js/cli-completion.js +340 -0
  34. memos/_js/cli-completion.js.map +1 -0
  35. memos/_js/cli-help.d.ts +18 -0
  36. memos/_js/cli-help.d.ts.map +1 -0
  37. memos/_js/cli-help.js +357 -0
  38. memos/_js/cli-help.js.map +1 -0
  39. memos/_js/cli.d.ts +28 -0
  40. memos/_js/cli.d.ts.map +1 -0
  41. memos/_js/cli.js +2880 -0
  42. memos/_js/cli.js.map +1 -0
  43. memos/_js/compression.d.ts +25 -0
  44. memos/_js/compression.d.ts.map +1 -0
  45. memos/_js/compression.js +319 -0
  46. memos/_js/compression.js.map +1 -0
  47. memos/_js/confidence-machine.d.ts +99 -0
  48. memos/_js/confidence-machine.d.ts.map +1 -0
  49. memos/_js/confidence-machine.js +222 -0
  50. memos/_js/confidence-machine.js.map +1 -0
  51. memos/_js/context-pack.d.ts +506 -0
  52. memos/_js/context-pack.d.ts.map +1 -0
  53. memos/_js/context-pack.js +1435 -0
  54. memos/_js/context-pack.js.map +1 -0
  55. memos/_js/contradictions.d.ts +160 -0
  56. memos/_js/contradictions.d.ts.map +1 -0
  57. memos/_js/contradictions.js +255 -0
  58. memos/_js/contradictions.js.map +1 -0
  59. memos/_js/dashboard.d.ts +30 -0
  60. memos/_js/dashboard.d.ts.map +1 -0
  61. memos/_js/dashboard.js +302 -0
  62. memos/_js/dashboard.js.map +1 -0
  63. memos/_js/ebbinghaus.d.ts +29 -0
  64. memos/_js/ebbinghaus.d.ts.map +1 -0
  65. memos/_js/ebbinghaus.js +32 -0
  66. memos/_js/ebbinghaus.js.map +1 -0
  67. memos/_js/embedding-queue.d.ts +190 -0
  68. memos/_js/embedding-queue.d.ts.map +1 -0
  69. memos/_js/embedding-queue.js +316 -0
  70. memos/_js/embedding-queue.js.map +1 -0
  71. memos/_js/embeddings.d.ts +187 -0
  72. memos/_js/embeddings.d.ts.map +1 -0
  73. memos/_js/embeddings.js +633 -0
  74. memos/_js/embeddings.js.map +1 -0
  75. memos/_js/entity-extraction.d.ts +54 -0
  76. memos/_js/entity-extraction.d.ts.map +1 -0
  77. memos/_js/entity-extraction.js +325 -0
  78. memos/_js/entity-extraction.js.map +1 -0
  79. memos/_js/entity-index.d.ts +93 -0
  80. memos/_js/entity-index.d.ts.map +1 -0
  81. memos/_js/entity-index.js +165 -0
  82. memos/_js/entity-index.js.map +1 -0
  83. memos/_js/event-memory.d.ts +147 -0
  84. memos/_js/event-memory.d.ts.map +1 -0
  85. memos/_js/event-memory.js +290 -0
  86. memos/_js/event-memory.js.map +1 -0
  87. memos/_js/external-import.d.ts +98 -0
  88. memos/_js/external-import.d.ts.map +1 -0
  89. memos/_js/external-import.js +669 -0
  90. memos/_js/external-import.js.map +1 -0
  91. memos/_js/fidelity.d.ts +367 -0
  92. memos/_js/fidelity.d.ts.map +1 -0
  93. memos/_js/fidelity.js +911 -0
  94. memos/_js/fidelity.js.map +1 -0
  95. memos/_js/graph-expansion.d.ts +119 -0
  96. memos/_js/graph-expansion.d.ts.map +1 -0
  97. memos/_js/graph-expansion.js +213 -0
  98. memos/_js/graph-expansion.js.map +1 -0
  99. memos/_js/graph-mermaid.d.ts +13 -0
  100. memos/_js/graph-mermaid.d.ts.map +1 -0
  101. memos/_js/graph-mermaid.js +32 -0
  102. memos/_js/graph-mermaid.js.map +1 -0
  103. memos/_js/graph.d.ts +170 -0
  104. memos/_js/graph.d.ts.map +1 -0
  105. memos/_js/graph.js +482 -0
  106. memos/_js/graph.js.map +1 -0
  107. memos/_js/harness.d.ts +63 -0
  108. memos/_js/harness.d.ts.map +1 -0
  109. memos/_js/harness.js +93 -0
  110. memos/_js/harness.js.map +1 -0
  111. memos/_js/importance.d.ts +118 -0
  112. memos/_js/importance.d.ts.map +1 -0
  113. memos/_js/importance.js +144 -0
  114. memos/_js/importance.js.map +1 -0
  115. memos/_js/index.d.ts +51 -0
  116. memos/_js/index.d.ts.map +1 -0
  117. memos/_js/index.js +53 -0
  118. memos/_js/index.js.map +1 -0
  119. memos/_js/mcp.d.ts +58 -0
  120. memos/_js/mcp.d.ts.map +1 -0
  121. memos/_js/mcp.js +1853 -0
  122. memos/_js/mcp.js.map +1 -0
  123. memos/_js/memory.d.ts +1762 -0
  124. memos/_js/memory.d.ts.map +1 -0
  125. memos/_js/memory.js +6283 -0
  126. memos/_js/memory.js.map +1 -0
  127. memos/_js/procedural.d.ts +74 -0
  128. memos/_js/procedural.d.ts.map +1 -0
  129. memos/_js/procedural.js +125 -0
  130. memos/_js/procedural.js.map +1 -0
  131. memos/_js/project-config.d.ts +68 -0
  132. memos/_js/project-config.d.ts.map +1 -0
  133. memos/_js/project-config.js +59 -0
  134. memos/_js/project-config.js.map +1 -0
  135. memos/_js/proof-of-forgetting.d.ts +57 -0
  136. memos/_js/proof-of-forgetting.d.ts.map +1 -0
  137. memos/_js/proof-of-forgetting.js +80 -0
  138. memos/_js/proof-of-forgetting.js.map +1 -0
  139. memos/_js/provenance.d.ts +122 -0
  140. memos/_js/provenance.d.ts.map +1 -0
  141. memos/_js/provenance.js +182 -0
  142. memos/_js/provenance.js.map +1 -0
  143. memos/_js/quarantine-commands.d.ts +23 -0
  144. memos/_js/quarantine-commands.d.ts.map +1 -0
  145. memos/_js/quarantine-commands.js +42 -0
  146. memos/_js/quarantine-commands.js.map +1 -0
  147. memos/_js/quarantine.d.ts +120 -0
  148. memos/_js/quarantine.d.ts.map +1 -0
  149. memos/_js/quarantine.js +873 -0
  150. memos/_js/quarantine.js.map +1 -0
  151. memos/_js/redact.d.ts +12 -0
  152. memos/_js/redact.d.ts.map +1 -0
  153. memos/_js/redact.js +26 -0
  154. memos/_js/redact.js.map +1 -0
  155. memos/_js/repl.d.ts +57 -0
  156. memos/_js/repl.d.ts.map +1 -0
  157. memos/_js/repl.js +295 -0
  158. memos/_js/repl.js.map +1 -0
  159. memos/_js/rerank-local.d.ts +61 -0
  160. memos/_js/rerank-local.d.ts.map +1 -0
  161. memos/_js/rerank-local.js +210 -0
  162. memos/_js/rerank-local.js.map +1 -0
  163. memos/_js/retain-filter.d.ts +98 -0
  164. memos/_js/retain-filter.d.ts.map +1 -0
  165. memos/_js/retain-filter.js +232 -0
  166. memos/_js/retain-filter.js.map +1 -0
  167. memos/_js/retrieval.d.ts +265 -0
  168. memos/_js/retrieval.d.ts.map +1 -0
  169. memos/_js/retrieval.js +1018 -0
  170. memos/_js/retrieval.js.map +1 -0
  171. memos/_js/revert.d.ts +77 -0
  172. memos/_js/revert.d.ts.map +1 -0
  173. memos/_js/revert.js +252 -0
  174. memos/_js/revert.js.map +1 -0
  175. memos/_js/scope.d.ts +30 -0
  176. memos/_js/scope.d.ts.map +1 -0
  177. memos/_js/scope.js +71 -0
  178. memos/_js/scope.js.map +1 -0
  179. memos/_js/semantic-screen.d.ts +152 -0
  180. memos/_js/semantic-screen.d.ts.map +1 -0
  181. memos/_js/semantic-screen.js +290 -0
  182. memos/_js/semantic-screen.js.map +1 -0
  183. memos/_js/session-hooks.d.ts +127 -0
  184. memos/_js/session-hooks.d.ts.map +1 -0
  185. memos/_js/session-hooks.js +482 -0
  186. memos/_js/session-hooks.js.map +1 -0
  187. memos/_js/storage/sqlite.d.ts +427 -0
  188. memos/_js/storage/sqlite.d.ts.map +1 -0
  189. memos/_js/storage/sqlite.js +2428 -0
  190. memos/_js/storage/sqlite.js.map +1 -0
  191. memos/_js/sync.d.ts +213 -0
  192. memos/_js/sync.d.ts.map +1 -0
  193. memos/_js/sync.js +389 -0
  194. memos/_js/sync.js.map +1 -0
  195. memos/_js/tamper-log.d.ts +98 -0
  196. memos/_js/tamper-log.d.ts.map +1 -0
  197. memos/_js/tamper-log.js +327 -0
  198. memos/_js/tamper-log.js.map +1 -0
  199. memos/_js/temporal.d.ts +92 -0
  200. memos/_js/temporal.d.ts.map +1 -0
  201. memos/_js/temporal.js +536 -0
  202. memos/_js/temporal.js.map +1 -0
  203. memos/_js/time-travel.d.ts +38 -0
  204. memos/_js/time-travel.d.ts.map +1 -0
  205. memos/_js/time-travel.js +46 -0
  206. memos/_js/time-travel.js.map +1 -0
  207. memos/_js/timestamp-format.d.ts +18 -0
  208. memos/_js/timestamp-format.d.ts.map +1 -0
  209. memos/_js/timestamp-format.js +52 -0
  210. memos/_js/timestamp-format.js.map +1 -0
  211. memos/_js/triple-extraction.d.ts +31 -0
  212. memos/_js/triple-extraction.d.ts.map +1 -0
  213. memos/_js/triple-extraction.js +116 -0
  214. memos/_js/triple-extraction.js.map +1 -0
  215. memos/_js/types.d.ts +2474 -0
  216. memos/_js/types.d.ts.map +1 -0
  217. memos/_js/types.js +20 -0
  218. memos/_js/types.js.map +1 -0
  219. memos/_js/updater.d.ts +95 -0
  220. memos/_js/updater.d.ts.map +1 -0
  221. memos/_js/updater.js +268 -0
  222. memos/_js/updater.js.map +1 -0
  223. memos/_js/version.d.ts +17 -0
  224. memos/_js/version.d.ts.map +1 -0
  225. memos/_js/version.js +34 -0
  226. memos/_js/version.js.map +1 -0
  227. memos/_js/vision/clip-query-cache.d.ts +58 -0
  228. memos/_js/vision/clip-query-cache.d.ts.map +1 -0
  229. memos/_js/vision/clip-query-cache.js +79 -0
  230. memos/_js/vision/clip-query-cache.js.map +1 -0
  231. memos/_js/vision/clip.d.ts +113 -0
  232. memos/_js/vision/clip.d.ts.map +1 -0
  233. memos/_js/vision/clip.js +224 -0
  234. memos/_js/vision/clip.js.map +1 -0
  235. memos/_js/vision/fake-clip.d.ts +55 -0
  236. memos/_js/vision/fake-clip.d.ts.map +1 -0
  237. memos/_js/vision/fake-clip.js +122 -0
  238. memos/_js/vision/fake-clip.js.map +1 -0
  239. memos/_js/vision/index.d.ts +15 -0
  240. memos/_js/vision/index.d.ts.map +1 -0
  241. memos/_js/vision/index.js +13 -0
  242. memos/_js/vision/index.js.map +1 -0
  243. memos/_js/vision/store.d.ts +137 -0
  244. memos/_js/vision/store.d.ts.map +1 -0
  245. memos/_js/vision/store.js +383 -0
  246. memos/_js/vision/store.js.map +1 -0
  247. memos/adapters/__init__.py +0 -0
  248. memos/adapters/crewai.py +385 -0
  249. memos/adapters/langchain.py +301 -0
  250. memos/adapters/ollama.py +396 -0
  251. memos/server/__init__.py +0 -0
  252. memos/server/main.py +547 -0
  253. memos/server/routes.py +360 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fidelity.js","sourceRoot":"","sources":["../src/fidelity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Single-step PPR-lite graph expansion (HippoRAG-style retrieval).
3
+ *
4
+ * After hybrid fusion produces a ranked candidate list, the top seeds are
5
+ * used as the personalization (restart) vector of a personalized PageRank
6
+ * walk over the 1–2 hop neighbourhood of graph edges + shared-entity
7
+ * links. The walk is a single sparse matrix-vector power iteration — no
8
+ * LLM calls, no extra embedding calls, no iterative retrieval rounds
9
+ * (the whole point: HippoRAG reaches iterative-IRCoT-level multi-hop
10
+ * accuracy at 10–30x lower cost with one PPR pass).
11
+ *
12
+ * Evidence notes (see `~/workspace/your_files/memos-memory-accuracy-
13
+ * research.md` §1a/§5-item-5):
14
+ * - PPR damping 0.5, as in HippoRAG.
15
+ * - Keep BOTH memory (passage) and entity nodes in the graph: dropping
16
+ * passage nodes costs −6.1 multi-hop F1. This implementation returns
17
+ * scores for every visited node, including the seeds themselves —
18
+ * callers must not filter down to entity-only.
19
+ * - Query-to-triple linking beat NER-to-node by +12.5 R@5; the analogue
20
+ * here is seeding the walk from fused retrieval hits (which already
21
+ * carry the query match) rather than from extracted entities alone.
22
+ *
23
+ * The module is intentionally storage-free: the neighbourhood is injected
24
+ * via a `getNeighbors` callback so the walk is a pure function and
25
+ * unit-testable on synthetic graphs. `MemOS` wires it up in
26
+ * `applyPprGraphExpansion` (`src/memory.ts`) using the in-memory
27
+ * `GraphEngine` adjacency plus shared-entity links derived from the
28
+ * fused candidate set.
29
+ */
30
+ /** Tuning knobs for {@link personalizedPageRank}. */
31
+ export interface PersonalizedPageRankOptions {
32
+ /**
33
+ * Follow-link probability per power-iteration step; `1 - damping` is
34
+ * the teleport (restart) mass returned to the personalization vector.
35
+ * HippoRAG uses 0.5. Default 0.5.
36
+ */
37
+ damping?: number;
38
+ /** BFS neighbourhood depth explored from the seed set. Default 2. */
39
+ maxHops?: number;
40
+ /**
41
+ * Per-node neighbour cap, applied after de-duplication and sorting.
42
+ * Bounds both the explored subgraph and the per-iteration work.
43
+ * Default 64.
44
+ */
45
+ maxFanout?: number;
46
+ /**
47
+ * Cap on total visited nodes (safety bound for very dense graphs:
48
+ * without it, `seeds × maxFanout^maxHops` bounds the subgraph only
49
+ * loosely). BFS explores in sorted-frontier order, so which nodes are
50
+ * kept is deterministic. Default 2048.
51
+ */
52
+ maxNodes?: number;
53
+ /** Power-iteration cap. Default 50. */
54
+ maxIterations?: number;
55
+ /** L1 convergence tolerance between iterations. Default 1e-6. */
56
+ tolerance?: number;
57
+ }
58
+ /** Default PPR damping (follow-link probability), per HippoRAG. */
59
+ export declare const DEFAULT_PPR_DAMPING = 0.5;
60
+ /** Default neighbourhood depth (1–2 hop expansion). */
61
+ export declare const DEFAULT_PPR_MAX_HOPS = 2;
62
+ /** Default per-node fan-out safety cap. */
63
+ export declare const DEFAULT_PPR_MAX_FANOUT = 64;
64
+ /** Default cap on total visited nodes. */
65
+ export declare const DEFAULT_PPR_MAX_NODES = 2048;
66
+ /** Default power-iteration cap. */
67
+ export declare const DEFAULT_PPR_MAX_ITERATIONS = 50;
68
+ /** Default L1 convergence tolerance. */
69
+ export declare const DEFAULT_PPR_TOLERANCE = 0.000001;
70
+ /**
71
+ * Default blend weight of the normalized PPR score in the post-fusion
72
+ * blend (`final = (1 - alpha) * fused + alpha * pprNorm`).
73
+ */
74
+ export declare const DEFAULT_GRAPH_EXPANSION_ALPHA = 0.2;
75
+ /** Default number of top fused results that seed the PPR walk. */
76
+ export declare const DEFAULT_GRAPH_EXPANSION_SEEDS = 10;
77
+ /** Default PPR neighbourhood depth from each seed. */
78
+ export declare const DEFAULT_GRAPH_EXPANSION_HOPS = 2;
79
+ /**
80
+ * Cap on graph neighbours injected into the results per query. Bounds
81
+ * the extra storage reads (one `peekNode` per injected candidate).
82
+ */
83
+ export declare const DEFAULT_PPR_MAX_INJECTED = 10;
84
+ /**
85
+ * Minimum normalized PPR score for a neighbour to be injected. Filters
86
+ * the long tail of barely-visited nodes so expansion only surfaces
87
+ * candidates the walk actually concentrated on.
88
+ */
89
+ export declare const DEFAULT_PPR_MIN_INJECT_SCORE = 0.05;
90
+ /**
91
+ * Personalized PageRank over a bounded neighbourhood of the seed set.
92
+ *
93
+ * - The personalization (restart) vector is the seed scores, clamped to
94
+ * >= 0 and normalized to sum 1 (uniform over seeds when every seed
95
+ * score is <= 0).
96
+ * - The explored subgraph is the BFS neighbourhood up to `maxHops`
97
+ * from the seeds; neighbour lists are de-duplicated, sorted, and
98
+ * fan-out capped, so exploration is deterministic regardless of the
99
+ * order `getNeighbors` returns.
100
+ * - Power iteration: `r ← damping · Mᵀr + (1 − damping) · p`, with
101
+ * dangling-node mass redistributed through the personalization vector
102
+ * (standard PPR handling so rank cannot leak out of the subgraph).
103
+ * - Returns scores for ALL visited nodes, INCLUDING the seed/memory
104
+ * (passage) nodes — never filter to entity-only (HippoRAG ablation:
105
+ * −6.1 F1 when passage nodes are dropped).
106
+ *
107
+ * Pure function: no storage, no I/O, no randomness. Deterministic for
108
+ * deterministic `getNeighbors`.
109
+ *
110
+ * @param seeds — Seed node ids mapped to their (non-negative) scores,
111
+ * e.g. fused hybrid-search scores for the top-K candidates.
112
+ * @param getNeighbors — Neighbour ids for a node id. Directionality is
113
+ * the caller's choice; MemOS passes both edge endpoints (undirected
114
+ * traversal) plus shared-entity links.
115
+ * @param opts — Damping / hops / fan-out / iteration tuning.
116
+ * @returns PPR score per visited node id (unnormalized; sums to ~1).
117
+ */
118
+ export declare function personalizedPageRank(seeds: Map<string, number>, getNeighbors: (id: string) => string[], opts?: PersonalizedPageRankOptions): Map<string, number>;
119
+ //# sourceMappingURL=graph-expansion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-expansion.d.ts","sourceRoot":"","sources":["../src/graph-expansion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,qDAAqD;AACrD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,uDAAuD;AACvD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,0CAA0C;AAC1C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,mCAAmC;AACnC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,wCAAwC;AACxC,eAAO,MAAM,qBAAqB,WAAO,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,kEAAkE;AAClE,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,sDAAsD;AACtD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C;;;GAGG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,EAAE,EACtC,IAAI,GAAE,2BAAgC,GACrC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsHrB"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Single-step PPR-lite graph expansion (HippoRAG-style retrieval).
3
+ *
4
+ * After hybrid fusion produces a ranked candidate list, the top seeds are
5
+ * used as the personalization (restart) vector of a personalized PageRank
6
+ * walk over the 1–2 hop neighbourhood of graph edges + shared-entity
7
+ * links. The walk is a single sparse matrix-vector power iteration — no
8
+ * LLM calls, no extra embedding calls, no iterative retrieval rounds
9
+ * (the whole point: HippoRAG reaches iterative-IRCoT-level multi-hop
10
+ * accuracy at 10–30x lower cost with one PPR pass).
11
+ *
12
+ * Evidence notes (see `~/workspace/your_files/memos-memory-accuracy-
13
+ * research.md` §1a/§5-item-5):
14
+ * - PPR damping 0.5, as in HippoRAG.
15
+ * - Keep BOTH memory (passage) and entity nodes in the graph: dropping
16
+ * passage nodes costs −6.1 multi-hop F1. This implementation returns
17
+ * scores for every visited node, including the seeds themselves —
18
+ * callers must not filter down to entity-only.
19
+ * - Query-to-triple linking beat NER-to-node by +12.5 R@5; the analogue
20
+ * here is seeding the walk from fused retrieval hits (which already
21
+ * carry the query match) rather than from extracted entities alone.
22
+ *
23
+ * The module is intentionally storage-free: the neighbourhood is injected
24
+ * via a `getNeighbors` callback so the walk is a pure function and
25
+ * unit-testable on synthetic graphs. `MemOS` wires it up in
26
+ * `applyPprGraphExpansion` (`src/memory.ts`) using the in-memory
27
+ * `GraphEngine` adjacency plus shared-entity links derived from the
28
+ * fused candidate set.
29
+ */
30
+ /** Default PPR damping (follow-link probability), per HippoRAG. */
31
+ export const DEFAULT_PPR_DAMPING = 0.5;
32
+ /** Default neighbourhood depth (1–2 hop expansion). */
33
+ export const DEFAULT_PPR_MAX_HOPS = 2;
34
+ /** Default per-node fan-out safety cap. */
35
+ export const DEFAULT_PPR_MAX_FANOUT = 64;
36
+ /** Default cap on total visited nodes. */
37
+ export const DEFAULT_PPR_MAX_NODES = 2048;
38
+ /** Default power-iteration cap. */
39
+ export const DEFAULT_PPR_MAX_ITERATIONS = 50;
40
+ /** Default L1 convergence tolerance. */
41
+ export const DEFAULT_PPR_TOLERANCE = 1e-6;
42
+ /**
43
+ * Default blend weight of the normalized PPR score in the post-fusion
44
+ * blend (`final = (1 - alpha) * fused + alpha * pprNorm`).
45
+ */
46
+ export const DEFAULT_GRAPH_EXPANSION_ALPHA = 0.2;
47
+ /** Default number of top fused results that seed the PPR walk. */
48
+ export const DEFAULT_GRAPH_EXPANSION_SEEDS = 10;
49
+ /** Default PPR neighbourhood depth from each seed. */
50
+ export const DEFAULT_GRAPH_EXPANSION_HOPS = 2;
51
+ /**
52
+ * Cap on graph neighbours injected into the results per query. Bounds
53
+ * the extra storage reads (one `peekNode` per injected candidate).
54
+ */
55
+ export const DEFAULT_PPR_MAX_INJECTED = 10;
56
+ /**
57
+ * Minimum normalized PPR score for a neighbour to be injected. Filters
58
+ * the long tail of barely-visited nodes so expansion only surfaces
59
+ * candidates the walk actually concentrated on.
60
+ */
61
+ export const DEFAULT_PPR_MIN_INJECT_SCORE = 0.05;
62
+ /**
63
+ * Personalized PageRank over a bounded neighbourhood of the seed set.
64
+ *
65
+ * - The personalization (restart) vector is the seed scores, clamped to
66
+ * >= 0 and normalized to sum 1 (uniform over seeds when every seed
67
+ * score is <= 0).
68
+ * - The explored subgraph is the BFS neighbourhood up to `maxHops`
69
+ * from the seeds; neighbour lists are de-duplicated, sorted, and
70
+ * fan-out capped, so exploration is deterministic regardless of the
71
+ * order `getNeighbors` returns.
72
+ * - Power iteration: `r ← damping · Mᵀr + (1 − damping) · p`, with
73
+ * dangling-node mass redistributed through the personalization vector
74
+ * (standard PPR handling so rank cannot leak out of the subgraph).
75
+ * - Returns scores for ALL visited nodes, INCLUDING the seed/memory
76
+ * (passage) nodes — never filter to entity-only (HippoRAG ablation:
77
+ * −6.1 F1 when passage nodes are dropped).
78
+ *
79
+ * Pure function: no storage, no I/O, no randomness. Deterministic for
80
+ * deterministic `getNeighbors`.
81
+ *
82
+ * @param seeds — Seed node ids mapped to their (non-negative) scores,
83
+ * e.g. fused hybrid-search scores for the top-K candidates.
84
+ * @param getNeighbors — Neighbour ids for a node id. Directionality is
85
+ * the caller's choice; MemOS passes both edge endpoints (undirected
86
+ * traversal) plus shared-entity links.
87
+ * @param opts — Damping / hops / fan-out / iteration tuning.
88
+ * @returns PPR score per visited node id (unnormalized; sums to ~1).
89
+ */
90
+ export function personalizedPageRank(seeds, getNeighbors, opts = {}) {
91
+ const damping = opts.damping ?? DEFAULT_PPR_DAMPING;
92
+ const maxHops = opts.maxHops ?? DEFAULT_PPR_MAX_HOPS;
93
+ const maxFanout = opts.maxFanout ?? DEFAULT_PPR_MAX_FANOUT;
94
+ const maxNodes = opts.maxNodes ?? DEFAULT_PPR_MAX_NODES;
95
+ const maxIterations = opts.maxIterations ?? DEFAULT_PPR_MAX_ITERATIONS;
96
+ const tolerance = opts.tolerance ?? DEFAULT_PPR_TOLERANCE;
97
+ const scores = new Map();
98
+ if (seeds.size === 0)
99
+ return scores;
100
+ // Personalization vector: seed scores, clamped >= 0, normalized to sum 1.
101
+ const seedIds = [...seeds.keys()].sort();
102
+ let totalMass = 0;
103
+ const clamped = new Map();
104
+ for (const id of seedIds) {
105
+ const mass = Math.max(0, seeds.get(id) ?? 0);
106
+ clamped.set(id, mass);
107
+ totalMass += mass;
108
+ }
109
+ const personalization = new Map();
110
+ if (totalMass > 0) {
111
+ for (const id of seedIds) {
112
+ personalization.set(id, clamped.get(id) / totalMass);
113
+ }
114
+ }
115
+ else {
116
+ // Degenerate (all seed scores <= 0): uniform restart over seeds so
117
+ // the walk still explores the seed neighbourhood deterministically.
118
+ for (const id of seedIds) {
119
+ personalization.set(id, 1 / seedIds.length);
120
+ }
121
+ }
122
+ // Bounded BFS neighbourhood exploration. Neighbour lists are
123
+ // de-duplicated, sorted, and fan-out capped at every step, so both the
124
+ // visited set and the iteration are deterministic regardless of the
125
+ // order `getNeighbors` returns. Results are cached: the adjacency
126
+ // build below re-queries the same nodes the BFS already visited.
127
+ const fanout = Math.max(0, maxFanout);
128
+ const neighborCache = new Map();
129
+ const cachedNeighbors = (id) => {
130
+ let neighbours = neighborCache.get(id);
131
+ if (!neighbours) {
132
+ neighbours = uniqueSorted(getNeighbors(id)).slice(0, fanout);
133
+ neighborCache.set(id, neighbours);
134
+ }
135
+ return neighbours;
136
+ };
137
+ const visited = new Set(seedIds);
138
+ let frontier = seedIds;
139
+ for (let hop = 0; hop < maxHops && frontier.length > 0; hop += 1) {
140
+ const next = [];
141
+ for (const id of frontier) {
142
+ for (const neighbour of cachedNeighbors(id)) {
143
+ if (neighbour === id || visited.has(neighbour))
144
+ continue;
145
+ // Safety cap: stop growing the subgraph once it is large enough
146
+ // that power iteration would dominate the hot path. Frontier
147
+ // order is sorted, so the kept set is deterministic.
148
+ if (visited.size >= Math.max(seedIds.length, maxNodes))
149
+ break;
150
+ visited.add(neighbour);
151
+ next.push(neighbour);
152
+ }
153
+ }
154
+ frontier = next.sort();
155
+ }
156
+ // Induced subgraph adjacency: neighbours restricted to visited nodes,
157
+ // sorted and fan-out capped for deterministic, bounded iteration.
158
+ // Integer-indexed so the power-iteration hot loop avoids Map lookups.
159
+ const nodes = [...visited].sort();
160
+ const indexOf = new Map();
161
+ nodes.forEach((id, i) => indexOf.set(id, i));
162
+ const adjacency = nodes.map((id) => cachedNeighbors(id)
163
+ .filter((n) => n !== id && visited.has(n))
164
+ .map((n) => indexOf.get(n)));
165
+ const restart = new Float64Array(nodes.length);
166
+ for (const id of seedIds) {
167
+ restart[indexOf.get(id)] = personalization.get(id) ?? 0;
168
+ }
169
+ // Power iteration from the personalization vector.
170
+ let rank = Float64Array.from(restart);
171
+ let next = new Float64Array(nodes.length);
172
+ for (let iter = 0; iter < maxIterations; iter += 1) {
173
+ next.fill(0);
174
+ let danglingMass = 0;
175
+ for (let i = 0; i < nodes.length; i += 1) {
176
+ const r = rank[i];
177
+ if (r === 0)
178
+ continue;
179
+ const neighbours = adjacency[i];
180
+ if (neighbours.length === 0) {
181
+ // Dangling node: its mass would leak out of the subgraph, so
182
+ // redistribute it through the personalization vector below.
183
+ danglingMass += r;
184
+ }
185
+ else {
186
+ const share = (damping * r) / neighbours.length;
187
+ for (const j of neighbours)
188
+ next[j] += share;
189
+ }
190
+ }
191
+ let delta = 0;
192
+ for (let i = 0; i < nodes.length; i += 1) {
193
+ const value = next[i] +
194
+ (1 - damping) * restart[i] +
195
+ damping * danglingMass * restart[i];
196
+ delta += Math.abs(value - rank[i]);
197
+ next[i] = value;
198
+ }
199
+ const tmp = rank;
200
+ rank = next;
201
+ next = tmp;
202
+ if (delta < tolerance)
203
+ break;
204
+ }
205
+ for (let i = 0; i < nodes.length; i += 1)
206
+ scores.set(nodes[i], rank[i]);
207
+ return scores;
208
+ }
209
+ /** De-duplicated, sorted copy of a neighbour list (deterministic order). */
210
+ function uniqueSorted(ids) {
211
+ return [...new Set(ids)].sort();
212
+ }
213
+ //# sourceMappingURL=graph-expansion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-expansion.js","sourceRoot":"","sources":["../src/graph-expansion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Render a memory graph snapshot as a Mermaid flowchart.
3
+ *
4
+ * Shared by the CLI (`memos graph --mermaid`) and the MCP server
5
+ * (`memos://graph` resource) so both emit identical, GitHub-renderable
6
+ * diagrams. Node labels are sanitized for Mermaid's `["..."]` syntax and
7
+ * ids are rewritten to guaranteed-valid, collision-free identifiers.
8
+ *
9
+ * @module @mem-os/graph-mermaid
10
+ */
11
+ import type { GraphSnapshot } from "./types.js";
12
+ export declare function graphToMermaid(graph: GraphSnapshot): string;
13
+ //# sourceMappingURL=graph-mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-mermaid.d.ts","sourceRoot":"","sources":["../src/graph-mermaid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAsB3D"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Render a memory graph snapshot as a Mermaid flowchart.
3
+ *
4
+ * Shared by the CLI (`memos graph --mermaid`) and the MCP server
5
+ * (`memos://graph` resource) so both emit identical, GitHub-renderable
6
+ * diagrams. Node labels are sanitized for Mermaid's `["..."]` syntax and
7
+ * ids are rewritten to guaranteed-valid, collision-free identifiers.
8
+ *
9
+ * @module @mem-os/graph-mermaid
10
+ */
11
+ export function graphToMermaid(graph) {
12
+ const mermaidIds = new Map();
13
+ const lines = ["graph TD"];
14
+ graph.nodes.forEach((node, i) => {
15
+ const safe = `m${i}_${node.id.replace(/[^a-zA-Z0-9]/g, "").slice(0, 8)}`;
16
+ mermaidIds.set(node.id, safe);
17
+ const label = `${node.type}: ${node.content.slice(0, 60)}`
18
+ .replace(/"/g, "'")
19
+ .replace(/[[\]{}()<>]/g, "");
20
+ lines.push(` ${safe}["${label}"]`);
21
+ });
22
+ for (const edge of graph.edges) {
23
+ const source = mermaidIds.get(edge.sourceId);
24
+ const target = mermaidIds.get(edge.targetId);
25
+ if (!source || !target)
26
+ continue;
27
+ const relation = edge.relation.replace(/[^\w-]/g, "_") || "related";
28
+ lines.push(` ${source} -->|${relation}| ${target}`);
29
+ }
30
+ return lines.join("\n");
31
+ }
32
+ //# sourceMappingURL=graph-mermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-mermaid.js","sourceRoot":"","sources":["../src/graph-mermaid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,MAAM,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC;IAErC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;aACvD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;aAClB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,SAAS;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,QAAQ,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
memos/_js/graph.d.ts ADDED
@@ -0,0 +1,170 @@
1
+ /**
2
+ * In-memory graph engine for MemOS.
3
+ *
4
+ * Maintains an adjacency-list representation of the memory graph for
5
+ * fast traversal, clustering, and auto-linking. The graph mirrors
6
+ * what is persisted in the storage backend.
7
+ *
8
+ * @module @memos/graph
9
+ */
10
+ import type { MemoryNode, MemoryEdge, CreateEdgeInput } from "./types.js";
11
+ /**
12
+ * Default per-node cap on edges created by `autoLink()`.
13
+ *
14
+ * Without a cap, a corpus of similar memories converges to a complete
15
+ * graph (K_N): every new node links to every existing one, so edge
16
+ * writes grow quadratically and dominate ingestion time. 16 links is
17
+ * enough to preserve local cluster structure for `findClusters()` /
18
+ * `injectContext()` while keeping bulk ingestion near-linear. Pass `0`
19
+ * to `autoLink()` to restore uncapped (legacy) behavior.
20
+ */
21
+ export declare const DEFAULT_AUTO_LINK_CAP = 16;
22
+ /**
23
+ * Bag-of-words cosine similarity between two strings.
24
+ *
25
+ * This is intentionally lightweight — no external embedding model needed.
26
+ * For production use-cases requiring semantic similarity, supply your own
27
+ * embedding-based linker via the adapter interface.
28
+ *
29
+ * @param a — First text.
30
+ * @param b — Second text.
31
+ * @returns Cosine similarity in [0, 1].
32
+ */
33
+ export declare function textSimilarity(a: string, b: string): number;
34
+ /**
35
+ * Cosine similarity of two pre-tokenized bags (binary term frequency).
36
+ * Exported for reuse by GraphEngine.autoLink, which tokenizes the new node
37
+ * once and reuses cached token sets for existing nodes instead of
38
+ * re-tokenizing both sides on every comparison.
39
+ */
40
+ export declare function tokenSetSimilarity(tokensA: Set<string>, tokensB: Set<string>): number;
41
+ /**
42
+ * Graph engine managing the in-memory representation of the memory graph.
43
+ */
44
+ export declare class GraphEngine {
45
+ /** Adjacency list: nodeId → Set of edge IDs. */
46
+ private adjacency;
47
+ /** Edge lookup: edgeId → MemoryEdge. */
48
+ private edges;
49
+ /** Node lookup: nodeId → MemoryNode. */
50
+ private nodes;
51
+ /**
52
+ * Lazily-computed bag-of-words token sets per node, for autoLink().
53
+ * Populated on first use and invalidated on update/remove — avoids
54
+ * re-tokenizing every existing node on every store().
55
+ */
56
+ private tokenCache;
57
+ /**
58
+ * Add a node to the graph.
59
+ *
60
+ * @param node — The memory node to add.
61
+ */
62
+ addNode(node: MemoryNode): void;
63
+ /**
64
+ * Remove a node and all its connected edges from the graph.
65
+ *
66
+ * @param id — Node ID to remove.
67
+ * @returns `true` if the node existed.
68
+ */
69
+ removeNode(id: string): boolean;
70
+ /**
71
+ * Update a node in the graph.
72
+ */
73
+ updateNode(node: MemoryNode): void;
74
+ /**
75
+ * Add an edge to the graph.
76
+ *
77
+ * @param input — Edge creation input. `validFrom`/`validTo` define the
78
+ * bitemporal event-time validity interval (`createdAt` stays the
79
+ * transaction/ingest time); omitted bounds are open-ended.
80
+ * @returns The created edge.
81
+ */
82
+ addEdge(input: CreateEdgeInput): MemoryEdge;
83
+ /**
84
+ * Remove an edge from the graph.
85
+ */
86
+ removeEdge(id: string): boolean;
87
+ /**
88
+ * Lazily-computed bag-of-words token set for a node, cached across
89
+ * autoLink() calls. The cache is invalidated on add/update/remove/clear.
90
+ */
91
+ private tokensFor;
92
+ /**
93
+ * Get all edges connected to a node.
94
+ */
95
+ getEdgesForNode(nodeId: string): MemoryEdge[];
96
+ /**
97
+ * Get neighbours of a node (nodes connected by an edge).
98
+ */
99
+ getNeighbours(nodeId: string): MemoryNode[];
100
+ /**
101
+ * Attempt to auto-link a node to existing nodes based on text similarity.
102
+ *
103
+ * Cost control: linking is O(N) per store, and every accepted link is a
104
+ * persisted row. Without a per-node cap a repetitive corpus converges to
105
+ * a complete graph — K_N edges for N nodes (measured: 100 similar nodes
106
+ * → 4,950 edges, and 300 stores took 2.7s vs 0.1s with linking off).
107
+ * The cap keeps the most similar `maxLinksPerNode` edges and skips the
108
+ * long tail, which preserves cluster structure (`findClusters`,
109
+ * `injectContext`) while making ingestion cost linear-ish in practice.
110
+ *
111
+ * @param node — The node to link.
112
+ * @param threshold — Minimum similarity score to create an edge [0, 1].
113
+ * @param maxLinksPerNode — Hard cap on edges created per call.
114
+ * `0` disables the cap (legacy complete-graph behavior).
115
+ * @returns Array of created edges.
116
+ */
117
+ autoLink(node: MemoryNode, threshold: number, maxLinksPerNode?: number): MemoryEdge[];
118
+ /**
119
+ * Find clusters of strongly connected nodes using a simple BFS approach.
120
+ *
121
+ * @param minClusterSize — Minimum number of nodes per cluster.
122
+ * @returns Array of clusters (each cluster is an array of node IDs).
123
+ */
124
+ findClusters(minClusterSize?: number): string[][];
125
+ /**
126
+ * Get a node by ID.
127
+ */
128
+ getNode(id: string): MemoryNode | undefined;
129
+ /**
130
+ * Get all nodes.
131
+ */
132
+ getAllNodes(): MemoryNode[];
133
+ /**
134
+ * Get all edges.
135
+ */
136
+ getAllEdges(): MemoryEdge[];
137
+ /**
138
+ * Bitemporal as-of read: edges whose event-time validity interval covers
139
+ * `timeMs`. NULL bounds are open-ended. Superseded edges (whose
140
+ * `validTo` was stamped by invalidation) are excluded for timestamps
141
+ * at or after their `validTo`, but returned by as-of reads at earlier
142
+ * times — nothing is deleted.
143
+ *
144
+ * @param timeMs — The as-of timestamp (Unix ms).
145
+ */
146
+ edgesValidAt(timeMs: number): MemoryEdge[];
147
+ /**
148
+ * Close (invalidate) the currently-valid edges incident to a node by
149
+ * stamping `validTo`. In-memory edges are mutated in place so the mirror
150
+ * stays consistent with storage; nothing is deleted (add-only).
151
+ *
152
+ * @param nodeId — Node whose incident edges to close.
153
+ * @param timeMs — The invalidation timestamp (Unix ms), usually `now`.
154
+ * @returns The edges that were closed.
155
+ */
156
+ closeEdgesForNode(nodeId: string, timeMs: number): MemoryEdge[];
157
+ /**
158
+ * Node count.
159
+ */
160
+ get size(): number;
161
+ /**
162
+ * Clear the entire graph.
163
+ */
164
+ clear(): void;
165
+ }
166
+ /**
167
+ * Generate a UUID v4.
168
+ */
169
+ export declare function generateId(): string;
170
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,MAAM,CAYR;AAmID;;GAEG;AACH,qBAAa,WAAW;IACtB,gDAAgD;IAChD,OAAO,CAAC,SAAS,CAAuC;IACxD,wCAAwC;IACxC,OAAO,CAAC,KAAK,CAAsC;IACnD,wCAAwC;IACxC,OAAO,CAAC,KAAK,CAAsC;IACnD;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAkC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAO9B;IAED;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAe9B;IAED;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAIjC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA0B1C;IAED;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQ9B;IAED;;;OAGG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAU5C;IAED;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAe1C;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CACN,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,SAAwB,GACtC,UAAU,EAAE,CAoCd;IAED;;;;;OAKG;IACH,YAAY,CAAC,cAAc,SAAI,GAAG,MAAM,EAAE,EAAE,CA4B3C;IAED;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE1C;IAED;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE,CAE1B;IAED;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE,CAE1B;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAIzC;IAED;;;;;;;;OAQG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAS9D;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAKZ;CACF;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC"}