moflo 4.8.19 → 4.8.20

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 (241) hide show
  1. package/.claude/guidance/shipped/moflo.md +45 -0
  2. package/.claude/helpers/statusline.cjs +1 -1
  3. package/.claude/workflow-state.json +9 -0
  4. package/package.json +2 -2
  5. package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +1 -1
  6. package/src/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +5 -3
  7. package/src/@claude-flow/cli/package.json +1 -1
  8. package/src/@claude-flow/memory/dist/agent-memory-scope.d.ts +131 -0
  9. package/src/@claude-flow/memory/dist/agent-memory-scope.js +223 -0
  10. package/src/@claude-flow/memory/dist/agent-memory-scope.test.d.ts +8 -0
  11. package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +466 -0
  12. package/src/@claude-flow/memory/dist/agentdb-adapter.d.ts +165 -0
  13. package/src/@claude-flow/memory/dist/agentdb-adapter.js +806 -0
  14. package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +212 -0
  15. package/src/@claude-flow/memory/dist/agentdb-backend.js +842 -0
  16. package/src/@claude-flow/memory/dist/agentdb-backend.test.d.ts +7 -0
  17. package/src/@claude-flow/memory/dist/agentdb-backend.test.js +258 -0
  18. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.d.ts +65 -0
  19. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.js +129 -0
  20. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.d.ts +48 -0
  21. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.js +72 -0
  22. package/src/@claude-flow/memory/dist/application/index.d.ts +12 -0
  23. package/src/@claude-flow/memory/dist/application/index.js +15 -0
  24. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.d.ts +72 -0
  25. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.js +143 -0
  26. package/src/@claude-flow/memory/dist/application/services/memory-application-service.d.ts +121 -0
  27. package/src/@claude-flow/memory/dist/application/services/memory-application-service.js +190 -0
  28. package/src/@claude-flow/memory/dist/auto-memory-bridge.d.ts +226 -0
  29. package/src/@claude-flow/memory/dist/auto-memory-bridge.js +709 -0
  30. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.d.ts +8 -0
  31. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +757 -0
  32. package/src/@claude-flow/memory/dist/benchmark.test.d.ts +2 -0
  33. package/src/@claude-flow/memory/dist/benchmark.test.js +277 -0
  34. package/src/@claude-flow/memory/dist/cache-manager.d.ts +134 -0
  35. package/src/@claude-flow/memory/dist/cache-manager.js +407 -0
  36. package/src/@claude-flow/memory/dist/controller-registry.d.ts +216 -0
  37. package/src/@claude-flow/memory/dist/controller-registry.js +893 -0
  38. package/src/@claude-flow/memory/dist/controller-registry.test.d.ts +14 -0
  39. package/src/@claude-flow/memory/dist/controller-registry.test.js +593 -0
  40. package/src/@claude-flow/memory/dist/database-provider.d.ts +87 -0
  41. package/src/@claude-flow/memory/dist/database-provider.js +372 -0
  42. package/src/@claude-flow/memory/dist/database-provider.test.d.ts +7 -0
  43. package/src/@claude-flow/memory/dist/database-provider.test.js +287 -0
  44. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.d.ts +143 -0
  45. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.js +226 -0
  46. package/src/@claude-flow/memory/dist/domain/index.d.ts +11 -0
  47. package/src/@claude-flow/memory/dist/domain/index.js +12 -0
  48. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
  49. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.js +11 -0
  50. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.d.ts +105 -0
  51. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.js +297 -0
  52. package/src/@claude-flow/memory/dist/hnsw-index.d.ts +111 -0
  53. package/src/@claude-flow/memory/dist/hnsw-index.js +781 -0
  54. package/src/@claude-flow/memory/dist/hnsw-lite.d.ts +23 -0
  55. package/src/@claude-flow/memory/dist/hnsw-lite.js +168 -0
  56. package/src/@claude-flow/memory/dist/index.d.ts +204 -0
  57. package/src/@claude-flow/memory/dist/index.js +358 -0
  58. package/src/@claude-flow/memory/dist/infrastructure/index.d.ts +17 -0
  59. package/src/@claude-flow/memory/dist/infrastructure/index.js +16 -0
  60. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
  61. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
  62. package/src/@claude-flow/memory/dist/learning-bridge.d.ts +137 -0
  63. package/src/@claude-flow/memory/dist/learning-bridge.js +335 -0
  64. package/src/@claude-flow/memory/dist/learning-bridge.test.d.ts +8 -0
  65. package/src/@claude-flow/memory/dist/learning-bridge.test.js +578 -0
  66. package/src/@claude-flow/memory/dist/memory-graph.d.ts +100 -0
  67. package/src/@claude-flow/memory/dist/memory-graph.js +333 -0
  68. package/src/@claude-flow/memory/dist/memory-graph.test.d.ts +8 -0
  69. package/src/@claude-flow/memory/dist/memory-graph.test.js +609 -0
  70. package/src/@claude-flow/memory/dist/migration.d.ts +68 -0
  71. package/src/@claude-flow/memory/dist/migration.js +513 -0
  72. package/src/@claude-flow/memory/dist/persistent-sona.d.ts +144 -0
  73. package/src/@claude-flow/memory/dist/persistent-sona.js +332 -0
  74. package/src/@claude-flow/memory/dist/query-builder.d.ts +211 -0
  75. package/src/@claude-flow/memory/dist/query-builder.js +438 -0
  76. package/src/@claude-flow/memory/dist/rvf-backend.d.ts +51 -0
  77. package/src/@claude-flow/memory/dist/rvf-backend.js +481 -0
  78. package/src/@claude-flow/memory/dist/rvf-learning-store.d.ts +139 -0
  79. package/src/@claude-flow/memory/dist/rvf-learning-store.js +295 -0
  80. package/src/@claude-flow/memory/dist/rvf-migration.d.ts +45 -0
  81. package/src/@claude-flow/memory/dist/rvf-migration.js +234 -0
  82. package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +127 -0
  83. package/src/@claude-flow/memory/dist/sqljs-backend.js +600 -0
  84. package/src/@claude-flow/memory/dist/types.d.ts +484 -0
  85. package/src/@claude-flow/memory/dist/types.js +58 -0
  86. package/src/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
  87. package/src/@claude-flow/shared/dist/core/config/defaults.js +186 -0
  88. package/src/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
  89. package/src/@claude-flow/shared/dist/core/config/index.js +12 -0
  90. package/src/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
  91. package/src/@claude-flow/shared/dist/core/config/loader.js +222 -0
  92. package/src/@claude-flow/shared/dist/core/config/schema.d.ts +1134 -0
  93. package/src/@claude-flow/shared/dist/core/config/schema.js +158 -0
  94. package/src/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
  95. package/src/@claude-flow/shared/dist/core/config/validator.js +147 -0
  96. package/src/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
  97. package/src/@claude-flow/shared/dist/core/event-bus.js +197 -0
  98. package/src/@claude-flow/shared/dist/core/index.d.ts +15 -0
  99. package/src/@claude-flow/shared/dist/core/index.js +19 -0
  100. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
  101. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
  102. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
  103. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
  104. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
  105. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
  106. package/src/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
  107. package/src/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
  108. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
  109. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
  110. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
  111. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
  112. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
  113. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
  114. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
  115. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
  116. package/src/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
  117. package/src/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
  118. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
  119. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
  120. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
  121. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
  122. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
  123. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
  124. package/src/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
  125. package/src/@claude-flow/shared/dist/events/domain-events.js +165 -0
  126. package/src/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
  127. package/src/@claude-flow/shared/dist/events/event-store.js +432 -0
  128. package/src/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
  129. package/src/@claude-flow/shared/dist/events/event-store.test.js +297 -0
  130. package/src/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
  131. package/src/@claude-flow/shared/dist/events/example-usage.js +193 -0
  132. package/src/@claude-flow/shared/dist/events/index.d.ts +21 -0
  133. package/src/@claude-flow/shared/dist/events/index.js +22 -0
  134. package/src/@claude-flow/shared/dist/events/projections.d.ts +177 -0
  135. package/src/@claude-flow/shared/dist/events/projections.js +421 -0
  136. package/src/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
  137. package/src/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
  138. package/src/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
  139. package/src/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
  140. package/src/@claude-flow/shared/dist/events.d.ts +80 -0
  141. package/src/@claude-flow/shared/dist/events.js +249 -0
  142. package/src/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
  143. package/src/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
  144. package/src/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
  145. package/src/@claude-flow/shared/dist/hooks/executor.js +267 -0
  146. package/src/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
  147. package/src/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
  148. package/src/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
  149. package/src/@claude-flow/shared/dist/hooks/index.js +51 -0
  150. package/src/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
  151. package/src/@claude-flow/shared/dist/hooks/registry.js +277 -0
  152. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
  153. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
  154. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
  155. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
  156. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
  157. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
  158. package/src/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
  159. package/src/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
  160. package/src/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
  161. package/src/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
  162. package/src/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
  163. package/src/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
  164. package/src/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
  165. package/src/@claude-flow/shared/dist/hooks/types.js +62 -0
  166. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
  167. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
  168. package/src/@claude-flow/shared/dist/index.d.ts +20 -0
  169. package/src/@claude-flow/shared/dist/index.js +50 -0
  170. package/src/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
  171. package/src/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
  172. package/src/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
  173. package/src/@claude-flow/shared/dist/mcp/index.js +84 -0
  174. package/src/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
  175. package/src/@claude-flow/shared/dist/mcp/server.js +593 -0
  176. package/src/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
  177. package/src/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
  178. package/src/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
  179. package/src/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
  180. package/src/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
  181. package/src/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
  182. package/src/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
  183. package/src/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
  184. package/src/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
  185. package/src/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
  186. package/src/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
  187. package/src/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
  188. package/src/@claude-flow/shared/dist/mcp/types.d.ts +438 -0
  189. package/src/@claude-flow/shared/dist/mcp/types.js +54 -0
  190. package/src/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
  191. package/src/@claude-flow/shared/dist/plugin-interface.js +23 -0
  192. package/src/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
  193. package/src/@claude-flow/shared/dist/plugin-loader.js +434 -0
  194. package/src/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
  195. package/src/@claude-flow/shared/dist/plugin-registry.js +457 -0
  196. package/src/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
  197. package/src/@claude-flow/shared/dist/plugins/index.js +10 -0
  198. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
  199. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
  200. package/src/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
  201. package/src/@claude-flow/shared/dist/plugins/official/index.js +10 -0
  202. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
  203. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
  204. package/src/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
  205. package/src/@claude-flow/shared/dist/plugins/types.js +9 -0
  206. package/src/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
  207. package/src/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
  208. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
  209. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
  210. package/src/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
  211. package/src/@claude-flow/shared/dist/resilience/index.js +19 -0
  212. package/src/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
  213. package/src/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
  214. package/src/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
  215. package/src/@claude-flow/shared/dist/resilience/retry.js +159 -0
  216. package/src/@claude-flow/shared/dist/security/index.d.ts +10 -0
  217. package/src/@claude-flow/shared/dist/security/index.js +12 -0
  218. package/src/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
  219. package/src/@claude-flow/shared/dist/security/input-validation.js +201 -0
  220. package/src/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
  221. package/src/@claude-flow/shared/dist/security/secure-random.js +142 -0
  222. package/src/@claude-flow/shared/dist/services/index.d.ts +7 -0
  223. package/src/@claude-flow/shared/dist/services/index.js +7 -0
  224. package/src/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
  225. package/src/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
  226. package/src/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
  227. package/src/@claude-flow/shared/dist/types/agent.types.js +6 -0
  228. package/src/@claude-flow/shared/dist/types/index.d.ts +11 -0
  229. package/src/@claude-flow/shared/dist/types/index.js +17 -0
  230. package/src/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
  231. package/src/@claude-flow/shared/dist/types/mcp.types.js +7 -0
  232. package/src/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
  233. package/src/@claude-flow/shared/dist/types/memory.types.js +7 -0
  234. package/src/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
  235. package/src/@claude-flow/shared/dist/types/swarm.types.js +65 -0
  236. package/src/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
  237. package/src/@claude-flow/shared/dist/types/task.types.js +32 -0
  238. package/src/@claude-flow/shared/dist/types.d.ts +197 -0
  239. package/src/@claude-flow/shared/dist/types.js +21 -0
  240. package/src/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
  241. package/src/@claude-flow/shared/dist/utils/secure-logger.js +208 -0
@@ -0,0 +1,143 @@
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
+ * Search Memory Query Handler
11
+ */
12
+ export class SearchMemoryQueryHandler {
13
+ repository;
14
+ constructor(repository) {
15
+ this.repository = repository;
16
+ }
17
+ async execute(input) {
18
+ const limit = input.limit ?? 10;
19
+ const offset = input.offset ?? 0;
20
+ // Vector search takes precedence
21
+ if (input.vector) {
22
+ return this.executeVectorSearch(input, limit, offset);
23
+ }
24
+ // Text search
25
+ if (input.textQuery) {
26
+ return this.executeTextSearch(input, limit, offset);
27
+ }
28
+ // Filter-based search
29
+ return this.executeFilterSearch(input, limit, offset);
30
+ }
31
+ async executeVectorSearch(input, limit, offset) {
32
+ const results = await this.repository.searchByVector({
33
+ vector: input.vector,
34
+ namespace: input.namespace,
35
+ limit: limit + offset, // Get extra for pagination
36
+ threshold: input.similarityThreshold ?? 0.5,
37
+ type: input.type,
38
+ });
39
+ // Apply offset
40
+ const paginatedResults = results.slice(offset, offset + limit);
41
+ // Track access if requested
42
+ if (input.trackAccess) {
43
+ await this.trackEntryAccess(paginatedResults.map((r) => r.entry));
44
+ }
45
+ return {
46
+ entries: paginatedResults.map((r) => r.entry),
47
+ total: results.length,
48
+ hasMore: results.length > offset + limit,
49
+ searchType: 'vector',
50
+ similarities: paginatedResults.map((r) => r.similarity),
51
+ };
52
+ }
53
+ async executeTextSearch(input, limit, offset) {
54
+ // Get all entries matching filters
55
+ const options = {
56
+ namespace: input.namespace,
57
+ type: input.type,
58
+ status: input.status ?? 'active',
59
+ orderBy: input.orderBy ?? 'createdAt',
60
+ orderDirection: input.orderDirection ?? 'desc',
61
+ };
62
+ const allEntries = await this.repository.findAll(options);
63
+ // Filter by text query
64
+ const query = input.textQuery.toLowerCase();
65
+ const matchingEntries = allEntries.filter((entry) => {
66
+ const valueStr = JSON.stringify(entry.value).toLowerCase();
67
+ const metadataStr = JSON.stringify(entry.metadata).toLowerCase();
68
+ return valueStr.includes(query) || metadataStr.includes(query);
69
+ });
70
+ // Paginate
71
+ const paginatedEntries = matchingEntries.slice(offset, offset + limit);
72
+ // Track access if requested
73
+ if (input.trackAccess) {
74
+ await this.trackEntryAccess(paginatedEntries);
75
+ }
76
+ return {
77
+ entries: paginatedEntries,
78
+ total: matchingEntries.length,
79
+ hasMore: matchingEntries.length > offset + limit,
80
+ searchType: 'text',
81
+ };
82
+ }
83
+ async executeFilterSearch(input, limit, offset) {
84
+ const options = {
85
+ namespace: input.namespace,
86
+ type: input.type,
87
+ status: input.status ?? 'active',
88
+ limit,
89
+ offset,
90
+ orderBy: input.orderBy ?? 'createdAt',
91
+ orderDirection: input.orderDirection ?? 'desc',
92
+ };
93
+ const entries = await this.repository.findAll(options);
94
+ const total = await this.repository.count({
95
+ namespace: input.namespace,
96
+ type: input.type,
97
+ status: input.status ?? 'active',
98
+ });
99
+ // Track access if requested
100
+ if (input.trackAccess) {
101
+ await this.trackEntryAccess(entries);
102
+ }
103
+ return {
104
+ entries,
105
+ total,
106
+ hasMore: total > offset + limit,
107
+ searchType: 'filter',
108
+ };
109
+ }
110
+ async trackEntryAccess(entries) {
111
+ for (const entry of entries) {
112
+ entry.recordAccess();
113
+ await this.repository.save(entry);
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Get Memory By Key Query Handler
119
+ */
120
+ export class GetMemoryByKeyQueryHandler {
121
+ repository;
122
+ constructor(repository) {
123
+ this.repository = repository;
124
+ }
125
+ async execute(input) {
126
+ const entry = await this.repository.findByKey(input.namespace, input.key);
127
+ if (!entry) {
128
+ return { found: false };
129
+ }
130
+ if (!entry.isAccessible()) {
131
+ return { found: false };
132
+ }
133
+ if (input.trackAccess) {
134
+ entry.recordAccess();
135
+ await this.repository.save(entry);
136
+ }
137
+ return {
138
+ found: true,
139
+ entry,
140
+ };
141
+ }
142
+ }
143
+ //# sourceMappingURL=search-memory.query.js.map
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Memory Application Service - Application Layer
3
+ *
4
+ * Orchestrates use cases and coordinates between domain and infrastructure.
5
+ * Provides a simplified interface for external consumers.
6
+ *
7
+ * @module v3/memory/application/services
8
+ */
9
+ import { MemoryEntry, MemoryType } from '../../domain/entities/memory-entry.js';
10
+ import { IMemoryRepository, VectorSearchResult, MemoryStatistics } from '../../domain/repositories/memory-repository.interface.js';
11
+ import { ConsolidationOptions, ConsolidationResult } from '../../domain/services/memory-domain-service.js';
12
+ import { StoreMemoryInput } from '../commands/store-memory.command.js';
13
+ import { SearchMemoryInput } from '../queries/search-memory.query.js';
14
+ /**
15
+ * Memory Application Service
16
+ *
17
+ * Main entry point for memory operations.
18
+ * Coordinates commands and queries with domain services.
19
+ */
20
+ export declare class MemoryApplicationService {
21
+ private readonly repository;
22
+ private readonly domainService;
23
+ private readonly storeHandler;
24
+ private readonly deleteHandler;
25
+ private readonly bulkDeleteHandler;
26
+ private readonly searchHandler;
27
+ private readonly getByKeyHandler;
28
+ constructor(repository: IMemoryRepository);
29
+ /**
30
+ * Store a memory entry
31
+ */
32
+ store(input: StoreMemoryInput): Promise<MemoryEntry>;
33
+ /**
34
+ * Store multiple memory entries
35
+ */
36
+ storeMany(inputs: StoreMemoryInput[]): Promise<MemoryEntry[]>;
37
+ /**
38
+ * Get a memory entry by namespace and key
39
+ */
40
+ get(namespace: string, key: string): Promise<MemoryEntry | null>;
41
+ /**
42
+ * Get a memory entry by ID
43
+ */
44
+ getById(id: string): Promise<MemoryEntry | null>;
45
+ /**
46
+ * Search memory entries
47
+ */
48
+ search(input: SearchMemoryInput): Promise<{
49
+ entries: MemoryEntry[];
50
+ total: number;
51
+ hasMore: boolean;
52
+ }>;
53
+ /**
54
+ * Search by vector similarity
55
+ */
56
+ searchByVector(vector: Float32Array, options?: {
57
+ namespace?: string;
58
+ limit?: number;
59
+ threshold?: number;
60
+ }): Promise<VectorSearchResult[]>;
61
+ /**
62
+ * Get all entries in a namespace
63
+ */
64
+ getNamespace(namespace: string): Promise<MemoryEntry[]>;
65
+ /**
66
+ * List all namespaces
67
+ */
68
+ listNamespaces(): Promise<string[]>;
69
+ /**
70
+ * Delete a memory entry by namespace and key
71
+ */
72
+ delete(namespace: string, key: string, hardDelete?: boolean): Promise<boolean>;
73
+ /**
74
+ * Delete a memory entry by ID
75
+ */
76
+ deleteById(id: string, hardDelete?: boolean): Promise<boolean>;
77
+ /**
78
+ * Delete all entries in a namespace
79
+ */
80
+ deleteNamespace(namespace: string, hardDelete?: boolean): Promise<number>;
81
+ /**
82
+ * Clear all memory entries
83
+ */
84
+ clear(): Promise<void>;
85
+ /**
86
+ * Consolidate memories using specified strategy
87
+ */
88
+ consolidate(options: ConsolidationOptions): Promise<ConsolidationResult>;
89
+ /**
90
+ * Clean up expired memories
91
+ */
92
+ cleanupExpired(): Promise<number>;
93
+ /**
94
+ * Archive cold (rarely accessed) memories
95
+ */
96
+ archiveCold(milliseconds?: number): Promise<number>;
97
+ /**
98
+ * Get memory statistics
99
+ */
100
+ getStatistics(): Promise<MemoryStatistics>;
101
+ /**
102
+ * Count entries matching criteria
103
+ */
104
+ count(options?: {
105
+ namespace?: string;
106
+ type?: MemoryType;
107
+ }): Promise<number>;
108
+ /**
109
+ * Analyze a namespace
110
+ */
111
+ analyzeNamespace(namespace: string): Promise<import("../../domain/index.js").NamespaceAnalysis>;
112
+ /**
113
+ * Initialize the memory service
114
+ */
115
+ initialize(): Promise<void>;
116
+ /**
117
+ * Shutdown the memory service
118
+ */
119
+ shutdown(): Promise<void>;
120
+ }
121
+ //# sourceMappingURL=memory-application-service.d.ts.map
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Memory Application Service - Application Layer
3
+ *
4
+ * Orchestrates use cases and coordinates between domain and infrastructure.
5
+ * Provides a simplified interface for external consumers.
6
+ *
7
+ * @module v3/memory/application/services
8
+ */
9
+ import { MemoryDomainService } from '../../domain/services/memory-domain-service.js';
10
+ import { StoreMemoryCommandHandler } from '../commands/store-memory.command.js';
11
+ import { DeleteMemoryCommandHandler, BulkDeleteMemoryCommandHandler } from '../commands/delete-memory.command.js';
12
+ import { SearchMemoryQueryHandler, GetMemoryByKeyQueryHandler } from '../queries/search-memory.query.js';
13
+ /**
14
+ * Memory Application Service
15
+ *
16
+ * Main entry point for memory operations.
17
+ * Coordinates commands and queries with domain services.
18
+ */
19
+ export class MemoryApplicationService {
20
+ repository;
21
+ domainService;
22
+ storeHandler;
23
+ deleteHandler;
24
+ bulkDeleteHandler;
25
+ searchHandler;
26
+ getByKeyHandler;
27
+ constructor(repository) {
28
+ this.repository = repository;
29
+ this.domainService = new MemoryDomainService(repository);
30
+ this.storeHandler = new StoreMemoryCommandHandler(repository, this.domainService);
31
+ this.deleteHandler = new DeleteMemoryCommandHandler(repository);
32
+ this.bulkDeleteHandler = new BulkDeleteMemoryCommandHandler(repository);
33
+ this.searchHandler = new SearchMemoryQueryHandler(repository);
34
+ this.getByKeyHandler = new GetMemoryByKeyQueryHandler(repository);
35
+ }
36
+ // ============================================================================
37
+ // Store Operations (Commands)
38
+ // ============================================================================
39
+ /**
40
+ * Store a memory entry
41
+ */
42
+ async store(input) {
43
+ const result = await this.storeHandler.execute(input);
44
+ return result.entry;
45
+ }
46
+ /**
47
+ * Store multiple memory entries
48
+ */
49
+ async storeMany(inputs) {
50
+ const results = await Promise.all(inputs.map((input) => this.storeHandler.execute(input)));
51
+ return results.map((r) => r.entry);
52
+ }
53
+ // ============================================================================
54
+ // Retrieve Operations (Queries)
55
+ // ============================================================================
56
+ /**
57
+ * Get a memory entry by namespace and key
58
+ */
59
+ async get(namespace, key) {
60
+ const result = await this.getByKeyHandler.execute({ namespace, key, trackAccess: true });
61
+ return result.entry ?? null;
62
+ }
63
+ /**
64
+ * Get a memory entry by ID
65
+ */
66
+ async getById(id) {
67
+ return this.repository.findById(id);
68
+ }
69
+ /**
70
+ * Search memory entries
71
+ */
72
+ async search(input) {
73
+ const result = await this.searchHandler.execute(input);
74
+ return {
75
+ entries: result.entries,
76
+ total: result.total,
77
+ hasMore: result.hasMore,
78
+ };
79
+ }
80
+ /**
81
+ * Search by vector similarity
82
+ */
83
+ async searchByVector(vector, options) {
84
+ return this.domainService.searchSimilarWithTracking(vector, options?.namespace, options?.limit ?? 10);
85
+ }
86
+ /**
87
+ * Get all entries in a namespace
88
+ */
89
+ async getNamespace(namespace) {
90
+ return this.repository.findByNamespace(namespace, { status: 'active' });
91
+ }
92
+ /**
93
+ * List all namespaces
94
+ */
95
+ async listNamespaces() {
96
+ return this.repository.listNamespaces();
97
+ }
98
+ // ============================================================================
99
+ // Delete Operations (Commands)
100
+ // ============================================================================
101
+ /**
102
+ * Delete a memory entry by namespace and key
103
+ */
104
+ async delete(namespace, key, hardDelete = false) {
105
+ const result = await this.deleteHandler.execute({ namespace, key, hardDelete });
106
+ return result.deleted;
107
+ }
108
+ /**
109
+ * Delete a memory entry by ID
110
+ */
111
+ async deleteById(id, hardDelete = false) {
112
+ const result = await this.deleteHandler.execute({ id, hardDelete });
113
+ return result.deleted;
114
+ }
115
+ /**
116
+ * Delete all entries in a namespace
117
+ */
118
+ async deleteNamespace(namespace, hardDelete = false) {
119
+ const entries = await this.repository.findByNamespace(namespace);
120
+ const result = await this.bulkDeleteHandler.execute({
121
+ ids: entries.map((e) => e.id),
122
+ hardDelete,
123
+ });
124
+ return result.deletedCount;
125
+ }
126
+ /**
127
+ * Clear all memory entries
128
+ */
129
+ async clear() {
130
+ await this.repository.clear();
131
+ }
132
+ // ============================================================================
133
+ // Maintenance Operations
134
+ // ============================================================================
135
+ /**
136
+ * Consolidate memories using specified strategy
137
+ */
138
+ async consolidate(options) {
139
+ return this.domainService.consolidate(options);
140
+ }
141
+ /**
142
+ * Clean up expired memories
143
+ */
144
+ async cleanupExpired() {
145
+ return this.repository.deleteExpired();
146
+ }
147
+ /**
148
+ * Archive cold (rarely accessed) memories
149
+ */
150
+ async archiveCold(milliseconds = 86400000) {
151
+ return this.repository.archiveCold(milliseconds);
152
+ }
153
+ // ============================================================================
154
+ // Statistics
155
+ // ============================================================================
156
+ /**
157
+ * Get memory statistics
158
+ */
159
+ async getStatistics() {
160
+ return this.repository.getStatistics();
161
+ }
162
+ /**
163
+ * Count entries matching criteria
164
+ */
165
+ async count(options) {
166
+ return this.repository.count(options);
167
+ }
168
+ /**
169
+ * Analyze a namespace
170
+ */
171
+ async analyzeNamespace(namespace) {
172
+ return this.domainService.analyzeNamespace(namespace);
173
+ }
174
+ // ============================================================================
175
+ // Lifecycle
176
+ // ============================================================================
177
+ /**
178
+ * Initialize the memory service
179
+ */
180
+ async initialize() {
181
+ await this.repository.initialize();
182
+ }
183
+ /**
184
+ * Shutdown the memory service
185
+ */
186
+ async shutdown() {
187
+ await this.repository.shutdown();
188
+ }
189
+ }
190
+ //# sourceMappingURL=memory-application-service.js.map
@@ -0,0 +1,226 @@
1
+ /**
2
+ * AutoMemoryBridge - Bidirectional sync between Claude Code Auto Memory and AgentDB
3
+ *
4
+ * Per ADR-048: Bridges Claude Code's auto memory (markdown files at
5
+ * ~/.claude/projects/<project>/memory/) with claude-flow's unified memory
6
+ * system (AgentDB + HNSW).
7
+ *
8
+ * Auto memory files are human-readable markdown that Claude loads into its
9
+ * system prompt. MEMORY.md (first 200 lines) is the entrypoint; topic files
10
+ * store detailed notes and are read on demand.
11
+ *
12
+ * @module @claude-flow/memory/auto-memory-bridge
13
+ */
14
+ import { EventEmitter } from 'node:events';
15
+ import { type IMemoryBackend } from './types.js';
16
+ import { type LearningBridgeConfig } from './learning-bridge.js';
17
+ import { type MemoryGraphConfig } from './memory-graph.js';
18
+ /** Insight category for organization in MEMORY.md */
19
+ export type InsightCategory = 'project-patterns' | 'debugging' | 'architecture' | 'performance' | 'security' | 'preferences' | 'swarm-results';
20
+ /** Sync direction */
21
+ export type SyncDirection = 'to-auto' | 'from-auto' | 'bidirectional';
22
+ /** Sync mode determines when syncs occur */
23
+ export type SyncMode = 'on-write' | 'on-session-end' | 'periodic';
24
+ /** Prune strategy for keeping MEMORY.md under line limit */
25
+ export type PruneStrategy = 'confidence-weighted' | 'fifo' | 'lru';
26
+ /** Configuration for AutoMemoryBridge */
27
+ export interface AutoMemoryBridgeConfig {
28
+ /** Auto memory directory path (auto-resolved if not provided) */
29
+ memoryDir?: string;
30
+ /** Working directory for git root detection */
31
+ workingDir?: string;
32
+ /** Max lines for MEMORY.md index (default: 180, Claude reads first 200) */
33
+ maxIndexLines?: number;
34
+ /** Topic file mapping: category → filename */
35
+ topicMapping?: Partial<Record<InsightCategory, string>>;
36
+ /** Sync mode (default: 'on-session-end') */
37
+ syncMode?: SyncMode;
38
+ /** Periodic sync interval in ms (if syncMode is 'periodic') */
39
+ syncIntervalMs?: number;
40
+ /** Minimum confidence for syncing to auto memory (default: 0.7) */
41
+ minConfidence?: number;
42
+ /** Maximum lines per topic file (default: 500) */
43
+ maxTopicFileLines?: number;
44
+ /** Prune strategy for MEMORY.md (default: 'confidence-weighted') */
45
+ pruneStrategy?: PruneStrategy;
46
+ /** Learning bridge config (ADR-049). When set, insights trigger neural learning. */
47
+ learning?: LearningBridgeConfig;
48
+ /** Knowledge graph config (ADR-049). When set, graph-aware curation is enabled. */
49
+ graph?: MemoryGraphConfig;
50
+ }
51
+ /** A memory insight to record */
52
+ export interface MemoryInsight {
53
+ /** Category for organization */
54
+ category: InsightCategory;
55
+ /** One-line summary for MEMORY.md index */
56
+ summary: string;
57
+ /** Detailed content (goes in topic file if > 2 lines) */
58
+ detail?: string;
59
+ /** Source: which agent/hook discovered this */
60
+ source: string;
61
+ /** Confidence score (0-1), used for curation priority */
62
+ confidence: number;
63
+ /** AgentDB entry ID for cross-reference */
64
+ agentDbId?: string;
65
+ }
66
+ /** Result of a sync operation */
67
+ export interface SyncResult {
68
+ /** Number of entries synced */
69
+ synced: number;
70
+ /** Categories that were updated */
71
+ categories: string[];
72
+ /** Duration of sync in milliseconds */
73
+ durationMs: number;
74
+ /** Any errors encountered */
75
+ errors: string[];
76
+ }
77
+ /** Result of an import operation */
78
+ export interface ImportResult {
79
+ /** Number of entries imported */
80
+ imported: number;
81
+ /** Number of entries skipped (already in AgentDB) */
82
+ skipped: number;
83
+ /** Files processed */
84
+ files: string[];
85
+ /** Duration in milliseconds */
86
+ durationMs: number;
87
+ }
88
+ /** Parsed markdown entry from a topic file */
89
+ interface ParsedEntry {
90
+ heading: string;
91
+ content: string;
92
+ metadata: Record<string, string>;
93
+ }
94
+ /**
95
+ * Bidirectional bridge between Claude Code auto memory and AgentDB.
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const bridge = new AutoMemoryBridge(memoryBackend, {
100
+ * workingDir: '/workspaces/my-project',
101
+ * });
102
+ *
103
+ * // Record an insight
104
+ * await bridge.recordInsight({
105
+ * category: 'debugging',
106
+ * summary: 'HNSW index requires initialization before search',
107
+ * source: 'agent:tester',
108
+ * confidence: 0.95,
109
+ * });
110
+ *
111
+ * // Sync to auto memory files
112
+ * await bridge.syncToAutoMemory();
113
+ *
114
+ * // Import auto memory into AgentDB
115
+ * await bridge.importFromAutoMemory();
116
+ * ```
117
+ */
118
+ export declare class AutoMemoryBridge extends EventEmitter {
119
+ private config;
120
+ private backend;
121
+ private lastSyncTime;
122
+ private syncTimer;
123
+ private insights;
124
+ /** Track AgentDB keys of insights already written to files during this session */
125
+ private syncedInsightKeys;
126
+ /** Monotonic counter to prevent key collisions within the same ms */
127
+ private insightCounter;
128
+ /** Optional learning bridge (ADR-049) */
129
+ private learningBridge?;
130
+ /** Optional knowledge graph (ADR-049) */
131
+ private memoryGraph?;
132
+ constructor(backend: IMemoryBackend, config?: AutoMemoryBridgeConfig);
133
+ /** Get the resolved auto memory directory path */
134
+ getMemoryDir(): string;
135
+ /** Get the path to MEMORY.md */
136
+ getIndexPath(): string;
137
+ /** Get the path to a topic file */
138
+ getTopicPath(category: InsightCategory): string;
139
+ /**
140
+ * Record a memory insight.
141
+ * Stores in the in-memory buffer and optionally writes immediately.
142
+ */
143
+ recordInsight(insight: MemoryInsight): Promise<void>;
144
+ /**
145
+ * Sync high-confidence AgentDB entries to auto memory files.
146
+ * Called on session-end or periodically.
147
+ */
148
+ syncToAutoMemory(): Promise<SyncResult>;
149
+ /**
150
+ * Import auto memory files into AgentDB.
151
+ * Called on session-start to hydrate AgentDB with previous learnings.
152
+ * Uses bulk insert for efficiency.
153
+ */
154
+ importFromAutoMemory(): Promise<ImportResult>;
155
+ /**
156
+ * Curate MEMORY.md to stay under the line limit.
157
+ * Groups entries by category and prunes low-confidence items.
158
+ */
159
+ curateIndex(): Promise<void>;
160
+ /**
161
+ * Get auto memory status: directory info, file count, line counts.
162
+ */
163
+ getStatus(): {
164
+ memoryDir: string;
165
+ exists: boolean;
166
+ files: {
167
+ name: string;
168
+ lines: number;
169
+ }[];
170
+ totalLines: number;
171
+ indexLines: number;
172
+ lastSyncTime: number;
173
+ bufferedInsights: number;
174
+ };
175
+ /** Stop periodic sync and clean up */
176
+ destroy(): void;
177
+ private ensureMemoryDir;
178
+ private storeInsightInAgentDB;
179
+ private writeInsightToFiles;
180
+ private queryRecentInsights;
181
+ private classifyEntry;
182
+ private appendToTopicFile;
183
+ /** Fetch all existing content hashes from the auto-memory namespace in one query */
184
+ private fetchExistingContentHashes;
185
+ private startPeriodicSync;
186
+ }
187
+ /**
188
+ * Resolve the auto memory directory for a given working directory.
189
+ * Mirrors Claude Code's path derivation from git root.
190
+ */
191
+ export declare function resolveAutoMemoryDir(workingDir: string): string;
192
+ /**
193
+ * Find the git root directory by walking up from workingDir.
194
+ */
195
+ export declare function findGitRoot(dir: string): string | null;
196
+ /**
197
+ * Parse markdown content into structured entries.
198
+ * Splits on ## headings and extracts content under each.
199
+ */
200
+ export declare function parseMarkdownEntries(content: string): ParsedEntry[];
201
+ /**
202
+ * Extract clean one-line summaries from a topic file.
203
+ * Returns bullet-point items (lines starting with '- '), stripping
204
+ * metadata annotations like _(source, date, conf: 0.95)_.
205
+ */
206
+ export declare function extractSummaries(content: string): string[];
207
+ /**
208
+ * Format an insight as a markdown line for topic files.
209
+ */
210
+ export declare function formatInsightLine(insight: MemoryInsight): string;
211
+ /**
212
+ * Hash content for deduplication.
213
+ */
214
+ export declare function hashContent(content: string): string;
215
+ /**
216
+ * Prune a topic file to stay under the line limit.
217
+ * Removes oldest entries (those closest to the top after the header).
218
+ */
219
+ export declare function pruneTopicFile(content: string, maxLines: number): string;
220
+ /**
221
+ * Check if a summary already exists as a bullet line in topic file content.
222
+ * Uses exact bullet prefix matching (not substring) to avoid false positives.
223
+ */
224
+ export declare function hasSummaryLine(content: string, summary: string): boolean;
225
+ export default AutoMemoryBridge;
226
+ //# sourceMappingURL=auto-memory-bridge.d.ts.map