agentic-qe 1.9.3 → 1.9.4
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/CHANGELOG.md +54 -0
- package/README.md +30 -5
- package/config/.env.otel.example +25 -0
- package/config/OTEL-QUICK-REFERENCE.md +137 -0
- package/config/README-OTEL.md +222 -0
- package/config/alerting-rules.yml +518 -0
- package/config/docker-compose.otel.yml +187 -0
- package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
- package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
- package/config/grafana/provisioning/datasources/datasources.yml +53 -0
- package/config/otel-collector-config.yaml.example +145 -0
- package/config/prometheus.yml.example +106 -0
- package/dist/alerting/AlertManager.d.ts +120 -0
- package/dist/alerting/AlertManager.d.ts.map +1 -0
- package/dist/alerting/AlertManager.js +345 -0
- package/dist/alerting/AlertManager.js.map +1 -0
- package/dist/alerting/FeedbackRouter.d.ts +98 -0
- package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
- package/dist/alerting/FeedbackRouter.js +331 -0
- package/dist/alerting/FeedbackRouter.js.map +1 -0
- package/dist/alerting/StrategyApplicator.d.ts +120 -0
- package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
- package/dist/alerting/StrategyApplicator.js +299 -0
- package/dist/alerting/StrategyApplicator.js.map +1 -0
- package/dist/alerting/index.d.ts +68 -0
- package/dist/alerting/index.d.ts.map +1 -0
- package/dist/alerting/index.js +112 -0
- package/dist/alerting/index.js.map +1 -0
- package/dist/alerting/types.d.ts +118 -0
- package/dist/alerting/types.d.ts.map +1 -0
- package/dist/alerting/types.js +11 -0
- package/dist/alerting/types.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -1
- package/dist/cli/init/claude-config.js +12 -7
- package/dist/cli/init/claude-config.js.map +1 -1
- package/dist/core/memory/IPatternStore.d.ts +209 -0
- package/dist/core/memory/IPatternStore.d.ts.map +1 -0
- package/dist/core/memory/IPatternStore.js +15 -0
- package/dist/core/memory/IPatternStore.js.map +1 -0
- package/dist/core/memory/MigrationTools.d.ts +192 -0
- package/dist/core/memory/MigrationTools.d.ts.map +1 -0
- package/dist/core/memory/MigrationTools.js +615 -0
- package/dist/core/memory/MigrationTools.js.map +1 -0
- package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
- package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
- package/dist/core/memory/NeuralEnhancement.js +598 -0
- package/dist/core/memory/NeuralEnhancement.js.map +1 -0
- package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
- package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
- package/dist/core/memory/PatternStoreFactory.js +370 -0
- package/dist/core/memory/PatternStoreFactory.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +28 -20
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
- package/dist/core/memory/RuVectorPatternStore.js +605 -0
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
- package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
- package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
- package/dist/core/memory/SelfHealingMonitor.js +451 -0
- package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +97 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +11 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +36 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
- package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
- package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
- package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
- package/dist/reasoning/index.d.ts +2 -0
- package/dist/reasoning/index.d.ts.map +1 -1
- package/dist/reasoning/index.js +6 -1
- package/dist/reasoning/index.js.map +1 -1
- package/dist/reporting/ResultAggregator.d.ts +107 -0
- package/dist/reporting/ResultAggregator.d.ts.map +1 -0
- package/dist/reporting/ResultAggregator.js +435 -0
- package/dist/reporting/ResultAggregator.js.map +1 -0
- package/dist/reporting/index.d.ts +48 -0
- package/dist/reporting/index.d.ts.map +1 -0
- package/dist/reporting/index.js +154 -0
- package/dist/reporting/index.js.map +1 -0
- package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
- package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
- package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
- package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
- package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
- package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
- package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
- package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/JSONReporter.js +324 -0
- package/dist/reporting/reporters/JSONReporter.js.map +1 -0
- package/dist/reporting/reporters/index.d.ts +14 -0
- package/dist/reporting/reporters/index.d.ts.map +1 -0
- package/dist/reporting/reporters/index.js +19 -0
- package/dist/reporting/reporters/index.js.map +1 -0
- package/dist/reporting/types.d.ts +427 -0
- package/dist/reporting/types.d.ts.map +1 -0
- package/dist/reporting/types.js +12 -0
- package/dist/reporting/types.js.map +1 -0
- package/package.json +9 -1
|
@@ -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
|
|
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 (?, ?, ?,
|
|
363
|
+
VALUES (?, ?, ?, ?, ?, unixepoch())
|
|
359
364
|
`);
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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.
|
|
371
|
-
if (
|
|
372
|
-
|
|
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.
|
|
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:
|
|
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.
|
|
585
|
-
|
|
586
|
-
|
|
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()
|