agentdb 2.0.0-alpha.1 → 2.0.0-alpha.2
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/dist/agentdb.min.js +4 -4
- package/dist/simulation/cli.js +0 -0
- package/dist/src/cli/lib/config-manager.d.ts.map +1 -1
- package/dist/src/cli/lib/config-manager.js.map +1 -1
- package/dist/src/cli/lib/history-tracker.d.ts.map +1 -1
- package/dist/src/cli/lib/history-tracker.js +7 -1
- package/dist/src/cli/lib/history-tracker.js.map +1 -1
- package/examples/README.md +105 -0
- package/examples/quickstart.js +43 -0
- package/package.json +6 -2
- package/simulation/.claude-flow/metrics/agent-metrics.json +1 -0
- package/simulation/.claude-flow/metrics/performance.json +87 -0
- package/simulation/.claude-flow/metrics/task-metrics.json +10 -0
- package/simulation/COMPLETION-STATUS.md +139 -0
- package/simulation/FINAL-RESULTS.md +414 -0
- package/simulation/FINAL-STATUS.md +281 -0
- package/simulation/INTEGRATION-COMPLETE.md +452 -0
- package/simulation/MIGRATION-STATUS.md +231 -0
- package/simulation/OPTIMIZATION-RESULTS.md +397 -0
- package/simulation/PHASE1-COMPLETE.md +163 -0
- package/simulation/README.md +848 -0
- package/simulation/SIMULATION-RESULTS.md +239 -0
- package/simulation/cli.ts +78 -0
- package/simulation/configs/default.json +37 -0
- package/simulation/data/advanced/aidefence.graph +0 -0
- package/simulation/data/advanced/bmssp.graph +0 -0
- package/simulation/data/advanced/consciousness.graph +0 -0
- package/simulation/data/advanced/goalie.graph +0 -0
- package/simulation/data/advanced/psycho-symbolic.graph +0 -0
- package/simulation/data/advanced/research-swarm.graph +0 -0
- package/simulation/data/advanced/sublinear.graph +0 -0
- package/simulation/data/advanced/temporal.graph +0 -0
- package/simulation/data/causal.graph +0 -0
- package/simulation/data/graph-traversal.graph +0 -0
- package/simulation/data/lean-agentic.graph +0 -0
- package/simulation/data/reflexion.graph +0 -0
- package/simulation/data/skills.graph +0 -0
- package/simulation/data/stock-market.graph +0 -0
- package/simulation/data/strange-loops.graph +0 -0
- package/simulation/data/swarm.graph +0 -0
- package/simulation/data/voting-consensus.graph +0 -0
- package/simulation/docs/CLI-INTEGRATION-PLAN.md +1038 -0
- package/simulation/docs/COMPREHENSIVE-LATENT-SPACE-COMPLETION.md +354 -0
- package/simulation/docs/DOCUMENTATION-INDEX.md +226 -0
- package/simulation/docs/IMPLEMENTATION-COMPLETE.md +521 -0
- package/simulation/docs/OPTIMIZATION-SUMMARY.md +279 -0
- package/simulation/docs/README.md +229 -0
- package/simulation/docs/SWARM-5-INTEGRATION-SUMMARY.md +528 -0
- package/simulation/docs/TESTING-SUMMARY.md +304 -0
- package/simulation/docs/architecture/EXTENSION-API.md +868 -0
- package/simulation/docs/architecture/INTEGRATION-ARCHITECTURE.md +1138 -0
- package/simulation/docs/architecture/OPTIMIZATION-STRATEGY.md +778 -0
- package/simulation/docs/architecture/SIMULATION-ARCHITECTURE.md +892 -0
- package/simulation/docs/guides/CLI-REFERENCE.md +896 -0
- package/simulation/docs/guides/CUSTOM-SIMULATIONS.md +931 -0
- package/simulation/docs/guides/DEPLOYMENT.md +832 -0
- package/simulation/docs/guides/IMPLEMENTATION-SUMMARY.md +544 -0
- package/simulation/docs/guides/MIGRATION-GUIDE.md +591 -0
- package/simulation/docs/guides/QUICK-START.md +361 -0
- package/simulation/docs/guides/README.md +736 -0
- package/simulation/docs/guides/TROUBLESHOOTING.md +817 -0
- package/simulation/docs/guides/WIZARD-GUIDE.md +869 -0
- package/simulation/docs/reports/latent-space/MASTER-SYNTHESIS.md +345 -0
- package/simulation/docs/reports/latent-space/README.md +132 -0
- package/simulation/docs/reports/latent-space/attention-analysis-RESULTS.md +238 -0
- package/simulation/docs/reports/latent-space/clustering-analysis-RESULTS.md +210 -0
- package/simulation/docs/reports/latent-space/hnsw-exploration-RESULTS.md +332 -0
- package/simulation/docs/reports/latent-space/hypergraph-exploration-RESULTS.md +37 -0
- package/simulation/docs/reports/latent-space/neural-augmentation-RESULTS.md +69 -0
- package/simulation/docs/reports/latent-space/quantum-hybrid-RESULTS.md +91 -0
- package/simulation/docs/reports/latent-space/self-organizing-hnsw-RESULTS.md +51 -0
- package/simulation/docs/reports/latent-space/traversal-optimization-RESULTS.md +238 -0
- package/simulation/reports/README.md +397 -0
- package/simulation/reports/advanced-simulations-performance.md +1241 -0
- package/simulation/reports/aidefence-integration-2025-11-30T01-36-53-486Z.json +30 -0
- package/simulation/reports/architecture-analysis.md +1396 -0
- package/simulation/reports/basic-scenarios-performance.md +1840 -0
- package/simulation/reports/bmssp-integration-2025-11-30T01-36-27-193Z.json +30 -0
- package/simulation/reports/bmssp-integration-2025-11-30T03-38-12-887Z.json +30 -0
- package/simulation/reports/causal-reasoning-2025-11-29T23-35-21-795Z.json +36 -0
- package/simulation/reports/causal-reasoning-2025-11-30T00-58-42-862Z.json +30 -0
- package/simulation/reports/causal-reasoning-2025-11-30T00-59-12-546Z.json +40 -0
- package/simulation/reports/consciousness-explorer-2025-11-30T01-36-51-269Z.json +31 -0
- package/simulation/reports/core-benchmarks.md +727 -0
- package/simulation/reports/goalie-integration-2025-11-30T01-36-52-377Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-29T23-35-35-279Z.json +78 -0
- package/simulation/reports/graph-traversal-2025-11-29T23-37-36-697Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-03-59-716Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-05-10-984Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-06-16-334Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-06-53-312Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-07-51-075Z.json +24 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-08-22-179Z.json +42 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-29T23-37-23-804Z.json +148 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-30T01-31-24-401Z.json +31 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-30T03-38-01-470Z.json +31 -0
- package/simulation/reports/multi-agent-swarm-2025-11-29T23-35-28-093Z.json +78 -0
- package/simulation/reports/multi-agent-swarm-2025-11-30T01-03-54-062Z.json +42 -0
- package/simulation/reports/multi-agent-swarm-2025-11-30T01-05-06-092Z.json +42 -0
- package/simulation/reports/psycho-symbolic-reasoner-2025-11-30T01-36-50-180Z.json +30 -0
- package/simulation/reports/quality-metrics.md +727 -0
- package/simulation/reports/reflexion-learning-2025-11-29T23-35-09-774Z.json +48 -0
- package/simulation/reports/reflexion-learning-2025-11-29T23-37-16-934Z.json +36 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-07-49-259Z.json +30 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-09-29-319Z.json +51 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-28-37-659Z.json +51 -0
- package/simulation/reports/reflexion-learning-2025-11-30T01-31-30-690Z.json +29 -0
- package/simulation/reports/reflexion-learning-2025-11-30T03-38-06-937Z.json +29 -0
- package/simulation/reports/research-foundations.md +2004 -0
- package/simulation/reports/research-swarm-2025-11-30T01-36-54-647Z.json +30 -0
- package/simulation/reports/scalability-deployment.md +2404 -0
- package/simulation/reports/skill-evolution-2025-11-29T23-35-15-945Z.json +36 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-03-17-995Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-03-48-441Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-05-00-554Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-06-11-436Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-06-51-979Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-07-32-695Z.json +40 -0
- package/simulation/reports/stock-market-emergence-2025-11-30T00-11-43-865Z.json +56 -0
- package/simulation/reports/stock-market-emergence-2025-11-30T00-28-57-495Z.json +56 -0
- package/simulation/reports/strange-loops-2025-11-29T23-37-30-621Z.json +78 -0
- package/simulation/reports/strange-loops-2025-11-30T00-07-55-415Z.json +30 -0
- package/simulation/reports/strange-loops-2025-11-30T00-09-35-133Z.json +30 -0
- package/simulation/reports/strange-loops-2025-11-30T00-48-50-744Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-54-48-044Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-57-27-633Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-57-59-135Z.json +42 -0
- package/simulation/reports/sublinear-solver-2025-11-30T01-36-33-134Z.json +30 -0
- package/simulation/reports/temporal-lead-solver-2025-11-30T01-36-38-628Z.json +30 -0
- package/simulation/reports/use-cases-applications.md +2212 -0
- package/simulation/reports/voting-system-consensus-2025-11-30T00-11-37-199Z.json +58 -0
- package/simulation/reports/voting-system-consensus-2025-11-30T00-28-47-735Z.json +58 -0
- package/simulation/runner.ts +300 -0
- package/simulation/scenarios/README-advanced/aidefence-integration.md +63 -0
- package/simulation/scenarios/README-advanced/bmssp-integration.md +58 -0
- package/simulation/scenarios/README-advanced/consciousness-explorer.md +53 -0
- package/simulation/scenarios/README-advanced/goalie-integration.md +61 -0
- package/simulation/scenarios/README-advanced/psycho-symbolic-reasoner.md +55 -0
- package/simulation/scenarios/README-advanced/research-swarm.md +63 -0
- package/simulation/scenarios/README-advanced/sublinear-solver.md +58 -0
- package/simulation/scenarios/README-advanced/temporal-lead-solver.md +55 -0
- package/simulation/scenarios/README-basic/causal-reasoning.md +39 -0
- package/simulation/scenarios/README-basic/graph-traversal.md +41 -0
- package/simulation/scenarios/README-basic/lean-agentic-swarm.md +122 -0
- package/simulation/scenarios/README-basic/multi-agent-swarm.md +34 -0
- package/simulation/scenarios/README-basic/reflexion-learning.md +41 -0
- package/simulation/scenarios/README-basic/skill-evolution.md +38 -0
- package/simulation/scenarios/README-basic/stock-market-emergence.md +28 -0
- package/simulation/scenarios/README-basic/strange-loops.md +36 -0
- package/simulation/scenarios/README-basic/voting-system-consensus.md +28 -0
- package/simulation/scenarios/README.md +438 -0
- package/simulation/scenarios/aidefence-integration.ts +165 -0
- package/simulation/scenarios/bmssp-integration.ts +137 -0
- package/simulation/scenarios/causal-reasoning.ts +143 -0
- package/simulation/scenarios/consciousness-explorer.ts +139 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/agent-metrics.json +1 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/performance.json +87 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/task-metrics.json +10 -0
- package/simulation/scenarios/domain-examples/README.md +525 -0
- package/simulation/scenarios/domain-examples/e-commerce-recommendations.ts +220 -0
- package/simulation/scenarios/domain-examples/index.ts +81 -0
- package/simulation/scenarios/domain-examples/iot-sensor-networks.ts +290 -0
- package/simulation/scenarios/domain-examples/medical-imaging.ts +181 -0
- package/simulation/scenarios/domain-examples/robotics-navigation.ts +214 -0
- package/simulation/scenarios/domain-examples/scientific-research.ts +250 -0
- package/simulation/scenarios/domain-examples/trading-systems.ts +138 -0
- package/simulation/scenarios/goalie-integration.ts +161 -0
- package/simulation/scenarios/graph-traversal.ts +129 -0
- package/simulation/scenarios/latent-space/OPTIMIZATION-COMPLETE.md +287 -0
- package/simulation/scenarios/latent-space/README-attention-analysis.md +170 -0
- package/simulation/scenarios/latent-space/README-clustering-analysis.md +239 -0
- package/simulation/scenarios/latent-space/README-hnsw-exploration.md +199 -0
- package/simulation/scenarios/latent-space/README-hypergraph-exploration.md +279 -0
- package/simulation/scenarios/latent-space/README-neural-augmentation.md +267 -0
- package/simulation/scenarios/latent-space/README-quantum-hybrid.md +276 -0
- package/simulation/scenarios/latent-space/README-self-organizing-hnsw.md +244 -0
- package/simulation/scenarios/latent-space/README-traversal-optimization.md +212 -0
- package/simulation/scenarios/latent-space/attention-analysis.ts +598 -0
- package/simulation/scenarios/latent-space/clustering-analysis.ts +796 -0
- package/simulation/scenarios/latent-space/hnsw-exploration.ts +526 -0
- package/simulation/scenarios/latent-space/hypergraph-exploration.ts +706 -0
- package/simulation/scenarios/latent-space/index.ts +47 -0
- package/simulation/scenarios/latent-space/neural-augmentation.ts +604 -0
- package/simulation/scenarios/latent-space/quantum-hybrid.ts +508 -0
- package/simulation/scenarios/latent-space/self-organizing-hnsw.ts +680 -0
- package/simulation/scenarios/latent-space/traversal-optimization.ts +782 -0
- package/simulation/scenarios/lean-agentic-swarm.ts +182 -0
- package/simulation/scenarios/multi-agent-swarm.ts +146 -0
- package/simulation/scenarios/psycho-symbolic-reasoner.ts +136 -0
- package/simulation/scenarios/reflexion-learning.ts +132 -0
- package/simulation/scenarios/research-swarm.ts +187 -0
- package/simulation/scenarios/skill-evolution.ts +135 -0
- package/simulation/scenarios/stock-market-emergence.ts +323 -0
- package/simulation/scenarios/strange-loops.ts +175 -0
- package/simulation/scenarios/sublinear-solver.ts +108 -0
- package/simulation/scenarios/temporal-lead-solver.ts +121 -0
- package/simulation/scenarios/voting-system-consensus.ts +251 -0
- package/simulation/tests/latent-space/attention-analysis.test.ts +204 -0
- package/simulation/tests/latent-space/clustering-analysis.test.ts +281 -0
- package/simulation/tests/latent-space/hnsw-exploration.test.ts +253 -0
- package/simulation/tests/latent-space/hypergraph-exploration.test.ts +295 -0
- package/simulation/tests/latent-space/neural-augmentation.test.ts +326 -0
- package/simulation/tests/latent-space/quantum-hybrid.test.ts +307 -0
- package/simulation/tests/latent-space/self-organizing-hnsw.test.ts +291 -0
- package/simulation/tests/latent-space/traversal-optimization.test.ts +261 -0
- package/simulation/types.ts +177 -0
- package/simulation/utils/PerformanceOptimizer.ts +269 -0
- package/src/cli/lib/history-tracker.ts +7 -1
|
@@ -0,0 +1,868 @@
|
|
|
1
|
+
# AgentDB Extension API v2.0
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document defines the Extension API for creating custom simulation scenarios, components, and integrations with AgentDB v2.0.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
1. [Creating Custom Scenarios](#creating-custom-scenarios)
|
|
12
|
+
2. [Component Interfaces](#component-interfaces)
|
|
13
|
+
3. [Plugin System](#plugin-system)
|
|
14
|
+
4. [Event System](#event-system)
|
|
15
|
+
5. [Code Examples](#code-examples)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Creating Custom Scenarios
|
|
20
|
+
|
|
21
|
+
### Scenario Interface
|
|
22
|
+
|
|
23
|
+
All simulation scenarios must implement the `SimulationScenario` interface:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
interface SimulationScenario {
|
|
27
|
+
metadata: SimulationMetadata;
|
|
28
|
+
execute(config: AgentDBConfig): Promise<SimulationResult>;
|
|
29
|
+
validate?(config: AgentDBConfig): ValidationResult;
|
|
30
|
+
cleanup?(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface SimulationMetadata {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
version: string;
|
|
37
|
+
category: 'core' | 'experimental' | 'plugin';
|
|
38
|
+
description: string;
|
|
39
|
+
author?: string;
|
|
40
|
+
agentdbVersion: string; // Semver range (e.g., "^2.0.0")
|
|
41
|
+
tags?: string[];
|
|
42
|
+
estimatedDuration?: number; // milliseconds
|
|
43
|
+
requiredMemoryMB?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface AgentDBConfig {
|
|
47
|
+
profile: 'production' | 'memory' | 'latency' | 'recall' | 'custom';
|
|
48
|
+
hnsw: { M: number; efConstruction: number; efSearch: number };
|
|
49
|
+
attention: { heads: number; dimension: number };
|
|
50
|
+
traversal: { beamWidth: number; strategy: 'greedy' | 'beam' | 'dynamic' };
|
|
51
|
+
clustering: { algorithm: 'louvain' | 'leiden' | 'spectral'; resolution: number };
|
|
52
|
+
neural: { mode: 'none' | 'gnn-only' | 'full'; reinforcementLearning: boolean };
|
|
53
|
+
hypergraph: { enabled: boolean; maxEdgeSize: number };
|
|
54
|
+
storage: { reportPath: string; autoBackup: boolean };
|
|
55
|
+
monitoring: { enabled: boolean; alertThresholds: { memoryMB: number; latencyMs: number } };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface SimulationResult {
|
|
59
|
+
scenario: string;
|
|
60
|
+
timestamp: Date;
|
|
61
|
+
config: AgentDBConfig;
|
|
62
|
+
metrics: {
|
|
63
|
+
recall: number;
|
|
64
|
+
latency: number;
|
|
65
|
+
throughput: number;
|
|
66
|
+
memoryUsage: number;
|
|
67
|
+
[key: string]: any;
|
|
68
|
+
};
|
|
69
|
+
insights: string[];
|
|
70
|
+
recommendations: string[];
|
|
71
|
+
iterations?: number;
|
|
72
|
+
duration?: number;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
interface ValidationResult {
|
|
76
|
+
valid: boolean;
|
|
77
|
+
errors?: string[];
|
|
78
|
+
warnings?: string[];
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Minimal Example
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// ~/.agentdb/plugins/my-scenario/index.ts
|
|
86
|
+
import { SimulationScenario, SimulationResult, AgentDBConfig } from 'agentdb';
|
|
87
|
+
|
|
88
|
+
export const myScenario: SimulationScenario = {
|
|
89
|
+
metadata: {
|
|
90
|
+
id: 'my-custom-scenario',
|
|
91
|
+
name: 'My Custom Scenario',
|
|
92
|
+
version: '1.0.0',
|
|
93
|
+
category: 'plugin',
|
|
94
|
+
description: 'Custom simulation for specific use case',
|
|
95
|
+
author: 'Your Name',
|
|
96
|
+
agentdbVersion: '^2.0.0',
|
|
97
|
+
tags: ['custom', 'experimental'],
|
|
98
|
+
estimatedDuration: 30000, // 30 seconds
|
|
99
|
+
requiredMemoryMB: 512
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
async execute(config: AgentDBConfig): Promise<SimulationResult> {
|
|
103
|
+
// Your simulation logic here
|
|
104
|
+
console.log('Running custom scenario...');
|
|
105
|
+
|
|
106
|
+
// Example: Simulate HNSW search
|
|
107
|
+
const recall = 0.95;
|
|
108
|
+
const latency = 120;
|
|
109
|
+
const throughput = 1000;
|
|
110
|
+
const memoryUsage = 512;
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
scenario: this.metadata.id,
|
|
114
|
+
timestamp: new Date(),
|
|
115
|
+
config,
|
|
116
|
+
metrics: {
|
|
117
|
+
recall,
|
|
118
|
+
latency,
|
|
119
|
+
throughput,
|
|
120
|
+
memoryUsage
|
|
121
|
+
},
|
|
122
|
+
insights: [
|
|
123
|
+
'Custom insight 1: Performance is optimal',
|
|
124
|
+
'Custom insight 2: Memory usage is within bounds'
|
|
125
|
+
],
|
|
126
|
+
recommendations: [
|
|
127
|
+
'Try increasing M parameter for better recall',
|
|
128
|
+
'Consider enabling neural augmentation'
|
|
129
|
+
],
|
|
130
|
+
iterations: 1,
|
|
131
|
+
duration: 25000
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
validate(config: AgentDBConfig): ValidationResult {
|
|
136
|
+
const errors: string[] = [];
|
|
137
|
+
const warnings: string[] = [];
|
|
138
|
+
|
|
139
|
+
// Custom validation logic
|
|
140
|
+
if (config.hnsw.M < 16) {
|
|
141
|
+
errors.push('M must be at least 16 for this scenario');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (config.neural.mode === 'none') {
|
|
145
|
+
warnings.push('Neural mode recommended for best results');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
valid: errors.length === 0,
|
|
150
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
151
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
152
|
+
};
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
async cleanup(): Promise<void> {
|
|
156
|
+
// Optional cleanup logic
|
|
157
|
+
console.log('Cleaning up custom scenario...');
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export default myScenario;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Advanced Example with Progress Tracking
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
import { SimulationScenario, SimulationResult, AgentDBConfig } from 'agentdb';
|
|
168
|
+
import { EventEmitter } from 'events';
|
|
169
|
+
|
|
170
|
+
export class AdvancedScenario extends EventEmitter implements SimulationScenario {
|
|
171
|
+
metadata = {
|
|
172
|
+
id: 'advanced-scenario',
|
|
173
|
+
name: 'Advanced Scenario',
|
|
174
|
+
version: '1.0.0',
|
|
175
|
+
category: 'plugin' as const,
|
|
176
|
+
description: 'Advanced simulation with progress tracking',
|
|
177
|
+
agentdbVersion: '^2.0.0',
|
|
178
|
+
estimatedDuration: 60000,
|
|
179
|
+
requiredMemoryMB: 1024
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
async execute(config: AgentDBConfig): Promise<SimulationResult> {
|
|
183
|
+
const totalIterations = 100;
|
|
184
|
+
const metrics = {
|
|
185
|
+
recall: 0,
|
|
186
|
+
latency: 0,
|
|
187
|
+
throughput: 0,
|
|
188
|
+
memoryUsage: 0
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
for (let i = 0; i < totalIterations; i++) {
|
|
192
|
+
// Simulate work
|
|
193
|
+
await this.simulateIteration(i, config);
|
|
194
|
+
|
|
195
|
+
// Emit progress
|
|
196
|
+
this.emit('progress', {
|
|
197
|
+
iteration: i + 1,
|
|
198
|
+
total: totalIterations,
|
|
199
|
+
percent: ((i + 1) / totalIterations) * 100
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Update metrics
|
|
203
|
+
metrics.recall += Math.random() * 0.01;
|
|
204
|
+
metrics.latency += Math.random() * 5;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
metrics.recall /= totalIterations;
|
|
208
|
+
metrics.latency /= totalIterations;
|
|
209
|
+
metrics.throughput = 1000 / (metrics.latency / 1000);
|
|
210
|
+
metrics.memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;
|
|
211
|
+
|
|
212
|
+
return {
|
|
213
|
+
scenario: this.metadata.id,
|
|
214
|
+
timestamp: new Date(),
|
|
215
|
+
config,
|
|
216
|
+
metrics,
|
|
217
|
+
insights: [
|
|
218
|
+
`Achieved ${(metrics.recall * 100).toFixed(1)}% recall`,
|
|
219
|
+
`Average latency: ${metrics.latency.toFixed(2)}ms`
|
|
220
|
+
],
|
|
221
|
+
recommendations: this.generateRecommendations(metrics, config),
|
|
222
|
+
iterations: totalIterations
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private async simulateIteration(iteration: number, config: AgentDBConfig): Promise<void> {
|
|
227
|
+
// Simulate work with delay
|
|
228
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
private generateRecommendations(metrics: any, config: AgentDBConfig): string[] {
|
|
232
|
+
const recommendations: string[] = [];
|
|
233
|
+
|
|
234
|
+
if (metrics.recall < 0.95) {
|
|
235
|
+
recommendations.push('Increase beam width to improve recall');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (metrics.latency > 200) {
|
|
239
|
+
recommendations.push('Reduce efSearch to lower latency');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (metrics.memoryUsage > config.monitoring.alertThresholds.memoryMB) {
|
|
243
|
+
recommendations.push('Enable memory-constrained profile');
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return recommendations;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export default new AdvancedScenario();
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Component Interfaces
|
|
256
|
+
|
|
257
|
+
### SearchStrategy Interface
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
interface SearchStrategy {
|
|
261
|
+
name: string;
|
|
262
|
+
|
|
263
|
+
// Build index from vectors
|
|
264
|
+
build(vectors: Vector[]): Promise<void>;
|
|
265
|
+
|
|
266
|
+
// Search for k nearest neighbors
|
|
267
|
+
search(query: Vector, k: number): Promise<SearchResult[]>;
|
|
268
|
+
|
|
269
|
+
// Get index statistics
|
|
270
|
+
getStats(): SearchStats;
|
|
271
|
+
|
|
272
|
+
// Optional: Incremental updates
|
|
273
|
+
insert?(vector: Vector): Promise<void>;
|
|
274
|
+
delete?(id: string): Promise<void>;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
interface Vector {
|
|
278
|
+
id: string;
|
|
279
|
+
data: number[];
|
|
280
|
+
metadata?: Record<string, any>;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
interface SearchResult {
|
|
284
|
+
id: string;
|
|
285
|
+
distance: number;
|
|
286
|
+
vector: Vector;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
interface SearchStats {
|
|
290
|
+
totalVectors: number;
|
|
291
|
+
dimensions: number;
|
|
292
|
+
indexSize: number; // bytes
|
|
293
|
+
buildTime: number; // ms
|
|
294
|
+
avgSearchTime: number; // ms
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Example Implementation**:
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
class CustomSearchStrategy implements SearchStrategy {
|
|
302
|
+
name = 'custom-hnsw';
|
|
303
|
+
private index: Map<string, Vector> = new Map();
|
|
304
|
+
|
|
305
|
+
async build(vectors: Vector[]): Promise<void> {
|
|
306
|
+
const startTime = Date.now();
|
|
307
|
+
|
|
308
|
+
for (const vector of vectors) {
|
|
309
|
+
this.index.set(vector.id, vector);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
console.log(`Built index in ${Date.now() - startTime}ms`);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
async search(query: Vector, k: number): Promise<SearchResult[]> {
|
|
316
|
+
const results: SearchResult[] = [];
|
|
317
|
+
|
|
318
|
+
for (const [id, vector] of this.index.entries()) {
|
|
319
|
+
const distance = this.calculateDistance(query.data, vector.data);
|
|
320
|
+
results.push({ id, distance, vector });
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
results.sort((a, b) => a.distance - b.distance);
|
|
324
|
+
return results.slice(0, k);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
getStats(): SearchStats {
|
|
328
|
+
return {
|
|
329
|
+
totalVectors: this.index.size,
|
|
330
|
+
dimensions: this.index.values().next().value?.data.length || 0,
|
|
331
|
+
indexSize: 0, // Calculate actual size
|
|
332
|
+
buildTime: 0,
|
|
333
|
+
avgSearchTime: 0
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
private calculateDistance(a: number[], b: number[]): number {
|
|
338
|
+
// Euclidean distance
|
|
339
|
+
return Math.sqrt(a.reduce((sum, val, i) => sum + Math.pow(val - b[i], 2), 0));
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### ClusteringAlgorithm Interface
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
interface ClusteringAlgorithm {
|
|
348
|
+
name: string;
|
|
349
|
+
|
|
350
|
+
// Cluster graph into communities
|
|
351
|
+
cluster(graph: Graph): Promise<Community[]>;
|
|
352
|
+
|
|
353
|
+
// Get modularity score
|
|
354
|
+
getModularity(): number;
|
|
355
|
+
|
|
356
|
+
// Refine clustering
|
|
357
|
+
refine(): Promise<void>;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
interface Graph {
|
|
361
|
+
nodes: Node[];
|
|
362
|
+
edges: Edge[];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
interface Node {
|
|
366
|
+
id: string;
|
|
367
|
+
data?: any;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
interface Edge {
|
|
371
|
+
source: string;
|
|
372
|
+
target: string;
|
|
373
|
+
weight?: number;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
interface Community {
|
|
377
|
+
id: string;
|
|
378
|
+
nodes: string[];
|
|
379
|
+
modularity: number;
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**Example Implementation**:
|
|
384
|
+
|
|
385
|
+
```typescript
|
|
386
|
+
class CustomClusteringAlgorithm implements ClusteringAlgorithm {
|
|
387
|
+
name = 'custom-louvain';
|
|
388
|
+
private communities: Community[] = [];
|
|
389
|
+
private modularity: number = 0;
|
|
390
|
+
|
|
391
|
+
async cluster(graph: Graph): Promise<Community[]> {
|
|
392
|
+
// Implement Louvain algorithm
|
|
393
|
+
// (simplified example)
|
|
394
|
+
|
|
395
|
+
const communityMap = new Map<string, string[]>();
|
|
396
|
+
|
|
397
|
+
for (const node of graph.nodes) {
|
|
398
|
+
const communityId = `community-${Math.floor(Math.random() * 5)}`;
|
|
399
|
+
|
|
400
|
+
if (!communityMap.has(communityId)) {
|
|
401
|
+
communityMap.set(communityId, []);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
communityMap.get(communityId)!.push(node.id);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
this.communities = Array.from(communityMap.entries()).map(([id, nodes]) => ({
|
|
408
|
+
id,
|
|
409
|
+
nodes,
|
|
410
|
+
modularity: this.calculateModularity(graph, nodes)
|
|
411
|
+
}));
|
|
412
|
+
|
|
413
|
+
this.modularity = this.communities.reduce((sum, c) => sum + c.modularity, 0);
|
|
414
|
+
|
|
415
|
+
return this.communities;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
getModularity(): number {
|
|
419
|
+
return this.modularity;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
async refine(): Promise<void> {
|
|
423
|
+
// Implement refinement logic
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
private calculateModularity(graph: Graph, nodes: string[]): number {
|
|
427
|
+
// Simplified modularity calculation
|
|
428
|
+
return Math.random() * 0.5;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### NeuralAugmentation Interface
|
|
434
|
+
|
|
435
|
+
```typescript
|
|
436
|
+
interface NeuralAugmentation {
|
|
437
|
+
name: string;
|
|
438
|
+
|
|
439
|
+
// Augment features with neural network
|
|
440
|
+
augment(features: Tensor): Promise<Tensor>;
|
|
441
|
+
|
|
442
|
+
// Train neural network
|
|
443
|
+
train(samples: TrainingSample[]): Promise<void>;
|
|
444
|
+
|
|
445
|
+
// Evaluate performance
|
|
446
|
+
evaluate(): Promise<EvaluationMetrics>;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
interface Tensor {
|
|
450
|
+
shape: number[];
|
|
451
|
+
data: number[];
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
interface TrainingSample {
|
|
455
|
+
input: Tensor;
|
|
456
|
+
target: Tensor;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
interface EvaluationMetrics {
|
|
460
|
+
accuracy: number;
|
|
461
|
+
loss: number;
|
|
462
|
+
f1Score: number;
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
## Plugin System
|
|
469
|
+
|
|
470
|
+
### Plugin Structure
|
|
471
|
+
|
|
472
|
+
```
|
|
473
|
+
~/.agentdb/plugins/my-plugin/
|
|
474
|
+
├── index.ts # Main entry point
|
|
475
|
+
├── metadata.json # Plugin metadata
|
|
476
|
+
├── package.json # npm package (optional)
|
|
477
|
+
├── README.md # Documentation
|
|
478
|
+
└── tests/ # Tests (optional)
|
|
479
|
+
└── index.test.ts
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### metadata.json
|
|
483
|
+
|
|
484
|
+
```json
|
|
485
|
+
{
|
|
486
|
+
"id": "my-custom-plugin",
|
|
487
|
+
"name": "My Custom Plugin",
|
|
488
|
+
"version": "1.0.0",
|
|
489
|
+
"category": "plugin",
|
|
490
|
+
"description": "Custom plugin for AgentDB",
|
|
491
|
+
"author": "Your Name <your.email@example.com>",
|
|
492
|
+
"agentdbVersion": "^2.0.0",
|
|
493
|
+
"tags": ["custom", "experimental"],
|
|
494
|
+
"estimatedDuration": 30000,
|
|
495
|
+
"requiredMemoryMB": 512,
|
|
496
|
+
"license": "MIT"
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Installing Plugins
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
# Install from directory
|
|
504
|
+
agentdb plugin install ~/.agentdb/plugins/my-plugin
|
|
505
|
+
|
|
506
|
+
# Install from npm
|
|
507
|
+
agentdb plugin install my-agentdb-plugin
|
|
508
|
+
|
|
509
|
+
# Install from git
|
|
510
|
+
agentdb plugin install https://github.com/user/my-plugin.git
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### Listing Plugins
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
agentdb plugin list
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
**Output**:
|
|
520
|
+
```
|
|
521
|
+
📦 Installed Plugins:
|
|
522
|
+
|
|
523
|
+
✓ my-custom-plugin (v1.0.0)
|
|
524
|
+
Category: plugin
|
|
525
|
+
Author: Your Name
|
|
526
|
+
Description: Custom plugin for AgentDB
|
|
527
|
+
|
|
528
|
+
✓ advanced-scenario (v1.0.0)
|
|
529
|
+
Category: experimental
|
|
530
|
+
Author: AgentDB Team
|
|
531
|
+
Description: Advanced simulation with progress tracking
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
### Uninstalling Plugins
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
agentdb plugin uninstall my-custom-plugin
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## Event System
|
|
543
|
+
|
|
544
|
+
### Available Events
|
|
545
|
+
|
|
546
|
+
```typescript
|
|
547
|
+
// Simulation lifecycle
|
|
548
|
+
runner.on('start', (scenario: string, config: AgentDBConfig) => {
|
|
549
|
+
console.log(`Starting ${scenario}...`);
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
runner.on('progress', (progress: ProgressUpdate) => {
|
|
553
|
+
console.log(`Progress: ${progress.percent.toFixed(1)}%`);
|
|
554
|
+
});
|
|
555
|
+
|
|
556
|
+
runner.on('complete', (result: SimulationResult) => {
|
|
557
|
+
console.log(`Completed with recall: ${result.metrics.recall}`);
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
runner.on('error', (error: Error) => {
|
|
561
|
+
console.error(`Error: ${error.message}`);
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
runner.on('cancelled', () => {
|
|
565
|
+
console.log('Simulation cancelled');
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
// Health monitoring
|
|
569
|
+
monitor.on('alert', (alert: Alert) => {
|
|
570
|
+
console.warn(`Alert: ${alert.message}`);
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
monitor.on('metrics', (metrics: HealthMetrics) => {
|
|
574
|
+
console.log(`Memory: ${metrics.memory.heapUsed.toFixed(0)}MB`);
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
monitor.on('healing', (action: HealingAction) => {
|
|
578
|
+
console.log(`Self-healing: ${action.type}`);
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
// Registry events
|
|
582
|
+
registry.on('scenario-discovered', (scenario: SimulationScenario) => {
|
|
583
|
+
console.log(`Discovered: ${scenario.metadata.name}`);
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
registry.on('plugin-registered', (plugin: SimulationScenario) => {
|
|
587
|
+
console.log(`Registered plugin: ${plugin.metadata.name}`);
|
|
588
|
+
});
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
### Custom Event Emitters
|
|
592
|
+
|
|
593
|
+
```typescript
|
|
594
|
+
class CustomScenario extends EventEmitter implements SimulationScenario {
|
|
595
|
+
async execute(config: AgentDBConfig): Promise<SimulationResult> {
|
|
596
|
+
// Emit custom events
|
|
597
|
+
this.emit('custom-event', { data: 'example' });
|
|
598
|
+
|
|
599
|
+
// Emit progress
|
|
600
|
+
for (let i = 0; i < 100; i++) {
|
|
601
|
+
this.emit('progress', {
|
|
602
|
+
iteration: i,
|
|
603
|
+
total: 100,
|
|
604
|
+
percent: (i / 100) * 100
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
await this.simulateWork();
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
return {
|
|
611
|
+
scenario: this.metadata.id,
|
|
612
|
+
timestamp: new Date(),
|
|
613
|
+
config,
|
|
614
|
+
metrics: { recall: 0.95, latency: 100, throughput: 1000, memoryUsage: 512 },
|
|
615
|
+
insights: [],
|
|
616
|
+
recommendations: []
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
private async simulateWork(): Promise<void> {
|
|
621
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
## Code Examples
|
|
629
|
+
|
|
630
|
+
### Example 1: HNSW Optimization Plugin
|
|
631
|
+
|
|
632
|
+
```typescript
|
|
633
|
+
// ~/.agentdb/plugins/hnsw-optimizer/index.ts
|
|
634
|
+
import { SimulationScenario, SimulationResult, AgentDBConfig } from 'agentdb';
|
|
635
|
+
|
|
636
|
+
export const hnswOptimizer: SimulationScenario = {
|
|
637
|
+
metadata: {
|
|
638
|
+
id: 'hnsw-optimizer',
|
|
639
|
+
name: 'HNSW Optimizer',
|
|
640
|
+
version: '1.0.0',
|
|
641
|
+
category: 'plugin',
|
|
642
|
+
description: 'Find optimal HNSW parameters for your dataset',
|
|
643
|
+
agentdbVersion: '^2.0.0',
|
|
644
|
+
tags: ['hnsw', 'optimization'],
|
|
645
|
+
estimatedDuration: 120000,
|
|
646
|
+
requiredMemoryMB: 2048
|
|
647
|
+
},
|
|
648
|
+
|
|
649
|
+
async execute(config: AgentDBConfig): Promise<SimulationResult> {
|
|
650
|
+
const results: Array<{ M: number; recall: number; latency: number }> = [];
|
|
651
|
+
|
|
652
|
+
// Test different M values
|
|
653
|
+
for (let M = 8; M <= 64; M += 8) {
|
|
654
|
+
const recall = await this.testHNSW(M, config.hnsw.efConstruction, config.hnsw.efSearch);
|
|
655
|
+
const latency = await this.measureLatency(M, config.hnsw.efSearch);
|
|
656
|
+
|
|
657
|
+
results.push({ M, recall, latency });
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Find optimal M (best recall with latency < threshold)
|
|
661
|
+
const optimal = results
|
|
662
|
+
.filter(r => r.latency < config.monitoring.alertThresholds.latencyMs)
|
|
663
|
+
.sort((a, b) => b.recall - a.recall)[0];
|
|
664
|
+
|
|
665
|
+
return {
|
|
666
|
+
scenario: this.metadata.id,
|
|
667
|
+
timestamp: new Date(),
|
|
668
|
+
config,
|
|
669
|
+
metrics: {
|
|
670
|
+
recall: optimal.recall,
|
|
671
|
+
latency: optimal.latency,
|
|
672
|
+
throughput: 1000 / (optimal.latency / 1000),
|
|
673
|
+
memoryUsage: process.memoryUsage().heapUsed / 1024 / 1024,
|
|
674
|
+
optimalM: optimal.M
|
|
675
|
+
},
|
|
676
|
+
insights: [
|
|
677
|
+
`Optimal M found: ${optimal.M}`,
|
|
678
|
+
`Achieves ${(optimal.recall * 100).toFixed(1)}% recall`,
|
|
679
|
+
`Latency: ${optimal.latency.toFixed(2)}ms`
|
|
680
|
+
],
|
|
681
|
+
recommendations: [
|
|
682
|
+
`Set hnsw.M to ${optimal.M} for best results`,
|
|
683
|
+
`This provides ${((optimal.recall - config.hnsw.M / 100) * 100).toFixed(1)}% better recall`
|
|
684
|
+
]
|
|
685
|
+
};
|
|
686
|
+
},
|
|
687
|
+
|
|
688
|
+
private async testHNSW(M: number, efConstruction: number, efSearch: number): Promise<number> {
|
|
689
|
+
// Implement HNSW testing logic
|
|
690
|
+
return 0.9 + (M / 100) * 0.08; // Simplified
|
|
691
|
+
},
|
|
692
|
+
|
|
693
|
+
private async measureLatency(M: number, efSearch: number): Promise<number> {
|
|
694
|
+
// Implement latency measurement
|
|
695
|
+
return 100 + M * 2; // Simplified
|
|
696
|
+
}
|
|
697
|
+
};
|
|
698
|
+
|
|
699
|
+
export default hnswOptimizer;
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
### Example 2: A/B Testing Plugin
|
|
703
|
+
|
|
704
|
+
```typescript
|
|
705
|
+
// ~/.agentdb/plugins/ab-testing/index.ts
|
|
706
|
+
import { SimulationScenario, SimulationResult, AgentDBConfig } from 'agentdb';
|
|
707
|
+
import { ReportStore } from 'agentdb/cli/lib/report-store';
|
|
708
|
+
|
|
709
|
+
export class ABTestingScenario implements SimulationScenario {
|
|
710
|
+
metadata = {
|
|
711
|
+
id: 'ab-testing',
|
|
712
|
+
name: 'A/B Testing',
|
|
713
|
+
version: '1.0.0',
|
|
714
|
+
category: 'plugin' as const,
|
|
715
|
+
description: 'Compare two configurations automatically',
|
|
716
|
+
agentdbVersion: '^2.0.0',
|
|
717
|
+
estimatedDuration: 60000
|
|
718
|
+
};
|
|
719
|
+
|
|
720
|
+
async execute(config: AgentDBConfig): Promise<SimulationResult> {
|
|
721
|
+
// Configuration A (current)
|
|
722
|
+
const resultA = await this.runConfiguration(config, 'A');
|
|
723
|
+
|
|
724
|
+
// Configuration B (alternative with higher M)
|
|
725
|
+
const configB = { ...config, hnsw: { ...config.hnsw, M: config.hnsw.M + 16 } };
|
|
726
|
+
const resultB = await this.runConfiguration(configB, 'B');
|
|
727
|
+
|
|
728
|
+
// Statistical significance test
|
|
729
|
+
const pValue = this.calculatePValue(resultA.recall, resultB.recall);
|
|
730
|
+
const significant = pValue < 0.05;
|
|
731
|
+
|
|
732
|
+
const winner = resultB.recall > resultA.recall ? 'B' : 'A';
|
|
733
|
+
|
|
734
|
+
return {
|
|
735
|
+
scenario: this.metadata.id,
|
|
736
|
+
timestamp: new Date(),
|
|
737
|
+
config,
|
|
738
|
+
metrics: {
|
|
739
|
+
recall: Math.max(resultA.recall, resultB.recall),
|
|
740
|
+
latency: winner === 'A' ? resultA.latency : resultB.latency,
|
|
741
|
+
throughput: winner === 'A' ? resultA.throughput : resultB.throughput,
|
|
742
|
+
memoryUsage: process.memoryUsage().heapUsed / 1024 / 1024,
|
|
743
|
+
pValue,
|
|
744
|
+
winner: winner === 'A' ? 0 : 1
|
|
745
|
+
},
|
|
746
|
+
insights: [
|
|
747
|
+
`Configuration ${winner} wins with ${significant ? 'significant' : 'insignificant'} improvement`,
|
|
748
|
+
`p-value: ${pValue.toFixed(4)}`,
|
|
749
|
+
`Recall improvement: ${((resultB.recall - resultA.recall) * 100).toFixed(2)}%`
|
|
750
|
+
],
|
|
751
|
+
recommendations: winner === 'B' ? [
|
|
752
|
+
`Switch to configuration B (M=${configB.hnsw.M})`,
|
|
753
|
+
`Expected improvement: ${((resultB.recall - resultA.recall) * 100).toFixed(1)}%`
|
|
754
|
+
] : [
|
|
755
|
+
'Current configuration is optimal'
|
|
756
|
+
]
|
|
757
|
+
};
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
private async runConfiguration(config: AgentDBConfig, variant: string): Promise<any> {
|
|
761
|
+
// Run simulation with configuration
|
|
762
|
+
// (simplified example)
|
|
763
|
+
return {
|
|
764
|
+
recall: 0.92 + Math.random() * 0.05,
|
|
765
|
+
latency: 100 + Math.random() * 50,
|
|
766
|
+
throughput: 1000
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
private calculatePValue(recallA: number, recallB: number): number {
|
|
771
|
+
// Simplified p-value calculation
|
|
772
|
+
const diff = Math.abs(recallB - recallA);
|
|
773
|
+
return Math.max(0.01, 0.5 - diff * 2);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
export default new ABTestingScenario();
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
---
|
|
781
|
+
|
|
782
|
+
## Testing Plugins
|
|
783
|
+
|
|
784
|
+
### Unit Tests
|
|
785
|
+
|
|
786
|
+
```typescript
|
|
787
|
+
// ~/.agentdb/plugins/my-plugin/tests/index.test.ts
|
|
788
|
+
import { describe, it, expect } from 'vitest';
|
|
789
|
+
import myPlugin from '../index';
|
|
790
|
+
|
|
791
|
+
describe('My Plugin', () => {
|
|
792
|
+
it('should have valid metadata', () => {
|
|
793
|
+
expect(myPlugin.metadata.id).toBe('my-plugin');
|
|
794
|
+
expect(myPlugin.metadata.version).toMatch(/^\d+\.\d+\.\d+$/);
|
|
795
|
+
});
|
|
796
|
+
|
|
797
|
+
it('should execute successfully', async () => {
|
|
798
|
+
const config = createMockConfig();
|
|
799
|
+
const result = await myPlugin.execute(config);
|
|
800
|
+
|
|
801
|
+
expect(result.metrics.recall).toBeGreaterThan(0);
|
|
802
|
+
expect(result.metrics.latency).toBeGreaterThan(0);
|
|
803
|
+
});
|
|
804
|
+
|
|
805
|
+
it('should validate configuration', () => {
|
|
806
|
+
const config = createMockConfig();
|
|
807
|
+
const validation = myPlugin.validate!(config);
|
|
808
|
+
|
|
809
|
+
expect(validation.valid).toBe(true);
|
|
810
|
+
});
|
|
811
|
+
});
|
|
812
|
+
|
|
813
|
+
function createMockConfig(): any {
|
|
814
|
+
return {
|
|
815
|
+
profile: 'production',
|
|
816
|
+
hnsw: { M: 32, efConstruction: 200, efSearch: 100 },
|
|
817
|
+
// ... other fields
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## Publishing Plugins
|
|
825
|
+
|
|
826
|
+
### npm Package
|
|
827
|
+
|
|
828
|
+
```json
|
|
829
|
+
// package.json
|
|
830
|
+
{
|
|
831
|
+
"name": "agentdb-plugin-myname",
|
|
832
|
+
"version": "1.0.0",
|
|
833
|
+
"description": "My custom AgentDB plugin",
|
|
834
|
+
"main": "dist/index.js",
|
|
835
|
+
"types": "dist/index.d.ts",
|
|
836
|
+
"keywords": ["agentdb", "plugin", "simulation"],
|
|
837
|
+
"peerDependencies": {
|
|
838
|
+
"agentdb": "^2.0.0"
|
|
839
|
+
},
|
|
840
|
+
"devDependencies": {
|
|
841
|
+
"typescript": "^5.0.0",
|
|
842
|
+
"vitest": "^1.0.0"
|
|
843
|
+
},
|
|
844
|
+
"scripts": {
|
|
845
|
+
"build": "tsc",
|
|
846
|
+
"test": "vitest"
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
### Publishing
|
|
852
|
+
|
|
853
|
+
```bash
|
|
854
|
+
npm publish
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
### Installing Published Plugin
|
|
858
|
+
|
|
859
|
+
```bash
|
|
860
|
+
npm install -g agentdb-plugin-myname
|
|
861
|
+
agentdb plugin install agentdb-plugin-myname
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
---
|
|
865
|
+
|
|
866
|
+
**Document Version**: 1.0
|
|
867
|
+
**Last Updated**: 2025-11-30
|
|
868
|
+
**Maintainer**: AgentDB Team
|