@prmichaelsen/remember-core 0.12.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 (198) hide show
  1. package/README.md +100 -0
  2. package/dist/collections/composite-ids.d.ts +47 -0
  3. package/dist/collections/composite-ids.d.ts.map +1 -0
  4. package/dist/collections/composite-ids.js +97 -0
  5. package/dist/collections/composite-ids.js.map +1 -0
  6. package/dist/collections/dot-notation.d.ts +37 -0
  7. package/dist/collections/dot-notation.d.ts.map +1 -0
  8. package/dist/collections/dot-notation.js +100 -0
  9. package/dist/collections/dot-notation.js.map +1 -0
  10. package/dist/collections/index.d.ts +7 -0
  11. package/dist/collections/index.d.ts.map +1 -0
  12. package/dist/collections/index.js +7 -0
  13. package/dist/collections/index.js.map +1 -0
  14. package/dist/collections/tracking-arrays.d.ts +28 -0
  15. package/dist/collections/tracking-arrays.d.ts.map +1 -0
  16. package/dist/collections/tracking-arrays.js +67 -0
  17. package/dist/collections/tracking-arrays.js.map +1 -0
  18. package/dist/config/debug.d.ts +36 -0
  19. package/dist/config/debug.d.ts.map +1 -0
  20. package/dist/config/debug.js +48 -0
  21. package/dist/config/debug.js.map +1 -0
  22. package/dist/config/environment.d.ts +71 -0
  23. package/dist/config/environment.d.ts.map +1 -0
  24. package/dist/config/environment.js +57 -0
  25. package/dist/config/environment.js.map +1 -0
  26. package/dist/config/index.d.ts +9 -0
  27. package/dist/config/index.d.ts.map +1 -0
  28. package/dist/config/index.js +27 -0
  29. package/dist/config/index.js.map +1 -0
  30. package/dist/constants/content-types.d.ts +60 -0
  31. package/dist/constants/content-types.d.ts.map +1 -0
  32. package/dist/constants/content-types.js +450 -0
  33. package/dist/constants/content-types.js.map +1 -0
  34. package/dist/constants/index.d.ts +3 -0
  35. package/dist/constants/index.d.ts.map +1 -0
  36. package/dist/constants/index.js +3 -0
  37. package/dist/constants/index.js.map +1 -0
  38. package/dist/database/firestore/index.d.ts +8 -0
  39. package/dist/database/firestore/index.d.ts.map +1 -0
  40. package/dist/database/firestore/index.js +10 -0
  41. package/dist/database/firestore/index.js.map +1 -0
  42. package/dist/database/firestore/init.d.ts +51 -0
  43. package/dist/database/firestore/init.d.ts.map +1 -0
  44. package/dist/database/firestore/init.js +92 -0
  45. package/dist/database/firestore/init.js.map +1 -0
  46. package/dist/database/firestore/paths.d.ts +54 -0
  47. package/dist/database/firestore/paths.d.ts.map +1 -0
  48. package/dist/database/firestore/paths.js +103 -0
  49. package/dist/database/firestore/paths.js.map +1 -0
  50. package/dist/database/weaviate/client.d.ts +68 -0
  51. package/dist/database/weaviate/client.d.ts.map +1 -0
  52. package/dist/database/weaviate/client.js +157 -0
  53. package/dist/database/weaviate/client.js.map +1 -0
  54. package/dist/database/weaviate/index.d.ts +6 -0
  55. package/dist/database/weaviate/index.d.ts.map +1 -0
  56. package/dist/database/weaviate/index.js +9 -0
  57. package/dist/database/weaviate/index.js.map +1 -0
  58. package/dist/database/weaviate/schema.d.ts +22 -0
  59. package/dist/database/weaviate/schema.d.ts.map +1 -0
  60. package/dist/database/weaviate/schema.js +50 -0
  61. package/dist/database/weaviate/schema.js.map +1 -0
  62. package/dist/database/weaviate/space-schema.d.ts +36 -0
  63. package/dist/database/weaviate/space-schema.d.ts.map +1 -0
  64. package/dist/database/weaviate/space-schema.js +65 -0
  65. package/dist/database/weaviate/space-schema.js.map +1 -0
  66. package/dist/database/weaviate/v2-collections.d.ts +160 -0
  67. package/dist/database/weaviate/v2-collections.d.ts.map +1 -0
  68. package/dist/database/weaviate/v2-collections.js +275 -0
  69. package/dist/database/weaviate/v2-collections.js.map +1 -0
  70. package/dist/errors/app-errors.d.ts +64 -0
  71. package/dist/errors/app-errors.d.ts.map +1 -0
  72. package/dist/errors/app-errors.js +90 -0
  73. package/dist/errors/app-errors.js.map +1 -0
  74. package/dist/errors/base.error.d.ts +15 -0
  75. package/dist/errors/base.error.d.ts.map +1 -0
  76. package/dist/errors/base.error.js +25 -0
  77. package/dist/errors/base.error.js.map +1 -0
  78. package/dist/errors/index.d.ts +19 -0
  79. package/dist/errors/index.d.ts.map +1 -0
  80. package/dist/errors/index.js +25 -0
  81. package/dist/errors/index.js.map +1 -0
  82. package/dist/index.d.ts +8 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +9 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/services/confirmation-token.service.d.ts +56 -0
  87. package/dist/services/confirmation-token.service.d.ts.map +1 -0
  88. package/dist/services/confirmation-token.service.js +118 -0
  89. package/dist/services/confirmation-token.service.js.map +1 -0
  90. package/dist/services/credentials-provider.d.ts +25 -0
  91. package/dist/services/credentials-provider.d.ts.map +1 -0
  92. package/dist/services/credentials-provider.js +31 -0
  93. package/dist/services/credentials-provider.js.map +1 -0
  94. package/dist/services/index.d.ts +11 -0
  95. package/dist/services/index.d.ts.map +1 -0
  96. package/dist/services/index.js +17 -0
  97. package/dist/services/index.js.map +1 -0
  98. package/dist/services/memory.service.d.ts +129 -0
  99. package/dist/services/memory.service.d.ts.map +1 -0
  100. package/dist/services/memory.service.js +294 -0
  101. package/dist/services/memory.service.js.map +1 -0
  102. package/dist/services/preferences.service.d.ts +27 -0
  103. package/dist/services/preferences.service.d.ts.map +1 -0
  104. package/dist/services/preferences.service.js +106 -0
  105. package/dist/services/preferences.service.js.map +1 -0
  106. package/dist/services/relationship.service.d.ts +75 -0
  107. package/dist/services/relationship.service.d.ts.map +1 -0
  108. package/dist/services/relationship.service.js +211 -0
  109. package/dist/services/relationship.service.js.map +1 -0
  110. package/dist/services/space-config.service.d.ts +22 -0
  111. package/dist/services/space-config.service.d.ts.map +1 -0
  112. package/dist/services/space-config.service.js +50 -0
  113. package/dist/services/space-config.service.js.map +1 -0
  114. package/dist/services/space.service.d.ts +160 -0
  115. package/dist/services/space.service.d.ts.map +1 -0
  116. package/dist/services/space.service.js +815 -0
  117. package/dist/services/space.service.js.map +1 -0
  118. package/dist/testing/index.d.ts +8 -0
  119. package/dist/testing/index.d.ts.map +1 -0
  120. package/dist/testing/index.js +8 -0
  121. package/dist/testing/index.js.map +1 -0
  122. package/dist/testing/test-data-generator.d.ts +100 -0
  123. package/dist/testing/test-data-generator.d.ts.map +1 -0
  124. package/dist/testing/test-data-generator.js +194 -0
  125. package/dist/testing/test-data-generator.js.map +1 -0
  126. package/dist/testing/weaviate-mock.d.ts +317 -0
  127. package/dist/testing/weaviate-mock.d.ts.map +1 -0
  128. package/dist/testing/weaviate-mock.js +233 -0
  129. package/dist/testing/weaviate-mock.js.map +1 -0
  130. package/dist/types/auth.types.d.ts +36 -0
  131. package/dist/types/auth.types.d.ts.map +1 -0
  132. package/dist/types/auth.types.js +9 -0
  133. package/dist/types/auth.types.js.map +1 -0
  134. package/dist/types/context.types.d.ts +78 -0
  135. package/dist/types/context.types.d.ts.map +1 -0
  136. package/dist/types/context.types.js +6 -0
  137. package/dist/types/context.types.js.map +1 -0
  138. package/dist/types/index.d.ts +14 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +6 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/types/llm.types.d.ts +8 -0
  143. package/dist/types/llm.types.d.ts.map +1 -0
  144. package/dist/types/llm.types.js +8 -0
  145. package/dist/types/llm.types.js.map +1 -0
  146. package/dist/types/memory.types.d.ts +83 -0
  147. package/dist/types/memory.types.d.ts.map +1 -0
  148. package/dist/types/memory.types.js +6 -0
  149. package/dist/types/memory.types.js.map +1 -0
  150. package/dist/types/preferences.types.d.ts +285 -0
  151. package/dist/types/preferences.types.d.ts.map +1 -0
  152. package/dist/types/preferences.types.js +195 -0
  153. package/dist/types/preferences.types.js.map +1 -0
  154. package/dist/types/result.types.d.ts +60 -0
  155. package/dist/types/result.types.d.ts.map +1 -0
  156. package/dist/types/result.types.js +82 -0
  157. package/dist/types/result.types.js.map +1 -0
  158. package/dist/types/search.types.d.ts +49 -0
  159. package/dist/types/search.types.d.ts.map +1 -0
  160. package/dist/types/search.types.js +6 -0
  161. package/dist/types/search.types.js.map +1 -0
  162. package/dist/types/shared.types.d.ts +91 -0
  163. package/dist/types/shared.types.d.ts.map +1 -0
  164. package/dist/types/shared.types.js +57 -0
  165. package/dist/types/shared.types.js.map +1 -0
  166. package/dist/types/space.types.d.ts +82 -0
  167. package/dist/types/space.types.d.ts.map +1 -0
  168. package/dist/types/space.types.js +18 -0
  169. package/dist/types/space.types.js.map +1 -0
  170. package/dist/types/utils.types.d.ts +51 -0
  171. package/dist/types/utils.types.d.ts.map +1 -0
  172. package/dist/types/utils.types.js +4 -0
  173. package/dist/types/utils.types.js.map +1 -0
  174. package/dist/utils/auth-helpers.d.ts +23 -0
  175. package/dist/utils/auth-helpers.d.ts.map +1 -0
  176. package/dist/utils/auth-helpers.js +31 -0
  177. package/dist/utils/auth-helpers.js.map +1 -0
  178. package/dist/utils/debug.d.ts +45 -0
  179. package/dist/utils/debug.d.ts.map +1 -0
  180. package/dist/utils/debug.js +112 -0
  181. package/dist/utils/debug.js.map +1 -0
  182. package/dist/utils/error-handler.d.ts +46 -0
  183. package/dist/utils/error-handler.d.ts.map +1 -0
  184. package/dist/utils/error-handler.js +63 -0
  185. package/dist/utils/error-handler.js.map +1 -0
  186. package/dist/utils/filters.d.ts +42 -0
  187. package/dist/utils/filters.d.ts.map +1 -0
  188. package/dist/utils/filters.js +132 -0
  189. package/dist/utils/filters.js.map +1 -0
  190. package/dist/utils/index.d.ts +9 -0
  191. package/dist/utils/index.d.ts.map +1 -0
  192. package/dist/utils/index.js +9 -0
  193. package/dist/utils/index.js.map +1 -0
  194. package/dist/utils/logger.d.ts +22 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +68 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/package.json +100 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Weaviate Schema Definitions for Memory Collection Pattern v2.
3
+ * Ported from remember-mcp/src/schema/v2-collections.ts
4
+ *
5
+ * Defines schemas for the three collection types:
6
+ * 1. Memory_users_{userId} - User's private memories
7
+ * 2. Memory_spaces_public - Shared space memories
8
+ * 3. Memory_groups_{groupId} - Group memories
9
+ */
10
+ import type { WeaviateClient } from 'weaviate-client';
11
+ /**
12
+ * Create schema for a user's private memory collection
13
+ */
14
+ export declare function createUserCollectionSchema(userId: string): {
15
+ name: string;
16
+ description: string;
17
+ vectorizers: import("weaviate-client").VectorConfigCreate<never, undefined, "hnsw", "text2vec-openai">;
18
+ properties: ({
19
+ name: string;
20
+ dataType: "text";
21
+ } | {
22
+ name: string;
23
+ dataType: "text[]";
24
+ } | {
25
+ name: string;
26
+ dataType: "date";
27
+ } | {
28
+ name: string;
29
+ dataType: "int";
30
+ } | {
31
+ name: string;
32
+ dataType: "number";
33
+ })[];
34
+ invertedIndex: {
35
+ bm25?: {
36
+ k1?: number | undefined;
37
+ b?: number | undefined;
38
+ } | undefined;
39
+ cleanupIntervalSeconds?: number | undefined;
40
+ indexTimestamps?: boolean | undefined;
41
+ indexPropertyLength?: boolean | undefined;
42
+ indexNullState?: boolean | undefined;
43
+ stopwords?: {
44
+ preset?: string | undefined;
45
+ additions?: (string | undefined)[] | undefined;
46
+ removals?: (string | undefined)[] | undefined;
47
+ } | undefined;
48
+ };
49
+ };
50
+ /**
51
+ * Create schema for the shared spaces collection
52
+ */
53
+ export declare function createSpaceCollectionSchema(): {
54
+ name: string;
55
+ description: string;
56
+ vectorizers: import("weaviate-client").VectorConfigCreate<never, undefined, "hnsw", "text2vec-openai">;
57
+ properties: ({
58
+ name: string;
59
+ dataType: "text";
60
+ } | {
61
+ name: string;
62
+ dataType: "text[]";
63
+ } | {
64
+ name: string;
65
+ dataType: "date";
66
+ } | {
67
+ name: string;
68
+ dataType: "int";
69
+ } | {
70
+ name: string;
71
+ dataType: "number";
72
+ })[];
73
+ invertedIndex: {
74
+ bm25?: {
75
+ k1?: number | undefined;
76
+ b?: number | undefined;
77
+ } | undefined;
78
+ cleanupIntervalSeconds?: number | undefined;
79
+ indexTimestamps?: boolean | undefined;
80
+ indexPropertyLength?: boolean | undefined;
81
+ indexNullState?: boolean | undefined;
82
+ stopwords?: {
83
+ preset?: string | undefined;
84
+ additions?: (string | undefined)[] | undefined;
85
+ removals?: (string | undefined)[] | undefined;
86
+ } | undefined;
87
+ };
88
+ };
89
+ /**
90
+ * Create schema for a group memory collection
91
+ */
92
+ export declare function createGroupCollectionSchema(groupId: string): {
93
+ name: string;
94
+ description: string;
95
+ vectorizers: import("weaviate-client").VectorConfigCreate<never, undefined, "hnsw", "text2vec-openai">;
96
+ properties: ({
97
+ name: string;
98
+ dataType: "text";
99
+ } | {
100
+ name: string;
101
+ dataType: "text[]";
102
+ } | {
103
+ name: string;
104
+ dataType: "date";
105
+ } | {
106
+ name: string;
107
+ dataType: "int";
108
+ } | {
109
+ name: string;
110
+ dataType: "number";
111
+ })[];
112
+ invertedIndex: {
113
+ bm25?: {
114
+ k1?: number | undefined;
115
+ b?: number | undefined;
116
+ } | undefined;
117
+ cleanupIntervalSeconds?: number | undefined;
118
+ indexTimestamps?: boolean | undefined;
119
+ indexPropertyLength?: boolean | undefined;
120
+ indexNullState?: boolean | undefined;
121
+ stopwords?: {
122
+ preset?: string | undefined;
123
+ additions?: (string | undefined)[] | undefined;
124
+ removals?: (string | undefined)[] | undefined;
125
+ } | undefined;
126
+ };
127
+ };
128
+ /**
129
+ * Ensure a user collection exists (create if needed)
130
+ */
131
+ export declare function ensureUserCollection(client: WeaviateClient, userId: string): Promise<boolean>;
132
+ /**
133
+ * Ensure the spaces collection exists (create if needed)
134
+ */
135
+ export declare function ensureSpacesCollection(client: WeaviateClient): Promise<boolean>;
136
+ /**
137
+ * Ensure a group collection exists (create if needed)
138
+ */
139
+ export declare function ensureGroupCollection(client: WeaviateClient, groupId: string): Promise<boolean>;
140
+ /**
141
+ * Get all property names for user collections
142
+ */
143
+ export declare function getUserCollectionProperties(): string[];
144
+ /**
145
+ * Get all property names for space/group collections
146
+ */
147
+ export declare function getPublishedCollectionProperties(): string[];
148
+ /**
149
+ * Validate that a collection name matches the expected v2 pattern
150
+ */
151
+ export declare function validateV2CollectionName(collectionName: string): boolean;
152
+ /**
153
+ * Get the collection type from a collection name
154
+ */
155
+ export declare function getCollectionType(collectionName: string): 'users' | 'spaces' | 'groups';
156
+ /**
157
+ * Extract the ID from a user or group collection name
158
+ */
159
+ export declare function extractIdFromCollectionName(collectionName: string): string | null;
160
+ //# sourceMappingURL=v2-collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-collections.d.ts","sourceRoot":"","sources":["../../../src/database/weaviate/v2-collections.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgItD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBxD;AAED;;GAEG;AACH,wBAAgB,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB1C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB1D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CASrF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,MAAM,EAAE,CAK3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAiBxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAKvF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKjF"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Weaviate Schema Definitions for Memory Collection Pattern v2.
3
+ * Ported from remember-mcp/src/schema/v2-collections.ts
4
+ *
5
+ * Defines schemas for the three collection types:
6
+ * 1. Memory_users_{userId} - User's private memories
7
+ * 2. Memory_spaces_public - Shared space memories
8
+ * 3. Memory_groups_{groupId} - Group memories
9
+ */
10
+ import { configure } from 'weaviate-client';
11
+ /**
12
+ * Common properties shared across all memory collection types.
13
+ *
14
+ * Note: 'id' is NOT included — it is reserved by Weaviate for the UUID primary key.
15
+ */
16
+ const COMMON_MEMORY_PROPERTIES = [
17
+ // Core content
18
+ { name: 'content', dataType: configure.dataType.TEXT },
19
+ { name: 'content_type', dataType: configure.dataType.TEXT },
20
+ { name: 'title', dataType: configure.dataType.TEXT },
21
+ { name: 'summary', dataType: configure.dataType.TEXT },
22
+ { name: 'type', dataType: configure.dataType.TEXT }, // v1 compat (v2: content_type)
23
+ // Tracking arrays (v2 feature)
24
+ { name: 'space_ids', dataType: configure.dataType.TEXT_ARRAY },
25
+ { name: 'group_ids', dataType: configure.dataType.TEXT_ARRAY },
26
+ // Metadata
27
+ { name: 'created_at', dataType: configure.dataType.DATE },
28
+ { name: 'updated_at', dataType: configure.dataType.DATE },
29
+ { name: 'version', dataType: configure.dataType.INT },
30
+ // User context
31
+ { name: 'user_id', dataType: configure.dataType.TEXT },
32
+ // Document type (memory, relationship, comment)
33
+ { name: 'doc_type', dataType: configure.dataType.TEXT },
34
+ // Memory-specific fields
35
+ { name: 'tags', dataType: configure.dataType.TEXT_ARRAY },
36
+ { name: 'weight', dataType: configure.dataType.NUMBER },
37
+ { name: 'trust_score', dataType: configure.dataType.NUMBER },
38
+ { name: 'trust', dataType: configure.dataType.NUMBER }, // v1 compat (v2: trust_score)
39
+ { name: 'base_weight', dataType: configure.dataType.NUMBER },
40
+ { name: 'computed_weight', dataType: configure.dataType.NUMBER },
41
+ { name: 'confidence', dataType: configure.dataType.NUMBER },
42
+ { name: 'strength', dataType: configure.dataType.NUMBER },
43
+ // Location data (v2 names)
44
+ { name: 'location_name', dataType: configure.dataType.TEXT },
45
+ { name: 'location_lat', dataType: configure.dataType.NUMBER },
46
+ { name: 'location_lon', dataType: configure.dataType.NUMBER },
47
+ // Location data (v1 compat)
48
+ { name: 'location_gps_lat', dataType: configure.dataType.NUMBER },
49
+ { name: 'location_gps_lng', dataType: configure.dataType.NUMBER },
50
+ { name: 'location_address', dataType: configure.dataType.TEXT },
51
+ { name: 'location_city', dataType: configure.dataType.TEXT },
52
+ { name: 'location_country', dataType: configure.dataType.TEXT },
53
+ { name: 'location_source', dataType: configure.dataType.TEXT },
54
+ // Locale
55
+ { name: 'locale_language', dataType: configure.dataType.TEXT },
56
+ { name: 'locale_timezone', dataType: configure.dataType.TEXT },
57
+ // Context
58
+ { name: 'context_app', dataType: configure.dataType.TEXT },
59
+ { name: 'context_url', dataType: configure.dataType.TEXT },
60
+ { name: 'context_conversation_id', dataType: configure.dataType.TEXT },
61
+ { name: 'context_summary', dataType: configure.dataType.TEXT },
62
+ { name: 'context_timestamp', dataType: configure.dataType.DATE },
63
+ // Relationships (v2 names)
64
+ { name: 'relationship_ids', dataType: configure.dataType.TEXT_ARRAY },
65
+ { name: 'relationship_type', dataType: configure.dataType.TEXT },
66
+ { name: 'related_memory_ids', dataType: configure.dataType.TEXT_ARRAY },
67
+ { name: 'observation', dataType: configure.dataType.TEXT },
68
+ // Relationships (v1 compat)
69
+ { name: 'relationships', dataType: configure.dataType.TEXT_ARRAY },
70
+ { name: 'memory_ids', dataType: configure.dataType.TEXT_ARRAY },
71
+ // Access tracking
72
+ { name: 'access_count', dataType: configure.dataType.NUMBER },
73
+ { name: 'last_accessed_at', dataType: configure.dataType.DATE },
74
+ // References & templates
75
+ { name: 'references', dataType: configure.dataType.TEXT_ARRAY },
76
+ { name: 'template_id', dataType: configure.dataType.TEXT },
77
+ // Comments (Phase 1)
78
+ { name: 'parent_id', dataType: configure.dataType.TEXT },
79
+ { name: 'thread_root_id', dataType: configure.dataType.TEXT },
80
+ { name: 'moderation_flags', dataType: configure.dataType.TEXT_ARRAY },
81
+ // Soft delete
82
+ { name: 'deleted_at', dataType: configure.dataType.DATE },
83
+ { name: 'deleted_by', dataType: configure.dataType.TEXT },
84
+ { name: 'deletion_reason', dataType: configure.dataType.TEXT },
85
+ ];
86
+ /**
87
+ * Additional properties for published memories (spaces and groups)
88
+ */
89
+ const PUBLISHED_MEMORY_PROPERTIES = [
90
+ // Publication metadata
91
+ { name: 'published_at', dataType: configure.dataType.DATE },
92
+ { name: 'revised_at', dataType: configure.dataType.DATE },
93
+ // Attribution
94
+ { name: 'author_id', dataType: configure.dataType.TEXT },
95
+ { name: 'ghost_id', dataType: configure.dataType.TEXT },
96
+ { name: 'attribution', dataType: configure.dataType.TEXT },
97
+ // Discovery
98
+ { name: 'discovery_count', dataType: configure.dataType.INT },
99
+ // Revision tracking
100
+ { name: 'revision_count', dataType: configure.dataType.INT },
101
+ { name: 'original_memory_id', dataType: configure.dataType.TEXT },
102
+ // Moderation (nullable — null defaults to approved)
103
+ { name: 'moderation_status', dataType: configure.dataType.TEXT },
104
+ { name: 'moderated_by', dataType: configure.dataType.TEXT },
105
+ { name: 'moderated_at', dataType: configure.dataType.DATE },
106
+ // Memory-level ACL (nullable — null defaults to owner_only semantics)
107
+ { name: 'write_mode', dataType: configure.dataType.TEXT },
108
+ { name: 'owner_id', dataType: configure.dataType.TEXT },
109
+ { name: 'overwrite_allowed_ids', dataType: configure.dataType.TEXT_ARRAY },
110
+ { name: 'last_revised_by', dataType: configure.dataType.TEXT },
111
+ // Legacy compatibility (deprecated but kept for migration)
112
+ { name: 'spaces', dataType: configure.dataType.TEXT_ARRAY },
113
+ { name: 'space_id', dataType: configure.dataType.TEXT },
114
+ { name: 'space_memory_id', dataType: configure.dataType.TEXT },
115
+ ];
116
+ /**
117
+ * Create schema for a user's private memory collection
118
+ */
119
+ export function createUserCollectionSchema(userId) {
120
+ const collectionName = `Memory_users_${userId}`;
121
+ return {
122
+ name: collectionName,
123
+ description: `Private memory collection for user: ${userId}`,
124
+ vectorizers: configure.vectorizer.text2VecOpenAI({
125
+ model: 'text-embedding-3-small',
126
+ dimensions: 1536,
127
+ vectorizeCollectionName: false,
128
+ }),
129
+ properties: COMMON_MEMORY_PROPERTIES,
130
+ invertedIndex: configure.invertedIndex({
131
+ indexNullState: true,
132
+ indexPropertyLength: true,
133
+ indexTimestamps: true,
134
+ }),
135
+ };
136
+ }
137
+ /**
138
+ * Create schema for the shared spaces collection
139
+ */
140
+ export function createSpaceCollectionSchema() {
141
+ const collectionName = 'Memory_spaces_public';
142
+ return {
143
+ name: collectionName,
144
+ description: 'Shared memory collection for all public spaces',
145
+ vectorizers: configure.vectorizer.text2VecOpenAI({
146
+ model: 'text-embedding-3-small',
147
+ dimensions: 1536,
148
+ vectorizeCollectionName: false,
149
+ }),
150
+ properties: [
151
+ ...COMMON_MEMORY_PROPERTIES,
152
+ ...PUBLISHED_MEMORY_PROPERTIES,
153
+ ],
154
+ invertedIndex: configure.invertedIndex({
155
+ indexNullState: true,
156
+ indexPropertyLength: true,
157
+ indexTimestamps: true,
158
+ }),
159
+ };
160
+ }
161
+ /**
162
+ * Create schema for a group memory collection
163
+ */
164
+ export function createGroupCollectionSchema(groupId) {
165
+ const collectionName = `Memory_groups_${groupId}`;
166
+ return {
167
+ name: collectionName,
168
+ description: `Group memory collection for group: ${groupId}`,
169
+ vectorizers: configure.vectorizer.text2VecOpenAI({
170
+ model: 'text-embedding-3-small',
171
+ dimensions: 1536,
172
+ vectorizeCollectionName: false,
173
+ }),
174
+ properties: [
175
+ ...COMMON_MEMORY_PROPERTIES,
176
+ ...PUBLISHED_MEMORY_PROPERTIES,
177
+ ],
178
+ invertedIndex: configure.invertedIndex({
179
+ indexNullState: true,
180
+ indexPropertyLength: true,
181
+ indexTimestamps: true,
182
+ }),
183
+ };
184
+ }
185
+ /**
186
+ * Ensure a user collection exists (create if needed)
187
+ */
188
+ export async function ensureUserCollection(client, userId) {
189
+ const collectionName = `Memory_users_${userId}`;
190
+ const exists = await client.collections.exists(collectionName);
191
+ if (exists)
192
+ return false;
193
+ const schema = createUserCollectionSchema(userId);
194
+ await client.collections.create(schema);
195
+ return true;
196
+ }
197
+ /**
198
+ * Ensure the spaces collection exists (create if needed)
199
+ */
200
+ export async function ensureSpacesCollection(client) {
201
+ const collectionName = 'Memory_spaces_public';
202
+ const exists = await client.collections.exists(collectionName);
203
+ if (exists)
204
+ return false;
205
+ const schema = createSpaceCollectionSchema();
206
+ await client.collections.create(schema);
207
+ return true;
208
+ }
209
+ /**
210
+ * Ensure a group collection exists (create if needed)
211
+ */
212
+ export async function ensureGroupCollection(client, groupId) {
213
+ const collectionName = `Memory_groups_${groupId}`;
214
+ const exists = await client.collections.exists(collectionName);
215
+ if (exists)
216
+ return false;
217
+ const schema = createGroupCollectionSchema(groupId);
218
+ await client.collections.create(schema);
219
+ return true;
220
+ }
221
+ /**
222
+ * Get all property names for user collections
223
+ */
224
+ export function getUserCollectionProperties() {
225
+ return COMMON_MEMORY_PROPERTIES.map(prop => prop.name);
226
+ }
227
+ /**
228
+ * Get all property names for space/group collections
229
+ */
230
+ export function getPublishedCollectionProperties() {
231
+ return [
232
+ ...COMMON_MEMORY_PROPERTIES,
233
+ ...PUBLISHED_MEMORY_PROPERTIES,
234
+ ].map(prop => prop.name);
235
+ }
236
+ /**
237
+ * Validate that a collection name matches the expected v2 pattern
238
+ */
239
+ export function validateV2CollectionName(collectionName) {
240
+ const userPattern = /^Memory_users_[a-zA-Z0-9_-]+$/;
241
+ const spacePattern = /^Memory_spaces_public$/;
242
+ const groupPattern = /^Memory_groups_[a-zA-Z0-9_-]+$/;
243
+ if (userPattern.test(collectionName) ||
244
+ spacePattern.test(collectionName) ||
245
+ groupPattern.test(collectionName)) {
246
+ return true;
247
+ }
248
+ throw new Error(`Invalid v2 collection name: ${collectionName}. ` +
249
+ `Must match: Memory_users_{userId}, Memory_spaces_public, or Memory_groups_{groupId}`);
250
+ }
251
+ /**
252
+ * Get the collection type from a collection name
253
+ */
254
+ export function getCollectionType(collectionName) {
255
+ if (collectionName.startsWith('Memory_users_'))
256
+ return 'users';
257
+ if (collectionName === 'Memory_spaces_public')
258
+ return 'spaces';
259
+ if (collectionName.startsWith('Memory_groups_'))
260
+ return 'groups';
261
+ throw new Error(`Unknown collection type for: ${collectionName}`);
262
+ }
263
+ /**
264
+ * Extract the ID from a user or group collection name
265
+ */
266
+ export function extractIdFromCollectionName(collectionName) {
267
+ if (collectionName.startsWith('Memory_users_'))
268
+ return collectionName.replace('Memory_users_', '');
269
+ if (collectionName.startsWith('Memory_groups_'))
270
+ return collectionName.replace('Memory_groups_', '');
271
+ if (collectionName === 'Memory_spaces_public')
272
+ return null;
273
+ throw new Error(`Cannot extract ID from: ${collectionName}`);
274
+ }
275
+ //# sourceMappingURL=v2-collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-collections.js","sourceRoot":"","sources":["../../../src/database/weaviate/v2-collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { AppError } from './base.error.js';
2
+ /**
3
+ * Input validation failed — HTTP 400
4
+ */
5
+ export declare class ValidationError extends AppError {
6
+ readonly fields: Record<string, string[]>;
7
+ readonly kind: "validation";
8
+ constructor(message: string, fields?: Record<string, string[]>);
9
+ }
10
+ /**
11
+ * Resource not found — HTTP 404
12
+ */
13
+ export declare class NotFoundError extends AppError {
14
+ readonly resource: string;
15
+ readonly id: string;
16
+ readonly kind: "not_found";
17
+ constructor(resource: string, id: string);
18
+ }
19
+ /**
20
+ * Not authenticated — HTTP 401
21
+ */
22
+ export declare class UnauthorizedError extends AppError {
23
+ readonly kind: "unauthorized";
24
+ constructor(message?: string);
25
+ }
26
+ /**
27
+ * Authenticated but not permitted — HTTP 403
28
+ */
29
+ export declare class ForbiddenError extends AppError {
30
+ readonly requiredRole?: string | undefined;
31
+ readonly kind: "forbidden";
32
+ constructor(message?: string, requiredRole?: string | undefined);
33
+ }
34
+ /**
35
+ * Resource state conflict — HTTP 409
36
+ */
37
+ export declare class ConflictError extends AppError {
38
+ readonly kind: "conflict";
39
+ constructor(message: string, context?: Record<string, unknown>);
40
+ }
41
+ /**
42
+ * Too many requests — HTTP 429
43
+ */
44
+ export declare class RateLimitError extends AppError {
45
+ readonly retryAfterSeconds: number;
46
+ readonly kind: "rate_limit";
47
+ constructor(retryAfterSeconds: number);
48
+ }
49
+ /**
50
+ * External service failed (upstream API, database) — HTTP 502
51
+ */
52
+ export declare class ExternalError extends AppError {
53
+ readonly service: string;
54
+ readonly kind: "external";
55
+ constructor(message: string, service: string);
56
+ }
57
+ /**
58
+ * Unexpected internal error — HTTP 500
59
+ */
60
+ export declare class InternalError extends AppError {
61
+ readonly kind: "internal";
62
+ constructor(message?: string);
63
+ }
64
+ //# sourceMappingURL=app-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-errors.d.ts","sourceRoot":"","sources":["../../src/errors/app-errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;aAKzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAJlD,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;gBAGpC,OAAO,EAAE,MAAM,EACC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;CAIxD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;aAIvB,QAAQ,EAAE,MAAM;aAChB,EAAE,EAAE,MAAM;IAJ5B,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;gBAGnB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM;CAI7B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAU;gBAE5B,OAAO,SAA4B;CAGhD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;aAKxB,YAAY,CAAC,EAAE,MAAM;IAJvC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;gBAGnC,OAAO,SAAkB,EACT,YAAY,CAAC,EAAE,MAAM,YAAA;CAIxC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;gBAExB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAGnE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;aAGd,iBAAiB,EAAE,MAAM;IAFrD,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;gBAEV,iBAAiB,EAAE,MAAM;CAKtD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;aAKvB,OAAO,EAAE,MAAM;IAJjC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;gBAGlC,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,MAAM;CAIlC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;gBAExB,OAAO,SAA0B;CAG9C"}
@@ -0,0 +1,90 @@
1
+ // src/errors/app-errors.ts
2
+ // Pattern: Error Types (core-sdk.types-error.md)
3
+ import { AppError } from './base.error.js';
4
+ /**
5
+ * Input validation failed — HTTP 400
6
+ */
7
+ export class ValidationError extends AppError {
8
+ fields;
9
+ kind = 'validation';
10
+ constructor(message, fields = {}) {
11
+ super(message, { fields });
12
+ this.fields = fields;
13
+ }
14
+ }
15
+ /**
16
+ * Resource not found — HTTP 404
17
+ */
18
+ export class NotFoundError extends AppError {
19
+ resource;
20
+ id;
21
+ kind = 'not_found';
22
+ constructor(resource, id) {
23
+ super(`${resource} not found: ${id}`, { resource, id });
24
+ this.resource = resource;
25
+ this.id = id;
26
+ }
27
+ }
28
+ /**
29
+ * Not authenticated — HTTP 401
30
+ */
31
+ export class UnauthorizedError extends AppError {
32
+ kind = 'unauthorized';
33
+ constructor(message = 'Authentication required') {
34
+ super(message);
35
+ }
36
+ }
37
+ /**
38
+ * Authenticated but not permitted — HTTP 403
39
+ */
40
+ export class ForbiddenError extends AppError {
41
+ requiredRole;
42
+ kind = 'forbidden';
43
+ constructor(message = 'Access denied', requiredRole) {
44
+ super(message, { requiredRole });
45
+ this.requiredRole = requiredRole;
46
+ }
47
+ }
48
+ /**
49
+ * Resource state conflict — HTTP 409
50
+ */
51
+ export class ConflictError extends AppError {
52
+ kind = 'conflict';
53
+ constructor(message, context = {}) {
54
+ super(message, context);
55
+ }
56
+ }
57
+ /**
58
+ * Too many requests — HTTP 429
59
+ */
60
+ export class RateLimitError extends AppError {
61
+ retryAfterSeconds;
62
+ kind = 'rate_limit';
63
+ constructor(retryAfterSeconds) {
64
+ super(`Rate limit exceeded. Retry after ${retryAfterSeconds}s`, {
65
+ retryAfterSeconds,
66
+ });
67
+ this.retryAfterSeconds = retryAfterSeconds;
68
+ }
69
+ }
70
+ /**
71
+ * External service failed (upstream API, database) — HTTP 502
72
+ */
73
+ export class ExternalError extends AppError {
74
+ service;
75
+ kind = 'external';
76
+ constructor(message, service) {
77
+ super(message, { service });
78
+ this.service = service;
79
+ }
80
+ }
81
+ /**
82
+ * Unexpected internal error — HTTP 500
83
+ */
84
+ export class InternalError extends AppError {
85
+ kind = 'internal';
86
+ constructor(message = 'Internal server error') {
87
+ super(message);
88
+ }
89
+ }
90
+ //# sourceMappingURL=app-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-errors.js","sourceRoot":"","sources":["../../src/errors/app-errors.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,iDAAiD;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAKzB;IAJT,IAAI,GAAG,YAAqB,CAAC;IAEtC,YACE,OAAe,EACC,SAAmC,EAAE;QAErD,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAFX,WAAM,GAAN,MAAM,CAA+B;IAGvD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAIvB;IACA;IAJT,IAAI,GAAG,WAAoB,CAAC;IAErC,YACkB,QAAgB,EAChB,EAAU;QAE1B,KAAK,CAAC,GAAG,QAAQ,eAAe,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAHxC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,OAAE,GAAF,EAAE,CAAQ;IAG5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,GAAG,cAAuB,CAAC;IAExC,YAAY,OAAO,GAAG,yBAAyB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAKxB;IAJT,IAAI,GAAG,WAAoB,CAAC;IAErC,YACE,OAAO,GAAG,eAAe,EACT,YAAqB;QAErC,KAAK,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAFjB,iBAAY,GAAZ,YAAY,CAAS;IAGvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAChC,IAAI,GAAG,UAAmB,CAAC;IAEpC,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAGd;IAFnB,IAAI,GAAG,YAAqB,CAAC;IAEtC,YAA4B,iBAAyB;QACnD,KAAK,CAAC,oCAAoC,iBAAiB,GAAG,EAAE;YAC9D,iBAAiB;SAClB,CAAC,CAAC;QAHuB,sBAAiB,GAAjB,iBAAiB,CAAQ;IAIrD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAKvB;IAJT,IAAI,GAAG,UAAmB,CAAC;IAEpC,YACE,OAAe,EACC,OAAe;QAE/B,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAFZ,YAAO,GAAP,OAAO,CAAQ;IAGjC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAChC,IAAI,GAAG,UAAmB,CAAC;IAEpC,YAAY,OAAO,GAAG,uBAAuB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ export type ErrorKind = 'validation' | 'not_found' | 'unauthorized' | 'forbidden' | 'conflict' | 'rate_limit' | 'external' | 'internal';
2
+ export interface ErrorContext {
3
+ [key: string]: unknown;
4
+ }
5
+ /**
6
+ * Base class for all application errors.
7
+ * Always use a specific subclass — never throw AppError directly.
8
+ */
9
+ export declare abstract class AppError extends Error {
10
+ readonly context: ErrorContext;
11
+ abstract readonly kind: ErrorKind;
12
+ constructor(message: string, context?: ErrorContext);
13
+ toJSON(): object;
14
+ }
15
+ //# sourceMappingURL=base.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.error.d.ts","sourceRoot":"","sources":["../../src/errors/base.error.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,WAAW,GACX,cAAc,GACd,WAAW,GACX,UAAU,GACV,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,8BAAsB,QAAS,SAAQ,KAAK;aAKxB,OAAO,EAAE,YAAY;IAJvC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;gBAGhC,OAAO,EAAE,MAAM,EACC,OAAO,GAAE,YAAiB;IAQ5C,MAAM,IAAI,MAAM;CAQjB"}
@@ -0,0 +1,25 @@
1
+ // src/errors/base.error.ts
2
+ // Pattern: Error Types (core-sdk.types-error.md)
3
+ /**
4
+ * Base class for all application errors.
5
+ * Always use a specific subclass — never throw AppError directly.
6
+ */
7
+ export class AppError extends Error {
8
+ context;
9
+ constructor(message, context = {}) {
10
+ super(message);
11
+ this.context = context;
12
+ this.name = this.constructor.name;
13
+ // Restore prototype chain for instanceof checks
14
+ Object.setPrototypeOf(this, new.target.prototype);
15
+ }
16
+ toJSON() {
17
+ return {
18
+ kind: this.kind,
19
+ name: this.name,
20
+ message: this.message,
21
+ context: this.context,
22
+ };
23
+ }
24
+ }
25
+ //# sourceMappingURL=base.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.error.js","sourceRoot":"","sources":["../../src/errors/base.error.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,iDAAiD;AAgBjD;;;GAGG;AACH,MAAM,OAAgB,QAAS,SAAQ,KAAK;IAKxB;IAFlB,YACE,OAAe,EACC,UAAwB,EAAE;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAmB;QAG1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,gDAAgD;QAChD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}