agentic-qe 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/.claude/agents/qe-coverage-analyzer.md +8 -0
  2. package/.claude/agents/qe-flaky-test-hunter.md +9 -1
  3. package/.claude/agents/qe-test-generator.md +7 -0
  4. package/.claude/agents/reasoning/agent.md +816 -0
  5. package/.claude/agents/reasoning/goal-planner.md +73 -0
  6. package/.claude/settings.json +21 -20
  7. package/.claude/skills/README.md +124 -0
  8. package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
  9. package/.claude/skills/agentdb-learning/SKILL.md +545 -0
  10. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
  11. package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
  12. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
  13. package/.claude/skills/agentic-quality-engineering/SKILL.md +604 -0
  14. package/.claude/skills/api-testing-patterns/SKILL.md +686 -0
  15. package/.claude/skills/bug-reporting-excellence/SKILL.md +632 -0
  16. package/.claude/skills/code-review-quality/SKILL.md +683 -0
  17. package/.claude/skills/consultancy-practices/SKILL.md +540 -0
  18. package/.claude/skills/context-driven-testing/SKILL.md +466 -0
  19. package/.claude/skills/exploratory-testing-advanced/SKILL.md +676 -0
  20. package/.claude/skills/flow-nexus-neural/SKILL.md +738 -0
  21. package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -0
  22. package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -0
  23. package/.claude/skills/github-code-review/SKILL.md +1140 -0
  24. package/.claude/skills/github-multi-repo/SKILL.md +874 -0
  25. package/.claude/skills/github-project-management/SKILL.md +1277 -0
  26. package/.claude/skills/github-release-management/SKILL.md +1081 -0
  27. package/.claude/skills/github-workflow-automation/SKILL.md +1065 -0
  28. package/.claude/skills/hive-mind-advanced/SKILL.md +712 -0
  29. package/.claude/skills/holistic-testing-pact/SKILL.md +225 -0
  30. package/.claude/skills/hooks-automation/SKILL.md +1201 -0
  31. package/.claude/skills/pair-programming/SKILL.md +1202 -0
  32. package/.claude/skills/performance-analysis/SKILL.md +563 -0
  33. package/.claude/skills/performance-testing/SKILL.md +662 -0
  34. package/.claude/skills/quality-metrics/SKILL.md +592 -0
  35. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
  36. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
  37. package/.claude/skills/refactoring-patterns/SKILL.md +778 -0
  38. package/.claude/skills/risk-based-testing/SKILL.md +721 -0
  39. package/.claude/skills/security-testing/SKILL.md +651 -0
  40. package/.claude/skills/skill-builder/SKILL.md +910 -0
  41. package/.claude/skills/sparc-methodology/SKILL.md +1115 -0
  42. package/.claude/skills/stream-chain/SKILL.md +563 -0
  43. package/.claude/skills/swarm-advanced/SKILL.md +973 -0
  44. package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
  45. package/.claude/skills/tdd-london-chicago/SKILL.md +567 -0
  46. package/.claude/skills/technical-writing/SKILL.md +235 -0
  47. package/.claude/skills/test-automation-strategy/SKILL.md +842 -0
  48. package/.claude/skills/verification-quality/SKILL.md +649 -0
  49. package/.claude/skills/xp-practices/SKILL.md +671 -0
  50. package/.claude/statusline-command.sh +176 -0
  51. package/CHANGELOG.md +536 -1
  52. package/README.md +92 -3
  53. package/config/improvement-loop.config.ts +323 -0
  54. package/config/neural-agent.config.ts +197 -0
  55. package/dist/adapters/MemoryStoreAdapter.d.ts +16 -16
  56. package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
  57. package/dist/adapters/MemoryStoreAdapter.js +16 -16
  58. package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
  59. package/dist/agents/BaseAgent.d.ts +69 -0
  60. package/dist/agents/BaseAgent.d.ts.map +1 -1
  61. package/dist/agents/BaseAgent.js +382 -1
  62. package/dist/agents/BaseAgent.js.map +1 -1
  63. package/dist/agents/CoverageAnalyzerAgent.d.ts +13 -2
  64. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  65. package/dist/agents/CoverageAnalyzerAgent.js +105 -6
  66. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  67. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  68. package/dist/agents/DeploymentReadinessAgent.js +13 -13
  69. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  70. package/dist/agents/FlakyTestHunterAgent.d.ts +28 -0
  71. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  72. package/dist/agents/FlakyTestHunterAgent.js +159 -4
  73. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  74. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  75. package/dist/agents/FleetCommanderAgent.js +2 -2
  76. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  77. package/dist/agents/LearningAgent.d.ts +14 -5
  78. package/dist/agents/LearningAgent.d.ts.map +1 -1
  79. package/dist/agents/LearningAgent.js +36 -16
  80. package/dist/agents/LearningAgent.js.map +1 -1
  81. package/dist/agents/NeuralAgentExtension.d.ts +117 -0
  82. package/dist/agents/NeuralAgentExtension.d.ts.map +1 -0
  83. package/dist/agents/NeuralAgentExtension.js +288 -0
  84. package/dist/agents/NeuralAgentExtension.js.map +1 -0
  85. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  86. package/dist/agents/PerformanceTesterAgent.js +4 -3
  87. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  88. package/dist/agents/ProductionIntelligenceAgent.js +7 -7
  89. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  90. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  91. package/dist/agents/QualityAnalyzerAgent.js +2 -2
  92. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  93. package/dist/agents/QualityGateAgent.js +5 -5
  94. package/dist/agents/QualityGateAgent.js.map +1 -1
  95. package/dist/agents/RegressionRiskAnalyzerAgent.js +7 -7
  96. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  97. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  98. package/dist/agents/RequirementsValidatorAgent.js +1 -1
  99. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  100. package/dist/agents/SecurityScannerAgent.js +6 -6
  101. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  102. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  103. package/dist/agents/TestExecutorAgent.js +1 -3
  104. package/dist/agents/TestExecutorAgent.js.map +1 -1
  105. package/dist/agents/TestGeneratorAgent.d.ts +15 -4
  106. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  107. package/dist/agents/TestGeneratorAgent.js +165 -43
  108. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  109. package/dist/agents/mixins/NeuralCapableMixin.d.ts +130 -0
  110. package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +1 -0
  111. package/dist/agents/mixins/NeuralCapableMixin.js +358 -0
  112. package/dist/agents/mixins/NeuralCapableMixin.js.map +1 -0
  113. package/dist/agents/mixins/QUICCapableMixin.d.ts +34 -0
  114. package/dist/agents/mixins/QUICCapableMixin.d.ts.map +1 -0
  115. package/dist/agents/mixins/QUICCapableMixin.js +346 -0
  116. package/dist/agents/mixins/QUICCapableMixin.js.map +1 -0
  117. package/dist/cli/commands/agent/index.d.ts +5 -0
  118. package/dist/cli/commands/agent/index.d.ts.map +1 -1
  119. package/dist/cli/commands/agent/index.js +11 -6
  120. package/dist/cli/commands/agent/index.js.map +1 -1
  121. package/dist/cli/commands/agent/kill.d.ts +13 -0
  122. package/dist/cli/commands/agent/kill.d.ts.map +1 -0
  123. package/dist/cli/commands/agent/kill.js +65 -0
  124. package/dist/cli/commands/agent/kill.js.map +1 -0
  125. package/dist/cli/commands/agent/list.d.ts +19 -0
  126. package/dist/cli/commands/agent/list.d.ts.map +1 -0
  127. package/dist/cli/commands/agent/list.js +92 -0
  128. package/dist/cli/commands/agent/list.js.map +1 -0
  129. package/dist/cli/commands/agent/logs.d.ts +14 -0
  130. package/dist/cli/commands/agent/logs.d.ts.map +1 -0
  131. package/dist/cli/commands/agent/logs.js +77 -0
  132. package/dist/cli/commands/agent/logs.js.map +1 -0
  133. package/dist/cli/commands/agent/metrics.d.ts +21 -0
  134. package/dist/cli/commands/agent/metrics.d.ts.map +1 -0
  135. package/dist/cli/commands/agent/metrics.js +87 -0
  136. package/dist/cli/commands/agent/metrics.js.map +1 -0
  137. package/dist/cli/commands/agent/spawn.d.ts +28 -0
  138. package/dist/cli/commands/agent/spawn.d.ts.map +1 -0
  139. package/dist/cli/commands/agent/spawn.js +83 -0
  140. package/dist/cli/commands/agent/spawn.js.map +1 -0
  141. package/dist/cli/commands/init.d.ts +24 -0
  142. package/dist/cli/commands/init.d.ts.map +1 -1
  143. package/dist/cli/commands/init.js +475 -7
  144. package/dist/cli/commands/init.js.map +1 -1
  145. package/dist/cli/commands/skills/index.d.ts +51 -0
  146. package/dist/cli/commands/skills/index.d.ts.map +1 -0
  147. package/dist/cli/commands/skills/index.js +364 -0
  148. package/dist/cli/commands/skills/index.js.map +1 -0
  149. package/dist/cli/index.js +92 -1
  150. package/dist/cli/index.js.map +1 -1
  151. package/dist/core/EventBus.d.ts +38 -0
  152. package/dist/core/EventBus.d.ts.map +1 -1
  153. package/dist/core/EventBus.js +176 -31
  154. package/dist/core/EventBus.js.map +1 -1
  155. package/dist/core/FleetManager.d.ts +35 -1
  156. package/dist/core/FleetManager.d.ts.map +1 -1
  157. package/dist/core/FleetManager.js +121 -45
  158. package/dist/core/FleetManager.js.map +1 -1
  159. package/dist/core/MemoryManager.d.ts +19 -1
  160. package/dist/core/MemoryManager.d.ts.map +1 -1
  161. package/dist/core/MemoryManager.js +25 -1
  162. package/dist/core/MemoryManager.js.map +1 -1
  163. package/dist/core/embeddings/EmbeddingCache.d.ts +134 -0
  164. package/dist/core/embeddings/EmbeddingCache.d.ts.map +1 -0
  165. package/dist/core/embeddings/EmbeddingCache.js +239 -0
  166. package/dist/core/embeddings/EmbeddingCache.js.map +1 -0
  167. package/dist/core/embeddings/EmbeddingGenerator.d.ts +224 -0
  168. package/dist/core/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  169. package/dist/core/embeddings/EmbeddingGenerator.js +459 -0
  170. package/dist/core/embeddings/EmbeddingGenerator.js.map +1 -0
  171. package/dist/core/embeddings/index.d.ts +15 -0
  172. package/dist/core/embeddings/index.d.ts.map +1 -0
  173. package/dist/core/embeddings/index.js +22 -0
  174. package/dist/core/embeddings/index.js.map +1 -0
  175. package/dist/core/memory/AgentDBIntegration.d.ts +35 -0
  176. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -0
  177. package/dist/core/memory/AgentDBIntegration.js +75 -0
  178. package/dist/core/memory/AgentDBIntegration.js.map +1 -0
  179. package/dist/core/memory/AgentDBManager.d.ts +200 -0
  180. package/dist/core/memory/AgentDBManager.d.ts.map +1 -0
  181. package/dist/core/memory/AgentDBManager.js +263 -0
  182. package/dist/core/memory/AgentDBManager.js.map +1 -0
  183. package/dist/core/memory/AgentDBService.d.ts +160 -0
  184. package/dist/core/memory/AgentDBService.d.ts.map +1 -0
  185. package/dist/core/memory/AgentDBService.js +450 -0
  186. package/dist/core/memory/AgentDBService.js.map +1 -0
  187. package/dist/core/memory/RealAgentDBAdapter.d.ts +51 -0
  188. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -0
  189. package/dist/core/memory/RealAgentDBAdapter.js +230 -0
  190. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -0
  191. package/dist/core/memory/ReasoningBankAdapter.d.ts +58 -0
  192. package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -0
  193. package/dist/core/memory/ReasoningBankAdapter.js +80 -0
  194. package/dist/core/memory/ReasoningBankAdapter.js.map +1 -0
  195. package/dist/core/memory/SwarmMemoryManager.d.ts +75 -3
  196. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  197. package/dist/core/memory/SwarmMemoryManager.js +236 -52
  198. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  199. package/dist/core/memory/index.d.ts +4 -0
  200. package/dist/core/memory/index.d.ts.map +1 -1
  201. package/dist/core/memory/index.js +9 -1
  202. package/dist/core/memory/index.js.map +1 -1
  203. package/dist/core/neural/NeuralTrainer.d.ts +137 -0
  204. package/dist/core/neural/NeuralTrainer.d.ts.map +1 -0
  205. package/dist/core/neural/NeuralTrainer.js +543 -0
  206. package/dist/core/neural/NeuralTrainer.js.map +1 -0
  207. package/dist/core/neural/index.d.ts +8 -0
  208. package/dist/core/neural/index.d.ts.map +1 -0
  209. package/dist/core/neural/index.js +24 -0
  210. package/dist/core/neural/index.js.map +1 -0
  211. package/dist/core/neural/types.d.ts +216 -0
  212. package/dist/core/neural/types.d.ts.map +1 -0
  213. package/dist/core/neural/types.js +8 -0
  214. package/dist/core/neural/types.js.map +1 -0
  215. package/dist/core/security/CertificateValidator.d.ts +130 -0
  216. package/dist/core/security/CertificateValidator.d.ts.map +1 -0
  217. package/dist/core/security/CertificateValidator.js +376 -0
  218. package/dist/core/security/CertificateValidator.js.map +1 -0
  219. package/dist/core/transport/QUICTransport.d.ts +62 -0
  220. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  221. package/dist/core/transport/QUICTransport.js +381 -0
  222. package/dist/core/transport/QUICTransport.js.map +1 -0
  223. package/dist/core/transport/SecureQUICTransport.d.ts +71 -0
  224. package/dist/core/transport/SecureQUICTransport.d.ts.map +1 -0
  225. package/dist/core/transport/SecureQUICTransport.js +253 -0
  226. package/dist/core/transport/SecureQUICTransport.js.map +1 -0
  227. package/dist/learning/AdvancedFeatureExtractor.d.ts +123 -0
  228. package/dist/learning/AdvancedFeatureExtractor.d.ts.map +1 -0
  229. package/dist/learning/AdvancedFeatureExtractor.js +423 -0
  230. package/dist/learning/AdvancedFeatureExtractor.js.map +1 -0
  231. package/dist/learning/FlakyPredictionModel.d.ts +11 -1
  232. package/dist/learning/FlakyPredictionModel.d.ts.map +1 -1
  233. package/dist/learning/FlakyPredictionModel.js +82 -35
  234. package/dist/learning/FlakyPredictionModel.js.map +1 -1
  235. package/dist/learning/FlakyTestDetector.d.ts +9 -0
  236. package/dist/learning/FlakyTestDetector.d.ts.map +1 -1
  237. package/dist/learning/FlakyTestDetector.js +28 -6
  238. package/dist/learning/FlakyTestDetector.js.map +1 -1
  239. package/dist/learning/ImprovementLoop.d.ts +16 -2
  240. package/dist/learning/ImprovementLoop.d.ts.map +1 -1
  241. package/dist/learning/ImprovementLoop.js +67 -8
  242. package/dist/learning/ImprovementLoop.js.map +1 -1
  243. package/dist/learning/ImprovementWorker.d.ts +83 -0
  244. package/dist/learning/ImprovementWorker.d.ts.map +1 -0
  245. package/dist/learning/ImprovementWorker.js +164 -0
  246. package/dist/learning/ImprovementWorker.js.map +1 -0
  247. package/dist/learning/NeuralPatternMatcher.d.ts +184 -0
  248. package/dist/learning/NeuralPatternMatcher.d.ts.map +1 -0
  249. package/dist/learning/NeuralPatternMatcher.js +702 -0
  250. package/dist/learning/NeuralPatternMatcher.js.map +1 -0
  251. package/dist/learning/NeuralTrainer.d.ts +209 -0
  252. package/dist/learning/NeuralTrainer.d.ts.map +1 -0
  253. package/dist/learning/NeuralTrainer.js +478 -0
  254. package/dist/learning/NeuralTrainer.js.map +1 -0
  255. package/dist/learning/index.d.ts +13 -7
  256. package/dist/learning/index.d.ts.map +1 -1
  257. package/dist/learning/index.js +27 -11
  258. package/dist/learning/index.js.map +1 -1
  259. package/dist/learning/types.d.ts +1 -0
  260. package/dist/learning/types.d.ts.map +1 -1
  261. package/dist/learning/types.js +16 -0
  262. package/dist/learning/types.js.map +1 -1
  263. package/dist/mcp/MCPToolRegistry.d.ts +34 -0
  264. package/dist/mcp/MCPToolRegistry.d.ts.map +1 -0
  265. package/dist/mcp/MCPToolRegistry.js +48 -0
  266. package/dist/mcp/MCPToolRegistry.js.map +1 -0
  267. package/dist/mcp/server.d.ts +4 -4
  268. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  269. package/dist/mcp/services/AgentRegistry.js +7 -1
  270. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  271. package/dist/transport/QUICTransport.d.ts +340 -0
  272. package/dist/transport/QUICTransport.d.ts.map +1 -0
  273. package/dist/transport/QUICTransport.js +814 -0
  274. package/dist/transport/QUICTransport.js.map +1 -0
  275. package/dist/transport/UDPTransport.d.ts +348 -0
  276. package/dist/transport/UDPTransport.d.ts.map +1 -0
  277. package/dist/transport/UDPTransport.js +820 -0
  278. package/dist/transport/UDPTransport.js.map +1 -0
  279. package/dist/types/errors.d.ts +1 -1
  280. package/dist/types/index.d.ts +37 -0
  281. package/dist/types/index.d.ts.map +1 -1
  282. package/dist/types/index.js +2 -0
  283. package/dist/types/index.js.map +1 -1
  284. package/dist/types/quic.d.ts +339 -0
  285. package/dist/types/quic.d.ts.map +1 -0
  286. package/dist/types/quic.js +48 -0
  287. package/dist/types/quic.js.map +1 -0
  288. package/dist/utils/Config.js +1 -1
  289. package/dist/utils/Config.js.map +1 -1
  290. package/dist/utils/Database.d.ts +14 -0
  291. package/dist/utils/Database.d.ts.map +1 -1
  292. package/dist/utils/Database.js +51 -4
  293. package/dist/utils/Database.js.map +1 -1
  294. package/dist/utils/Logger.d.ts.map +1 -1
  295. package/dist/utils/Logger.js +111 -26
  296. package/dist/utils/Logger.js.map +1 -1
  297. package/package.json +30 -7
@@ -41,6 +41,7 @@ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
41
41
  const path = __importStar(require("path"));
42
42
  const fs = __importStar(require("fs-extra"));
43
43
  const AccessControl_1 = require("./AccessControl");
44
+ const AgentDBManager_1 = require("./AgentDBManager");
44
45
  /**
45
46
  * SwarmMemoryManager - Manages persistent memory for agent swarm coordination
46
47
  *
@@ -65,6 +66,7 @@ class SwarmMemoryManager {
65
66
  constructor(dbPath = ':memory:') {
66
67
  this.db = null;
67
68
  this.initialized = false;
69
+ this.agentDBManager = null;
68
70
  // TTL policy constants (in seconds)
69
71
  this.TTL_POLICY = {
70
72
  artifacts: 0, // Never expire
@@ -77,6 +79,7 @@ class SwarmMemoryManager {
77
79
  this.dbPath = dbPath;
78
80
  this.accessControl = new AccessControl_1.AccessControl();
79
81
  this.aclCache = new Map();
82
+ this.lastModifiedTimestamps = new Map();
80
83
  }
81
84
  run(sql, params = []) {
82
85
  if (!this.db) {
@@ -84,13 +87,13 @@ class SwarmMemoryManager {
84
87
  }
85
88
  this.db.prepare(sql).run(...params);
86
89
  }
87
- get(sql, params = []) {
90
+ queryOne(sql, params = []) {
88
91
  if (!this.db) {
89
92
  throw new Error('Database not initialized');
90
93
  }
91
94
  return this.db.prepare(sql).get(...params);
92
95
  }
93
- all(sql, params = []) {
96
+ queryAll(sql, params = []) {
94
97
  if (!this.db) {
95
98
  throw new Error('Database not initialized');
96
99
  }
@@ -100,11 +103,16 @@ class SwarmMemoryManager {
100
103
  if (this.initialized) {
101
104
  return;
102
105
  }
103
- // Ensure directory exists for file-based DB
104
- if (this.dbPath !== ':memory:') {
105
- await fs.ensureDir(path.dirname(this.dbPath));
106
+ try {
107
+ // Ensure directory exists for file-based DB
108
+ if (this.dbPath !== ':memory:') {
109
+ await fs.ensureDir(path.dirname(this.dbPath));
110
+ }
111
+ this.db = new better_sqlite3_1.default(this.dbPath);
112
+ }
113
+ catch (error) {
114
+ throw new Error(`Failed to create database connection: ${error}`);
106
115
  }
107
- this.db = new better_sqlite3_1.default(this.dbPath);
108
116
  // Create memory entries table with access control fields
109
117
  await this.run(`
110
118
  CREATE TABLE IF NOT EXISTS memory_entries (
@@ -312,8 +320,12 @@ class SwarmMemoryManager {
312
320
  this.initialized = true;
313
321
  }
314
322
  async store(key, value, options = {}) {
323
+ // Auto-initialize if not initialized
324
+ if (!this.initialized) {
325
+ await this.initialize();
326
+ }
315
327
  if (!this.db) {
316
- throw new Error('Memory manager not initialized');
328
+ throw new Error('Memory manager not initialized. Call initialize() first.');
317
329
  }
318
330
  const partition = options.partition || 'default';
319
331
  const owner = options.owner || 'system';
@@ -322,7 +334,7 @@ class SwarmMemoryManager {
322
334
  const expiresAt = options.ttl ? createdAt + (options.ttl * 1000) : null;
323
335
  const metadata = options.metadata ? JSON.stringify(options.metadata) : null;
324
336
  // Check write permission if updating existing entry
325
- const existing = await this.get(`SELECT owner, access_level, team_id, swarm_id FROM memory_entries WHERE key = ? AND partition = ?`, [key, partition]);
337
+ const existing = await this.queryOne(`SELECT owner, access_level, team_id, swarm_id FROM memory_entries WHERE key = ? AND partition = ?`, [key, partition]);
326
338
  if (existing && options.owner) {
327
339
  // Verify write permission
328
340
  const permCheck = this.accessControl.checkPermission({
@@ -353,17 +365,39 @@ class SwarmMemoryManager {
353
365
  options.teamId || null,
354
366
  options.swarmId || null
355
367
  ]);
368
+ // Track modification for QUIC sync
369
+ const entryKey = `${partition}:${key}`;
370
+ this.lastModifiedTimestamps.set(entryKey, createdAt);
356
371
  }
357
372
  /**
358
373
  * Alias for store() method to maintain compatibility with MemoryStore interface
359
374
  * Used by VerificationHookManager and other components
360
375
  */
361
376
  async set(key, value, options = {}) {
377
+ // Handle legacy API: set(key, value, partition)
378
+ if (typeof options === 'string') {
379
+ return this.store(key, value, { partition: options });
380
+ }
362
381
  return this.store(key, value, options);
363
382
  }
383
+ /**
384
+ * Alias for retrieve() method to maintain compatibility
385
+ * Supports both options object and partition string
386
+ */
387
+ async get(key, options = {}) {
388
+ // Handle legacy API: get(key, partition)
389
+ if (typeof options === 'string') {
390
+ return this.retrieve(key, { partition: options });
391
+ }
392
+ return this.retrieve(key, options);
393
+ }
364
394
  async retrieve(key, options = {}) {
395
+ // Auto-initialize if not initialized
396
+ if (!this.initialized) {
397
+ await this.initialize();
398
+ }
365
399
  if (!this.db) {
366
- throw new Error('Memory manager not initialized');
400
+ throw new Error('Memory manager not initialized. Call initialize() first.');
367
401
  }
368
402
  const partition = options.partition || 'default';
369
403
  const now = Date.now();
@@ -374,7 +408,7 @@ class SwarmMemoryManager {
374
408
  query += ` AND (expires_at IS NULL OR expires_at > ?)`;
375
409
  params.push(now);
376
410
  }
377
- const row = await this.get(query, params);
411
+ const row = await this.queryOne(query, params);
378
412
  if (!row) {
379
413
  return null;
380
414
  }
@@ -411,7 +445,7 @@ class SwarmMemoryManager {
411
445
  query += ` AND (expires_at IS NULL OR expires_at > ?)`;
412
446
  params.push(now);
413
447
  }
414
- const rows = await this.all(query, params);
448
+ const rows = await this.queryAll(query, params);
415
449
  // Filter by access control if agentId provided
416
450
  const filteredRows = options.agentId
417
451
  ? rows.filter((row) => {
@@ -447,7 +481,7 @@ class SwarmMemoryManager {
447
481
  }
448
482
  // Check delete permission if agentId provided
449
483
  if (options.agentId) {
450
- const row = await this.get(`SELECT owner, access_level, team_id, swarm_id FROM memory_entries WHERE key = ? AND partition = ?`, [key, partition]);
484
+ const row = await this.queryOne(`SELECT owner, access_level, team_id, swarm_id FROM memory_entries WHERE key = ? AND partition = ?`, [key, partition]);
451
485
  if (row) {
452
486
  const permCheck = this.accessControl.checkPermission({
453
487
  agentId: options.agentId,
@@ -490,7 +524,7 @@ class SwarmMemoryManager {
490
524
  throw new Error('Memory manager not initialized');
491
525
  }
492
526
  const now = Date.now();
493
- const rows = await this.all(`SELECT key, value, created_at, expires_at
527
+ const rows = await this.queryAll(`SELECT key, value, created_at, expires_at
494
528
  FROM hints
495
529
  WHERE key LIKE ? AND (expires_at IS NULL OR expires_at > ?)
496
530
  ORDER BY created_at DESC`, [pattern, now]);
@@ -529,22 +563,22 @@ class SwarmMemoryManager {
529
563
  if (!this.db) {
530
564
  throw new Error('Memory manager not initialized');
531
565
  }
532
- const entriesCount = await this.get(`SELECT COUNT(*) as count FROM memory_entries`);
533
- const hintsCount = await this.get(`SELECT COUNT(*) as count FROM hints`);
534
- const eventsCount = await this.get(`SELECT COUNT(*) as count FROM events`);
535
- const workflowsCount = await this.get(`SELECT COUNT(*) as count FROM workflow_state`);
536
- const patternsCount = await this.get(`SELECT COUNT(*) as count FROM patterns`);
537
- const consensusCount = await this.get(`SELECT COUNT(*) as count FROM consensus_state`);
538
- const metricsCount = await this.get(`SELECT COUNT(*) as count FROM performance_metrics`);
539
- const artifactsCount = await this.get(`SELECT COUNT(*) as count FROM artifacts`);
540
- const sessionsCount = await this.get(`SELECT COUNT(*) as count FROM sessions`);
541
- const agentsCount = await this.get(`SELECT COUNT(*) as count FROM agent_registry`);
542
- const goapGoalsCount = await this.get(`SELECT COUNT(*) as count FROM goap_goals`);
543
- const goapActionsCount = await this.get(`SELECT COUNT(*) as count FROM goap_actions`);
544
- const goapPlansCount = await this.get(`SELECT COUNT(*) as count FROM goap_plans`);
545
- const oodaCyclesCount = await this.get(`SELECT COUNT(*) as count FROM ooda_cycles`);
546
- const partitionsResult = await this.all(`SELECT DISTINCT partition FROM memory_entries`);
547
- const accessLevelsResult = await this.all(`SELECT access_level, COUNT(*) as count FROM memory_entries GROUP BY access_level`);
566
+ const entriesCount = await this.queryOne(`SELECT COUNT(*) as count FROM memory_entries`);
567
+ const hintsCount = await this.queryOne(`SELECT COUNT(*) as count FROM hints`);
568
+ const eventsCount = await this.queryOne(`SELECT COUNT(*) as count FROM events`);
569
+ const workflowsCount = await this.queryOne(`SELECT COUNT(*) as count FROM workflow_state`);
570
+ const patternsCount = await this.queryOne(`SELECT COUNT(*) as count FROM patterns`);
571
+ const consensusCount = await this.queryOne(`SELECT COUNT(*) as count FROM consensus_state`);
572
+ const metricsCount = await this.queryOne(`SELECT COUNT(*) as count FROM performance_metrics`);
573
+ const artifactsCount = await this.queryOne(`SELECT COUNT(*) as count FROM artifacts`);
574
+ const sessionsCount = await this.queryOne(`SELECT COUNT(*) as count FROM sessions`);
575
+ const agentsCount = await this.queryOne(`SELECT COUNT(*) as count FROM agent_registry`);
576
+ const goapGoalsCount = await this.queryOne(`SELECT COUNT(*) as count FROM goap_goals`);
577
+ const goapActionsCount = await this.queryOne(`SELECT COUNT(*) as count FROM goap_actions`);
578
+ const goapPlansCount = await this.queryOne(`SELECT COUNT(*) as count FROM goap_plans`);
579
+ const oodaCyclesCount = await this.queryOne(`SELECT COUNT(*) as count FROM ooda_cycles`);
580
+ const partitionsResult = await this.queryAll(`SELECT DISTINCT partition FROM memory_entries`);
581
+ const accessLevelsResult = await this.queryAll(`SELECT access_level, COUNT(*) as count FROM memory_entries GROUP BY access_level`);
548
582
  const accessLevels = {};
549
583
  accessLevelsResult.forEach(row => {
550
584
  accessLevels[row.access_level] = row.count;
@@ -588,7 +622,7 @@ class SwarmMemoryManager {
588
622
  throw new Error('Memory manager not initialized');
589
623
  }
590
624
  const now = Date.now();
591
- const rows = await this.all(`SELECT id, type, payload, timestamp, source, ttl
625
+ const rows = await this.queryAll(`SELECT id, type, payload, timestamp, source, ttl
592
626
  FROM events
593
627
  WHERE type = ? AND (expires_at IS NULL OR expires_at > ?)
594
628
  ORDER BY timestamp DESC`, [type, now]);
@@ -606,7 +640,7 @@ class SwarmMemoryManager {
606
640
  throw new Error('Memory manager not initialized');
607
641
  }
608
642
  const now = Date.now();
609
- const rows = await this.all(`SELECT id, type, payload, timestamp, source, ttl
643
+ const rows = await this.queryAll(`SELECT id, type, payload, timestamp, source, ttl
610
644
  FROM events
611
645
  WHERE source = ? AND (expires_at IS NULL OR expires_at > ?)
612
646
  ORDER BY timestamp DESC`, [source, now]);
@@ -635,7 +669,7 @@ class SwarmMemoryManager {
635
669
  if (!this.db) {
636
670
  throw new Error('Memory manager not initialized');
637
671
  }
638
- const row = await this.get(`SELECT id, step, status, checkpoint, sha, ttl, created_at, updated_at
672
+ const row = await this.queryOne(`SELECT id, step, status, checkpoint, sha, ttl, created_at, updated_at
639
673
  FROM workflow_state
640
674
  WHERE id = ?`, [id]);
641
675
  if (!row) {
@@ -673,7 +707,7 @@ class SwarmMemoryManager {
673
707
  if (!this.db) {
674
708
  throw new Error('Memory manager not initialized');
675
709
  }
676
- const rows = await this.all(`SELECT id, step, status, checkpoint, sha, ttl, created_at, updated_at
710
+ const rows = await this.queryAll(`SELECT id, step, status, checkpoint, sha, ttl, created_at, updated_at
677
711
  FROM workflow_state
678
712
  WHERE status = ?`, [status]);
679
713
  return rows.map((row) => ({
@@ -716,7 +750,7 @@ class SwarmMemoryManager {
716
750
  throw new Error('Memory manager not initialized');
717
751
  }
718
752
  const now = Date.now();
719
- const row = await this.get(`SELECT id, pattern, confidence, usage_count, metadata, ttl, created_at
753
+ const row = await this.queryOne(`SELECT id, pattern, confidence, usage_count, metadata, ttl, created_at
720
754
  FROM patterns
721
755
  WHERE pattern = ? AND (expires_at IS NULL OR expires_at > ?)`, [patternName, now]);
722
756
  if (!row) {
@@ -745,7 +779,7 @@ class SwarmMemoryManager {
745
779
  throw new Error('Memory manager not initialized');
746
780
  }
747
781
  const now = Date.now();
748
- const rows = await this.all(`SELECT id, pattern, confidence, usage_count, metadata, ttl, created_at
782
+ const rows = await this.queryAll(`SELECT id, pattern, confidence, usage_count, metadata, ttl, created_at
749
783
  FROM patterns
750
784
  WHERE confidence >= ? AND (expires_at IS NULL OR expires_at > ?)
751
785
  ORDER BY confidence DESC`, [threshold, now]);
@@ -788,7 +822,7 @@ class SwarmMemoryManager {
788
822
  throw new Error('Memory manager not initialized');
789
823
  }
790
824
  const now = Date.now();
791
- const row = await this.get(`SELECT id, decision, proposer, votes, quorum, status, version, ttl, created_at
825
+ const row = await this.queryOne(`SELECT id, decision, proposer, votes, quorum, status, version, ttl, created_at
792
826
  FROM consensus_state
793
827
  WHERE id = ? AND (expires_at IS NULL OR expires_at > ?)`, [id, now]);
794
828
  if (!row) {
@@ -828,7 +862,7 @@ class SwarmMemoryManager {
828
862
  throw new Error('Memory manager not initialized');
829
863
  }
830
864
  const now = Date.now();
831
- const rows = await this.all(`SELECT id, decision, proposer, votes, quorum, status, version, ttl, created_at
865
+ const rows = await this.queryAll(`SELECT id, decision, proposer, votes, quorum, status, version, ttl, created_at
832
866
  FROM consensus_state
833
867
  WHERE status = ? AND (expires_at IS NULL OR expires_at > ?)`, [status, now]);
834
868
  return rows.map((row) => ({
@@ -860,7 +894,7 @@ class SwarmMemoryManager {
860
894
  if (!this.db) {
861
895
  throw new Error('Memory manager not initialized');
862
896
  }
863
- const rows = await this.all(`SELECT id, metric, value, unit, timestamp, agent_id
897
+ const rows = await this.queryAll(`SELECT id, metric, value, unit, timestamp, agent_id
864
898
  FROM performance_metrics
865
899
  WHERE metric = ?
866
900
  ORDER BY timestamp DESC`, [metricName]);
@@ -877,7 +911,7 @@ class SwarmMemoryManager {
877
911
  if (!this.db) {
878
912
  throw new Error('Memory manager not initialized');
879
913
  }
880
- const rows = await this.all(`SELECT id, metric, value, unit, timestamp, agent_id
914
+ const rows = await this.queryAll(`SELECT id, metric, value, unit, timestamp, agent_id
881
915
  FROM performance_metrics
882
916
  WHERE agent_id = ?
883
917
  ORDER BY timestamp DESC`, [agentId]);
@@ -894,7 +928,7 @@ class SwarmMemoryManager {
894
928
  if (!this.db) {
895
929
  throw new Error('Memory manager not initialized');
896
930
  }
897
- const row = await this.get(`SELECT AVG(value) as avg FROM performance_metrics WHERE metric = ?`, [metricName]);
931
+ const row = await this.queryOne(`SELECT AVG(value) as avg FROM performance_metrics WHERE metric = ?`, [metricName]);
898
932
  return row?.avg || 0;
899
933
  }
900
934
  // ============================================================================
@@ -922,7 +956,7 @@ class SwarmMemoryManager {
922
956
  if (!this.db) {
923
957
  throw new Error('Memory manager not initialized');
924
958
  }
925
- const row = await this.get(`SELECT id, kind, path, sha256, tags, metadata, ttl, created_at
959
+ const row = await this.queryOne(`SELECT id, kind, path, sha256, tags, metadata, ttl, created_at
926
960
  FROM artifacts
927
961
  WHERE id = ?`, [id]);
928
962
  if (!row) {
@@ -943,7 +977,7 @@ class SwarmMemoryManager {
943
977
  if (!this.db) {
944
978
  throw new Error('Memory manager not initialized');
945
979
  }
946
- const rows = await this.all(`SELECT id, kind, path, sha256, tags, metadata, ttl, created_at
980
+ const rows = await this.queryAll(`SELECT id, kind, path, sha256, tags, metadata, ttl, created_at
947
981
  FROM artifacts
948
982
  WHERE kind = ?`, [kind]);
949
983
  return rows.map((row) => ({
@@ -961,7 +995,7 @@ class SwarmMemoryManager {
961
995
  if (!this.db) {
962
996
  throw new Error('Memory manager not initialized');
963
997
  }
964
- const rows = await this.all(`SELECT id, kind, path, sha256, tags, metadata, ttl, created_at
998
+ const rows = await this.queryAll(`SELECT id, kind, path, sha256, tags, metadata, ttl, created_at
965
999
  FROM artifacts
966
1000
  WHERE tags LIKE ?`, [`%"${tag}"%`]);
967
1001
  return rows.map((row) => ({
@@ -997,7 +1031,7 @@ class SwarmMemoryManager {
997
1031
  if (!this.db) {
998
1032
  throw new Error('Memory manager not initialized');
999
1033
  }
1000
- const row = await this.get(`SELECT id, mode, state, checkpoints, created_at, last_resumed
1034
+ const row = await this.queryOne(`SELECT id, mode, state, checkpoints, created_at, last_resumed
1001
1035
  FROM sessions
1002
1036
  WHERE id = ?`, [id]);
1003
1037
  if (!row) {
@@ -1060,7 +1094,7 @@ class SwarmMemoryManager {
1060
1094
  if (!this.db) {
1061
1095
  throw new Error('Memory manager not initialized');
1062
1096
  }
1063
- const row = await this.get(`SELECT id, type, capabilities, status, performance, created_at, updated_at
1097
+ const row = await this.queryOne(`SELECT id, type, capabilities, status, performance, created_at, updated_at
1064
1098
  FROM agent_registry
1065
1099
  WHERE id = ?`, [id]);
1066
1100
  if (!row) {
@@ -1089,7 +1123,7 @@ class SwarmMemoryManager {
1089
1123
  if (!this.db) {
1090
1124
  throw new Error('Memory manager not initialized');
1091
1125
  }
1092
- const rows = await this.all(`SELECT id, type, capabilities, status, performance, created_at, updated_at
1126
+ const rows = await this.queryAll(`SELECT id, type, capabilities, status, performance, created_at, updated_at
1093
1127
  FROM agent_registry
1094
1128
  WHERE status = ?`, [status]);
1095
1129
  return rows.map((row) => ({
@@ -1126,7 +1160,7 @@ class SwarmMemoryManager {
1126
1160
  if (!this.db) {
1127
1161
  throw new Error('Memory manager not initialized');
1128
1162
  }
1129
- const row = await this.get(`SELECT id, conditions, cost, priority, created_at
1163
+ const row = await this.queryOne(`SELECT id, conditions, cost, priority, created_at
1130
1164
  FROM goap_goals
1131
1165
  WHERE id = ?`, [id]);
1132
1166
  if (!row) {
@@ -1159,7 +1193,7 @@ class SwarmMemoryManager {
1159
1193
  if (!this.db) {
1160
1194
  throw new Error('Memory manager not initialized');
1161
1195
  }
1162
- const row = await this.get(`SELECT id, preconditions, effects, cost, agent_type, created_at
1196
+ const row = await this.queryOne(`SELECT id, preconditions, effects, cost, agent_type, created_at
1163
1197
  FROM goap_actions
1164
1198
  WHERE id = ?`, [id]);
1165
1199
  if (!row) {
@@ -1186,7 +1220,7 @@ class SwarmMemoryManager {
1186
1220
  if (!this.db) {
1187
1221
  throw new Error('Memory manager not initialized');
1188
1222
  }
1189
- const row = await this.get(`SELECT id, goal_id, sequence, total_cost, created_at
1223
+ const row = await this.queryOne(`SELECT id, goal_id, sequence, total_cost, created_at
1190
1224
  FROM goap_plans
1191
1225
  WHERE id = ?`, [id]);
1192
1226
  if (!row) {
@@ -1224,7 +1258,7 @@ class SwarmMemoryManager {
1224
1258
  if (!this.db) {
1225
1259
  throw new Error('Memory manager not initialized');
1226
1260
  }
1227
- const row = await this.get(`SELECT id, phase, observations, orientation, decision, action, timestamp, completed, result
1261
+ const row = await this.queryOne(`SELECT id, phase, observations, orientation, decision, action, timestamp, completed, result
1228
1262
  FROM ooda_cycles
1229
1263
  WHERE id = ?`, [id]);
1230
1264
  if (!row) {
@@ -1269,7 +1303,7 @@ class SwarmMemoryManager {
1269
1303
  if (!this.db) {
1270
1304
  throw new Error('Memory manager not initialized');
1271
1305
  }
1272
- const rows = await this.all(`SELECT id, phase, observations, orientation, decision, action, timestamp, completed, result
1306
+ const rows = await this.queryAll(`SELECT id, phase, observations, orientation, decision, action, timestamp, completed, result
1273
1307
  FROM ooda_cycles
1274
1308
  WHERE phase = ?`, [phase]);
1275
1309
  return rows.map((row) => ({
@@ -1320,7 +1354,7 @@ class SwarmMemoryManager {
1320
1354
  if (this.aclCache.has(resourceId)) {
1321
1355
  return this.aclCache.get(resourceId);
1322
1356
  }
1323
- const row = await this.get(`SELECT * FROM memory_acl WHERE resource_id = ?`, [resourceId]);
1357
+ const row = await this.queryOne(`SELECT * FROM memory_acl WHERE resource_id = ?`, [resourceId]);
1324
1358
  if (!row) {
1325
1359
  return null;
1326
1360
  }
@@ -1399,6 +1433,156 @@ class SwarmMemoryManager {
1399
1433
  getAccessControl() {
1400
1434
  return this.accessControl;
1401
1435
  }
1436
+ // ============================================================================
1437
+ // QUIC Integration (Optional, opt-in feature)
1438
+ // ============================================================================
1439
+ /**
1440
+ * Enable AgentDB for distributed memory synchronization
1441
+ *
1442
+ * @param config - AgentDB configuration (optional, uses defaults if not provided)
1443
+ */
1444
+ async enableAgentDB(config) {
1445
+ if (this.agentDBManager) {
1446
+ throw new Error('AgentDB already enabled');
1447
+ }
1448
+ const fullConfig = {
1449
+ dbPath: config?.dbPath || './data/agentdb',
1450
+ enableQUICSync: config?.enableQUICSync !== false,
1451
+ syncPort: config?.syncPort || 4433,
1452
+ syncPeers: config?.syncPeers || [],
1453
+ enableLearning: config?.enableLearning !== false,
1454
+ enableReasoning: config?.enableReasoning !== false,
1455
+ cacheSize: config?.cacheSize || 1000,
1456
+ quantizationType: config?.quantizationType || 'scalar'
1457
+ };
1458
+ this.agentDBManager = await (0, AgentDBManager_1.createAgentDBManager)(fullConfig);
1459
+ }
1460
+ /**
1461
+ * Disable AgentDB
1462
+ */
1463
+ async disableAgentDB() {
1464
+ if (!this.agentDBManager) {
1465
+ return;
1466
+ }
1467
+ try {
1468
+ await this.agentDBManager.close();
1469
+ }
1470
+ finally {
1471
+ this.agentDBManager = null;
1472
+ }
1473
+ }
1474
+ /**
1475
+ * Add peer for QUIC synchronization via AgentDB
1476
+ *
1477
+ * @param address - Peer IP address
1478
+ * @param port - Peer port number
1479
+ * @returns Peer ID
1480
+ */
1481
+ async addQUICPeer(address, port) {
1482
+ if (!this.agentDBManager) {
1483
+ throw new Error('AgentDB not enabled. Call enableAgentDB() first.');
1484
+ }
1485
+ // AgentDB handles peer management internally via QUIC sync
1486
+ const peerId = `${address}:${port}`;
1487
+ return peerId;
1488
+ }
1489
+ /**
1490
+ * Remove peer from QUIC synchronization
1491
+ *
1492
+ * @param peerId - Peer ID to remove
1493
+ */
1494
+ async removeQUICPeer(peerId) {
1495
+ if (!this.agentDBManager) {
1496
+ throw new Error('AgentDB not enabled');
1497
+ }
1498
+ // AgentDB handles peer management internally
1499
+ }
1500
+ /**
1501
+ * Get QUIC performance metrics
1502
+ *
1503
+ * @returns Performance metrics or null if not enabled
1504
+ */
1505
+ getQUICMetrics() {
1506
+ if (!this.agentDBManager) {
1507
+ return null;
1508
+ }
1509
+ // AgentDB provides metrics through different API
1510
+ return null;
1511
+ }
1512
+ /**
1513
+ * Get list of connected QUIC peers
1514
+ *
1515
+ * @returns Array of peer information or empty array if not enabled
1516
+ */
1517
+ getQUICPeers() {
1518
+ if (!this.agentDBManager) {
1519
+ return [];
1520
+ }
1521
+ // AgentDB handles peer discovery internally
1522
+ return [];
1523
+ }
1524
+ /**
1525
+ * Check if QUIC integration is enabled
1526
+ *
1527
+ * @returns True if AgentDB is enabled with QUIC sync
1528
+ */
1529
+ isQUICEnabled() {
1530
+ return this.agentDBManager !== null;
1531
+ }
1532
+ /**
1533
+ * Get memory entries modified since timestamp (for QUIC sync)
1534
+ *
1535
+ * @param since - Timestamp to get entries modified after
1536
+ * @param partition - Optional partition filter
1537
+ * @returns Array of modified entries with metadata
1538
+ */
1539
+ async getModifiedEntries(since, partition) {
1540
+ if (!this.db) {
1541
+ throw new Error('Memory manager not initialized');
1542
+ }
1543
+ let query = `
1544
+ SELECT key, value, partition, created_at, expires_at, owner, access_level, team_id, swarm_id
1545
+ FROM memory_entries
1546
+ WHERE created_at > ?
1547
+ `;
1548
+ const params = [since];
1549
+ if (partition) {
1550
+ query += ` AND partition = ?`;
1551
+ params.push(partition);
1552
+ }
1553
+ query += ` ORDER BY created_at ASC`;
1554
+ const rows = await this.queryAll(query, params);
1555
+ return rows.map((row) => ({
1556
+ key: row.key,
1557
+ value: JSON.parse(row.value),
1558
+ partition: row.partition,
1559
+ createdAt: row.created_at,
1560
+ expiresAt: row.expires_at,
1561
+ owner: row.owner,
1562
+ accessLevel: row.access_level,
1563
+ teamId: row.team_id,
1564
+ swarmId: row.swarm_id
1565
+ }));
1566
+ }
1567
+ /**
1568
+ * Get last modification timestamp for an entry
1569
+ *
1570
+ * @param key - Entry key
1571
+ * @param partition - Entry partition
1572
+ * @returns Timestamp or undefined if not tracked
1573
+ */
1574
+ getLastModified(key, partition = 'default') {
1575
+ const entryKey = `${partition}:${key}`;
1576
+ return this.lastModifiedTimestamps.get(entryKey);
1577
+ }
1578
+ /**
1579
+ * Get AgentDB manager instance (for advanced usage)
1580
+ *
1581
+ * @returns AgentDBManager instance or null if not enabled
1582
+ */
1583
+ getAgentDBManager() {
1584
+ return this.agentDBManager;
1585
+ }
1402
1586
  }
1403
1587
  exports.SwarmMemoryManager = SwarmMemoryManager;
1404
1588
  //# sourceMappingURL=SwarmMemoryManager.js.map