@claude-flow/memory 3.0.0-alpha.2 → 3.0.0-alpha.21

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. package/README.md +651 -42
  2. package/dist/agent-memory-scope.d.ts +131 -0
  3. package/dist/agent-memory-scope.d.ts.map +1 -0
  4. package/dist/agent-memory-scope.js +223 -0
  5. package/dist/agent-memory-scope.js.map +1 -0
  6. package/dist/agent-memory-scope.test.d.ts +8 -0
  7. package/dist/agent-memory-scope.test.d.ts.map +1 -0
  8. package/dist/agent-memory-scope.test.js +463 -0
  9. package/dist/agent-memory-scope.test.js.map +1 -0
  10. package/dist/agentdb-adapter.d.ts +82 -4
  11. package/dist/agentdb-adapter.d.ts.map +1 -1
  12. package/dist/agentdb-adapter.js +388 -17
  13. package/dist/agentdb-adapter.js.map +1 -1
  14. package/dist/agentdb-backend.d.ts +6 -0
  15. package/dist/agentdb-backend.d.ts.map +1 -1
  16. package/dist/agentdb-backend.js +89 -25
  17. package/dist/agentdb-backend.js.map +1 -1
  18. package/dist/auto-memory-bridge.d.ts +237 -0
  19. package/dist/auto-memory-bridge.d.ts.map +1 -0
  20. package/dist/auto-memory-bridge.js +758 -0
  21. package/dist/auto-memory-bridge.js.map +1 -0
  22. package/dist/auto-memory-bridge.test.d.ts +8 -0
  23. package/dist/auto-memory-bridge.test.d.ts.map +1 -0
  24. package/dist/auto-memory-bridge.test.js +849 -0
  25. package/dist/auto-memory-bridge.test.js.map +1 -0
  26. package/dist/benchmark.test.d.ts +2 -0
  27. package/dist/benchmark.test.d.ts.map +1 -0
  28. package/dist/benchmark.test.js +277 -0
  29. package/dist/benchmark.test.js.map +1 -0
  30. package/dist/consolidator.d.ts +96 -0
  31. package/dist/consolidator.d.ts.map +1 -0
  32. package/dist/consolidator.js +209 -0
  33. package/dist/consolidator.js.map +1 -0
  34. package/dist/consolidator.test.d.ts +17 -0
  35. package/dist/consolidator.test.d.ts.map +1 -0
  36. package/dist/consolidator.test.js +239 -0
  37. package/dist/consolidator.test.js.map +1 -0
  38. package/dist/controller-registry.d.ts +248 -0
  39. package/dist/controller-registry.d.ts.map +1 -0
  40. package/dist/controller-registry.js +1086 -0
  41. package/dist/controller-registry.js.map +1 -0
  42. package/dist/controller-registry.test.d.ts +14 -0
  43. package/dist/controller-registry.test.d.ts.map +1 -0
  44. package/dist/controller-registry.test.js +691 -0
  45. package/dist/controller-registry.test.js.map +1 -0
  46. package/dist/database-provider.d.ts +14 -2
  47. package/dist/database-provider.d.ts.map +1 -1
  48. package/dist/database-provider.js +63 -3
  49. package/dist/database-provider.js.map +1 -1
  50. package/dist/database-provider.test.js +56 -3
  51. package/dist/database-provider.test.js.map +1 -1
  52. package/dist/entity-tagger.d.ts +31 -0
  53. package/dist/entity-tagger.d.ts.map +1 -0
  54. package/dist/entity-tagger.js +80 -0
  55. package/dist/entity-tagger.js.map +1 -0
  56. package/dist/entity-tagger.test.d.ts +12 -0
  57. package/dist/entity-tagger.test.d.ts.map +1 -0
  58. package/dist/entity-tagger.test.js +70 -0
  59. package/dist/entity-tagger.test.js.map +1 -0
  60. package/dist/fts5.test.d.ts +13 -0
  61. package/dist/fts5.test.d.ts.map +1 -0
  62. package/dist/fts5.test.js +144 -0
  63. package/dist/fts5.test.js.map +1 -0
  64. package/dist/graceful-retrieval.test.d.ts +14 -0
  65. package/dist/graceful-retrieval.test.d.ts.map +1 -0
  66. package/dist/graceful-retrieval.test.js +192 -0
  67. package/dist/graceful-retrieval.test.js.map +1 -0
  68. package/dist/hnsw-index.d.ts +51 -0
  69. package/dist/hnsw-index.d.ts.map +1 -1
  70. package/dist/hnsw-index.js +396 -12
  71. package/dist/hnsw-index.js.map +1 -1
  72. package/dist/hnsw-persistence.test.d.ts +13 -0
  73. package/dist/hnsw-persistence.test.d.ts.map +1 -0
  74. package/dist/hnsw-persistence.test.js +208 -0
  75. package/dist/hnsw-persistence.test.js.map +1 -0
  76. package/dist/hybrid-backend.d.ts +28 -0
  77. package/dist/hybrid-backend.d.ts.map +1 -1
  78. package/dist/hybrid-backend.js +82 -4
  79. package/dist/hybrid-backend.js.map +1 -1
  80. package/dist/hybrid-backend.test.js +6 -5
  81. package/dist/hybrid-backend.test.js.map +1 -1
  82. package/dist/index.d.ts +167 -9
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +277 -30
  85. package/dist/index.js.map +1 -1
  86. package/dist/index.test.d.ts +10 -0
  87. package/dist/index.test.d.ts.map +1 -0
  88. package/dist/index.test.js +71 -0
  89. package/dist/index.test.js.map +1 -0
  90. package/dist/json-security.d.ts +12 -0
  91. package/dist/json-security.d.ts.map +1 -0
  92. package/dist/json-security.js +20 -0
  93. package/dist/json-security.js.map +1 -0
  94. package/dist/learning-bridge.d.ts +137 -0
  95. package/dist/learning-bridge.d.ts.map +1 -0
  96. package/dist/learning-bridge.js +335 -0
  97. package/dist/learning-bridge.js.map +1 -0
  98. package/dist/learning-bridge.test.d.ts +8 -0
  99. package/dist/learning-bridge.test.d.ts.map +1 -0
  100. package/dist/learning-bridge.test.js +578 -0
  101. package/dist/learning-bridge.test.js.map +1 -0
  102. package/dist/memory-graph.d.ts +100 -0
  103. package/dist/memory-graph.d.ts.map +1 -0
  104. package/dist/memory-graph.js +333 -0
  105. package/dist/memory-graph.js.map +1 -0
  106. package/dist/memory-graph.test.d.ts +8 -0
  107. package/dist/memory-graph.test.d.ts.map +1 -0
  108. package/dist/memory-graph.test.js +609 -0
  109. package/dist/memory-graph.test.js.map +1 -0
  110. package/dist/persistent-sona.d.ts +144 -0
  111. package/dist/persistent-sona.d.ts.map +1 -0
  112. package/dist/persistent-sona.js +332 -0
  113. package/dist/persistent-sona.js.map +1 -0
  114. package/dist/rvf-backend.d.ts +53 -0
  115. package/dist/rvf-backend.d.ts.map +1 -0
  116. package/dist/rvf-backend.js +643 -0
  117. package/dist/rvf-backend.js.map +1 -0
  118. package/dist/rvf-learning-store.d.ts +139 -0
  119. package/dist/rvf-learning-store.d.ts.map +1 -0
  120. package/dist/rvf-learning-store.js +295 -0
  121. package/dist/rvf-learning-store.js.map +1 -0
  122. package/dist/rvf-migration.d.ts +45 -0
  123. package/dist/rvf-migration.d.ts.map +1 -0
  124. package/dist/rvf-migration.js +254 -0
  125. package/dist/rvf-migration.js.map +1 -0
  126. package/dist/smart-retrieval.d.ts +118 -0
  127. package/dist/smart-retrieval.d.ts.map +1 -0
  128. package/dist/smart-retrieval.js +322 -0
  129. package/dist/smart-retrieval.js.map +1 -0
  130. package/dist/smart-retrieval.test.d.ts +2 -0
  131. package/dist/smart-retrieval.test.d.ts.map +1 -0
  132. package/dist/smart-retrieval.test.js +238 -0
  133. package/dist/smart-retrieval.test.js.map +1 -0
  134. package/dist/sqlite-backend.d.ts +10 -0
  135. package/dist/sqlite-backend.d.ts.map +1 -1
  136. package/dist/sqlite-backend.js +104 -8
  137. package/dist/sqlite-backend.js.map +1 -1
  138. package/dist/sqljs-backend.d.ts +9 -0
  139. package/dist/sqljs-backend.d.ts.map +1 -1
  140. package/dist/sqljs-backend.js +96 -5
  141. package/dist/sqljs-backend.js.map +1 -1
  142. package/dist/types.d.ts +3 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/package.json +21 -8
  145. package/.agentic-flow/intelligence.json +0 -16
  146. package/__tests__/coverage/base.css +0 -224
  147. package/__tests__/coverage/block-navigation.js +0 -87
  148. package/__tests__/coverage/coverage-final.json +0 -19
  149. package/__tests__/coverage/favicon.png +0 -0
  150. package/__tests__/coverage/index.html +0 -206
  151. package/__tests__/coverage/lcov-report/base.css +0 -224
  152. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  153. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  154. package/__tests__/coverage/lcov-report/index.html +0 -206
  155. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  156. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  157. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  158. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  159. package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +0 -2737
  160. package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +0 -3130
  161. package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +0 -601
  162. package/__tests__/coverage/lcov-report/src/application/commands/index.html +0 -131
  163. package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +0 -394
  164. package/__tests__/coverage/lcov-report/src/application/queries/index.html +0 -116
  165. package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +0 -796
  166. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  167. package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +0 -793
  168. package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +0 -1633
  169. package/__tests__/coverage/lcov-report/src/database-provider.ts.html +0 -1618
  170. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  171. package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +0 -952
  172. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  173. package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +0 -1294
  174. package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +0 -3124
  175. package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +0 -2167
  176. package/__tests__/coverage/lcov-report/src/index.html +0 -266
  177. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  178. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +0 -116
  179. package/__tests__/coverage/lcov-report/src/migration.ts.html +0 -2092
  180. package/__tests__/coverage/lcov-report/src/query-builder.ts.html +0 -1711
  181. package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +0 -2281
  182. package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +0 -2374
  183. package/__tests__/coverage/lcov-report/src/types.ts.html +0 -2266
  184. package/__tests__/coverage/lcov.info +0 -10238
  185. package/__tests__/coverage/prettify.css +0 -1
  186. package/__tests__/coverage/prettify.js +0 -2
  187. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  188. package/__tests__/coverage/sorter.js +0 -210
  189. package/__tests__/coverage/src/agentdb-adapter.ts.html +0 -2737
  190. package/__tests__/coverage/src/agentdb-backend.ts.html +0 -3130
  191. package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +0 -601
  192. package/__tests__/coverage/src/application/commands/index.html +0 -131
  193. package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +0 -394
  194. package/__tests__/coverage/src/application/queries/index.html +0 -116
  195. package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +0 -796
  196. package/__tests__/coverage/src/application/services/index.html +0 -116
  197. package/__tests__/coverage/src/application/services/memory-application-service.ts.html +0 -793
  198. package/__tests__/coverage/src/cache-manager.ts.html +0 -1633
  199. package/__tests__/coverage/src/database-provider.ts.html +0 -1618
  200. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  201. package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +0 -952
  202. package/__tests__/coverage/src/domain/services/index.html +0 -116
  203. package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +0 -1294
  204. package/__tests__/coverage/src/hnsw-index.ts.html +0 -3124
  205. package/__tests__/coverage/src/hybrid-backend.ts.html +0 -2167
  206. package/__tests__/coverage/src/index.html +0 -266
  207. package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  208. package/__tests__/coverage/src/infrastructure/repositories/index.html +0 -116
  209. package/__tests__/coverage/src/migration.ts.html +0 -2092
  210. package/__tests__/coverage/src/query-builder.ts.html +0 -1711
  211. package/__tests__/coverage/src/sqlite-backend.ts.html +0 -2281
  212. package/__tests__/coverage/src/sqljs-backend.ts.html +0 -2374
  213. package/__tests__/coverage/src/types.ts.html +0 -2266
  214. package/benchmarks/cache-hit-rate.bench.ts +0 -535
  215. package/benchmarks/hnsw-indexing.bench.ts +0 -552
  216. package/benchmarks/memory-write.bench.ts +0 -469
  217. package/benchmarks/vector-search.bench.ts +0 -449
  218. package/docs/AGENTDB-INTEGRATION.md +0 -388
  219. package/docs/CROSS_PLATFORM.md +0 -505
  220. package/docs/WINDOWS_SUPPORT.md +0 -422
  221. package/examples/agentdb-example.ts +0 -345
  222. package/examples/cross-platform-usage.ts +0 -326
  223. package/framework/benchmark.ts +0 -112
  224. package/src/agentdb-adapter.ts +0 -884
  225. package/src/agentdb-backend.test.ts +0 -339
  226. package/src/agentdb-backend.ts +0 -1016
  227. package/src/application/commands/delete-memory.command.ts +0 -172
  228. package/src/application/commands/store-memory.command.ts +0 -103
  229. package/src/application/index.ts +0 -36
  230. package/src/application/queries/search-memory.query.ts +0 -237
  231. package/src/application/services/memory-application-service.ts +0 -236
  232. package/src/cache-manager.ts +0 -516
  233. package/src/database-provider.test.ts +0 -364
  234. package/src/database-provider.ts +0 -511
  235. package/src/domain/entities/memory-entry.ts +0 -289
  236. package/src/domain/index.ts +0 -35
  237. package/src/domain/repositories/memory-repository.interface.ts +0 -120
  238. package/src/domain/services/memory-domain-service.ts +0 -403
  239. package/src/hnsw-index.ts +0 -1013
  240. package/src/hybrid-backend.test.ts +0 -399
  241. package/src/hybrid-backend.ts +0 -694
  242. package/src/index.ts +0 -515
  243. package/src/infrastructure/index.ts +0 -23
  244. package/src/infrastructure/repositories/hybrid-memory-repository.ts +0 -516
  245. package/src/migration.ts +0 -669
  246. package/src/query-builder.ts +0 -542
  247. package/src/sqlite-backend.ts +0 -732
  248. package/src/sqljs-backend.ts +0 -763
  249. package/src/types.ts +0 -727
  250. package/tmp.json +0 -0
  251. package/tsconfig.json +0 -9
  252. package/tsconfig.tsbuildinfo +0 -1
  253. package/verify-cross-platform.ts +0 -170
@@ -1,172 +0,0 @@
1
- /**
2
- * Delete Memory Command - Application Layer (CQRS)
3
- *
4
- * Command for deleting memory entries.
5
- * Supports soft delete and hard delete.
6
- *
7
- * @module v3/memory/application/commands
8
- */
9
-
10
- import { IMemoryRepository } from '../../domain/repositories/memory-repository.interface.js';
11
-
12
- /**
13
- * Delete Memory Command Input
14
- */
15
- export interface DeleteMemoryInput {
16
- id?: string;
17
- namespace?: string;
18
- key?: string;
19
- hardDelete?: boolean;
20
- }
21
-
22
- /**
23
- * Delete Memory Command Result
24
- */
25
- export interface DeleteMemoryResult {
26
- success: boolean;
27
- deleted: boolean;
28
- entryId?: string;
29
- wasHardDelete: boolean;
30
- }
31
-
32
- /**
33
- * Delete Memory Command Handler
34
- */
35
- export class DeleteMemoryCommandHandler {
36
- constructor(private readonly repository: IMemoryRepository) {}
37
-
38
- async execute(input: DeleteMemoryInput): Promise<DeleteMemoryResult> {
39
- let entryId: string | undefined;
40
-
41
- // Find entry by ID or by namespace:key
42
- if (input.id) {
43
- entryId = input.id;
44
- } else if (input.namespace && input.key) {
45
- const entry = await this.repository.findByKey(input.namespace, input.key);
46
- entryId = entry?.id;
47
- }
48
-
49
- if (!entryId) {
50
- return {
51
- success: false,
52
- deleted: false,
53
- wasHardDelete: false,
54
- };
55
- }
56
-
57
- if (input.hardDelete) {
58
- // Hard delete - remove from database
59
- const deleted = await this.repository.delete(entryId);
60
- return {
61
- success: true,
62
- deleted,
63
- entryId,
64
- wasHardDelete: true,
65
- };
66
- } else {
67
- // Soft delete - mark as deleted
68
- const entry = await this.repository.findById(entryId);
69
- if (entry) {
70
- entry.delete();
71
- await this.repository.save(entry);
72
- return {
73
- success: true,
74
- deleted: true,
75
- entryId,
76
- wasHardDelete: false,
77
- };
78
- }
79
- }
80
-
81
- return {
82
- success: false,
83
- deleted: false,
84
- entryId,
85
- wasHardDelete: false,
86
- };
87
- }
88
- }
89
-
90
- /**
91
- * Bulk Delete Command Input
92
- */
93
- export interface BulkDeleteMemoryInput {
94
- ids?: string[];
95
- namespace?: string;
96
- olderThan?: Date;
97
- hardDelete?: boolean;
98
- }
99
-
100
- /**
101
- * Bulk Delete Command Result
102
- */
103
- export interface BulkDeleteMemoryResult {
104
- success: boolean;
105
- deletedCount: number;
106
- failedCount: number;
107
- errors: Array<{ id: string; error: string }>;
108
- }
109
-
110
- /**
111
- * Bulk Delete Memory Command Handler
112
- */
113
- export class BulkDeleteMemoryCommandHandler {
114
- constructor(private readonly repository: IMemoryRepository) {}
115
-
116
- async execute(input: BulkDeleteMemoryInput): Promise<BulkDeleteMemoryResult> {
117
- let idsToDelete: string[] = [];
118
-
119
- if (input.ids) {
120
- idsToDelete = input.ids;
121
- } else if (input.namespace) {
122
- const entries = await this.repository.findByNamespace(input.namespace);
123
- idsToDelete = entries
124
- .filter((e) => !input.olderThan || e.createdAt < input.olderThan)
125
- .map((e) => e.id);
126
- }
127
-
128
- if (idsToDelete.length === 0) {
129
- return {
130
- success: true,
131
- deletedCount: 0,
132
- failedCount: 0,
133
- errors: [],
134
- };
135
- }
136
-
137
- if (input.hardDelete) {
138
- const result = await this.repository.deleteMany(idsToDelete);
139
- return {
140
- success: result.failed === 0,
141
- deletedCount: result.success,
142
- failedCount: result.failed,
143
- errors: result.errors,
144
- };
145
- } else {
146
- // Soft delete
147
- const entries = await this.repository.findByIds(idsToDelete);
148
- let deletedCount = 0;
149
- const errors: Array<{ id: string; error: string }> = [];
150
-
151
- for (const entry of entries) {
152
- try {
153
- entry.delete();
154
- await this.repository.save(entry);
155
- deletedCount++;
156
- } catch (error) {
157
- errors.push({
158
- id: entry.id,
159
- error: error instanceof Error ? error.message : 'Unknown error',
160
- });
161
- }
162
- }
163
-
164
- return {
165
- success: errors.length === 0,
166
- deletedCount,
167
- failedCount: errors.length,
168
- errors,
169
- };
170
- }
171
- }
172
- }
@@ -1,103 +0,0 @@
1
- /**
2
- * Store Memory Command - Application Layer (CQRS)
3
- *
4
- * Command for storing a new memory entry.
5
- * Implements CQRS pattern per ADR-002.
6
- *
7
- * @module v3/memory/application/commands
8
- */
9
-
10
- import { MemoryEntry, MemoryType } from '../../domain/entities/memory-entry.js';
11
- import { IMemoryRepository } from '../../domain/repositories/memory-repository.interface.js';
12
- import { MemoryDomainService } from '../../domain/services/memory-domain-service.js';
13
-
14
- /**
15
- * Store Memory Command Input
16
- */
17
- export interface StoreMemoryInput {
18
- namespace: string;
19
- key: string;
20
- value: unknown;
21
- type?: MemoryType;
22
- vector?: Float32Array;
23
- metadata?: Record<string, unknown>;
24
- ttl?: number;
25
- }
26
-
27
- /**
28
- * Store Memory Command Result
29
- */
30
- export interface StoreMemoryResult {
31
- success: boolean;
32
- entryId: string;
33
- entry: MemoryEntry;
34
- isUpdate: boolean;
35
- }
36
-
37
- /**
38
- * Store Memory Command Handler
39
- *
40
- * Handles the command to store a memory entry.
41
- * Coordinates between domain services and repository.
42
- */
43
- export class StoreMemoryCommandHandler {
44
- constructor(
45
- private readonly repository: IMemoryRepository,
46
- private readonly domainService: MemoryDomainService
47
- ) {}
48
-
49
- /**
50
- * Execute the store memory command
51
- */
52
- async execute(input: StoreMemoryInput): Promise<StoreMemoryResult> {
53
- // Check if entry already exists
54
- const existing = await this.repository.findByKey(input.namespace, input.key);
55
- const isUpdate = existing !== null;
56
-
57
- let entry: MemoryEntry;
58
-
59
- if (existing) {
60
- // Update existing entry
61
- existing.updateValue(input.value);
62
- if (input.vector) {
63
- existing.updateVector(input.vector);
64
- }
65
- if (input.metadata) {
66
- for (const [key, value] of Object.entries(input.metadata)) {
67
- existing.setMetadata(key, value);
68
- }
69
- }
70
- await this.repository.save(existing);
71
- entry = existing;
72
- } else {
73
- // Create new entry
74
- if (input.type) {
75
- entry = MemoryEntry.create({
76
- namespace: input.namespace,
77
- key: input.key,
78
- value: input.value,
79
- type: input.type,
80
- vector: input.vector,
81
- metadata: input.metadata,
82
- ttl: input.ttl,
83
- });
84
- await this.repository.save(entry);
85
- } else {
86
- // Use domain service for type detection
87
- entry = await this.domainService.storeWithTypeDetection(
88
- input.namespace,
89
- input.key,
90
- input.value,
91
- input.vector
92
- );
93
- }
94
- }
95
-
96
- return {
97
- success: true,
98
- entryId: entry.id,
99
- entry,
100
- isUpdate,
101
- };
102
- }
103
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * Memory Application Layer - Public Exports
3
- *
4
- * Exports all application services, commands, and queries.
5
- *
6
- * @module v3/memory/application
7
- */
8
-
9
- // Commands
10
- export {
11
- StoreMemoryCommandHandler,
12
- type StoreMemoryInput,
13
- type StoreMemoryResult,
14
- } from './commands/store-memory.command.js';
15
-
16
- export {
17
- DeleteMemoryCommandHandler,
18
- BulkDeleteMemoryCommandHandler,
19
- type DeleteMemoryInput,
20
- type DeleteMemoryResult,
21
- type BulkDeleteMemoryInput,
22
- type BulkDeleteMemoryResult,
23
- } from './commands/delete-memory.command.js';
24
-
25
- // Queries
26
- export {
27
- SearchMemoryQueryHandler,
28
- GetMemoryByKeyQueryHandler,
29
- type SearchMemoryInput,
30
- type SearchMemoryResult,
31
- type GetMemoryByKeyInput,
32
- type GetMemoryByKeyResult,
33
- } from './queries/search-memory.query.js';
34
-
35
- // Application Service
36
- export { MemoryApplicationService } from './services/memory-application-service.js';
@@ -1,237 +0,0 @@
1
- /**
2
- * Search Memory Query - Application Layer (CQRS)
3
- *
4
- * Query for searching memory entries.
5
- * Supports text search, vector search, and filtering.
6
- *
7
- * @module v3/memory/application/queries
8
- */
9
-
10
- import { MemoryEntry, MemoryType, MemoryStatus } from '../../domain/entities/memory-entry.js';
11
- import {
12
- IMemoryRepository,
13
- VectorSearchResult,
14
- MemoryQueryOptions,
15
- } from '../../domain/repositories/memory-repository.interface.js';
16
-
17
- /**
18
- * Search Memory Query Input
19
- */
20
- export interface SearchMemoryInput {
21
- // Vector search
22
- vector?: Float32Array;
23
- similarityThreshold?: number;
24
-
25
- // Filter options
26
- namespace?: string;
27
- type?: MemoryType;
28
- status?: MemoryStatus;
29
-
30
- // Pagination
31
- limit?: number;
32
- offset?: number;
33
-
34
- // Sorting
35
- orderBy?: 'createdAt' | 'updatedAt' | 'accessCount' | 'lastAccessedAt';
36
- orderDirection?: 'asc' | 'desc';
37
-
38
- // Text search (searches in value and metadata)
39
- textQuery?: string;
40
-
41
- // Access tracking
42
- trackAccess?: boolean;
43
- }
44
-
45
- /**
46
- * Search Memory Query Result
47
- */
48
- export interface SearchMemoryResult {
49
- entries: MemoryEntry[];
50
- total: number;
51
- hasMore: boolean;
52
- searchType: 'vector' | 'filter' | 'text';
53
- similarities?: number[];
54
- }
55
-
56
- /**
57
- * Search Memory Query Handler
58
- */
59
- export class SearchMemoryQueryHandler {
60
- constructor(private readonly repository: IMemoryRepository) {}
61
-
62
- async execute(input: SearchMemoryInput): Promise<SearchMemoryResult> {
63
- const limit = input.limit ?? 10;
64
- const offset = input.offset ?? 0;
65
-
66
- // Vector search takes precedence
67
- if (input.vector) {
68
- return this.executeVectorSearch(input, limit, offset);
69
- }
70
-
71
- // Text search
72
- if (input.textQuery) {
73
- return this.executeTextSearch(input, limit, offset);
74
- }
75
-
76
- // Filter-based search
77
- return this.executeFilterSearch(input, limit, offset);
78
- }
79
-
80
- private async executeVectorSearch(
81
- input: SearchMemoryInput,
82
- limit: number,
83
- offset: number
84
- ): Promise<SearchMemoryResult> {
85
- const results = await this.repository.searchByVector({
86
- vector: input.vector!,
87
- namespace: input.namespace,
88
- limit: limit + offset, // Get extra for pagination
89
- threshold: input.similarityThreshold ?? 0.5,
90
- type: input.type,
91
- });
92
-
93
- // Apply offset
94
- const paginatedResults = results.slice(offset, offset + limit);
95
-
96
- // Track access if requested
97
- if (input.trackAccess) {
98
- await this.trackEntryAccess(paginatedResults.map((r) => r.entry));
99
- }
100
-
101
- return {
102
- entries: paginatedResults.map((r) => r.entry),
103
- total: results.length,
104
- hasMore: results.length > offset + limit,
105
- searchType: 'vector',
106
- similarities: paginatedResults.map((r) => r.similarity),
107
- };
108
- }
109
-
110
- private async executeTextSearch(
111
- input: SearchMemoryInput,
112
- limit: number,
113
- offset: number
114
- ): Promise<SearchMemoryResult> {
115
- // Get all entries matching filters
116
- const options: MemoryQueryOptions = {
117
- namespace: input.namespace,
118
- type: input.type,
119
- status: input.status ?? 'active',
120
- orderBy: input.orderBy ?? 'createdAt',
121
- orderDirection: input.orderDirection ?? 'desc',
122
- };
123
-
124
- const allEntries = await this.repository.findAll(options);
125
-
126
- // Filter by text query
127
- const query = input.textQuery!.toLowerCase();
128
- const matchingEntries = allEntries.filter((entry) => {
129
- const valueStr = JSON.stringify(entry.value).toLowerCase();
130
- const metadataStr = JSON.stringify(entry.metadata).toLowerCase();
131
- return valueStr.includes(query) || metadataStr.includes(query);
132
- });
133
-
134
- // Paginate
135
- const paginatedEntries = matchingEntries.slice(offset, offset + limit);
136
-
137
- // Track access if requested
138
- if (input.trackAccess) {
139
- await this.trackEntryAccess(paginatedEntries);
140
- }
141
-
142
- return {
143
- entries: paginatedEntries,
144
- total: matchingEntries.length,
145
- hasMore: matchingEntries.length > offset + limit,
146
- searchType: 'text',
147
- };
148
- }
149
-
150
- private async executeFilterSearch(
151
- input: SearchMemoryInput,
152
- limit: number,
153
- offset: number
154
- ): Promise<SearchMemoryResult> {
155
- const options: MemoryQueryOptions = {
156
- namespace: input.namespace,
157
- type: input.type,
158
- status: input.status ?? 'active',
159
- limit,
160
- offset,
161
- orderBy: input.orderBy ?? 'createdAt',
162
- orderDirection: input.orderDirection ?? 'desc',
163
- };
164
-
165
- const entries = await this.repository.findAll(options);
166
- const total = await this.repository.count({
167
- namespace: input.namespace,
168
- type: input.type,
169
- status: input.status ?? 'active',
170
- });
171
-
172
- // Track access if requested
173
- if (input.trackAccess) {
174
- await this.trackEntryAccess(entries);
175
- }
176
-
177
- return {
178
- entries,
179
- total,
180
- hasMore: total > offset + limit,
181
- searchType: 'filter',
182
- };
183
- }
184
-
185
- private async trackEntryAccess(entries: MemoryEntry[]): Promise<void> {
186
- for (const entry of entries) {
187
- entry.recordAccess();
188
- await this.repository.save(entry);
189
- }
190
- }
191
- }
192
-
193
- /**
194
- * Get Memory By Key Query Input
195
- */
196
- export interface GetMemoryByKeyInput {
197
- namespace: string;
198
- key: string;
199
- trackAccess?: boolean;
200
- }
201
-
202
- /**
203
- * Get Memory By Key Query Result
204
- */
205
- export interface GetMemoryByKeyResult {
206
- found: boolean;
207
- entry?: MemoryEntry;
208
- }
209
-
210
- /**
211
- * Get Memory By Key Query Handler
212
- */
213
- export class GetMemoryByKeyQueryHandler {
214
- constructor(private readonly repository: IMemoryRepository) {}
215
-
216
- async execute(input: GetMemoryByKeyInput): Promise<GetMemoryByKeyResult> {
217
- const entry = await this.repository.findByKey(input.namespace, input.key);
218
-
219
- if (!entry) {
220
- return { found: false };
221
- }
222
-
223
- if (!entry.isAccessible()) {
224
- return { found: false };
225
- }
226
-
227
- if (input.trackAccess) {
228
- entry.recordAccess();
229
- await this.repository.save(entry);
230
- }
231
-
232
- return {
233
- found: true,
234
- entry,
235
- };
236
- }
237
- }