agentic-qe 1.9.3 → 2.0.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 (271) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +95 -1336
  2. package/.claude/agents/qe-chaos-engineer.md +152 -1211
  3. package/.claude/agents/qe-code-complexity.md +144 -707
  4. package/.claude/agents/qe-coverage-analyzer.md +147 -743
  5. package/.claude/agents/qe-deployment-readiness.md +143 -1496
  6. package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
  7. package/.claude/agents/qe-fleet-commander.md +12 -12
  8. package/.claude/agents/qe-performance-tester.md +150 -886
  9. package/.claude/agents/qe-production-intelligence.md +155 -1396
  10. package/.claude/agents/qe-quality-analyzer.md +6 -6
  11. package/.claude/agents/qe-quality-gate.md +151 -648
  12. package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
  13. package/.claude/agents/qe-requirements-validator.md +149 -932
  14. package/.claude/agents/qe-security-scanner.md +157 -797
  15. package/.claude/agents/qe-test-data-architect.md +96 -1365
  16. package/.claude/agents/qe-test-executor.md +8 -8
  17. package/.claude/agents/qe-test-generator.md +145 -1540
  18. package/.claude/agents/qe-visual-tester.md +153 -1257
  19. package/.claude/agents/qx-partner.md +235 -0
  20. package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
  21. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
  22. package/.claude/agents/subagents/qe-data-generator.md +41 -125
  23. package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
  24. package/.claude/agents/subagents/qe-integration-tester.md +53 -141
  25. package/.claude/agents/subagents/qe-performance-validator.md +54 -130
  26. package/.claude/agents/subagents/qe-security-auditor.md +56 -114
  27. package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
  28. package/.claude/agents/subagents/qe-test-implementer.md +58 -551
  29. package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
  30. package/.claude/agents/subagents/qe-test-writer.md +63 -726
  31. package/.claude/skills/skills-manifest.json +632 -0
  32. package/.claude/skills/testability-scoring/README.md +71 -0
  33. package/.claude/skills/testability-scoring/SKILL.md +611 -0
  34. package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
  35. package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  36. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  37. package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  38. package/CHANGELOG.md +116 -0
  39. package/README.md +59 -7
  40. package/config/.env.otel.example +25 -0
  41. package/config/OTEL-QUICK-REFERENCE.md +137 -0
  42. package/config/README-OTEL.md +222 -0
  43. package/config/alerting-rules.yml +518 -0
  44. package/config/docker-compose.otel.yml +187 -0
  45. package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
  46. package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
  47. package/config/grafana/provisioning/datasources/datasources.yml +53 -0
  48. package/config/otel-collector-config.yaml.example +145 -0
  49. package/config/prometheus.yml.example +106 -0
  50. package/dist/agents/QXPartnerAgent.d.ts +139 -0
  51. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  52. package/dist/agents/QXPartnerAgent.js +769 -0
  53. package/dist/agents/QXPartnerAgent.js.map +1 -0
  54. package/dist/agents/index.d.ts +1 -0
  55. package/dist/agents/index.d.ts.map +1 -1
  56. package/dist/agents/index.js +82 -2
  57. package/dist/agents/index.js.map +1 -1
  58. package/dist/alerting/AlertManager.d.ts +120 -0
  59. package/dist/alerting/AlertManager.d.ts.map +1 -0
  60. package/dist/alerting/AlertManager.js +345 -0
  61. package/dist/alerting/AlertManager.js.map +1 -0
  62. package/dist/alerting/FeedbackRouter.d.ts +98 -0
  63. package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
  64. package/dist/alerting/FeedbackRouter.js +331 -0
  65. package/dist/alerting/FeedbackRouter.js.map +1 -0
  66. package/dist/alerting/StrategyApplicator.d.ts +120 -0
  67. package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
  68. package/dist/alerting/StrategyApplicator.js +299 -0
  69. package/dist/alerting/StrategyApplicator.js.map +1 -0
  70. package/dist/alerting/index.d.ts +68 -0
  71. package/dist/alerting/index.d.ts.map +1 -0
  72. package/dist/alerting/index.js +112 -0
  73. package/dist/alerting/index.js.map +1 -0
  74. package/dist/alerting/types.d.ts +118 -0
  75. package/dist/alerting/types.d.ts.map +1 -0
  76. package/dist/alerting/types.js +11 -0
  77. package/dist/alerting/types.js.map +1 -0
  78. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  79. package/dist/cli/commands/debug/agent.js +19 -6
  80. package/dist/cli/commands/debug/agent.js.map +1 -1
  81. package/dist/cli/commands/debug/health-check.js +20 -7
  82. package/dist/cli/commands/debug/health-check.js.map +1 -1
  83. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  84. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  85. package/dist/cli/commands/init-claude-md-template.js +4 -3
  86. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  87. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  88. package/dist/cli/commands/workflow/cancel.js +4 -3
  89. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  90. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  91. package/dist/cli/commands/workflow/list.js +4 -3
  92. package/dist/cli/commands/workflow/list.js.map +1 -1
  93. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  94. package/dist/cli/commands/workflow/pause.js +4 -3
  95. package/dist/cli/commands/workflow/pause.js.map +1 -1
  96. package/dist/cli/init/claude-config.d.ts.map +1 -1
  97. package/dist/cli/init/claude-config.js +13 -13
  98. package/dist/cli/init/claude-config.js.map +1 -1
  99. package/dist/cli/init/claude-md.d.ts.map +1 -1
  100. package/dist/cli/init/claude-md.js +44 -2
  101. package/dist/cli/init/claude-md.js.map +1 -1
  102. package/dist/cli/init/database-init.js +1 -1
  103. package/dist/cli/init/index.d.ts.map +1 -1
  104. package/dist/cli/init/index.js +13 -6
  105. package/dist/cli/init/index.js.map +1 -1
  106. package/dist/cli/init/skills.d.ts.map +1 -1
  107. package/dist/cli/init/skills.js +2 -1
  108. package/dist/cli/init/skills.js.map +1 -1
  109. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  110. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  111. package/dist/core/memory/AgentDBIntegration.js +66 -10
  112. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  113. package/dist/core/memory/IPatternStore.d.ts +209 -0
  114. package/dist/core/memory/IPatternStore.d.ts.map +1 -0
  115. package/dist/core/memory/IPatternStore.js +15 -0
  116. package/dist/core/memory/IPatternStore.js.map +1 -0
  117. package/dist/core/memory/MigrationTools.d.ts +192 -0
  118. package/dist/core/memory/MigrationTools.d.ts.map +1 -0
  119. package/dist/core/memory/MigrationTools.js +615 -0
  120. package/dist/core/memory/MigrationTools.js.map +1 -0
  121. package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
  122. package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
  123. package/dist/core/memory/NeuralEnhancement.js +598 -0
  124. package/dist/core/memory/NeuralEnhancement.js.map +1 -0
  125. package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
  126. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
  127. package/dist/core/memory/PatternStoreFactory.js +370 -0
  128. package/dist/core/memory/PatternStoreFactory.js.map +1 -0
  129. package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
  130. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  131. package/dist/core/memory/RealAgentDBAdapter.js +28 -20
  132. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  133. package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
  134. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
  135. package/dist/core/memory/RuVectorPatternStore.js +605 -0
  136. package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
  137. package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
  138. package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
  139. package/dist/core/memory/SelfHealingMonitor.js +451 -0
  140. package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
  141. package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
  142. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  143. package/dist/core/memory/SwarmMemoryManager.js +97 -0
  144. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  145. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  146. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  147. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  148. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  149. package/dist/core/memory/index.d.ts +16 -0
  150. package/dist/core/memory/index.d.ts.map +1 -1
  151. package/dist/core/memory/index.js +58 -1
  152. package/dist/core/memory/index.js.map +1 -1
  153. package/dist/core/optimization/SwarmOptimizer.d.ts +185 -0
  154. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  155. package/dist/core/optimization/SwarmOptimizer.js +631 -0
  156. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  157. package/dist/core/optimization/index.d.ts +9 -0
  158. package/dist/core/optimization/index.d.ts.map +1 -0
  159. package/dist/core/optimization/index.js +25 -0
  160. package/dist/core/optimization/index.js.map +1 -0
  161. package/dist/core/optimization/types.d.ts +53 -0
  162. package/dist/core/optimization/types.d.ts.map +1 -0
  163. package/dist/core/optimization/types.js +6 -0
  164. package/dist/core/optimization/types.js.map +1 -0
  165. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  166. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  167. package/dist/core/orchestration/PriorityQueue.js +122 -0
  168. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  169. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +176 -0
  170. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  171. package/dist/core/orchestration/WorkflowOrchestrator.js +813 -0
  172. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  173. package/dist/core/orchestration/index.d.ts +7 -0
  174. package/dist/core/orchestration/index.d.ts.map +1 -0
  175. package/dist/core/orchestration/index.js +11 -0
  176. package/dist/core/orchestration/index.js.map +1 -0
  177. package/dist/core/orchestration/types.d.ts +96 -0
  178. package/dist/core/orchestration/types.d.ts.map +1 -0
  179. package/dist/core/orchestration/types.js +6 -0
  180. package/dist/core/orchestration/types.js.map +1 -0
  181. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  182. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  183. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  184. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  185. package/dist/core/skills/types.d.ts +118 -0
  186. package/dist/core/skills/types.d.ts.map +1 -0
  187. package/dist/core/skills/types.js +7 -0
  188. package/dist/core/skills/types.js.map +1 -0
  189. package/dist/core/transport/QUICTransport.d.ts +320 -0
  190. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  191. package/dist/core/transport/QUICTransport.js +711 -0
  192. package/dist/core/transport/QUICTransport.js.map +1 -0
  193. package/dist/core/transport/index.d.ts +40 -0
  194. package/dist/core/transport/index.d.ts.map +1 -0
  195. package/dist/core/transport/index.js +46 -0
  196. package/dist/core/transport/index.js.map +1 -0
  197. package/dist/core/transport/quic-loader.d.ts +123 -0
  198. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  199. package/dist/core/transport/quic-loader.js +293 -0
  200. package/dist/core/transport/quic-loader.js.map +1 -0
  201. package/dist/core/transport/quic.d.ts +154 -0
  202. package/dist/core/transport/quic.d.ts.map +1 -0
  203. package/dist/core/transport/quic.js +214 -0
  204. package/dist/core/transport/quic.js.map +1 -0
  205. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  206. package/dist/mcp/services/AgentRegistry.js +4 -1
  207. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  208. package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
  209. package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
  210. package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
  211. package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
  212. package/dist/reasoning/index.d.ts +2 -0
  213. package/dist/reasoning/index.d.ts.map +1 -1
  214. package/dist/reasoning/index.js +6 -1
  215. package/dist/reasoning/index.js.map +1 -1
  216. package/dist/reporting/ResultAggregator.d.ts +107 -0
  217. package/dist/reporting/ResultAggregator.d.ts.map +1 -0
  218. package/dist/reporting/ResultAggregator.js +435 -0
  219. package/dist/reporting/ResultAggregator.js.map +1 -0
  220. package/dist/reporting/index.d.ts +48 -0
  221. package/dist/reporting/index.d.ts.map +1 -0
  222. package/dist/reporting/index.js +154 -0
  223. package/dist/reporting/index.js.map +1 -0
  224. package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
  225. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
  226. package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
  227. package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
  228. package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
  229. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
  230. package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
  231. package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
  232. package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
  233. package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
  234. package/dist/reporting/reporters/JSONReporter.js +324 -0
  235. package/dist/reporting/reporters/JSONReporter.js.map +1 -0
  236. package/dist/reporting/reporters/index.d.ts +14 -0
  237. package/dist/reporting/reporters/index.d.ts.map +1 -0
  238. package/dist/reporting/reporters/index.js +19 -0
  239. package/dist/reporting/reporters/index.js.map +1 -0
  240. package/dist/reporting/types.d.ts +427 -0
  241. package/dist/reporting/types.d.ts.map +1 -0
  242. package/dist/reporting/types.js +12 -0
  243. package/dist/reporting/types.js.map +1 -0
  244. package/dist/types/index.d.ts +2 -1
  245. package/dist/types/index.d.ts.map +1 -1
  246. package/dist/types/index.js +2 -0
  247. package/dist/types/index.js.map +1 -1
  248. package/dist/types/qx.d.ts +397 -0
  249. package/dist/types/qx.d.ts.map +1 -0
  250. package/dist/types/qx.js +71 -0
  251. package/dist/types/qx.js.map +1 -0
  252. package/dist/visualization/api/RestEndpoints.js +1 -1
  253. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  254. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  255. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  256. package/dist/visualization/api/WebSocketServer.js +144 -23
  257. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  258. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  259. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  260. package/dist/visualization/core/DataTransformer.js +60 -5
  261. package/dist/visualization/core/DataTransformer.js.map +1 -1
  262. package/dist/visualization/emit-event.d.ts +75 -0
  263. package/dist/visualization/emit-event.d.ts.map +1 -0
  264. package/dist/visualization/emit-event.js +213 -0
  265. package/dist/visualization/emit-event.js.map +1 -0
  266. package/dist/visualization/index.d.ts +1 -0
  267. package/dist/visualization/index.d.ts.map +1 -1
  268. package/dist/visualization/index.js +7 -1
  269. package/dist/visualization/index.js.map +1 -1
  270. package/docs/reference/skills.md +63 -1
  271. package/package.json +12 -4
@@ -0,0 +1,143 @@
1
+ /**
2
+ * PatternStoreFactory - Factory for creating pattern store instances
3
+ *
4
+ * Provides intelligent backend selection based on:
5
+ * - Platform detection (native bindings availability)
6
+ * - Configuration preferences
7
+ * - Environment variables
8
+ * - Feature requirements
9
+ *
10
+ * Supports:
11
+ * - RuVector (@ruvector/core): 192K QPS, 1.5µs p50 latency
12
+ * - AgentDB: Full-featured with learning, QUIC sync
13
+ * - In-memory fallback: Cross-platform compatibility
14
+ *
15
+ * @module core/memory/PatternStoreFactory
16
+ * @version 1.0.0
17
+ */
18
+ import type { IPatternStore, PatternStoreConfig, PatternStoreStats } from './IPatternStore';
19
+ import { getRuVectorInfo } from './RuVectorPatternStore';
20
+ /**
21
+ * Factory configuration
22
+ */
23
+ export interface PatternStoreFactoryConfig extends PatternStoreConfig {
24
+ /** Preferred backend: 'ruvector' | 'agentdb' | 'auto' */
25
+ preferredBackend?: 'ruvector' | 'agentdb' | 'auto';
26
+ /** Force specific backend (fails if unavailable) */
27
+ forceBackend?: 'ruvector' | 'agentdb';
28
+ /** Enable verbose logging */
29
+ verbose?: boolean;
30
+ /** AgentDB-specific configuration */
31
+ agentdb?: {
32
+ enableLearning?: boolean;
33
+ enableQUICSync?: boolean;
34
+ syncPeers?: string[];
35
+ };
36
+ }
37
+ /**
38
+ * Factory result with backend info
39
+ */
40
+ export interface PatternStoreFactoryResult {
41
+ store: IPatternStore;
42
+ backend: 'ruvector' | 'agentdb' | 'fallback';
43
+ info: {
44
+ platform: string;
45
+ arch: string;
46
+ nativeAvailable: boolean;
47
+ features: string[];
48
+ };
49
+ }
50
+ /**
51
+ * Platform feature detection
52
+ */
53
+ export interface PlatformFeatures {
54
+ ruvectorNative: boolean;
55
+ agentdbNative: boolean;
56
+ wasmSupport: boolean;
57
+ platform: string;
58
+ arch: string;
59
+ nodeVersion: string;
60
+ }
61
+ /**
62
+ * PatternStoreFactory - Intelligent pattern store creation
63
+ *
64
+ * Usage:
65
+ * ```typescript
66
+ * // Auto-select best backend
67
+ * const { store, backend } = await PatternStoreFactory.create();
68
+ *
69
+ * // Force RuVector
70
+ * const { store } = await PatternStoreFactory.create({
71
+ * forceBackend: 'ruvector'
72
+ * });
73
+ *
74
+ * // Get platform info
75
+ * const features = PatternStoreFactory.detectPlatformFeatures();
76
+ * ```
77
+ */
78
+ export declare class PatternStoreFactory {
79
+ /**
80
+ * Create a pattern store with intelligent backend selection
81
+ */
82
+ static create(config?: PatternStoreFactoryConfig): Promise<PatternStoreFactoryResult>;
83
+ /**
84
+ * Create store with forced backend (fails if unavailable)
85
+ */
86
+ private static createForcedBackend;
87
+ /**
88
+ * Auto-select the best available backend
89
+ */
90
+ private static autoSelectBackend;
91
+ /**
92
+ * Create RuVector-backed store
93
+ */
94
+ private static createRuVectorStore;
95
+ /**
96
+ * Create AgentDB-backed store
97
+ * Note: This creates an adapter that wraps AgentDB in IPatternStore interface
98
+ */
99
+ private static createAgentDBStore;
100
+ /**
101
+ * Create in-memory fallback store
102
+ */
103
+ private static createFallbackStore;
104
+ /**
105
+ * Detect platform features and available backends
106
+ */
107
+ static detectPlatformFeatures(): PlatformFeatures;
108
+ /**
109
+ * Get recommended configuration for current platform
110
+ */
111
+ static getRecommendedConfig(): PatternStoreFactoryConfig;
112
+ /**
113
+ * Validate a pattern store instance
114
+ */
115
+ static validate(store: IPatternStore): Promise<{
116
+ valid: boolean;
117
+ errors: string[];
118
+ stats: PatternStoreStats;
119
+ }>;
120
+ /**
121
+ * Get RuVector availability information
122
+ */
123
+ static getRuVectorInfo(): ReturnType<typeof getRuVectorInfo>;
124
+ /**
125
+ * Check if RuVector is available
126
+ */
127
+ static isRuVectorAvailable(): boolean;
128
+ }
129
+ /**
130
+ * Convenience function to create a pattern store
131
+ */
132
+ export declare function createPatternStore(config?: PatternStoreFactoryConfig): Promise<IPatternStore>;
133
+ /**
134
+ * Convenience function to create a high-performance pattern store
135
+ * Uses RuVector if available, optimized for throughput
136
+ */
137
+ export declare function createHighPerformanceStore(storagePath?: string): Promise<IPatternStore>;
138
+ /**
139
+ * Create pattern store from environment configuration
140
+ * Reads from PATTERN_STORE_BACKEND, PATTERN_STORE_PATH, etc.
141
+ */
142
+ export declare function createPatternStoreFromEnv(): Promise<PatternStoreFactoryResult>;
143
+ //# sourceMappingURL=PatternStoreFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternStoreFactory.d.ts","sourceRoot":"","sources":["../../../src/core/memory/PatternStoreFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAGL,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAEnD,oDAAoD;IACpD,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAEtC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qCAAqC;IACrC,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;WACU,MAAM,CACjB,MAAM,GAAE,yBAA8B,GACrC,OAAO,CAAC,yBAAyB,CAAC;IAoBrC;;OAEG;mBACkB,mBAAmB;IAgCxC;;OAEG;mBACkB,iBAAiB;IA+CtC;;OAEG;mBACkB,mBAAmB;IAkCxC;;;OAGG;mBACkB,kBAAkB;IA8BvC;;OAEG;mBACkB,mBAAmB;IA4BxC;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,gBAAgB;IAoCjD;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,yBAAyB;IAuCxD;;OAEG;WACU,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;QACnD,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,EAAE,iBAAiB,CAAC;KAC1B,CAAC;IAmDF;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,UAAU,CAAC,OAAO,eAAe,CAAC;IAI5D;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,OAAO;CAGtC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,CAAC,EAAE,yBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAGxB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAcpF"}
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+ /**
3
+ * PatternStoreFactory - Factory for creating pattern store instances
4
+ *
5
+ * Provides intelligent backend selection based on:
6
+ * - Platform detection (native bindings availability)
7
+ * - Configuration preferences
8
+ * - Environment variables
9
+ * - Feature requirements
10
+ *
11
+ * Supports:
12
+ * - RuVector (@ruvector/core): 192K QPS, 1.5µs p50 latency
13
+ * - AgentDB: Full-featured with learning, QUIC sync
14
+ * - In-memory fallback: Cross-platform compatibility
15
+ *
16
+ * @module core/memory/PatternStoreFactory
17
+ * @version 1.0.0
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.PatternStoreFactory = void 0;
21
+ exports.createPatternStore = createPatternStore;
22
+ exports.createHighPerformanceStore = createHighPerformanceStore;
23
+ exports.createPatternStoreFromEnv = createPatternStoreFromEnv;
24
+ const RuVectorPatternStore_1 = require("./RuVectorPatternStore");
25
+ /**
26
+ * PatternStoreFactory - Intelligent pattern store creation
27
+ *
28
+ * Usage:
29
+ * ```typescript
30
+ * // Auto-select best backend
31
+ * const { store, backend } = await PatternStoreFactory.create();
32
+ *
33
+ * // Force RuVector
34
+ * const { store } = await PatternStoreFactory.create({
35
+ * forceBackend: 'ruvector'
36
+ * });
37
+ *
38
+ * // Get platform info
39
+ * const features = PatternStoreFactory.detectPlatformFeatures();
40
+ * ```
41
+ */
42
+ class PatternStoreFactory {
43
+ /**
44
+ * Create a pattern store with intelligent backend selection
45
+ */
46
+ static async create(config = {}) {
47
+ const verbose = config.verbose ?? false;
48
+ const preferredBackend = config.preferredBackend ?? 'auto';
49
+ // Detect platform features
50
+ const features = this.detectPlatformFeatures();
51
+ if (verbose) {
52
+ console.log('[PatternStoreFactory] Platform detection:', features);
53
+ }
54
+ // Handle forced backend
55
+ if (config.forceBackend) {
56
+ return this.createForcedBackend(config, features, verbose);
57
+ }
58
+ // Auto-select based on availability and preference
59
+ return this.autoSelectBackend(config, features, preferredBackend, verbose);
60
+ }
61
+ /**
62
+ * Create store with forced backend (fails if unavailable)
63
+ */
64
+ static async createForcedBackend(config, features, verbose) {
65
+ const backend = config.forceBackend;
66
+ if (backend === 'ruvector') {
67
+ if (!features.ruvectorNative) {
68
+ throw new Error(`RuVector native backend forced but not available on ${features.platform}/${features.arch}. ` +
69
+ `Install @ruvector/core and platform-specific binding (e.g., ruvector-core-linux-arm64-gnu)`);
70
+ }
71
+ return this.createRuVectorStore(config, features, verbose);
72
+ }
73
+ if (backend === 'agentdb') {
74
+ if (!features.agentdbNative) {
75
+ throw new Error(`AgentDB native backend forced but not available. ` +
76
+ `Install agentdb package: npm install agentdb`);
77
+ }
78
+ return this.createAgentDBStore(config, features, verbose);
79
+ }
80
+ throw new Error(`Unknown backend: ${backend}`);
81
+ }
82
+ /**
83
+ * Auto-select the best available backend
84
+ */
85
+ static async autoSelectBackend(config, features, preferredBackend, verbose) {
86
+ // Priority order based on preference
87
+ const order = preferredBackend === 'ruvector'
88
+ ? ['ruvector', 'agentdb', 'fallback']
89
+ : preferredBackend === 'agentdb'
90
+ ? ['agentdb', 'ruvector', 'fallback']
91
+ : ['ruvector', 'agentdb', 'fallback']; // 'auto' prefers RuVector for performance
92
+ for (const backend of order) {
93
+ if (backend === 'ruvector' && features.ruvectorNative) {
94
+ if (verbose) {
95
+ console.log('[PatternStoreFactory] Selected RuVector (native, high performance)');
96
+ }
97
+ return this.createRuVectorStore(config, features, verbose);
98
+ }
99
+ if (backend === 'agentdb' && features.agentdbNative) {
100
+ if (verbose) {
101
+ console.log('[PatternStoreFactory] Selected AgentDB (full features)');
102
+ }
103
+ return this.createAgentDBStore(config, features, verbose);
104
+ }
105
+ if (backend === 'fallback') {
106
+ if (verbose) {
107
+ console.log('[PatternStoreFactory] Selected in-memory fallback (cross-platform)');
108
+ }
109
+ return this.createFallbackStore(config, features, verbose);
110
+ }
111
+ }
112
+ // Should never reach here, but fallback just in case
113
+ return this.createFallbackStore(config, features, verbose);
114
+ }
115
+ /**
116
+ * Create RuVector-backed store
117
+ */
118
+ static async createRuVectorStore(config, features, verbose) {
119
+ const store = new RuVectorPatternStore_1.RuVectorPatternStore({
120
+ dimension: config.dimension ?? 384,
121
+ metric: config.metric ?? 'cosine',
122
+ storagePath: config.storagePath ?? './data/ruvector-patterns.db',
123
+ autoPersist: config.autoPersist ?? true,
124
+ hnsw: config.hnsw ?? {
125
+ m: 32,
126
+ efConstruction: 200,
127
+ efSearch: 100,
128
+ },
129
+ enableMetrics: config.enableMetrics ?? true,
130
+ });
131
+ await store.initialize();
132
+ const info = store.getImplementationInfo();
133
+ return {
134
+ store,
135
+ backend: 'ruvector',
136
+ info: {
137
+ platform: features.platform,
138
+ arch: features.arch,
139
+ nativeAvailable: true,
140
+ features: info.features,
141
+ },
142
+ };
143
+ }
144
+ /**
145
+ * Create AgentDB-backed store
146
+ * Note: This creates an adapter that wraps AgentDB in IPatternStore interface
147
+ */
148
+ static async createAgentDBStore(config, features, verbose) {
149
+ // For now, AgentDB backend uses RuVector as well (via agentdb integration)
150
+ // In future, this could wrap AgentDBManager directly
151
+ const store = new RuVectorPatternStore_1.RuVectorPatternStore({
152
+ dimension: config.dimension ?? 384,
153
+ metric: config.metric ?? 'cosine',
154
+ storagePath: config.storagePath ?? './data/agentdb-patterns.db',
155
+ autoPersist: config.autoPersist ?? true,
156
+ hnsw: config.hnsw,
157
+ enableMetrics: config.enableMetrics ?? true,
158
+ });
159
+ await store.initialize();
160
+ return {
161
+ store,
162
+ backend: 'agentdb',
163
+ info: {
164
+ platform: features.platform,
165
+ arch: features.arch,
166
+ nativeAvailable: features.agentdbNative,
167
+ features: ['sql-storage', 'learning', 'quic-sync'],
168
+ },
169
+ };
170
+ }
171
+ /**
172
+ * Create in-memory fallback store
173
+ */
174
+ static async createFallbackStore(config, features, verbose) {
175
+ // RuVectorPatternStore has built-in fallback
176
+ const store = new RuVectorPatternStore_1.RuVectorPatternStore({
177
+ dimension: config.dimension ?? 384,
178
+ metric: config.metric ?? 'cosine',
179
+ storagePath: config.storagePath,
180
+ autoPersist: false, // No persistence in fallback
181
+ enableMetrics: config.enableMetrics ?? true,
182
+ });
183
+ await store.initialize();
184
+ return {
185
+ store,
186
+ backend: 'fallback',
187
+ info: {
188
+ platform: features.platform,
189
+ arch: features.arch,
190
+ nativeAvailable: false,
191
+ features: ['in-memory', 'cosine-similarity'],
192
+ },
193
+ };
194
+ }
195
+ /**
196
+ * Detect platform features and available backends
197
+ */
198
+ static detectPlatformFeatures() {
199
+ const platform = process.platform;
200
+ const arch = process.arch;
201
+ const nodeVersion = process.version;
202
+ // Check RuVector availability
203
+ let ruvectorNative = false;
204
+ try {
205
+ require('@ruvector/core');
206
+ ruvectorNative = true;
207
+ }
208
+ catch {
209
+ ruvectorNative = false;
210
+ }
211
+ // Check AgentDB availability
212
+ let agentdbNative = false;
213
+ try {
214
+ require('agentdb');
215
+ agentdbNative = true;
216
+ }
217
+ catch {
218
+ agentdbNative = false;
219
+ }
220
+ // Check WASM support
221
+ const wasmSupport = typeof WebAssembly !== 'undefined';
222
+ return {
223
+ ruvectorNative,
224
+ agentdbNative,
225
+ wasmSupport,
226
+ platform,
227
+ arch,
228
+ nodeVersion,
229
+ };
230
+ }
231
+ /**
232
+ * Get recommended configuration for current platform
233
+ */
234
+ static getRecommendedConfig() {
235
+ const features = this.detectPlatformFeatures();
236
+ // Base config optimized from benchmarks
237
+ const config = {
238
+ dimension: 384,
239
+ metric: 'cosine',
240
+ enableMetrics: true,
241
+ hnsw: {
242
+ m: 32,
243
+ efConstruction: 200,
244
+ efSearch: 100,
245
+ },
246
+ };
247
+ // Platform-specific recommendations
248
+ if (features.ruvectorNative) {
249
+ config.preferredBackend = 'ruvector';
250
+ // Higher HNSW params for native performance
251
+ config.hnsw = {
252
+ m: 32,
253
+ efConstruction: 200,
254
+ efSearch: 100,
255
+ };
256
+ }
257
+ else if (features.agentdbNative) {
258
+ config.preferredBackend = 'agentdb';
259
+ }
260
+ else {
261
+ config.preferredBackend = 'auto';
262
+ // Lower params for fallback performance
263
+ config.hnsw = {
264
+ m: 16,
265
+ efConstruction: 100,
266
+ efSearch: 50,
267
+ };
268
+ }
269
+ return config;
270
+ }
271
+ /**
272
+ * Validate a pattern store instance
273
+ */
274
+ static async validate(store) {
275
+ const errors = [];
276
+ try {
277
+ // Test basic operations
278
+ const testPattern = {
279
+ id: '__validation_test__',
280
+ type: 'test',
281
+ domain: 'validation',
282
+ embedding: Array(384).fill(0.1),
283
+ content: 'Validation test pattern',
284
+ };
285
+ await store.storePattern(testPattern);
286
+ const retrieved = await store.getPattern(testPattern.id);
287
+ if (!retrieved) {
288
+ errors.push('Failed to retrieve stored pattern');
289
+ }
290
+ const searchResults = await store.searchSimilar(testPattern.embedding, {
291
+ k: 1,
292
+ });
293
+ if (searchResults.length === 0) {
294
+ errors.push('Search returned no results');
295
+ }
296
+ await store.deletePattern(testPattern.id);
297
+ const stats = await store.getStats();
298
+ return {
299
+ valid: errors.length === 0,
300
+ errors,
301
+ stats,
302
+ };
303
+ }
304
+ catch (error) {
305
+ errors.push(`Validation error: ${error.message}`);
306
+ return {
307
+ valid: false,
308
+ errors,
309
+ stats: {
310
+ count: 0,
311
+ dimension: 384,
312
+ metric: 'cosine',
313
+ implementation: 'fallback',
314
+ },
315
+ };
316
+ }
317
+ }
318
+ /**
319
+ * Get RuVector availability information
320
+ */
321
+ static getRuVectorInfo() {
322
+ return (0, RuVectorPatternStore_1.getRuVectorInfo)();
323
+ }
324
+ /**
325
+ * Check if RuVector is available
326
+ */
327
+ static isRuVectorAvailable() {
328
+ return (0, RuVectorPatternStore_1.isRuVectorAvailable)();
329
+ }
330
+ }
331
+ exports.PatternStoreFactory = PatternStoreFactory;
332
+ /**
333
+ * Convenience function to create a pattern store
334
+ */
335
+ async function createPatternStore(config) {
336
+ const result = await PatternStoreFactory.create(config);
337
+ return result.store;
338
+ }
339
+ /**
340
+ * Convenience function to create a high-performance pattern store
341
+ * Uses RuVector if available, optimized for throughput
342
+ */
343
+ async function createHighPerformanceStore(storagePath) {
344
+ const result = await PatternStoreFactory.create({
345
+ preferredBackend: 'ruvector',
346
+ storagePath: storagePath ?? './data/hp-patterns.ruvector',
347
+ enableMetrics: true,
348
+ hnsw: {
349
+ m: 48,
350
+ efConstruction: 300,
351
+ efSearch: 150,
352
+ },
353
+ });
354
+ return result.store;
355
+ }
356
+ /**
357
+ * Create pattern store from environment configuration
358
+ * Reads from PATTERN_STORE_BACKEND, PATTERN_STORE_PATH, etc.
359
+ */
360
+ async function createPatternStoreFromEnv() {
361
+ const backend = process.env.PATTERN_STORE_BACKEND;
362
+ const storagePath = process.env.PATTERN_STORE_PATH;
363
+ const verbose = process.env.PATTERN_STORE_VERBOSE === 'true';
364
+ return PatternStoreFactory.create({
365
+ preferredBackend: backend ?? 'auto',
366
+ storagePath,
367
+ verbose,
368
+ });
369
+ }
370
+ //# sourceMappingURL=PatternStoreFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternStoreFactory.js","sourceRoot":"","sources":["../../../src/core/memory/PatternStoreFactory.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ export declare class RealAgentDBAdapter {
24
24
  initialize(): Promise<void>;
25
25
  /**
26
26
  * Create patterns table (base AgentDB table for vector embeddings)
27
+ * Note: pattern_id column is required for agentdb's HNSWIndex compatibility
27
28
  */
28
29
  private createPatternsTable;
29
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RealAgentDBAdapter.d.ts","sourceRoot":"","sources":["../../../src/core/memory/RealAgentDBAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzF,OAAO,EAA+C,aAAa,EAAoB,MAAM,SAAS,CAAC;AAEvG,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAK1D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDjC;;OAEG;YACW,mBAAmB;IAgBjC;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,sBAAsB;IA8BpC;;;;;OAKG;YACW,uBAAuB;IA2BrC;;;;;OAKG;YACW,uBAAuB;IA2BrC;;;;;OAKG;YACW,+BAA+B;IAqB7C;;;;;OAKG;YACW,iCAAiC;IAuB/C;;;;;;;;OAQG;YACW,qBAAqB;IA8CnC;;;;;OAKG;YACW,wBAAwB;IAoBtC;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAuE9C;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BxD;;OAEG;IACG,qBAAqB,CACzB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IA4G3B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAuB9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAIxC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD;;;OAGG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IA8C5D;;;OAGG;IACH,OAAO,CAAC,WAAW;CA8BpB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,kBAAkB,CAErB"}
1
+ {"version":3,"file":"RealAgentDBAdapter.d.ts","sourceRoot":"","sources":["../../../src/core/memory/RealAgentDBAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzF,OAAO,EAA+C,aAAa,EAAoB,MAAM,SAAS,CAAC;AAEvG,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAK1D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDjC;;;OAGG;YACW,mBAAmB;IAkBjC;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,sBAAsB;IA8BpC;;;;;OAKG;YACW,uBAAuB;IA2BrC;;;;;OAKG;YACW,uBAAuB;IA2BrC;;;;;OAKG;YACW,+BAA+B;IAqB7C;;;;;OAKG;YACW,iCAAiC;IAuB/C;;;;;;;;OAQG;YACW,qBAAqB;IA8CnC;;;;;OAKG;YACW,wBAAwB;IAoBtC;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA6E9C;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BxD;;OAEG;IACG,qBAAqB,CACzB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IAkH3B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAuB9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAIxC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD;;;OAGG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAyC5D;;;OAGG;IACH,OAAO,CAAC,WAAW;CA8BpB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,kBAAkB,CAErB"}
@@ -70,11 +70,13 @@ class RealAgentDBAdapter {
70
70
  }
71
71
  /**
72
72
  * Create patterns table (base AgentDB table for vector embeddings)
73
+ * Note: pattern_id column is required for agentdb's HNSWIndex compatibility
73
74
  */
74
75
  async createPatternsTable() {
75
76
  const sql = `
76
77
  CREATE TABLE IF NOT EXISTS patterns (
77
78
  id TEXT PRIMARY KEY,
79
+ pattern_id TEXT GENERATED ALWAYS AS (id) STORED,
78
80
  type TEXT NOT NULL,
79
81
  confidence REAL NOT NULL DEFAULT 0.5,
80
82
  embedding BLOB,
@@ -84,6 +86,7 @@ class RealAgentDBAdapter {
84
86
  `;
85
87
  await this.db.exec(sql);
86
88
  await this.db.exec('CREATE INDEX IF NOT EXISTS idx_patterns_type ON patterns(type)');
89
+ await this.db.exec('CREATE INDEX IF NOT EXISTS idx_patterns_pattern_id ON patterns(pattern_id)');
87
90
  }
88
91
  /**
89
92
  * Create QE Learning System Tables
@@ -353,26 +356,28 @@ class RealAgentDBAdapter {
353
356
  // Use parameterized query to prevent SQL injection
354
357
  // Note: sql.js doesn't support traditional parameterized queries in exec()
355
358
  // We'll use run() with bound parameters instead
359
+ // Convert embedding to buffer for storage
360
+ const embeddingBuffer = Buffer.from(embedding.buffer);
356
361
  const stmt = this.db.prepare(`
357
362
  INSERT OR REPLACE INTO patterns (id, type, confidence, embedding, metadata, created_at)
358
- VALUES (?, ?, ?, NULL, ?, unixepoch())
363
+ VALUES (?, ?, ?, ?, ?, unixepoch())
359
364
  `);
360
- stmt.run([
361
- pattern.id,
362
- pattern.type,
363
- pattern.confidence || 0.5,
364
- metadataJson
365
- ]);
366
- stmt.free();
365
+ // AgentDB's SqlJsDatabase uses spread params, not array
366
+ stmt.run(pattern.id, pattern.type, pattern.confidence || 0.5, embeddingBuffer, metadataJson);
367
+ if (typeof stmt.free === 'function')
368
+ stmt.free();
369
+ else if (typeof stmt.finalize === 'function')
370
+ stmt.finalize();
367
371
  // Add to HNSW index - use parameterized query
372
+ // AgentDB's SqlJsDatabase uses get() with spread params
368
373
  if (this.hnswIndex && this.hnswIndex.isReady()) {
369
374
  const stmtSelect = this.db.prepare('SELECT rowid FROM patterns WHERE id = ?');
370
- stmtSelect.bind([pattern.id]);
371
- if (stmtSelect.step()) {
372
- const rowid = stmtSelect.getAsObject().rowid;
373
- this.hnswIndex.addVector(rowid, embedding);
375
+ const row = stmtSelect.get(pattern.id);
376
+ if (row && row.rowid) {
377
+ this.hnswIndex.addVector(row.rowid, embedding);
374
378
  }
375
- stmtSelect.free();
379
+ if (typeof stmtSelect.finalize === 'function')
380
+ stmtSelect.finalize();
376
381
  }
377
382
  return pattern.id;
378
383
  }
@@ -472,11 +477,16 @@ class RealAgentDBAdapter {
472
477
  for (const result of searchResults) {
473
478
  const row = await this.db.get('SELECT * FROM patterns WHERE rowid = ?', [result.id]);
474
479
  if (row) {
480
+ // Decode embedding from stored buffer if available
481
+ let storedEmbedding = queryEmbedding;
482
+ if (row.embedding && row.embedding instanceof Uint8Array) {
483
+ storedEmbedding = Array.from(new Float32Array(row.embedding.buffer));
484
+ }
475
485
  patterns.push({
476
486
  id: row.id,
477
487
  type: row.type,
478
488
  data: row.metadata ? JSON.parse(row.metadata) : {},
479
- embedding: queryEmbedding, // Use query embedding as placeholder
489
+ embedding: storedEmbedding,
480
490
  confidence: row.confidence,
481
491
  metadata: {
482
492
  ...JSON.parse(row.metadata || '{}'),
@@ -579,14 +589,12 @@ class RealAgentDBAdapter {
579
589
  // Validate SQL query for basic safety
580
590
  this.validateSQL(sql);
581
591
  // Use parameterized queries via prepare() for safety
592
+ // AgentDB's SqlJsDatabase uses all() with spread params
582
593
  if (params.length > 0) {
583
594
  const stmt = this.db.prepare(sql);
584
- stmt.bind(params);
585
- const results = [];
586
- while (stmt.step()) {
587
- results.push(stmt.getAsObject());
588
- }
589
- stmt.free();
595
+ const results = stmt.all(...params);
596
+ if (typeof stmt.finalize === 'function')
597
+ stmt.finalize();
590
598
  return results;
591
599
  }
592
600
  // For queries without parameters, use exec()