agentdb 1.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.
- package/LICENSE +38 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +953 -0
- package/bin/agentdb.js +485 -0
- package/bin/plugin-cli-wrapper.mjs +21 -0
- package/dist/cache/query-cache.d.ts +105 -0
- package/dist/cache/query-cache.d.ts.map +1 -0
- package/dist/cache/query-cache.js +224 -0
- package/dist/cache/query-cache.js.map +1 -0
- package/dist/cache/query-cache.mjs +219 -0
- package/dist/cli/cache/query-cache.d.ts +104 -0
- package/dist/cli/cache/query-cache.js +244 -0
- package/dist/cli/cli/db-commands.d.ts +48 -0
- package/dist/cli/cli/db-commands.js +613 -0
- package/dist/cli/commands.d.ts +7 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +113 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/commands.mjs +104 -0
- package/dist/cli/core/backend-interface.d.ts +70 -0
- package/dist/cli/core/backend-interface.js +15 -0
- package/dist/cli/core/native-backend.d.ts +140 -0
- package/dist/cli/core/native-backend.js +432 -0
- package/dist/cli/core/vector-db.d.ts +126 -0
- package/dist/cli/core/vector-db.js +338 -0
- package/dist/cli/core/wasm-backend.d.ts +95 -0
- package/dist/cli/core/wasm-backend.js +418 -0
- package/dist/cli/db-commands.d.ts +49 -0
- package/dist/cli/db-commands.d.ts.map +1 -0
- package/dist/cli/db-commands.js +533 -0
- package/dist/cli/db-commands.js.map +1 -0
- package/dist/cli/db-commands.mjs +522 -0
- package/dist/cli/generator.d.ts +11 -0
- package/dist/cli/generator.d.ts.map +1 -0
- package/dist/cli/generator.js +567 -0
- package/dist/cli/generator.js.map +1 -0
- package/dist/cli/generator.mjs +527 -0
- package/dist/cli/help.d.ts +18 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +676 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/help.mjs +667 -0
- package/dist/cli/index/hnsw.d.ts +164 -0
- package/dist/cli/index/hnsw.js +558 -0
- package/dist/cli/plugin-cli.d.ts +7 -0
- package/dist/cli/plugin-cli.d.ts.map +1 -0
- package/dist/cli/plugin-cli.js +295 -0
- package/dist/cli/plugin-cli.js.map +1 -0
- package/dist/cli/plugin-cli.mjs +289 -0
- package/dist/cli/quantization/product-quantization.d.ts +108 -0
- package/dist/cli/quantization/product-quantization.js +350 -0
- package/dist/cli/query/query-builder.d.ts +322 -0
- package/dist/cli/query/query-builder.js +600 -0
- package/dist/cli/templates.d.ts +14 -0
- package/dist/cli/templates.d.ts.map +1 -0
- package/dist/cli/templates.js +182 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/cli/templates.mjs +176 -0
- package/dist/cli/types/index.d.ts +116 -0
- package/dist/cli/types/index.js +5 -0
- package/dist/cli/types.d.ts +91 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +6 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/types.mjs +4 -0
- package/dist/cli/wizard/index.d.ts +6 -0
- package/dist/cli/wizard/index.d.ts.map +1 -0
- package/dist/cli/wizard/index.js +138 -0
- package/dist/cli/wizard/index.js.map +1 -0
- package/dist/cli/wizard/index.mjs +131 -0
- package/dist/cli/wizard/prompts.d.ts +11 -0
- package/dist/cli/wizard/prompts.d.ts.map +1 -0
- package/dist/cli/wizard/prompts.js +482 -0
- package/dist/cli/wizard/prompts.js.map +1 -0
- package/dist/cli/wizard/prompts.mjs +470 -0
- package/dist/cli/wizard/validator.d.ts +13 -0
- package/dist/cli/wizard/validator.d.ts.map +1 -0
- package/dist/cli/wizard/validator.js +234 -0
- package/dist/cli/wizard/validator.js.map +1 -0
- package/dist/cli/wizard/validator.mjs +224 -0
- package/dist/core/backend-interface.d.ts +71 -0
- package/dist/core/backend-interface.d.ts.map +1 -0
- package/dist/core/backend-interface.js +16 -0
- package/dist/core/backend-interface.js.map +1 -0
- package/dist/core/backend-interface.mjs +12 -0
- package/dist/core/native-backend.d.ts +141 -0
- package/dist/core/native-backend.d.ts.map +1 -0
- package/dist/core/native-backend.js +457 -0
- package/dist/core/native-backend.js.map +1 -0
- package/dist/core/native-backend.mjs +449 -0
- package/dist/core/vector-db.d.ts +127 -0
- package/dist/core/vector-db.d.ts.map +1 -0
- package/dist/core/vector-db.js +266 -0
- package/dist/core/vector-db.js.map +1 -0
- package/dist/core/vector-db.mjs +261 -0
- package/dist/core/wasm-backend.d.ts +96 -0
- package/dist/core/wasm-backend.d.ts.map +1 -0
- package/dist/core/wasm-backend.js +393 -0
- package/dist/core/wasm-backend.js.map +1 -0
- package/dist/core/wasm-backend.mjs +385 -0
- package/dist/index/hnsw-optimized.d.ts +75 -0
- package/dist/index/hnsw-optimized.d.ts.map +1 -0
- package/dist/index/hnsw-optimized.js +412 -0
- package/dist/index/hnsw-optimized.js.map +1 -0
- package/dist/index/hnsw-optimized.mjs +407 -0
- package/dist/index/hnsw.d.ts +165 -0
- package/dist/index/hnsw.d.ts.map +1 -0
- package/dist/index/hnsw.js +521 -0
- package/dist/index/hnsw.js.map +1 -0
- package/dist/index/hnsw.mjs +516 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +63 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +789 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-server.mjs +784 -0
- package/dist/plugins/base-plugin.d.ts +114 -0
- package/dist/plugins/base-plugin.d.ts.map +1 -0
- package/dist/plugins/base-plugin.js +313 -0
- package/dist/plugins/base-plugin.js.map +1 -0
- package/dist/plugins/base-plugin.mjs +275 -0
- package/dist/plugins/implementations/active-learning.d.ts +135 -0
- package/dist/plugins/implementations/active-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/active-learning.js +372 -0
- package/dist/plugins/implementations/active-learning.js.map +1 -0
- package/dist/plugins/implementations/active-learning.mjs +367 -0
- package/dist/plugins/implementations/actor-critic.d.ts +64 -0
- package/dist/plugins/implementations/actor-critic.d.ts.map +1 -0
- package/dist/plugins/implementations/actor-critic.js +363 -0
- package/dist/plugins/implementations/actor-critic.js.map +1 -0
- package/dist/plugins/implementations/actor-critic.mjs +358 -0
- package/dist/plugins/implementations/adversarial-training.d.ts +133 -0
- package/dist/plugins/implementations/adversarial-training.d.ts.map +1 -0
- package/dist/plugins/implementations/adversarial-training.js +409 -0
- package/dist/plugins/implementations/adversarial-training.js.map +1 -0
- package/dist/plugins/implementations/adversarial-training.mjs +404 -0
- package/dist/plugins/implementations/curriculum-learning.d.ts +132 -0
- package/dist/plugins/implementations/curriculum-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/curriculum-learning.js +354 -0
- package/dist/plugins/implementations/curriculum-learning.js.map +1 -0
- package/dist/plugins/implementations/curriculum-learning.mjs +349 -0
- package/dist/plugins/implementations/decision-transformer.d.ts +77 -0
- package/dist/plugins/implementations/decision-transformer.d.ts.map +1 -0
- package/dist/plugins/implementations/decision-transformer.js +422 -0
- package/dist/plugins/implementations/decision-transformer.js.map +1 -0
- package/dist/plugins/implementations/decision-transformer.mjs +417 -0
- package/dist/plugins/implementations/federated-learning.d.ts +126 -0
- package/dist/plugins/implementations/federated-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/federated-learning.js +436 -0
- package/dist/plugins/implementations/federated-learning.js.map +1 -0
- package/dist/plugins/implementations/federated-learning.mjs +431 -0
- package/dist/plugins/implementations/index.d.ts +30 -0
- package/dist/plugins/implementations/index.d.ts.map +1 -0
- package/dist/plugins/implementations/index.js +45 -0
- package/dist/plugins/implementations/index.js.map +1 -0
- package/dist/plugins/implementations/index.mjs +31 -0
- package/dist/plugins/implementations/multi-task-learning.d.ts +115 -0
- package/dist/plugins/implementations/multi-task-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/multi-task-learning.js +369 -0
- package/dist/plugins/implementations/multi-task-learning.js.map +1 -0
- package/dist/plugins/implementations/multi-task-learning.mjs +364 -0
- package/dist/plugins/implementations/neural-architecture-search.d.ts +148 -0
- package/dist/plugins/implementations/neural-architecture-search.d.ts.map +1 -0
- package/dist/plugins/implementations/neural-architecture-search.js +379 -0
- package/dist/plugins/implementations/neural-architecture-search.js.map +1 -0
- package/dist/plugins/implementations/neural-architecture-search.mjs +374 -0
- package/dist/plugins/implementations/q-learning.d.ts +98 -0
- package/dist/plugins/implementations/q-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/q-learning.js +435 -0
- package/dist/plugins/implementations/q-learning.js.map +1 -0
- package/dist/plugins/implementations/q-learning.mjs +430 -0
- package/dist/plugins/implementations/sarsa.d.ts +103 -0
- package/dist/plugins/implementations/sarsa.d.ts.map +1 -0
- package/dist/plugins/implementations/sarsa.js +347 -0
- package/dist/plugins/implementations/sarsa.js.map +1 -0
- package/dist/plugins/implementations/sarsa.mjs +342 -0
- package/dist/plugins/index.d.ts +107 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +179 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/index.mjs +168 -0
- package/dist/plugins/interface.d.ts +439 -0
- package/dist/plugins/interface.d.ts.map +1 -0
- package/dist/plugins/interface.js +12 -0
- package/dist/plugins/interface.js.map +1 -0
- package/dist/plugins/interface.mjs +10 -0
- package/dist/plugins/learning-plugin.interface.d.ts +257 -0
- package/dist/plugins/learning-plugin.interface.d.ts.map +1 -0
- package/dist/plugins/learning-plugin.interface.js +7 -0
- package/dist/plugins/learning-plugin.interface.js.map +1 -0
- package/dist/plugins/learning-plugin.interface.mjs +5 -0
- package/dist/plugins/plugin-exports.d.ts +71 -0
- package/dist/plugins/plugin-exports.d.ts.map +1 -0
- package/dist/plugins/plugin-exports.js +78 -0
- package/dist/plugins/plugin-exports.js.map +1 -0
- package/dist/plugins/plugin-exports.mjs +69 -0
- package/dist/plugins/registry.d.ts +206 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +365 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/registry.mjs +356 -0
- package/dist/plugins/validator.d.ts +63 -0
- package/dist/plugins/validator.d.ts.map +1 -0
- package/dist/plugins/validator.js +464 -0
- package/dist/plugins/validator.js.map +1 -0
- package/dist/plugins/validator.mjs +458 -0
- package/dist/quantization/binary-quantization.d.ts +104 -0
- package/dist/quantization/binary-quantization.d.ts.map +1 -0
- package/dist/quantization/binary-quantization.js +246 -0
- package/dist/quantization/binary-quantization.js.map +1 -0
- package/dist/quantization/binary-quantization.mjs +240 -0
- package/dist/quantization/optimized-pq.d.ts +138 -0
- package/dist/quantization/optimized-pq.d.ts.map +1 -0
- package/dist/quantization/optimized-pq.js +320 -0
- package/dist/quantization/optimized-pq.js.map +1 -0
- package/dist/quantization/optimized-pq.mjs +313 -0
- package/dist/quantization/product-quantization.d.ts +109 -0
- package/dist/quantization/product-quantization.d.ts.map +1 -0
- package/dist/quantization/product-quantization.js +287 -0
- package/dist/quantization/product-quantization.js.map +1 -0
- package/dist/quantization/product-quantization.mjs +282 -0
- package/dist/quantization/scalar-quantization.d.ts +100 -0
- package/dist/quantization/scalar-quantization.d.ts.map +1 -0
- package/dist/quantization/scalar-quantization.js +324 -0
- package/dist/quantization/scalar-quantization.js.map +1 -0
- package/dist/quantization/scalar-quantization.mjs +319 -0
- package/dist/query/index.d.ts +6 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +9 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/index.mjs +4 -0
- package/dist/query/query-builder.d.ts +323 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/query-builder.js +524 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-builder.mjs +519 -0
- package/dist/reasoning/context-synthesizer.d.ts +57 -0
- package/dist/reasoning/context-synthesizer.d.ts.map +1 -0
- package/dist/reasoning/context-synthesizer.js +224 -0
- package/dist/reasoning/context-synthesizer.js.map +1 -0
- package/dist/reasoning/context-synthesizer.mjs +219 -0
- package/dist/reasoning/experience-curator.d.ts +66 -0
- package/dist/reasoning/experience-curator.d.ts.map +1 -0
- package/dist/reasoning/experience-curator.js +288 -0
- package/dist/reasoning/experience-curator.js.map +1 -0
- package/dist/reasoning/experience-curator.mjs +283 -0
- package/dist/reasoning/memory-optimizer.d.ts +69 -0
- package/dist/reasoning/memory-optimizer.d.ts.map +1 -0
- package/dist/reasoning/memory-optimizer.js +331 -0
- package/dist/reasoning/memory-optimizer.js.map +1 -0
- package/dist/reasoning/memory-optimizer.mjs +326 -0
- package/dist/reasoning/pattern-matcher.d.ts +59 -0
- package/dist/reasoning/pattern-matcher.d.ts.map +1 -0
- package/dist/reasoning/pattern-matcher.js +229 -0
- package/dist/reasoning/pattern-matcher.js.map +1 -0
- package/dist/reasoning/pattern-matcher.mjs +224 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts +118 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts.map +1 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.js +477 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.js.map +1 -0
- package/dist/reasoningbank/adapter/types.d.ts +113 -0
- package/dist/reasoningbank/adapter/types.d.ts.map +1 -0
- package/dist/reasoningbank/adapter/types.js +9 -0
- package/dist/reasoningbank/adapter/types.js.map +1 -0
- package/dist/reasoningbank/cli/commands.d.ts +16 -0
- package/dist/reasoningbank/cli/commands.d.ts.map +1 -0
- package/dist/reasoningbank/cli/commands.js +272 -0
- package/dist/reasoningbank/cli/commands.js.map +1 -0
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts +319 -0
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts.map +1 -0
- package/dist/reasoningbank/mcp/agentdb-tools.js +301 -0
- package/dist/reasoningbank/mcp/agentdb-tools.js.map +1 -0
- package/dist/reasoningbank/migration/migrate.d.ts +25 -0
- package/dist/reasoningbank/migration/migrate.d.ts.map +1 -0
- package/dist/reasoningbank/migration/migrate.js +178 -0
- package/dist/reasoningbank/migration/migrate.js.map +1 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts +37 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.js +114 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.js.map +1 -0
- package/dist/reasoningbank/reasoning/experience-curator.d.ts +39 -0
- package/dist/reasoningbank/reasoning/experience-curator.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/experience-curator.js +98 -0
- package/dist/reasoningbank/reasoning/experience-curator.js.map +1 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts +44 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.js +184 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.js.map +1 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts +40 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.js +87 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.js.map +1 -0
- package/dist/reasoningbank/sync/quic-sync.d.ts +77 -0
- package/dist/reasoningbank/sync/quic-sync.d.ts.map +1 -0
- package/dist/reasoningbank/sync/quic-sync.js +165 -0
- package/dist/reasoningbank/sync/quic-sync.js.map +1 -0
- package/dist/sync/conflict.d.ts +78 -0
- package/dist/sync/conflict.d.ts.map +1 -0
- package/dist/sync/conflict.js +202 -0
- package/dist/sync/conflict.js.map +1 -0
- package/dist/sync/conflict.mjs +196 -0
- package/dist/sync/coordinator.d.ts +111 -0
- package/dist/sync/coordinator.d.ts.map +1 -0
- package/dist/sync/coordinator.js +256 -0
- package/dist/sync/coordinator.js.map +1 -0
- package/dist/sync/coordinator.mjs +250 -0
- package/dist/sync/delta.d.ts +81 -0
- package/dist/sync/delta.d.ts.map +1 -0
- package/dist/sync/delta.js +245 -0
- package/dist/sync/delta.js.map +1 -0
- package/dist/sync/delta.mjs +238 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +22 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/index.mjs +9 -0
- package/dist/sync/quic-sync.d.ts +81 -0
- package/dist/sync/quic-sync.d.ts.map +1 -0
- package/dist/sync/quic-sync.js +329 -0
- package/dist/sync/quic-sync.js.map +1 -0
- package/dist/sync/quic-sync.mjs +323 -0
- package/dist/sync/types.d.ts +168 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +8 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/sync/types.mjs +6 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +4 -0
- package/dist/wasm-loader.d.ts +32 -0
- package/dist/wasm-loader.d.ts.map +1 -0
- package/dist/wasm-loader.js +75 -0
- package/dist/wasm-loader.js.map +1 -0
- package/dist/wasm-loader.mjs +64 -0
- package/examples/adaptive-learning.ts +284 -0
- package/examples/browser/README.md +732 -0
- package/examples/browser/adaptive-recommendations/index.html +427 -0
- package/examples/browser/collaborative-filtering/index.html +310 -0
- package/examples/browser/continual-learning/index.html +736 -0
- package/examples/browser/experience-replay/index.html +616 -0
- package/examples/browser/index.html +369 -0
- package/examples/browser/meta-learning/index.html +789 -0
- package/examples/browser/neuro-symbolic/index.html +692 -0
- package/examples/browser/pattern-learning/index.html +620 -0
- package/examples/browser/quantum-inspired/index.html +728 -0
- package/examples/browser/rag/index.html +624 -0
- package/examples/browser/swarm-intelligence/index.html +811 -0
- package/examples/browser-basic.html +170 -0
- package/examples/hnsw-example.ts +148 -0
- package/examples/node-basic.js +70 -0
- package/examples/quic-sync-example.ts +310 -0
- package/examples/quick-start.js +68 -0
- package/examples/wasm-example.ts +222 -0
- package/package.json +118 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Registry for discovering, loading, and managing learning plugins
|
|
3
|
+
*
|
|
4
|
+
* This module provides centralized plugin management including:
|
|
5
|
+
* - Plugin discovery and registration
|
|
6
|
+
* - Version management
|
|
7
|
+
* - Dependency resolution
|
|
8
|
+
* - Plugin lifecycle management
|
|
9
|
+
*
|
|
10
|
+
* @module plugins/registry
|
|
11
|
+
*/
|
|
12
|
+
import { validatePluginConfig } from './validator.mjs';
|
|
13
|
+
/**
|
|
14
|
+
* Error thrown when plugin operations fail
|
|
15
|
+
*/
|
|
16
|
+
export class PluginError extends Error {
|
|
17
|
+
constructor(message, code, details) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.details = details;
|
|
21
|
+
this.name = 'PluginError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Plugin Registry
|
|
26
|
+
*
|
|
27
|
+
* Singleton registry for managing learning plugins.
|
|
28
|
+
* Provides plugin discovery, loading, and lifecycle management.
|
|
29
|
+
*/
|
|
30
|
+
export class PluginRegistry {
|
|
31
|
+
/**
|
|
32
|
+
* Private constructor (singleton pattern)
|
|
33
|
+
*/
|
|
34
|
+
constructor() {
|
|
35
|
+
/** Registered plugins map (name -> metadata) */
|
|
36
|
+
this.plugins = new Map();
|
|
37
|
+
/** Active plugin instances (name -> instance) */
|
|
38
|
+
this.activePlugins = new Map();
|
|
39
|
+
/** Plugin aliases (alias -> plugin name) */
|
|
40
|
+
this.aliases = new Map();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the singleton registry instance
|
|
44
|
+
*
|
|
45
|
+
* @returns Registry instance
|
|
46
|
+
*/
|
|
47
|
+
static getInstance() {
|
|
48
|
+
if (!PluginRegistry.instance) {
|
|
49
|
+
PluginRegistry.instance = new PluginRegistry();
|
|
50
|
+
}
|
|
51
|
+
return PluginRegistry.instance;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reset the registry (primarily for testing)
|
|
55
|
+
*/
|
|
56
|
+
static reset() {
|
|
57
|
+
PluginRegistry.instance = null;
|
|
58
|
+
}
|
|
59
|
+
// ============ Plugin Registration ============
|
|
60
|
+
/**
|
|
61
|
+
* Register a plugin with the registry
|
|
62
|
+
*
|
|
63
|
+
* @param metadata - Plugin metadata
|
|
64
|
+
* @throws {PluginError} If registration fails
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* registry.register({
|
|
69
|
+
* name: 'q-learning',
|
|
70
|
+
* version: '1.0.0',
|
|
71
|
+
* description: 'Q-Learning algorithm',
|
|
72
|
+
* baseAlgorithm: 'q_learning',
|
|
73
|
+
* factory: (config) => new QLearningPlugin(config)
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
register(metadata) {
|
|
78
|
+
// Validate metadata
|
|
79
|
+
if (!metadata.name || !metadata.version || !metadata.factory) {
|
|
80
|
+
throw new PluginError('Invalid plugin metadata: name, version, and factory are required', 'INVALID_METADATA', metadata);
|
|
81
|
+
}
|
|
82
|
+
// Check for duplicate
|
|
83
|
+
if (this.plugins.has(metadata.name)) {
|
|
84
|
+
const existing = this.plugins.get(metadata.name);
|
|
85
|
+
if (existing.version === metadata.version) {
|
|
86
|
+
throw new PluginError(`Plugin ${metadata.name}@${metadata.version} is already registered`, 'DUPLICATE_PLUGIN', { existing, new: metadata });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Register plugin
|
|
90
|
+
this.plugins.set(metadata.name, metadata);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Unregister a plugin
|
|
94
|
+
*
|
|
95
|
+
* @param name - Plugin name
|
|
96
|
+
* @returns Whether plugin was unregistered
|
|
97
|
+
*/
|
|
98
|
+
unregister(name) {
|
|
99
|
+
// Remove active instance if exists
|
|
100
|
+
if (this.activePlugins.has(name)) {
|
|
101
|
+
this.activePlugins.delete(name);
|
|
102
|
+
}
|
|
103
|
+
// Remove aliases
|
|
104
|
+
for (const [alias, pluginName] of this.aliases.entries()) {
|
|
105
|
+
if (pluginName === name) {
|
|
106
|
+
this.aliases.delete(alias);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Remove registration
|
|
110
|
+
return this.plugins.delete(name);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Register an alias for a plugin
|
|
114
|
+
*
|
|
115
|
+
* @param alias - Alias name
|
|
116
|
+
* @param pluginName - Target plugin name
|
|
117
|
+
* @throws {PluginError} If plugin doesn't exist
|
|
118
|
+
*/
|
|
119
|
+
registerAlias(alias, pluginName) {
|
|
120
|
+
if (!this.plugins.has(pluginName)) {
|
|
121
|
+
throw new PluginError(`Cannot create alias: plugin ${pluginName} not found`, 'PLUGIN_NOT_FOUND', { alias, pluginName });
|
|
122
|
+
}
|
|
123
|
+
this.aliases.set(alias, pluginName);
|
|
124
|
+
}
|
|
125
|
+
// ============ Plugin Discovery ============
|
|
126
|
+
/**
|
|
127
|
+
* Check if a plugin is registered
|
|
128
|
+
*
|
|
129
|
+
* @param name - Plugin name or alias
|
|
130
|
+
* @returns Whether plugin exists
|
|
131
|
+
*/
|
|
132
|
+
has(name) {
|
|
133
|
+
const actualName = this.aliases.get(name) || name;
|
|
134
|
+
return this.plugins.has(actualName);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get plugin metadata
|
|
138
|
+
*
|
|
139
|
+
* @param name - Plugin name or alias
|
|
140
|
+
* @returns Plugin metadata or undefined
|
|
141
|
+
*/
|
|
142
|
+
get(name) {
|
|
143
|
+
const actualName = this.aliases.get(name) || name;
|
|
144
|
+
return this.plugins.get(actualName);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* List all registered plugins
|
|
148
|
+
*
|
|
149
|
+
* @param criteria - Optional search criteria
|
|
150
|
+
* @returns Array of plugin metadata
|
|
151
|
+
*/
|
|
152
|
+
list(criteria) {
|
|
153
|
+
let plugins = Array.from(this.plugins.values());
|
|
154
|
+
if (!criteria) {
|
|
155
|
+
return plugins;
|
|
156
|
+
}
|
|
157
|
+
// Filter by name pattern
|
|
158
|
+
if (criteria.name) {
|
|
159
|
+
const pattern = new RegExp(criteria.name.replace('*', '.*'), 'i');
|
|
160
|
+
plugins = plugins.filter(p => pattern.test(p.name));
|
|
161
|
+
}
|
|
162
|
+
// Filter by base algorithm
|
|
163
|
+
if (criteria.baseAlgorithm) {
|
|
164
|
+
plugins = plugins.filter(p => p.baseAlgorithm === criteria.baseAlgorithm);
|
|
165
|
+
}
|
|
166
|
+
// Filter by tags
|
|
167
|
+
if (criteria.tags && criteria.tags.length > 0) {
|
|
168
|
+
plugins = plugins.filter(p => p.tags && criteria.tags.some(tag => p.tags.includes(tag)));
|
|
169
|
+
}
|
|
170
|
+
// Filter by version range
|
|
171
|
+
if (criteria.minVersion) {
|
|
172
|
+
plugins = plugins.filter(p => this.compareVersions(p.version, criteria.minVersion) >= 0);
|
|
173
|
+
}
|
|
174
|
+
if (criteria.maxVersion) {
|
|
175
|
+
plugins = plugins.filter(p => this.compareVersions(p.version, criteria.maxVersion) <= 0);
|
|
176
|
+
}
|
|
177
|
+
return plugins;
|
|
178
|
+
}
|
|
179
|
+
// ============ Plugin Loading ============
|
|
180
|
+
/**
|
|
181
|
+
* Load a plugin instance
|
|
182
|
+
*
|
|
183
|
+
* @param name - Plugin name or alias
|
|
184
|
+
* @param options - Load options
|
|
185
|
+
* @returns Plugin instance
|
|
186
|
+
* @throws {PluginError} If loading fails
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* const plugin = await registry.load('q-learning', {
|
|
191
|
+
* config: { training: { batchSize: 64 } },
|
|
192
|
+
* initialize: true
|
|
193
|
+
* });
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
async load(name, options = {}) {
|
|
197
|
+
const { config, validate = true, initialize = true } = options;
|
|
198
|
+
// Resolve alias
|
|
199
|
+
const actualName = this.aliases.get(name) || name;
|
|
200
|
+
// Get metadata
|
|
201
|
+
const metadata = this.plugins.get(actualName);
|
|
202
|
+
if (!metadata) {
|
|
203
|
+
throw new PluginError(`Plugin not found: ${name}`, 'PLUGIN_NOT_FOUND', { name, availablePlugins: Array.from(this.plugins.keys()) });
|
|
204
|
+
}
|
|
205
|
+
// Check if already loaded
|
|
206
|
+
if (this.activePlugins.has(actualName)) {
|
|
207
|
+
return this.activePlugins.get(actualName);
|
|
208
|
+
}
|
|
209
|
+
// Merge configurations
|
|
210
|
+
const finalConfig = this.mergeConfig(metadata.defaultConfig, config);
|
|
211
|
+
// Validate configuration
|
|
212
|
+
if (validate && finalConfig) {
|
|
213
|
+
const validation = validatePluginConfig(finalConfig);
|
|
214
|
+
if (!validation.valid) {
|
|
215
|
+
throw new PluginError('Invalid plugin configuration', 'INVALID_CONFIG', { errors: validation.errors, config: finalConfig });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
// Create plugin instance
|
|
220
|
+
const plugin = await metadata.factory(finalConfig);
|
|
221
|
+
// Initialize if requested
|
|
222
|
+
if (initialize && finalConfig) {
|
|
223
|
+
await plugin.initialize(finalConfig);
|
|
224
|
+
}
|
|
225
|
+
// Cache active instance
|
|
226
|
+
this.activePlugins.set(actualName, plugin);
|
|
227
|
+
return plugin;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
throw new PluginError(`Failed to load plugin ${actualName}`, 'LOAD_FAILED', { name: actualName, error });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Unload a plugin instance
|
|
235
|
+
*
|
|
236
|
+
* @param name - Plugin name or alias
|
|
237
|
+
* @returns Whether plugin was unloaded
|
|
238
|
+
*/
|
|
239
|
+
async unload(name) {
|
|
240
|
+
const actualName = this.aliases.get(name) || name;
|
|
241
|
+
const plugin = this.activePlugins.get(actualName);
|
|
242
|
+
if (!plugin) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
await plugin.destroy();
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
console.error(`Error destroying plugin ${actualName}:`, error);
|
|
250
|
+
}
|
|
251
|
+
return this.activePlugins.delete(actualName);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get active plugin instance
|
|
255
|
+
*
|
|
256
|
+
* @param name - Plugin name or alias
|
|
257
|
+
* @returns Active plugin instance or undefined
|
|
258
|
+
*/
|
|
259
|
+
getActive(name) {
|
|
260
|
+
const actualName = this.aliases.get(name) || name;
|
|
261
|
+
return this.activePlugins.get(actualName);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* List all active plugin instances
|
|
265
|
+
*
|
|
266
|
+
* @returns Array of active plugins
|
|
267
|
+
*/
|
|
268
|
+
listActive() {
|
|
269
|
+
return Array.from(this.activePlugins.entries()).map(([name, plugin]) => ({
|
|
270
|
+
name,
|
|
271
|
+
plugin
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Unload all active plugins
|
|
276
|
+
*/
|
|
277
|
+
async unloadAll() {
|
|
278
|
+
const promises = Array.from(this.activePlugins.keys()).map(name => this.unload(name));
|
|
279
|
+
await Promise.all(promises);
|
|
280
|
+
}
|
|
281
|
+
// ============ Utility Methods ============
|
|
282
|
+
/**
|
|
283
|
+
* Merge plugin configurations
|
|
284
|
+
*
|
|
285
|
+
* @param base - Base configuration
|
|
286
|
+
* @param override - Override configuration
|
|
287
|
+
* @returns Merged configuration
|
|
288
|
+
*/
|
|
289
|
+
mergeConfig(base, override) {
|
|
290
|
+
if (!base && !override)
|
|
291
|
+
return undefined;
|
|
292
|
+
if (!base)
|
|
293
|
+
return override;
|
|
294
|
+
if (!override)
|
|
295
|
+
return base;
|
|
296
|
+
return {
|
|
297
|
+
...base,
|
|
298
|
+
...override,
|
|
299
|
+
algorithm: base.algorithm || override.algorithm ? { ...base.algorithm, ...override.algorithm } : undefined,
|
|
300
|
+
state: base.state || override.state ? { ...base.state, ...override.state } : undefined,
|
|
301
|
+
action: base.action || override.action ? { ...base.action, ...override.action } : undefined,
|
|
302
|
+
reward: base.reward || override.reward ? { ...base.reward, ...override.reward } : undefined,
|
|
303
|
+
storage: base.storage || override.storage ? { ...base.storage, ...override.storage } : undefined,
|
|
304
|
+
training: base.training || override.training ? { ...base.training, ...override.training } : undefined,
|
|
305
|
+
monitoring: base.monitoring || override.monitoring ? { ...base.monitoring, ...override.monitoring } : undefined,
|
|
306
|
+
extensions: override.extensions || base.extensions
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Compare semantic versions
|
|
311
|
+
*
|
|
312
|
+
* @param v1 - First version
|
|
313
|
+
* @param v2 - Second version
|
|
314
|
+
* @returns -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
315
|
+
*/
|
|
316
|
+
compareVersions(v1, v2) {
|
|
317
|
+
const parts1 = v1.split('.').map(Number);
|
|
318
|
+
const parts2 = v2.split('.').map(Number);
|
|
319
|
+
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
320
|
+
const p1 = parts1[i] || 0;
|
|
321
|
+
const p2 = parts2[i] || 0;
|
|
322
|
+
if (p1 < p2)
|
|
323
|
+
return -1;
|
|
324
|
+
if (p1 > p2)
|
|
325
|
+
return 1;
|
|
326
|
+
}
|
|
327
|
+
return 0;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Clear all registrations (for testing)
|
|
331
|
+
*/
|
|
332
|
+
clear() {
|
|
333
|
+
this.plugins.clear();
|
|
334
|
+
this.activePlugins.clear();
|
|
335
|
+
this.aliases.clear();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
PluginRegistry.instance = null;
|
|
339
|
+
/**
|
|
340
|
+
* Get the global plugin registry instance
|
|
341
|
+
*/
|
|
342
|
+
export function getRegistry() {
|
|
343
|
+
return PluginRegistry.getInstance();
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Convenience function to register a plugin
|
|
347
|
+
*/
|
|
348
|
+
export function registerPlugin(metadata) {
|
|
349
|
+
getRegistry().register(metadata);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Convenience function to load a plugin
|
|
353
|
+
*/
|
|
354
|
+
export async function loadPlugin(name, options) {
|
|
355
|
+
return getRegistry().load(name, options);
|
|
356
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Configuration Validator
|
|
3
|
+
*
|
|
4
|
+
* This module provides validation utilities for plugin configurations,
|
|
5
|
+
* ensuring they meet required schemas and constraints.
|
|
6
|
+
*
|
|
7
|
+
* @module plugins/validator
|
|
8
|
+
*/
|
|
9
|
+
import { PluginConfig } from './interface';
|
|
10
|
+
/**
|
|
11
|
+
* Validation error details
|
|
12
|
+
*/
|
|
13
|
+
export interface ValidationError {
|
|
14
|
+
/** Field path (e.g., 'algorithm.learningRate') */
|
|
15
|
+
field: string;
|
|
16
|
+
/** Error message */
|
|
17
|
+
message: string;
|
|
18
|
+
/** Current value */
|
|
19
|
+
value?: any;
|
|
20
|
+
/** Expected value or constraint */
|
|
21
|
+
expected?: any;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validation result
|
|
25
|
+
*/
|
|
26
|
+
export interface ValidationResult {
|
|
27
|
+
/** Whether validation passed */
|
|
28
|
+
valid: boolean;
|
|
29
|
+
/** Array of validation errors */
|
|
30
|
+
errors: ValidationError[];
|
|
31
|
+
/** Warnings (non-fatal issues) */
|
|
32
|
+
warnings?: ValidationError[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate plugin configuration
|
|
36
|
+
*
|
|
37
|
+
* @param config - Plugin configuration to validate
|
|
38
|
+
* @returns Validation result
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const result = validatePluginConfig(config);
|
|
43
|
+
* if (!result.valid) {
|
|
44
|
+
* console.error('Validation errors:', result.errors);
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function validatePluginConfig(config: Partial<PluginConfig>): ValidationResult;
|
|
49
|
+
/**
|
|
50
|
+
* Validate required configuration fields only
|
|
51
|
+
*
|
|
52
|
+
* @param config - Partial plugin configuration
|
|
53
|
+
* @returns Whether required fields are present
|
|
54
|
+
*/
|
|
55
|
+
export declare function validateRequired(config: Partial<PluginConfig>): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get validation error summary
|
|
58
|
+
*
|
|
59
|
+
* @param result - Validation result
|
|
60
|
+
* @returns Human-readable error summary
|
|
61
|
+
*/
|
|
62
|
+
export declare function getErrorSummary(result: ValidationResult): string;
|
|
63
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/plugins/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,mCAAmC;IACnC,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,iCAAiC;IACjC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAYD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,gBAAgB,CA2apF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAUvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAoBhE"}
|