memento-mcp-server 1.16.1-a → 1.16.2-a

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 (163) hide show
  1. package/dist/client/index.d.ts.map +1 -1
  2. package/dist/client/index.js +4 -3
  3. package/dist/client/index.js.map +1 -1
  4. package/dist/domains/anchor/services/anchor/anchor-interfaces.d.ts +2 -4
  5. package/dist/domains/anchor/services/anchor/anchor-interfaces.d.ts.map +1 -1
  6. package/dist/domains/anchor/services/anchor/anchor-interfaces.js.map +1 -1
  7. package/dist/domains/anchor/services/anchor/anchor-manager.d.ts +2 -2
  8. package/dist/domains/anchor/services/anchor/anchor-manager.d.ts.map +1 -1
  9. package/dist/domains/anchor/services/anchor/anchor-manager.js.map +1 -1
  10. package/dist/domains/anchor/services/anchor/anchor-search-service.d.ts +11 -34
  11. package/dist/domains/anchor/services/anchor/anchor-search-service.d.ts.map +1 -1
  12. package/dist/domains/anchor/services/anchor/anchor-search-service.js +66 -549
  13. package/dist/domains/anchor/services/anchor/anchor-search-service.js.map +1 -1
  14. package/dist/domains/anchor/services/anchor/database-types.d.ts +28 -0
  15. package/dist/domains/anchor/services/anchor/database-types.d.ts.map +1 -0
  16. package/dist/domains/anchor/services/anchor/database-types.js +6 -0
  17. package/dist/domains/anchor/services/anchor/database-types.js.map +1 -0
  18. package/dist/domains/anchor/services/anchor/embedding-types.d.ts +20 -0
  19. package/dist/domains/anchor/services/anchor/embedding-types.d.ts.map +1 -0
  20. package/dist/domains/anchor/services/anchor/embedding-types.js +6 -0
  21. package/dist/domains/anchor/services/anchor/embedding-types.js.map +1 -0
  22. package/dist/domains/anchor/services/anchor/fallback-search-service.d.ts +36 -0
  23. package/dist/domains/anchor/services/anchor/fallback-search-service.d.ts.map +1 -0
  24. package/dist/domains/anchor/services/anchor/fallback-search-service.js +85 -0
  25. package/dist/domains/anchor/services/anchor/fallback-search-service.js.map +1 -0
  26. package/dist/domains/anchor/services/anchor/fallback-strategy.d.ts +25 -0
  27. package/dist/domains/anchor/services/anchor/fallback-strategy.d.ts.map +1 -0
  28. package/dist/domains/anchor/services/anchor/fallback-strategy.js +35 -0
  29. package/dist/domains/anchor/services/anchor/fallback-strategy.js.map +1 -0
  30. package/dist/domains/anchor/services/anchor/local-search-service.d.ts +72 -0
  31. package/dist/domains/anchor/services/anchor/local-search-service.d.ts.map +1 -0
  32. package/dist/domains/anchor/services/anchor/local-search-service.js +129 -0
  33. package/dist/domains/anchor/services/anchor/local-search-service.js.map +1 -0
  34. package/dist/domains/anchor/services/anchor/n-hop-search-service.d.ts +90 -0
  35. package/dist/domains/anchor/services/anchor/n-hop-search-service.d.ts.map +1 -0
  36. package/dist/domains/anchor/services/anchor/n-hop-search-service.js +385 -0
  37. package/dist/domains/anchor/services/anchor/n-hop-search-service.js.map +1 -0
  38. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.d.ts +24 -0
  39. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.d.ts.map +1 -0
  40. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.js +39 -0
  41. package/dist/domains/anchor/services/anchor/n-hop-search-strategy.js.map +1 -0
  42. package/dist/domains/anchor/services/anchor/query-filter-service.d.ts +52 -0
  43. package/dist/domains/anchor/services/anchor/query-filter-service.d.ts.map +1 -0
  44. package/dist/domains/anchor/services/anchor/query-filter-service.js +136 -0
  45. package/dist/domains/anchor/services/anchor/query-filter-service.js.map +1 -0
  46. package/dist/domains/anchor/services/anchor/query-filter-strategy.d.ts +24 -0
  47. package/dist/domains/anchor/services/anchor/query-filter-strategy.d.ts.map +1 -0
  48. package/dist/domains/anchor/services/anchor/query-filter-strategy.js +34 -0
  49. package/dist/domains/anchor/services/anchor/query-filter-strategy.js.map +1 -0
  50. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.d.ts +52 -0
  51. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.d.ts.map +1 -0
  52. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.js +6 -0
  53. package/dist/domains/anchor/services/anchor/search-strategy-interfaces.js.map +1 -0
  54. package/dist/domains/anchor/services/anchor/vector-search-engine-types.d.ts +18 -0
  55. package/dist/domains/anchor/services/anchor/vector-search-engine-types.d.ts.map +1 -0
  56. package/dist/domains/anchor/services/anchor/vector-search-engine-types.js +11 -0
  57. package/dist/domains/anchor/services/anchor/vector-search-engine-types.js.map +1 -0
  58. package/dist/domains/memory/repositories/core-memory-database.interface.d.ts +47 -0
  59. package/dist/domains/memory/repositories/core-memory-database.interface.d.ts.map +1 -0
  60. package/dist/domains/memory/repositories/core-memory-database.interface.js +7 -0
  61. package/dist/domains/memory/repositories/core-memory-database.interface.js.map +1 -0
  62. package/dist/domains/memory/repositories/core-memory-repository.d.ts +7 -77
  63. package/dist/domains/memory/repositories/core-memory-repository.d.ts.map +1 -1
  64. package/dist/domains/memory/repositories/core-memory-repository.interface.d.ts +92 -0
  65. package/dist/domains/memory/repositories/core-memory-repository.interface.d.ts.map +1 -0
  66. package/dist/domains/memory/repositories/core-memory-repository.interface.js +6 -0
  67. package/dist/domains/memory/repositories/core-memory-repository.interface.js.map +1 -0
  68. package/dist/domains/memory/repositories/core-memory-repository.js +7 -259
  69. package/dist/domains/memory/repositories/core-memory-repository.js.map +1 -1
  70. package/dist/domains/memory/services/core-memory-cache-service.d.ts +55 -0
  71. package/dist/domains/memory/services/core-memory-cache-service.d.ts.map +1 -1
  72. package/dist/domains/memory/services/core-memory-cache-service.js +110 -8
  73. package/dist/domains/memory/services/core-memory-cache-service.js.map +1 -1
  74. package/dist/domains/memory/services/core-memory-service.d.ts +2 -2
  75. package/dist/domains/memory/services/core-memory-service.d.ts.map +1 -1
  76. package/dist/domains/memory/services/core-memory-service.js +43 -24
  77. package/dist/domains/memory/services/core-memory-service.js.map +1 -1
  78. package/dist/domains/memory/tools/recall-tool.d.ts.map +1 -1
  79. package/dist/domains/memory/tools/recall-tool.js +2 -2
  80. package/dist/domains/memory/tools/recall-tool.js.map +1 -1
  81. package/dist/domains/memory/tools/remember-tool.d.ts.map +1 -1
  82. package/dist/domains/memory/tools/remember-tool.js +2 -2
  83. package/dist/domains/memory/tools/remember-tool.js.map +1 -1
  84. package/dist/domains/monitoring/services/performance-monitor.d.ts +8 -0
  85. package/dist/domains/monitoring/services/performance-monitor.d.ts.map +1 -1
  86. package/dist/domains/monitoring/services/performance-monitor.js +16 -0
  87. package/dist/domains/monitoring/services/performance-monitor.js.map +1 -1
  88. package/dist/infrastructure/async-optimizer.d.ts.map +1 -1
  89. package/dist/infrastructure/async-optimizer.js +8 -7
  90. package/dist/infrastructure/async-optimizer.js.map +1 -1
  91. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.d.ts +31 -0
  92. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.d.ts.map +1 -0
  93. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.js +112 -0
  94. package/dist/infrastructure/database/adapters/sqlite-core-memory-adapter.js.map +1 -0
  95. package/dist/infrastructure/database/database/init.d.ts.map +1 -1
  96. package/dist/infrastructure/database/database/init.js +23 -2
  97. package/dist/infrastructure/database/database/init.js.map +1 -1
  98. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.d.ts +64 -0
  99. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.d.ts.map +1 -0
  100. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.js +174 -0
  101. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.js.map +1 -0
  102. package/dist/infrastructure/database/database/migration/migrations/010-add-core-memory-version.sql +25 -0
  103. package/dist/infrastructure/database/database-lock-monitor.d.ts +105 -0
  104. package/dist/infrastructure/database/database-lock-monitor.d.ts.map +1 -0
  105. package/dist/infrastructure/database/database-lock-monitor.js +265 -0
  106. package/dist/infrastructure/database/database-lock-monitor.js.map +1 -0
  107. package/dist/infrastructure/database/factories/core-memory-repository.factory.d.ts +17 -0
  108. package/dist/infrastructure/database/factories/core-memory-repository.factory.d.ts.map +1 -0
  109. package/dist/infrastructure/database/factories/core-memory-repository.factory.js +43 -0
  110. package/dist/infrastructure/database/factories/core-memory-repository.factory.js.map +1 -0
  111. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.d.ts +63 -0
  112. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.d.ts.map +1 -0
  113. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.js +281 -0
  114. package/dist/infrastructure/database/repositories/core-memory-repository-sqlite.impl.js.map +1 -0
  115. package/dist/infrastructure/database/wal-checkpoint-scheduler.d.ts +166 -0
  116. package/dist/infrastructure/database/wal-checkpoint-scheduler.d.ts.map +1 -0
  117. package/dist/infrastructure/database/wal-checkpoint-scheduler.js +285 -0
  118. package/dist/infrastructure/database/wal-checkpoint-scheduler.js.map +1 -0
  119. package/dist/npm-client/memento-client.d.ts.map +1 -1
  120. package/dist/npm-client/memento-client.js +5 -4
  121. package/dist/npm-client/memento-client.js.map +1 -1
  122. package/dist/npm-client/memory-manager.d.ts.map +1 -1
  123. package/dist/npm-client/memory-manager.js +4 -3
  124. package/dist/npm-client/memory-manager.js.map +1 -1
  125. package/dist/scripts/check-migration-status.d.ts.map +1 -1
  126. package/dist/scripts/check-migration-status.js +1 -0
  127. package/dist/scripts/check-migration-status.js.map +1 -1
  128. package/dist/server/bootstrap.d.ts +4 -0
  129. package/dist/server/bootstrap.d.ts.map +1 -1
  130. package/dist/server/bootstrap.js +27 -2
  131. package/dist/server/bootstrap.js.map +1 -1
  132. package/dist/server/http-server.d.ts.map +1 -1
  133. package/dist/server/http-server.js +59 -31
  134. package/dist/server/http-server.js.map +1 -1
  135. package/dist/server/index.js +32 -16
  136. package/dist/server/index.js.map +1 -1
  137. package/dist/server/simple-mcp-server.d.ts.map +1 -1
  138. package/dist/server/simple-mcp-server.js +15 -14
  139. package/dist/server/simple-mcp-server.js.map +1 -1
  140. package/dist/shared/config/environment.d.ts.map +1 -1
  141. package/dist/shared/config/environment.js +13 -1
  142. package/dist/shared/config/environment.js.map +1 -1
  143. package/dist/shared/config/index.d.ts.map +1 -1
  144. package/dist/shared/config/index.js +13 -1
  145. package/dist/shared/config/index.js.map +1 -1
  146. package/dist/shared/types/index.d.ts +10 -0
  147. package/dist/shared/types/index.d.ts.map +1 -1
  148. package/dist/tools/base-tool.d.ts.map +1 -1
  149. package/dist/tools/base-tool.js +5 -4
  150. package/dist/tools/base-tool.js.map +1 -1
  151. package/dist/tools/migrate-embeddings-tool.d.ts.map +1 -1
  152. package/dist/tools/migrate-embeddings-tool.js +2 -1
  153. package/dist/tools/migrate-embeddings-tool.js.map +1 -1
  154. package/dist/tools/tool-registry.d.ts.map +1 -1
  155. package/dist/tools/tool-registry.js +4 -3
  156. package/dist/tools/tool-registry.js.map +1 -1
  157. package/dist/workers/consolidation-score-worker.d.ts.map +1 -1
  158. package/dist/workers/consolidation-score-worker.js +5 -4
  159. package/dist/workers/consolidation-score-worker.js.map +1 -1
  160. package/package.json +1 -1
  161. package/scripts/check-file-sizes.ts +405 -0
  162. package/scripts/count-any-types.ts +375 -0
  163. package/scripts/count-console-logs.ts +451 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * N-hop 검색 서비스 인터페이스 및 구현
3
+ * Phase 2.3: anchor-search-service.ts 분리
4
+ */
5
+ import type Database from 'better-sqlite3';
6
+ import type { VectorSearchEngine } from '../../../search/algorithms/vector-search-engine.js';
7
+ import type { IAnchorCacheService } from './anchor-interfaces.js';
8
+ import type { RelationGraph } from '../../../relation/services/relation-graph.js';
9
+ /**
10
+ * N-hop 검색 결과
11
+ */
12
+ export interface NHopSearchResult {
13
+ memory_id: string;
14
+ content: string;
15
+ type: string;
16
+ similarity: number;
17
+ hop_distance: number;
18
+ importance: number;
19
+ created_at: string;
20
+ tags?: string[];
21
+ hasRelation?: boolean;
22
+ }
23
+ /**
24
+ * 1-hop 검색 결과
25
+ */
26
+ export interface OneHopSearchResult {
27
+ memory_id: string;
28
+ content: string;
29
+ type: string;
30
+ similarity: number;
31
+ importance: number;
32
+ created_at: string;
33
+ tags?: string[];
34
+ }
35
+ /**
36
+ * N-hop 검색 서비스 인터페이스
37
+ */
38
+ export interface INHopSearchService {
39
+ /**
40
+ * 1-hop 검색: 앵커와 직접적으로 유사한 메모리 검색
41
+ */
42
+ searchOneHop(anchorEmbedding: number[], provider: string, anchorMemoryId: string, threshold: number, limit: number): Promise<OneHopSearchResult[]>;
43
+ /**
44
+ * N-hop 검색: 앵커를 기준으로 최대 N-hop까지 확장 검색
45
+ */
46
+ searchNHop(anchorEmbedding: number[], provider: string, anchorMemoryId: string, threshold: number, maxHops: number, limit: number, useRelations?: boolean): Promise<NHopSearchResult[]>;
47
+ }
48
+ /**
49
+ * N-hop 검색 서비스 구현
50
+ */
51
+ export declare class NHopSearchService implements INHopSearchService {
52
+ private db;
53
+ private cacheService;
54
+ private vectorSearchEngine;
55
+ private relationGraph;
56
+ constructor(cacheService: IAnchorCacheService);
57
+ /**
58
+ * 데이터베이스 설정
59
+ */
60
+ setDatabase(db: Database.Database): void;
61
+ /**
62
+ * 벡터 검색 엔진 설정
63
+ */
64
+ setVectorSearchEngine(vectorSearchEngine: VectorSearchEngine): void;
65
+ /**
66
+ * 관계 그래프 설정
67
+ */
68
+ setRelationGraph(relationGraph: RelationGraph): void;
69
+ /**
70
+ * 1-hop 검색: 앵커와 직접적으로 유사한 메모리 검색
71
+ */
72
+ searchOneHop(anchorEmbedding: number[], provider: string, anchorMemoryId: string, threshold: number, limit: number): Promise<OneHopSearchResult[]>;
73
+ /**
74
+ * N-hop 검색: 앵커를 기준으로 최대 N-hop까지 확장 검색
75
+ */
76
+ searchNHop(anchorEmbedding: number[], provider: string, anchorMemoryId: string, threshold: number, maxHops: number, limit: number, useRelations?: boolean): Promise<NHopSearchResult[]>;
77
+ /**
78
+ * 연결된 메모리 조회 (관계 그래프 또는 memory_link 사용)
79
+ */
80
+ private getLinkedMemories;
81
+ /**
82
+ * 관계 유형별 부스트 가중치 반환
83
+ */
84
+ private getRelationTypeBoost;
85
+ /**
86
+ * 검색 결과 랭킹 점수 계산
87
+ */
88
+ private calculateRankingScore;
89
+ }
90
+ //# sourceMappingURL=n-hop-search-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-hop-search-service.d.ts","sourceRoot":"","sources":["../../../../../src/domains/anchor/services/anchor/n-hop-search-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAIlF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,YAAY,CACV,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEjC;;OAEG;IACH,UAAU,CACR,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAA8B;gBAEvC,YAAY,EAAE,mBAAmB;IAI7C;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAOxC;;OAEG;IACH,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;IAYnE;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAIpD;;OAEG;IACG,YAAY,CAChB,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA4ChC;;OAEG;IACG,UAAU,CACd,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,OAAc,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAkO9B;;OAEG;YACW,iBAAiB;IA2G/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CA8B9B"}
@@ -0,0 +1,385 @@
1
+ /**
2
+ * N-hop 검색 서비스 인터페이스 및 구현
3
+ * Phase 2.3: anchor-search-service.ts 분리
4
+ */
5
+ import { isInitializableVectorSearchEngine } from './vector-search-engine-types.js';
6
+ import { logger } from '../../../../shared/utils/logger.js';
7
+ /**
8
+ * N-hop 검색 서비스 구현
9
+ */
10
+ export class NHopSearchService {
11
+ db = null;
12
+ cacheService;
13
+ vectorSearchEngine = null;
14
+ relationGraph = null;
15
+ constructor(cacheService) {
16
+ this.cacheService = cacheService;
17
+ }
18
+ /**
19
+ * 데이터베이스 설정
20
+ */
21
+ setDatabase(db) {
22
+ if (!db) {
23
+ throw new Error('Database instance is required');
24
+ }
25
+ this.db = db;
26
+ }
27
+ /**
28
+ * 벡터 검색 엔진 설정
29
+ */
30
+ setVectorSearchEngine(vectorSearchEngine) {
31
+ if (!vectorSearchEngine) {
32
+ throw new Error('VectorSearchEngine is required');
33
+ }
34
+ this.vectorSearchEngine = vectorSearchEngine;
35
+ if (this.db) {
36
+ if (isInitializableVectorSearchEngine(this.vectorSearchEngine)) {
37
+ this.vectorSearchEngine.initialize(this.db);
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * 관계 그래프 설정
43
+ */
44
+ setRelationGraph(relationGraph) {
45
+ this.relationGraph = relationGraph;
46
+ }
47
+ /**
48
+ * 1-hop 검색: 앵커와 직접적으로 유사한 메모리 검색
49
+ */
50
+ async searchOneHop(anchorEmbedding, provider, anchorMemoryId, threshold, limit) {
51
+ if (!this.vectorSearchEngine || !this.db) {
52
+ throw new Error('VectorSearchEngine or Database is not set.');
53
+ }
54
+ try {
55
+ // VectorSearchEngine 초기화 확인
56
+ if (isInitializableVectorSearchEngine(this.vectorSearchEngine)) {
57
+ this.vectorSearchEngine.initialize(this.db);
58
+ }
59
+ // 벡터 검색 실행 (임계값은 낮게 설정하고 나중에 필터링)
60
+ const searchResults = await this.vectorSearchEngine.search(anchorEmbedding, {
61
+ limit: limit + 1, // 자기 자신 제외를 위해 +1
62
+ threshold: 0.0, // 임계값은 나중에 필터링에서 적용
63
+ includeContent: true,
64
+ includeMetadata: true
65
+ }, provider);
66
+ // 결과 필터링: 앵커 메모리 제외, 유사도 임계값 이상만 반환
67
+ const filteredResults = searchResults
68
+ .filter(result => {
69
+ // 앵커 메모리 제외
70
+ if (result.memory_id === anchorMemoryId) {
71
+ return false;
72
+ }
73
+ // 유사도 임계값 이상만 반환
74
+ return result.similarity >= threshold;
75
+ })
76
+ .slice(0, limit); // 최종 limit 적용
77
+ return filteredResults;
78
+ }
79
+ catch (error) {
80
+ logger.error('1-hop search failed', {
81
+ error: error instanceof Error ? error.message : String(error)
82
+ });
83
+ throw new Error(`Failed to perform 1-hop search: ${error instanceof Error ? error.message : 'Unknown error'}`);
84
+ }
85
+ }
86
+ /**
87
+ * N-hop 검색: 앵커를 기준으로 최대 N-hop까지 확장 검색
88
+ */
89
+ async searchNHop(anchorEmbedding, provider, anchorMemoryId, threshold, maxHops, limit, useRelations = true) {
90
+ if (!this.vectorSearchEngine || !this.db) {
91
+ throw new Error('VectorSearchEngine or Database is not set.');
92
+ }
93
+ // VectorSearchEngine 초기화 확인
94
+ if (typeof this.vectorSearchEngine.initialize === 'function') {
95
+ this.vectorSearchEngine.initialize(this.db);
96
+ }
97
+ // 이미 발견된 메모리 ID 추적 (중복 방지)
98
+ const discoveredMemoryIds = new Set([anchorMemoryId]);
99
+ // 각 hop 레벨의 결과를 저장
100
+ const allResults = [];
101
+ // 현재 hop 레벨의 메모리들 (임베딩 포함)
102
+ // 1-hop: 앵커 임베딩을 사용
103
+ let currentHopMemories = [
104
+ { memory_id: anchorMemoryId, embedding: anchorEmbedding }
105
+ ];
106
+ // 각 hop 레벨별로 검색 수행
107
+ for (let hop = 1; hop <= maxHops; hop++) {
108
+ const nextHopMemories = [];
109
+ const hopResults = [];
110
+ // 현재 hop의 각 메모리에 대해 검색 수행
111
+ for (const currentMemory of currentHopMemories) {
112
+ try {
113
+ // 관계 그래프 또는 memory_link를 활용한 직접 연결된 메모리 조회
114
+ // use_relations가 false이면 관계 그래프를 사용하지 않음
115
+ const linkedMemories = useRelations
116
+ ? await this.getLinkedMemories(currentMemory.memory_id)
117
+ : [];
118
+ // 벡터 검색 실행
119
+ const vectorSearchResults = await this.vectorSearchEngine.search(currentMemory.embedding, {
120
+ limit: Math.ceil(limit / maxHops) + 10, // 각 hop당 충분한 결과 가져오기
121
+ threshold: 0.0, // 임계값은 나중에 필터링에서 적용
122
+ includeContent: true,
123
+ includeMetadata: true
124
+ }, provider);
125
+ // memory_link 결과와 벡터 검색 결과를 병합
126
+ const allCandidates = new Map();
127
+ // memory_link 결과 추가 (우선순위 높음)
128
+ for (const linked of linkedMemories) {
129
+ if (!discoveredMemoryIds.has(linked.memory_id)) {
130
+ allCandidates.set(linked.memory_id, {
131
+ ...linked,
132
+ isLinked: true
133
+ });
134
+ }
135
+ }
136
+ // 벡터 검색 결과 추가
137
+ const relaxedThreshold = threshold * 0.5;
138
+ for (const result of vectorSearchResults) {
139
+ if (!allCandidates.has(result.memory_id) && !discoveredMemoryIds.has(result.memory_id)) {
140
+ if (result.similarity >= relaxedThreshold) {
141
+ allCandidates.set(result.memory_id, {
142
+ ...result,
143
+ isLinked: false
144
+ });
145
+ }
146
+ }
147
+ else if (allCandidates.has(result.memory_id)) {
148
+ // memory_link로 이미 추가된 경우, 유사도 정보 업데이트
149
+ const existing = allCandidates.get(result.memory_id);
150
+ existing.similarity = Math.max(existing.similarity, result.similarity);
151
+ }
152
+ }
153
+ // 결과 필터링 및 추가
154
+ for (const [memoryId, candidate] of allCandidates.entries()) {
155
+ if (discoveredMemoryIds.has(memoryId)) {
156
+ continue;
157
+ }
158
+ const effectiveThreshold = candidate.isLinked
159
+ ? threshold * 0.8
160
+ : threshold;
161
+ if (candidate.similarity < effectiveThreshold) {
162
+ continue;
163
+ }
164
+ discoveredMemoryIds.add(memoryId);
165
+ hopResults.push({
166
+ memory_id: candidate.memory_id,
167
+ content: candidate.content,
168
+ type: candidate.type,
169
+ similarity: candidate.similarity,
170
+ hop_distance: hop,
171
+ importance: candidate.importance,
172
+ created_at: candidate.created_at,
173
+ tags: candidate.tags,
174
+ hasRelation: candidate.isLinked
175
+ });
176
+ // 다음 hop을 위한 임베딩 조회
177
+ if (hop < maxHops) {
178
+ try {
179
+ const nextEmbedding = await this.cacheService.getAnchorEmbedding(candidate.memory_id);
180
+ if (nextEmbedding && nextEmbedding.embedding) {
181
+ nextHopMemories.push({
182
+ memory_id: candidate.memory_id,
183
+ embedding: nextEmbedding.embedding
184
+ });
185
+ }
186
+ }
187
+ catch (error) {
188
+ // 임베딩 조회 실패 시 다음 hop에서 제외
189
+ logger.debug('Skipping memory for next hop (no embedding)', {
190
+ memoryId: candidate.memory_id,
191
+ error: error instanceof Error ? error.message : String(error)
192
+ });
193
+ }
194
+ }
195
+ }
196
+ }
197
+ catch (error) {
198
+ logger.error('Hop search failed', {
199
+ hop,
200
+ memoryId: currentMemory.memory_id,
201
+ error: error instanceof Error ? error.message : String(error)
202
+ });
203
+ continue;
204
+ }
205
+ }
206
+ // 현재 hop의 결과를 전체 결과에 추가
207
+ allResults.push(...hopResults);
208
+ // limit에 도달했으면 중단
209
+ if (allResults.length >= limit) {
210
+ break;
211
+ }
212
+ // 다음 hop을 위한 메모리가 없으면 중단
213
+ if (nextHopMemories.length === 0) {
214
+ break;
215
+ }
216
+ // 다음 hop을 위한 메모리로 업데이트
217
+ currentHopMemories = nextHopMemories;
218
+ }
219
+ // 랭킹 점수 계산 및 적용 (관계 그래프 가중치 포함)
220
+ const rankedResults = await Promise.all(allResults.map(async (result) => {
221
+ // 관계 가중치 계산 (관계 그래프가 있고 use_relations가 true인 경우)
222
+ let relationWeight = 0;
223
+ let hasRelation = result.hasRelation ?? false;
224
+ if (useRelations && this.relationGraph) {
225
+ try {
226
+ const relations = await this.relationGraph.getRelations(result.memory_id, {
227
+ direction: 'both',
228
+ minConfidence: 0.5
229
+ });
230
+ if (relations.length > 0) {
231
+ hasRelation = true;
232
+ // 관계 가중치 계산 (간단한 평균)
233
+ const avgConfidence = relations.reduce((sum, r) => sum + r.confidence, 0) / relations.length;
234
+ const avgBoost = relations.reduce((sum, r) => sum + this.getRelationTypeBoost(r.relation_type), 0) / relations.length;
235
+ relationWeight = Math.min(1.0, avgConfidence * avgBoost);
236
+ }
237
+ }
238
+ catch (error) {
239
+ // 관계 조회 실패는 무시
240
+ logger.debug('Relation weight calculation failed', {
241
+ memoryId: result.memory_id,
242
+ error: error instanceof Error ? error.message : String(error)
243
+ });
244
+ }
245
+ }
246
+ const rankingScore = this.calculateRankingScore(result.similarity, result.hop_distance, result.importance, relationWeight, hasRelation);
247
+ return {
248
+ ...result,
249
+ similarity: rankingScore,
250
+ hasRelation
251
+ };
252
+ }));
253
+ // 랭킹 점수 기준으로 정렬 (관계가 있는 기억 우선)
254
+ rankedResults.sort((a, b) => {
255
+ // 관계가 있는 기억에 우선순위 부여
256
+ if (a.hasRelation && !b.hasRelation) {
257
+ return -1;
258
+ }
259
+ if (!a.hasRelation && b.hasRelation) {
260
+ return 1;
261
+ }
262
+ // 둘 다 관계가 있거나 둘 다 없는 경우, similarity 기준 정렬
263
+ if (Math.abs(a.similarity - b.similarity) < 0.001) {
264
+ return a.hop_distance - b.hop_distance;
265
+ }
266
+ return b.similarity - a.similarity;
267
+ });
268
+ // 최종 limit 적용
269
+ return rankedResults.slice(0, limit);
270
+ }
271
+ /**
272
+ * 연결된 메모리 조회 (관계 그래프 또는 memory_link 사용)
273
+ */
274
+ async getLinkedMemories(memoryId) {
275
+ if (!this.db) {
276
+ return [];
277
+ }
278
+ try {
279
+ // 관계 그래프가 있으면 우선 사용
280
+ if (this.relationGraph) {
281
+ const relations = await this.relationGraph.getRelations(memoryId, {
282
+ direction: 'outgoing',
283
+ minConfidence: 0.5
284
+ });
285
+ if (relations.length > 0) {
286
+ // 관계를 메모리 정보와 결합
287
+ const memoryIds = relations.map(r => r.target_id);
288
+ const placeholders = memoryIds.map(() => '?').join(',');
289
+ const memoryRecords = this.db.prepare(`
290
+ SELECT id, content, type, importance, created_at, tags
291
+ FROM memory_item
292
+ WHERE id IN (${placeholders})
293
+ `).all(...memoryIds);
294
+ // 관계 정보와 메모리 정보 결합
295
+ const memoryMap = new Map(memoryRecords.map(m => [m.id, m]));
296
+ return relations.map(relation => {
297
+ const memory = memoryMap.get(relation.target_id);
298
+ if (!memory) {
299
+ return null;
300
+ }
301
+ // 관계 confidence를 similarity로 사용 (관계가 있으면 높은 유사도)
302
+ // 관계 유형별 부스트 적용
303
+ const typeBoost = this.getRelationTypeBoost(relation.relation_type);
304
+ const similarity = Math.min(1.0, relation.confidence * typeBoost);
305
+ return {
306
+ memory_id: memory.id,
307
+ content: memory.content,
308
+ type: memory.type,
309
+ similarity,
310
+ importance: memory.importance,
311
+ created_at: memory.created_at,
312
+ tags: memory.tags ? JSON.parse(memory.tags) : undefined
313
+ };
314
+ }).filter((item) => item !== null);
315
+ }
316
+ }
317
+ // 관계 그래프가 없거나 관계가 없으면 memory_link 사용 (하위 호환성)
318
+ const linkedRecords = this.db.prepare(`
319
+ SELECT
320
+ ml.target_id as memory_id,
321
+ mi.content,
322
+ mi.type,
323
+ mi.importance,
324
+ mi.created_at,
325
+ mi.tags,
326
+ ml.relation_type
327
+ FROM memory_link ml
328
+ JOIN memory_item mi ON mi.id = ml.target_id
329
+ WHERE ml.source_id = ?
330
+ ORDER BY ml.created_at DESC
331
+ `).all(memoryId);
332
+ return linkedRecords.map(record => ({
333
+ memory_id: record.memory_id,
334
+ content: record.content,
335
+ type: record.type,
336
+ similarity: 0.9, // memory_link는 기본 유사도 0.9
337
+ importance: record.importance,
338
+ created_at: record.created_at,
339
+ tags: record.tags ? (typeof record.tags === 'string' ? JSON.parse(record.tags) : record.tags) : undefined
340
+ }));
341
+ }
342
+ catch (error) {
343
+ logger.error('memory_link retrieval failed', {
344
+ memoryId,
345
+ error: error instanceof Error ? error.message : String(error)
346
+ });
347
+ return [];
348
+ }
349
+ }
350
+ /**
351
+ * 관계 유형별 부스트 가중치 반환
352
+ */
353
+ getRelationTypeBoost(relationType) {
354
+ const boostMap = {
355
+ 'CAUSES': 1.2,
356
+ 'DEPENDS_ON': 1.1,
357
+ 'FOLLOWS': 1.0,
358
+ 'CONTRASTS_WITH': 0.9,
359
+ 'REFERENCES': 0.8,
360
+ 'BELONGS_TO': 1.0
361
+ };
362
+ return boostMap[relationType] || 1.0;
363
+ }
364
+ /**
365
+ * 검색 결과 랭킹 점수 계산
366
+ */
367
+ calculateRankingScore(similarity, hopDistance, importance = 0.5, relationWeight = 0, hasRelation = false) {
368
+ const hopDecayFactor = 1.0 / (1.0 + (hopDistance - 1) * 0.3);
369
+ const anchorProximityBoost = hopDistance === 1 ? 1.2 : 1.0;
370
+ const importanceWeight = 0.1;
371
+ const importanceBoost = 1.0 + (importance - 0.5) * importanceWeight;
372
+ // 관계 가중치가 있으면 벡터 유사도와 결합
373
+ let combinedSimilarity = similarity;
374
+ if (relationWeight > 0) {
375
+ // 관계 가중치와 벡터 유사도를 가중 평균으로 결합
376
+ // 관계 가중치: 30%, 벡터 유사도: 70%
377
+ combinedSimilarity = similarity * 0.7 + relationWeight * 0.3;
378
+ }
379
+ // 관계가 있는 기억에 우선순위 부스트 적용
380
+ const relationPriorityBoost = hasRelation ? 1.15 : 1.0; // 15% 부스트
381
+ const rankingScore = Math.min(1.0, combinedSimilarity * hopDecayFactor * anchorProximityBoost * importanceBoost * relationPriorityBoost);
382
+ return rankingScore;
383
+ }
384
+ }
385
+ //# sourceMappingURL=n-hop-search-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-hop-search-service.js","sourceRoot":"","sources":["../../../../../src/domains/anchor/services/anchor/n-hop-search-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * N-hop 검색 전략 구현
3
+ * Phase 3.4: searchLocal 메서드 분리 - 전략 패턴 적용
4
+ */
5
+ import type { INHopSearchStrategy, NHopSearchResult } from './search-strategy-interfaces.js';
6
+ import { NHopSearchService } from './n-hop-search-service.js';
7
+ /**
8
+ * N-hop 검색 전략 구현
9
+ * Phase 2.3의 NHopSearchService를 래핑하여 전략 패턴 적용
10
+ */
11
+ export declare class NHopSearchStrategy implements INHopSearchStrategy {
12
+ readonly name = "NHopSearchStrategy";
13
+ private nHopSearchService;
14
+ constructor(nHopSearchService: NHopSearchService);
15
+ /**
16
+ * N-hop 검색 수행
17
+ */
18
+ search(anchorEmbedding: number[], provider: string, anchorMemoryId: string, threshold: number, maxHops: number, limit: number, useRelations?: boolean): Promise<NHopSearchResult[]>;
19
+ /**
20
+ * 전략 실행 (ISearchStrategy 인터페이스 구현)
21
+ */
22
+ execute(...args: any[]): Promise<NHopSearchResult[]>;
23
+ }
24
+ //# sourceMappingURL=n-hop-search-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-hop-search-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/domains/anchor/services/anchor/n-hop-search-strategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,QAAQ,CAAC,IAAI,wBAAwB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;gBAEjC,iBAAiB,EAAE,iBAAiB;IAOhD;;OAEG;IACG,MAAM,CACV,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,OAAc,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAY9B;;OAEG;IACG,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAW3D"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * N-hop 검색 전략 구현
3
+ * Phase 3.4: searchLocal 메서드 분리 - 전략 패턴 적용
4
+ */
5
+ import { NHopSearchService } from './n-hop-search-service.js';
6
+ /**
7
+ * N-hop 검색 전략 구현
8
+ * Phase 2.3의 NHopSearchService를 래핑하여 전략 패턴 적용
9
+ */
10
+ export class NHopSearchStrategy {
11
+ name = 'NHopSearchStrategy';
12
+ nHopSearchService;
13
+ constructor(nHopSearchService) {
14
+ if (!nHopSearchService) {
15
+ throw new Error('NHopSearchService is required');
16
+ }
17
+ this.nHopSearchService = nHopSearchService;
18
+ }
19
+ /**
20
+ * N-hop 검색 수행
21
+ */
22
+ async search(anchorEmbedding, provider, anchorMemoryId, threshold, maxHops, limit, useRelations = true) {
23
+ return this.nHopSearchService.searchNHop(anchorEmbedding, provider, anchorMemoryId, threshold, maxHops, limit, useRelations);
24
+ }
25
+ /**
26
+ * 전략 실행 (ISearchStrategy 인터페이스 구현)
27
+ */
28
+ async execute(...args) {
29
+ return this.search(args[0], // anchorEmbedding
30
+ args[1], // provider
31
+ args[2], // anchorMemoryId
32
+ args[3], // threshold
33
+ args[4], // maxHops
34
+ args[5], // limit
35
+ args[6] // useRelations
36
+ );
37
+ }
38
+ }
39
+ //# sourceMappingURL=n-hop-search-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n-hop-search-strategy.js","sourceRoot":"","sources":["../../../../../src/domains/anchor/services/anchor/n-hop-search-strategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,oBAAoB,CAAC;IAC7B,iBAAiB,CAAoB;IAE7C,YAAY,iBAAoC;QAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,eAAyB,EACzB,QAAgB,EAChB,cAAsB,EACtB,SAAiB,EACjB,OAAe,EACf,KAAa,EACb,eAAwB,IAAI;QAE5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CACtC,eAAe,EACf,QAAQ,EACR,cAAc,EACd,SAAS,EACT,OAAO,EACP,KAAK,EACL,YAAY,CACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,GAAG,IAAW;QAC1B,OAAO,IAAI,CAAC,MAAM,CAChB,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB;QAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW;QACpB,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB;QAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY;QACrB,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU;QACnB,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ;QACjB,IAAI,CAAC,CAAC,CAAC,CAAE,eAAe;SACzB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 쿼리 필터 서비스 인터페이스 및 구현
3
+ * Phase 2.4: anchor-search-service.ts 분리
4
+ */
5
+ import type { IAnchorCacheService } from './anchor-interfaces.js';
6
+ /**
7
+ * 필터링 대상 결과 타입
8
+ */
9
+ export interface FilterableResult {
10
+ memory_id: string;
11
+ content: string;
12
+ type: string;
13
+ similarity: number;
14
+ hop_distance: number;
15
+ importance: number;
16
+ created_at: string;
17
+ tags?: string[];
18
+ }
19
+ /**
20
+ * 쿼리 필터 서비스 인터페이스
21
+ */
22
+ export interface IQueryFilterService {
23
+ /**
24
+ * 쿼리 기반 필터링
25
+ */
26
+ filterByQuery(query: string, results: FilterableResult[], provider: string): Promise<FilterableResult[]>;
27
+ }
28
+ /**
29
+ * 쿼리 필터 서비스 구현
30
+ */
31
+ export declare class QueryFilterService implements IQueryFilterService {
32
+ private cacheService;
33
+ private queryEmbeddingService;
34
+ constructor(cacheService: IAnchorCacheService);
35
+ /**
36
+ * 쿼리 기반 필터링
37
+ */
38
+ filterByQuery(query: string, results: FilterableResult[], provider: string): Promise<FilterableResult[]>;
39
+ /**
40
+ * 코사인 유사도 계산
41
+ */
42
+ private cosineSimilarity;
43
+ /**
44
+ * 텍스트 기반 유사도 계산
45
+ */
46
+ private calculateTextSimilarity;
47
+ /**
48
+ * 기본 랭킹 점수 계산
49
+ */
50
+ private calculateBaseRankingScore;
51
+ }
52
+ //# sourceMappingURL=query-filter-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-filter-service.d.ts","sourceRoot":"","sources":["../../../../../src/domains/anchor/services/anchor/query-filter-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAIlE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,aAAa,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,qBAAqB,CAA0B;gBAE3C,YAAY,EAAE,mBAAmB;IAK7C;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA2F9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAelC"}