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.
Files changed (361) hide show
  1. package/LICENSE +38 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/LICENSE-MIT +21 -0
  4. package/README.md +953 -0
  5. package/bin/agentdb.js +485 -0
  6. package/bin/plugin-cli-wrapper.mjs +21 -0
  7. package/dist/cache/query-cache.d.ts +105 -0
  8. package/dist/cache/query-cache.d.ts.map +1 -0
  9. package/dist/cache/query-cache.js +224 -0
  10. package/dist/cache/query-cache.js.map +1 -0
  11. package/dist/cache/query-cache.mjs +219 -0
  12. package/dist/cli/cache/query-cache.d.ts +104 -0
  13. package/dist/cli/cache/query-cache.js +244 -0
  14. package/dist/cli/cli/db-commands.d.ts +48 -0
  15. package/dist/cli/cli/db-commands.js +613 -0
  16. package/dist/cli/commands.d.ts +7 -0
  17. package/dist/cli/commands.d.ts.map +1 -0
  18. package/dist/cli/commands.js +113 -0
  19. package/dist/cli/commands.js.map +1 -0
  20. package/dist/cli/commands.mjs +104 -0
  21. package/dist/cli/core/backend-interface.d.ts +70 -0
  22. package/dist/cli/core/backend-interface.js +15 -0
  23. package/dist/cli/core/native-backend.d.ts +140 -0
  24. package/dist/cli/core/native-backend.js +432 -0
  25. package/dist/cli/core/vector-db.d.ts +126 -0
  26. package/dist/cli/core/vector-db.js +338 -0
  27. package/dist/cli/core/wasm-backend.d.ts +95 -0
  28. package/dist/cli/core/wasm-backend.js +418 -0
  29. package/dist/cli/db-commands.d.ts +49 -0
  30. package/dist/cli/db-commands.d.ts.map +1 -0
  31. package/dist/cli/db-commands.js +533 -0
  32. package/dist/cli/db-commands.js.map +1 -0
  33. package/dist/cli/db-commands.mjs +522 -0
  34. package/dist/cli/generator.d.ts +11 -0
  35. package/dist/cli/generator.d.ts.map +1 -0
  36. package/dist/cli/generator.js +567 -0
  37. package/dist/cli/generator.js.map +1 -0
  38. package/dist/cli/generator.mjs +527 -0
  39. package/dist/cli/help.d.ts +18 -0
  40. package/dist/cli/help.d.ts.map +1 -0
  41. package/dist/cli/help.js +676 -0
  42. package/dist/cli/help.js.map +1 -0
  43. package/dist/cli/help.mjs +667 -0
  44. package/dist/cli/index/hnsw.d.ts +164 -0
  45. package/dist/cli/index/hnsw.js +558 -0
  46. package/dist/cli/plugin-cli.d.ts +7 -0
  47. package/dist/cli/plugin-cli.d.ts.map +1 -0
  48. package/dist/cli/plugin-cli.js +295 -0
  49. package/dist/cli/plugin-cli.js.map +1 -0
  50. package/dist/cli/plugin-cli.mjs +289 -0
  51. package/dist/cli/quantization/product-quantization.d.ts +108 -0
  52. package/dist/cli/quantization/product-quantization.js +350 -0
  53. package/dist/cli/query/query-builder.d.ts +322 -0
  54. package/dist/cli/query/query-builder.js +600 -0
  55. package/dist/cli/templates.d.ts +14 -0
  56. package/dist/cli/templates.d.ts.map +1 -0
  57. package/dist/cli/templates.js +182 -0
  58. package/dist/cli/templates.js.map +1 -0
  59. package/dist/cli/templates.mjs +176 -0
  60. package/dist/cli/types/index.d.ts +116 -0
  61. package/dist/cli/types/index.js +5 -0
  62. package/dist/cli/types.d.ts +91 -0
  63. package/dist/cli/types.d.ts.map +1 -0
  64. package/dist/cli/types.js +6 -0
  65. package/dist/cli/types.js.map +1 -0
  66. package/dist/cli/types.mjs +4 -0
  67. package/dist/cli/wizard/index.d.ts +6 -0
  68. package/dist/cli/wizard/index.d.ts.map +1 -0
  69. package/dist/cli/wizard/index.js +138 -0
  70. package/dist/cli/wizard/index.js.map +1 -0
  71. package/dist/cli/wizard/index.mjs +131 -0
  72. package/dist/cli/wizard/prompts.d.ts +11 -0
  73. package/dist/cli/wizard/prompts.d.ts.map +1 -0
  74. package/dist/cli/wizard/prompts.js +482 -0
  75. package/dist/cli/wizard/prompts.js.map +1 -0
  76. package/dist/cli/wizard/prompts.mjs +470 -0
  77. package/dist/cli/wizard/validator.d.ts +13 -0
  78. package/dist/cli/wizard/validator.d.ts.map +1 -0
  79. package/dist/cli/wizard/validator.js +234 -0
  80. package/dist/cli/wizard/validator.js.map +1 -0
  81. package/dist/cli/wizard/validator.mjs +224 -0
  82. package/dist/core/backend-interface.d.ts +71 -0
  83. package/dist/core/backend-interface.d.ts.map +1 -0
  84. package/dist/core/backend-interface.js +16 -0
  85. package/dist/core/backend-interface.js.map +1 -0
  86. package/dist/core/backend-interface.mjs +12 -0
  87. package/dist/core/native-backend.d.ts +141 -0
  88. package/dist/core/native-backend.d.ts.map +1 -0
  89. package/dist/core/native-backend.js +457 -0
  90. package/dist/core/native-backend.js.map +1 -0
  91. package/dist/core/native-backend.mjs +449 -0
  92. package/dist/core/vector-db.d.ts +127 -0
  93. package/dist/core/vector-db.d.ts.map +1 -0
  94. package/dist/core/vector-db.js +266 -0
  95. package/dist/core/vector-db.js.map +1 -0
  96. package/dist/core/vector-db.mjs +261 -0
  97. package/dist/core/wasm-backend.d.ts +96 -0
  98. package/dist/core/wasm-backend.d.ts.map +1 -0
  99. package/dist/core/wasm-backend.js +393 -0
  100. package/dist/core/wasm-backend.js.map +1 -0
  101. package/dist/core/wasm-backend.mjs +385 -0
  102. package/dist/index/hnsw-optimized.d.ts +75 -0
  103. package/dist/index/hnsw-optimized.d.ts.map +1 -0
  104. package/dist/index/hnsw-optimized.js +412 -0
  105. package/dist/index/hnsw-optimized.js.map +1 -0
  106. package/dist/index/hnsw-optimized.mjs +407 -0
  107. package/dist/index/hnsw.d.ts +165 -0
  108. package/dist/index/hnsw.d.ts.map +1 -0
  109. package/dist/index/hnsw.js +521 -0
  110. package/dist/index/hnsw.js.map +1 -0
  111. package/dist/index/hnsw.mjs +516 -0
  112. package/dist/index.d.ts +57 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +82 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/index.mjs +63 -0
  117. package/dist/mcp-server.d.ts +27 -0
  118. package/dist/mcp-server.d.ts.map +1 -0
  119. package/dist/mcp-server.js +789 -0
  120. package/dist/mcp-server.js.map +1 -0
  121. package/dist/mcp-server.mjs +784 -0
  122. package/dist/plugins/base-plugin.d.ts +114 -0
  123. package/dist/plugins/base-plugin.d.ts.map +1 -0
  124. package/dist/plugins/base-plugin.js +313 -0
  125. package/dist/plugins/base-plugin.js.map +1 -0
  126. package/dist/plugins/base-plugin.mjs +275 -0
  127. package/dist/plugins/implementations/active-learning.d.ts +135 -0
  128. package/dist/plugins/implementations/active-learning.d.ts.map +1 -0
  129. package/dist/plugins/implementations/active-learning.js +372 -0
  130. package/dist/plugins/implementations/active-learning.js.map +1 -0
  131. package/dist/plugins/implementations/active-learning.mjs +367 -0
  132. package/dist/plugins/implementations/actor-critic.d.ts +64 -0
  133. package/dist/plugins/implementations/actor-critic.d.ts.map +1 -0
  134. package/dist/plugins/implementations/actor-critic.js +363 -0
  135. package/dist/plugins/implementations/actor-critic.js.map +1 -0
  136. package/dist/plugins/implementations/actor-critic.mjs +358 -0
  137. package/dist/plugins/implementations/adversarial-training.d.ts +133 -0
  138. package/dist/plugins/implementations/adversarial-training.d.ts.map +1 -0
  139. package/dist/plugins/implementations/adversarial-training.js +409 -0
  140. package/dist/plugins/implementations/adversarial-training.js.map +1 -0
  141. package/dist/plugins/implementations/adversarial-training.mjs +404 -0
  142. package/dist/plugins/implementations/curriculum-learning.d.ts +132 -0
  143. package/dist/plugins/implementations/curriculum-learning.d.ts.map +1 -0
  144. package/dist/plugins/implementations/curriculum-learning.js +354 -0
  145. package/dist/plugins/implementations/curriculum-learning.js.map +1 -0
  146. package/dist/plugins/implementations/curriculum-learning.mjs +349 -0
  147. package/dist/plugins/implementations/decision-transformer.d.ts +77 -0
  148. package/dist/plugins/implementations/decision-transformer.d.ts.map +1 -0
  149. package/dist/plugins/implementations/decision-transformer.js +422 -0
  150. package/dist/plugins/implementations/decision-transformer.js.map +1 -0
  151. package/dist/plugins/implementations/decision-transformer.mjs +417 -0
  152. package/dist/plugins/implementations/federated-learning.d.ts +126 -0
  153. package/dist/plugins/implementations/federated-learning.d.ts.map +1 -0
  154. package/dist/plugins/implementations/federated-learning.js +436 -0
  155. package/dist/plugins/implementations/federated-learning.js.map +1 -0
  156. package/dist/plugins/implementations/federated-learning.mjs +431 -0
  157. package/dist/plugins/implementations/index.d.ts +30 -0
  158. package/dist/plugins/implementations/index.d.ts.map +1 -0
  159. package/dist/plugins/implementations/index.js +45 -0
  160. package/dist/plugins/implementations/index.js.map +1 -0
  161. package/dist/plugins/implementations/index.mjs +31 -0
  162. package/dist/plugins/implementations/multi-task-learning.d.ts +115 -0
  163. package/dist/plugins/implementations/multi-task-learning.d.ts.map +1 -0
  164. package/dist/plugins/implementations/multi-task-learning.js +369 -0
  165. package/dist/plugins/implementations/multi-task-learning.js.map +1 -0
  166. package/dist/plugins/implementations/multi-task-learning.mjs +364 -0
  167. package/dist/plugins/implementations/neural-architecture-search.d.ts +148 -0
  168. package/dist/plugins/implementations/neural-architecture-search.d.ts.map +1 -0
  169. package/dist/plugins/implementations/neural-architecture-search.js +379 -0
  170. package/dist/plugins/implementations/neural-architecture-search.js.map +1 -0
  171. package/dist/plugins/implementations/neural-architecture-search.mjs +374 -0
  172. package/dist/plugins/implementations/q-learning.d.ts +98 -0
  173. package/dist/plugins/implementations/q-learning.d.ts.map +1 -0
  174. package/dist/plugins/implementations/q-learning.js +435 -0
  175. package/dist/plugins/implementations/q-learning.js.map +1 -0
  176. package/dist/plugins/implementations/q-learning.mjs +430 -0
  177. package/dist/plugins/implementations/sarsa.d.ts +103 -0
  178. package/dist/plugins/implementations/sarsa.d.ts.map +1 -0
  179. package/dist/plugins/implementations/sarsa.js +347 -0
  180. package/dist/plugins/implementations/sarsa.js.map +1 -0
  181. package/dist/plugins/implementations/sarsa.mjs +342 -0
  182. package/dist/plugins/index.d.ts +107 -0
  183. package/dist/plugins/index.d.ts.map +1 -0
  184. package/dist/plugins/index.js +179 -0
  185. package/dist/plugins/index.js.map +1 -0
  186. package/dist/plugins/index.mjs +168 -0
  187. package/dist/plugins/interface.d.ts +439 -0
  188. package/dist/plugins/interface.d.ts.map +1 -0
  189. package/dist/plugins/interface.js +12 -0
  190. package/dist/plugins/interface.js.map +1 -0
  191. package/dist/plugins/interface.mjs +10 -0
  192. package/dist/plugins/learning-plugin.interface.d.ts +257 -0
  193. package/dist/plugins/learning-plugin.interface.d.ts.map +1 -0
  194. package/dist/plugins/learning-plugin.interface.js +7 -0
  195. package/dist/plugins/learning-plugin.interface.js.map +1 -0
  196. package/dist/plugins/learning-plugin.interface.mjs +5 -0
  197. package/dist/plugins/plugin-exports.d.ts +71 -0
  198. package/dist/plugins/plugin-exports.d.ts.map +1 -0
  199. package/dist/plugins/plugin-exports.js +78 -0
  200. package/dist/plugins/plugin-exports.js.map +1 -0
  201. package/dist/plugins/plugin-exports.mjs +69 -0
  202. package/dist/plugins/registry.d.ts +206 -0
  203. package/dist/plugins/registry.d.ts.map +1 -0
  204. package/dist/plugins/registry.js +365 -0
  205. package/dist/plugins/registry.js.map +1 -0
  206. package/dist/plugins/registry.mjs +356 -0
  207. package/dist/plugins/validator.d.ts +63 -0
  208. package/dist/plugins/validator.d.ts.map +1 -0
  209. package/dist/plugins/validator.js +464 -0
  210. package/dist/plugins/validator.js.map +1 -0
  211. package/dist/plugins/validator.mjs +458 -0
  212. package/dist/quantization/binary-quantization.d.ts +104 -0
  213. package/dist/quantization/binary-quantization.d.ts.map +1 -0
  214. package/dist/quantization/binary-quantization.js +246 -0
  215. package/dist/quantization/binary-quantization.js.map +1 -0
  216. package/dist/quantization/binary-quantization.mjs +240 -0
  217. package/dist/quantization/optimized-pq.d.ts +138 -0
  218. package/dist/quantization/optimized-pq.d.ts.map +1 -0
  219. package/dist/quantization/optimized-pq.js +320 -0
  220. package/dist/quantization/optimized-pq.js.map +1 -0
  221. package/dist/quantization/optimized-pq.mjs +313 -0
  222. package/dist/quantization/product-quantization.d.ts +109 -0
  223. package/dist/quantization/product-quantization.d.ts.map +1 -0
  224. package/dist/quantization/product-quantization.js +287 -0
  225. package/dist/quantization/product-quantization.js.map +1 -0
  226. package/dist/quantization/product-quantization.mjs +282 -0
  227. package/dist/quantization/scalar-quantization.d.ts +100 -0
  228. package/dist/quantization/scalar-quantization.d.ts.map +1 -0
  229. package/dist/quantization/scalar-quantization.js +324 -0
  230. package/dist/quantization/scalar-quantization.js.map +1 -0
  231. package/dist/quantization/scalar-quantization.mjs +319 -0
  232. package/dist/query/index.d.ts +6 -0
  233. package/dist/query/index.d.ts.map +1 -0
  234. package/dist/query/index.js +9 -0
  235. package/dist/query/index.js.map +1 -0
  236. package/dist/query/index.mjs +4 -0
  237. package/dist/query/query-builder.d.ts +323 -0
  238. package/dist/query/query-builder.d.ts.map +1 -0
  239. package/dist/query/query-builder.js +524 -0
  240. package/dist/query/query-builder.js.map +1 -0
  241. package/dist/query/query-builder.mjs +519 -0
  242. package/dist/reasoning/context-synthesizer.d.ts +57 -0
  243. package/dist/reasoning/context-synthesizer.d.ts.map +1 -0
  244. package/dist/reasoning/context-synthesizer.js +224 -0
  245. package/dist/reasoning/context-synthesizer.js.map +1 -0
  246. package/dist/reasoning/context-synthesizer.mjs +219 -0
  247. package/dist/reasoning/experience-curator.d.ts +66 -0
  248. package/dist/reasoning/experience-curator.d.ts.map +1 -0
  249. package/dist/reasoning/experience-curator.js +288 -0
  250. package/dist/reasoning/experience-curator.js.map +1 -0
  251. package/dist/reasoning/experience-curator.mjs +283 -0
  252. package/dist/reasoning/memory-optimizer.d.ts +69 -0
  253. package/dist/reasoning/memory-optimizer.d.ts.map +1 -0
  254. package/dist/reasoning/memory-optimizer.js +331 -0
  255. package/dist/reasoning/memory-optimizer.js.map +1 -0
  256. package/dist/reasoning/memory-optimizer.mjs +326 -0
  257. package/dist/reasoning/pattern-matcher.d.ts +59 -0
  258. package/dist/reasoning/pattern-matcher.d.ts.map +1 -0
  259. package/dist/reasoning/pattern-matcher.js +229 -0
  260. package/dist/reasoning/pattern-matcher.js.map +1 -0
  261. package/dist/reasoning/pattern-matcher.mjs +224 -0
  262. package/dist/reasoningbank/adapter/agentdb-adapter.d.ts +118 -0
  263. package/dist/reasoningbank/adapter/agentdb-adapter.d.ts.map +1 -0
  264. package/dist/reasoningbank/adapter/agentdb-adapter.js +477 -0
  265. package/dist/reasoningbank/adapter/agentdb-adapter.js.map +1 -0
  266. package/dist/reasoningbank/adapter/types.d.ts +113 -0
  267. package/dist/reasoningbank/adapter/types.d.ts.map +1 -0
  268. package/dist/reasoningbank/adapter/types.js +9 -0
  269. package/dist/reasoningbank/adapter/types.js.map +1 -0
  270. package/dist/reasoningbank/cli/commands.d.ts +16 -0
  271. package/dist/reasoningbank/cli/commands.d.ts.map +1 -0
  272. package/dist/reasoningbank/cli/commands.js +272 -0
  273. package/dist/reasoningbank/cli/commands.js.map +1 -0
  274. package/dist/reasoningbank/mcp/agentdb-tools.d.ts +319 -0
  275. package/dist/reasoningbank/mcp/agentdb-tools.d.ts.map +1 -0
  276. package/dist/reasoningbank/mcp/agentdb-tools.js +301 -0
  277. package/dist/reasoningbank/mcp/agentdb-tools.js.map +1 -0
  278. package/dist/reasoningbank/migration/migrate.d.ts +25 -0
  279. package/dist/reasoningbank/migration/migrate.d.ts.map +1 -0
  280. package/dist/reasoningbank/migration/migrate.js +178 -0
  281. package/dist/reasoningbank/migration/migrate.js.map +1 -0
  282. package/dist/reasoningbank/reasoning/context-synthesizer.d.ts +37 -0
  283. package/dist/reasoningbank/reasoning/context-synthesizer.d.ts.map +1 -0
  284. package/dist/reasoningbank/reasoning/context-synthesizer.js +114 -0
  285. package/dist/reasoningbank/reasoning/context-synthesizer.js.map +1 -0
  286. package/dist/reasoningbank/reasoning/experience-curator.d.ts +39 -0
  287. package/dist/reasoningbank/reasoning/experience-curator.d.ts.map +1 -0
  288. package/dist/reasoningbank/reasoning/experience-curator.js +98 -0
  289. package/dist/reasoningbank/reasoning/experience-curator.js.map +1 -0
  290. package/dist/reasoningbank/reasoning/memory-optimizer.d.ts +44 -0
  291. package/dist/reasoningbank/reasoning/memory-optimizer.d.ts.map +1 -0
  292. package/dist/reasoningbank/reasoning/memory-optimizer.js +184 -0
  293. package/dist/reasoningbank/reasoning/memory-optimizer.js.map +1 -0
  294. package/dist/reasoningbank/reasoning/pattern-matcher.d.ts +40 -0
  295. package/dist/reasoningbank/reasoning/pattern-matcher.d.ts.map +1 -0
  296. package/dist/reasoningbank/reasoning/pattern-matcher.js +87 -0
  297. package/dist/reasoningbank/reasoning/pattern-matcher.js.map +1 -0
  298. package/dist/reasoningbank/sync/quic-sync.d.ts +77 -0
  299. package/dist/reasoningbank/sync/quic-sync.d.ts.map +1 -0
  300. package/dist/reasoningbank/sync/quic-sync.js +165 -0
  301. package/dist/reasoningbank/sync/quic-sync.js.map +1 -0
  302. package/dist/sync/conflict.d.ts +78 -0
  303. package/dist/sync/conflict.d.ts.map +1 -0
  304. package/dist/sync/conflict.js +202 -0
  305. package/dist/sync/conflict.js.map +1 -0
  306. package/dist/sync/conflict.mjs +196 -0
  307. package/dist/sync/coordinator.d.ts +111 -0
  308. package/dist/sync/coordinator.d.ts.map +1 -0
  309. package/dist/sync/coordinator.js +256 -0
  310. package/dist/sync/coordinator.js.map +1 -0
  311. package/dist/sync/coordinator.mjs +250 -0
  312. package/dist/sync/delta.d.ts +81 -0
  313. package/dist/sync/delta.d.ts.map +1 -0
  314. package/dist/sync/delta.js +245 -0
  315. package/dist/sync/delta.js.map +1 -0
  316. package/dist/sync/delta.mjs +238 -0
  317. package/dist/sync/index.d.ts +11 -0
  318. package/dist/sync/index.d.ts.map +1 -0
  319. package/dist/sync/index.js +22 -0
  320. package/dist/sync/index.js.map +1 -0
  321. package/dist/sync/index.mjs +9 -0
  322. package/dist/sync/quic-sync.d.ts +81 -0
  323. package/dist/sync/quic-sync.d.ts.map +1 -0
  324. package/dist/sync/quic-sync.js +329 -0
  325. package/dist/sync/quic-sync.js.map +1 -0
  326. package/dist/sync/quic-sync.mjs +323 -0
  327. package/dist/sync/types.d.ts +168 -0
  328. package/dist/sync/types.d.ts.map +1 -0
  329. package/dist/sync/types.js +8 -0
  330. package/dist/sync/types.js.map +1 -0
  331. package/dist/sync/types.mjs +6 -0
  332. package/dist/types/index.d.ts +117 -0
  333. package/dist/types/index.d.ts.map +1 -0
  334. package/dist/types/index.js +6 -0
  335. package/dist/types/index.js.map +1 -0
  336. package/dist/types/index.mjs +4 -0
  337. package/dist/wasm-loader.d.ts +32 -0
  338. package/dist/wasm-loader.d.ts.map +1 -0
  339. package/dist/wasm-loader.js +75 -0
  340. package/dist/wasm-loader.js.map +1 -0
  341. package/dist/wasm-loader.mjs +64 -0
  342. package/examples/adaptive-learning.ts +284 -0
  343. package/examples/browser/README.md +732 -0
  344. package/examples/browser/adaptive-recommendations/index.html +427 -0
  345. package/examples/browser/collaborative-filtering/index.html +310 -0
  346. package/examples/browser/continual-learning/index.html +736 -0
  347. package/examples/browser/experience-replay/index.html +616 -0
  348. package/examples/browser/index.html +369 -0
  349. package/examples/browser/meta-learning/index.html +789 -0
  350. package/examples/browser/neuro-symbolic/index.html +692 -0
  351. package/examples/browser/pattern-learning/index.html +620 -0
  352. package/examples/browser/quantum-inspired/index.html +728 -0
  353. package/examples/browser/rag/index.html +624 -0
  354. package/examples/browser/swarm-intelligence/index.html +811 -0
  355. package/examples/browser-basic.html +170 -0
  356. package/examples/hnsw-example.ts +148 -0
  357. package/examples/node-basic.js +70 -0
  358. package/examples/quic-sync-example.ts +310 -0
  359. package/examples/quick-start.js +68 -0
  360. package/examples/wasm-example.ts +222 -0
  361. 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"}