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.
- package/.claude/guidance/shipped/moflo.md +45 -0
- package/.claude/helpers/statusline.cjs +1 -1
- package/.claude/workflow-state.json +9 -0
- package/package.json +2 -2
- package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +1 -1
- package/src/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +5 -3
- package/src/@claude-flow/cli/package.json +1 -1
- package/src/@claude-flow/memory/dist/agent-memory-scope.d.ts +131 -0
- package/src/@claude-flow/memory/dist/agent-memory-scope.js +223 -0
- package/src/@claude-flow/memory/dist/agent-memory-scope.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +466 -0
- package/src/@claude-flow/memory/dist/agentdb-adapter.d.ts +165 -0
- package/src/@claude-flow/memory/dist/agentdb-adapter.js +806 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +212 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.js +842 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.test.d.ts +7 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.test.js +258 -0
- package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.d.ts +65 -0
- package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.js +129 -0
- package/src/@claude-flow/memory/dist/application/commands/store-memory.command.d.ts +48 -0
- package/src/@claude-flow/memory/dist/application/commands/store-memory.command.js +72 -0
- package/src/@claude-flow/memory/dist/application/index.d.ts +12 -0
- package/src/@claude-flow/memory/dist/application/index.js +15 -0
- package/src/@claude-flow/memory/dist/application/queries/search-memory.query.d.ts +72 -0
- package/src/@claude-flow/memory/dist/application/queries/search-memory.query.js +143 -0
- package/src/@claude-flow/memory/dist/application/services/memory-application-service.d.ts +121 -0
- package/src/@claude-flow/memory/dist/application/services/memory-application-service.js +190 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.d.ts +226 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.js +709 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +757 -0
- package/src/@claude-flow/memory/dist/benchmark.test.d.ts +2 -0
- package/src/@claude-flow/memory/dist/benchmark.test.js +277 -0
- package/src/@claude-flow/memory/dist/cache-manager.d.ts +134 -0
- package/src/@claude-flow/memory/dist/cache-manager.js +407 -0
- package/src/@claude-flow/memory/dist/controller-registry.d.ts +216 -0
- package/src/@claude-flow/memory/dist/controller-registry.js +893 -0
- package/src/@claude-flow/memory/dist/controller-registry.test.d.ts +14 -0
- package/src/@claude-flow/memory/dist/controller-registry.test.js +593 -0
- package/src/@claude-flow/memory/dist/database-provider.d.ts +87 -0
- package/src/@claude-flow/memory/dist/database-provider.js +372 -0
- package/src/@claude-flow/memory/dist/database-provider.test.d.ts +7 -0
- package/src/@claude-flow/memory/dist/database-provider.test.js +287 -0
- package/src/@claude-flow/memory/dist/domain/entities/memory-entry.d.ts +143 -0
- package/src/@claude-flow/memory/dist/domain/entities/memory-entry.js +226 -0
- package/src/@claude-flow/memory/dist/domain/index.d.ts +11 -0
- package/src/@claude-flow/memory/dist/domain/index.js +12 -0
- package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
- package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.js +11 -0
- package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.d.ts +105 -0
- package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.js +297 -0
- package/src/@claude-flow/memory/dist/hnsw-index.d.ts +111 -0
- package/src/@claude-flow/memory/dist/hnsw-index.js +781 -0
- package/src/@claude-flow/memory/dist/hnsw-lite.d.ts +23 -0
- package/src/@claude-flow/memory/dist/hnsw-lite.js +168 -0
- package/src/@claude-flow/memory/dist/index.d.ts +204 -0
- package/src/@claude-flow/memory/dist/index.js +358 -0
- package/src/@claude-flow/memory/dist/infrastructure/index.d.ts +17 -0
- package/src/@claude-flow/memory/dist/infrastructure/index.js +16 -0
- package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
- package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
- package/src/@claude-flow/memory/dist/learning-bridge.d.ts +137 -0
- package/src/@claude-flow/memory/dist/learning-bridge.js +335 -0
- package/src/@claude-flow/memory/dist/learning-bridge.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/learning-bridge.test.js +578 -0
- package/src/@claude-flow/memory/dist/memory-graph.d.ts +100 -0
- package/src/@claude-flow/memory/dist/memory-graph.js +333 -0
- package/src/@claude-flow/memory/dist/memory-graph.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/memory-graph.test.js +609 -0
- package/src/@claude-flow/memory/dist/migration.d.ts +68 -0
- package/src/@claude-flow/memory/dist/migration.js +513 -0
- package/src/@claude-flow/memory/dist/persistent-sona.d.ts +144 -0
- package/src/@claude-flow/memory/dist/persistent-sona.js +332 -0
- package/src/@claude-flow/memory/dist/query-builder.d.ts +211 -0
- package/src/@claude-flow/memory/dist/query-builder.js +438 -0
- package/src/@claude-flow/memory/dist/rvf-backend.d.ts +51 -0
- package/src/@claude-flow/memory/dist/rvf-backend.js +481 -0
- package/src/@claude-flow/memory/dist/rvf-learning-store.d.ts +139 -0
- package/src/@claude-flow/memory/dist/rvf-learning-store.js +295 -0
- package/src/@claude-flow/memory/dist/rvf-migration.d.ts +45 -0
- package/src/@claude-flow/memory/dist/rvf-migration.js +234 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +127 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.js +600 -0
- package/src/@claude-flow/memory/dist/types.d.ts +484 -0
- package/src/@claude-flow/memory/dist/types.js +58 -0
- package/src/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
- package/src/@claude-flow/shared/dist/core/config/defaults.js +186 -0
- package/src/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
- package/src/@claude-flow/shared/dist/core/config/index.js +12 -0
- package/src/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
- package/src/@claude-flow/shared/dist/core/config/loader.js +222 -0
- package/src/@claude-flow/shared/dist/core/config/schema.d.ts +1134 -0
- package/src/@claude-flow/shared/dist/core/config/schema.js +158 -0
- package/src/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
- package/src/@claude-flow/shared/dist/core/config/validator.js +147 -0
- package/src/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
- package/src/@claude-flow/shared/dist/core/event-bus.js +197 -0
- package/src/@claude-flow/shared/dist/core/index.d.ts +15 -0
- package/src/@claude-flow/shared/dist/core/index.js +19 -0
- package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
- package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
- package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
- package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
- package/src/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
- package/src/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
- package/src/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
- package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
- package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
- package/src/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
- package/src/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
- package/src/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
- package/src/@claude-flow/shared/dist/events/domain-events.js +165 -0
- package/src/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
- package/src/@claude-flow/shared/dist/events/event-store.js +432 -0
- package/src/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
- package/src/@claude-flow/shared/dist/events/event-store.test.js +297 -0
- package/src/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
- package/src/@claude-flow/shared/dist/events/example-usage.js +193 -0
- package/src/@claude-flow/shared/dist/events/index.d.ts +21 -0
- package/src/@claude-flow/shared/dist/events/index.js +22 -0
- package/src/@claude-flow/shared/dist/events/projections.d.ts +177 -0
- package/src/@claude-flow/shared/dist/events/projections.js +421 -0
- package/src/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
- package/src/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
- package/src/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
- package/src/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
- package/src/@claude-flow/shared/dist/events.d.ts +80 -0
- package/src/@claude-flow/shared/dist/events.js +249 -0
- package/src/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
- package/src/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
- package/src/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
- package/src/@claude-flow/shared/dist/hooks/executor.js +267 -0
- package/src/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
- package/src/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
- package/src/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
- package/src/@claude-flow/shared/dist/hooks/index.js +51 -0
- package/src/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
- package/src/@claude-flow/shared/dist/hooks/registry.js +277 -0
- package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
- package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
- package/src/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
- package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
- package/src/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
- package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
- package/src/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
- package/src/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
- package/src/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
- package/src/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
- package/src/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
- package/src/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
- package/src/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
- package/src/@claude-flow/shared/dist/hooks/types.js +62 -0
- package/src/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
- package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
- package/src/@claude-flow/shared/dist/index.d.ts +20 -0
- package/src/@claude-flow/shared/dist/index.js +50 -0
- package/src/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
- package/src/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
- package/src/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
- package/src/@claude-flow/shared/dist/mcp/index.js +84 -0
- package/src/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
- package/src/@claude-flow/shared/dist/mcp/server.js +593 -0
- package/src/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
- package/src/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
- package/src/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
- package/src/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
- package/src/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
- package/src/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
- package/src/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
- package/src/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
- package/src/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
- package/src/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
- package/src/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
- package/src/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
- package/src/@claude-flow/shared/dist/mcp/types.d.ts +438 -0
- package/src/@claude-flow/shared/dist/mcp/types.js +54 -0
- package/src/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
- package/src/@claude-flow/shared/dist/plugin-interface.js +23 -0
- package/src/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
- package/src/@claude-flow/shared/dist/plugin-loader.js +434 -0
- package/src/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
- package/src/@claude-flow/shared/dist/plugin-registry.js +457 -0
- package/src/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/plugins/index.js +10 -0
- package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
- package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
- package/src/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/plugins/official/index.js +10 -0
- package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
- package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
- package/src/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
- package/src/@claude-flow/shared/dist/plugins/types.js +9 -0
- package/src/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
- package/src/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
- package/src/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
- package/src/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
- package/src/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
- package/src/@claude-flow/shared/dist/resilience/index.js +19 -0
- package/src/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
- package/src/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
- package/src/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
- package/src/@claude-flow/shared/dist/resilience/retry.js +159 -0
- package/src/@claude-flow/shared/dist/security/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/security/index.js +12 -0
- package/src/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
- package/src/@claude-flow/shared/dist/security/input-validation.js +201 -0
- package/src/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
- package/src/@claude-flow/shared/dist/security/secure-random.js +142 -0
- package/src/@claude-flow/shared/dist/services/index.d.ts +7 -0
- package/src/@claude-flow/shared/dist/services/index.js +7 -0
- package/src/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
- package/src/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
- package/src/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
- package/src/@claude-flow/shared/dist/types/agent.types.js +6 -0
- package/src/@claude-flow/shared/dist/types/index.d.ts +11 -0
- package/src/@claude-flow/shared/dist/types/index.js +17 -0
- package/src/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
- package/src/@claude-flow/shared/dist/types/mcp.types.js +7 -0
- package/src/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
- package/src/@claude-flow/shared/dist/types/memory.types.js +7 -0
- package/src/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
- package/src/@claude-flow/shared/dist/types/swarm.types.js +65 -0
- package/src/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
- package/src/@claude-flow/shared/dist/types/task.types.js +32 -0
- package/src/@claude-flow/shared/dist/types.d.ts +197 -0
- package/src/@claude-flow/shared/dist/types.js +21 -0
- package/src/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
- 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
|