@ai.ntellect/core 1.0.0 → 1.1.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 (435) hide show
  1. package/.mocharc.json +6 -0
  2. package/AGENTS.md +50 -0
  3. package/ARCHITECTURE.md +58 -0
  4. package/BENCHMARK.md +38 -0
  5. package/CHANGELOG.md +224 -0
  6. package/README.md +411 -142
  7. package/agent/agent-workflow.ts +569 -0
  8. package/agent/agent.ts +183 -0
  9. package/agent/base/executor.ts +103 -0
  10. package/agent/base/index.ts +87 -0
  11. package/agent/entity-resolver/confidence.ts +54 -0
  12. package/agent/entity-resolver/entity-index.ts +241 -0
  13. package/agent/entity-resolver/explore-strategy.ts +82 -0
  14. package/agent/entity-resolver/index.ts +22 -0
  15. package/agent/entity-resolver/resolver.ts +193 -0
  16. package/agent/entity-resolver/scorer.ts +211 -0
  17. package/agent/entity-resolver/types.ts +98 -0
  18. package/agent/generic-executor.ts +713 -0
  19. package/agent/handlers/cognitive-handler.ts +197 -0
  20. package/agent/handlers/index.ts +1 -0
  21. package/agent/handoff.ts +58 -0
  22. package/agent/llm-factory.ts +343 -0
  23. package/agent/orchestrator.ts +45 -0
  24. package/agent/prompt-builder.ts +78 -0
  25. package/agent/registry.ts +64 -0
  26. package/agent/tools/file-system.ts +471 -0
  27. package/agent/tools/index.ts +23 -0
  28. package/agent/tools/logger.ts +105 -0
  29. package/agent/tools/tool-resolver.ts +104 -0
  30. package/benchmark/cortexflow-workflow.ts +182 -0
  31. package/benchmark/langgraph-workflow.ts +201 -0
  32. package/benchmark/llm-client.ts +76 -0
  33. package/benchmark/run-benchmark.ts +222 -0
  34. package/cli-dev.ts +419 -0
  35. package/dist/agent/agent-workflow.d.ts +41 -0
  36. package/dist/agent/agent-workflow.d.ts.map +1 -0
  37. package/dist/agent/agent-workflow.js +560 -0
  38. package/dist/agent/agent-workflow.js.map +1 -0
  39. package/dist/agent/agent.d.ts +38 -0
  40. package/dist/agent/agent.d.ts.map +1 -0
  41. package/dist/agent/agent.js +149 -0
  42. package/dist/agent/agent.js.map +1 -0
  43. package/dist/agent/base/executor.d.ts +51 -0
  44. package/dist/agent/base/executor.d.ts.map +1 -0
  45. package/dist/agent/base/executor.js +69 -0
  46. package/dist/agent/base/executor.js.map +1 -0
  47. package/dist/agent/base/index.d.ts +30 -0
  48. package/dist/agent/base/index.d.ts.map +1 -0
  49. package/dist/agent/base/index.js +88 -0
  50. package/dist/agent/base/index.js.map +1 -0
  51. package/dist/agent/entity-resolver/confidence.d.ts +4 -0
  52. package/dist/agent/entity-resolver/confidence.d.ts.map +1 -0
  53. package/dist/agent/entity-resolver/confidence.js +47 -0
  54. package/dist/agent/entity-resolver/confidence.js.map +1 -0
  55. package/dist/agent/entity-resolver/entity-index.d.ts +40 -0
  56. package/dist/agent/entity-resolver/entity-index.d.ts.map +1 -0
  57. package/dist/agent/entity-resolver/entity-index.js +244 -0
  58. package/dist/agent/entity-resolver/entity-index.js.map +1 -0
  59. package/dist/agent/entity-resolver/explore-strategy.d.ts +13 -0
  60. package/dist/agent/entity-resolver/explore-strategy.d.ts.map +1 -0
  61. package/dist/agent/entity-resolver/explore-strategy.js +109 -0
  62. package/dist/agent/entity-resolver/explore-strategy.js.map +1 -0
  63. package/dist/agent/entity-resolver/index.d.ts +8 -0
  64. package/dist/agent/entity-resolver/index.d.ts.map +1 -0
  65. package/dist/agent/entity-resolver/index.js +16 -0
  66. package/dist/agent/entity-resolver/index.js.map +1 -0
  67. package/dist/agent/entity-resolver/resolver.d.ts +18 -0
  68. package/dist/agent/entity-resolver/resolver.d.ts.map +1 -0
  69. package/dist/agent/entity-resolver/resolver.js +158 -0
  70. package/dist/agent/entity-resolver/resolver.js.map +1 -0
  71. package/dist/agent/entity-resolver/scorer.d.ts +3 -0
  72. package/dist/agent/entity-resolver/scorer.d.ts.map +1 -0
  73. package/dist/agent/entity-resolver/scorer.js +182 -0
  74. package/dist/agent/entity-resolver/scorer.js.map +1 -0
  75. package/dist/agent/entity-resolver/types.d.ts +89 -0
  76. package/dist/agent/entity-resolver/types.d.ts.map +1 -0
  77. package/dist/agent/entity-resolver/types.js +3 -0
  78. package/dist/agent/entity-resolver/types.js.map +1 -0
  79. package/dist/agent/generic-executor.d.ts +68 -0
  80. package/dist/agent/generic-executor.d.ts.map +1 -0
  81. package/dist/agent/generic-executor.js +620 -0
  82. package/dist/agent/generic-executor.js.map +1 -0
  83. package/dist/agent/handlers/cognitive-handler.d.ts +44 -0
  84. package/dist/agent/handlers/cognitive-handler.d.ts.map +1 -0
  85. package/dist/agent/handlers/cognitive-handler.js +172 -0
  86. package/dist/agent/handlers/cognitive-handler.js.map +1 -0
  87. package/dist/agent/handlers/index.d.ts +2 -0
  88. package/dist/agent/handlers/index.d.ts.map +1 -0
  89. package/dist/agent/handlers/index.js +7 -0
  90. package/dist/agent/handlers/index.js.map +1 -0
  91. package/dist/agent/handoff.d.ts +12 -0
  92. package/dist/agent/handoff.d.ts.map +1 -0
  93. package/dist/agent/handoff.js +62 -0
  94. package/dist/agent/handoff.js.map +1 -0
  95. package/dist/agent/llm-factory.d.ts +19 -0
  96. package/dist/agent/llm-factory.d.ts.map +1 -0
  97. package/dist/agent/llm-factory.js +297 -0
  98. package/dist/agent/llm-factory.js.map +1 -0
  99. package/dist/agent/orchestrator.d.ts +18 -0
  100. package/dist/agent/orchestrator.d.ts.map +1 -0
  101. package/dist/agent/orchestrator.js +44 -0
  102. package/dist/agent/orchestrator.js.map +1 -0
  103. package/dist/agent/prompt-builder.d.ts +35 -0
  104. package/dist/agent/prompt-builder.d.ts.map +1 -0
  105. package/dist/agent/prompt-builder.js +76 -0
  106. package/dist/agent/prompt-builder.js.map +1 -0
  107. package/dist/agent/registry.d.ts +19 -0
  108. package/dist/agent/registry.d.ts.map +1 -0
  109. package/dist/agent/registry.js +48 -0
  110. package/dist/agent/registry.js.map +1 -0
  111. package/dist/agent/tools/file-system.d.ts +11 -0
  112. package/dist/agent/tools/file-system.d.ts.map +1 -0
  113. package/dist/agent/tools/file-system.js +528 -0
  114. package/dist/agent/tools/file-system.js.map +1 -0
  115. package/dist/agent/tools/index.d.ts +4 -0
  116. package/dist/agent/tools/index.d.ts.map +1 -0
  117. package/dist/agent/tools/index.js +20 -0
  118. package/dist/agent/tools/index.js.map +1 -0
  119. package/dist/agent/tools/logger.d.ts +33 -0
  120. package/dist/agent/tools/logger.d.ts.map +1 -0
  121. package/dist/agent/tools/logger.js +86 -0
  122. package/dist/agent/tools/logger.js.map +1 -0
  123. package/dist/agent/tools/tool-resolver.d.ts +7 -0
  124. package/dist/agent/tools/tool-resolver.d.ts.map +1 -0
  125. package/dist/agent/tools/tool-resolver.js +122 -0
  126. package/dist/agent/tools/tool-resolver.js.map +1 -0
  127. package/dist/execution/adapters/in-memory-checkpoint.d.ts +11 -0
  128. package/dist/execution/adapters/in-memory-checkpoint.d.ts.map +1 -0
  129. package/dist/execution/adapters/in-memory-checkpoint.js +54 -0
  130. package/dist/execution/adapters/in-memory-checkpoint.js.map +1 -0
  131. package/dist/execution/compiler.d.ts +8 -0
  132. package/dist/execution/compiler.d.ts.map +1 -0
  133. package/dist/execution/compiler.js +50 -0
  134. package/dist/execution/compiler.js.map +1 -0
  135. package/dist/execution/controller.d.ts +30 -0
  136. package/dist/execution/controller.d.ts.map +1 -0
  137. package/dist/execution/controller.js +80 -0
  138. package/dist/execution/controller.js.map +1 -0
  139. package/dist/execution/event-manager.d.ts +29 -0
  140. package/dist/execution/event-manager.d.ts.map +1 -0
  141. package/dist/execution/event-manager.js +264 -0
  142. package/dist/execution/event-manager.js.map +1 -0
  143. package/dist/execution/index.d.ts +221 -0
  144. package/dist/execution/index.d.ts.map +1 -0
  145. package/dist/execution/index.js +638 -0
  146. package/dist/execution/index.js.map +1 -0
  147. package/dist/execution/logger.d.ts +46 -0
  148. package/dist/execution/logger.d.ts.map +1 -0
  149. package/dist/execution/logger.js +69 -0
  150. package/dist/execution/logger.js.map +1 -0
  151. package/dist/execution/node.d.ts +65 -0
  152. package/dist/execution/node.d.ts.map +1 -0
  153. package/dist/execution/node.js +250 -0
  154. package/dist/execution/node.js.map +1 -0
  155. package/dist/execution/observer.d.ts +38 -0
  156. package/dist/execution/observer.d.ts.map +1 -0
  157. package/dist/execution/observer.js +111 -0
  158. package/dist/execution/observer.js.map +1 -0
  159. package/dist/execution/planner.d.ts +14 -0
  160. package/dist/execution/planner.d.ts.map +1 -0
  161. package/dist/execution/planner.js +43 -0
  162. package/dist/execution/planner.js.map +1 -0
  163. package/dist/execution/reducer.d.ts +19 -0
  164. package/dist/execution/reducer.d.ts.map +1 -0
  165. package/dist/execution/reducer.js +61 -0
  166. package/dist/execution/reducer.js.map +1 -0
  167. package/dist/execution/registry.d.ts +38 -0
  168. package/dist/execution/registry.d.ts.map +1 -0
  169. package/dist/execution/registry.js +63 -0
  170. package/dist/execution/registry.js.map +1 -0
  171. package/dist/execution/send-api.d.ts +24 -0
  172. package/dist/execution/send-api.d.ts.map +1 -0
  173. package/dist/execution/send-api.js +52 -0
  174. package/dist/execution/send-api.js.map +1 -0
  175. package/dist/execution/types.parallel.d.ts +61 -0
  176. package/dist/execution/types.parallel.d.ts.map +1 -0
  177. package/dist/execution/types.parallel.js +3 -0
  178. package/dist/execution/types.parallel.js.map +1 -0
  179. package/dist/execution/visualizer.d.ts +35 -0
  180. package/dist/execution/visualizer.d.ts.map +1 -0
  181. package/dist/execution/visualizer.js +131 -0
  182. package/dist/execution/visualizer.js.map +1 -0
  183. package/dist/index.d.ts +47 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +78 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/interfaces/index.d.ts +487 -0
  188. package/dist/interfaces/index.d.ts.map +1 -0
  189. package/dist/interfaces/index.js +75 -0
  190. package/dist/interfaces/index.js.map +1 -0
  191. package/dist/modules/agenda/adapters/node-cron/index.d.ts +17 -0
  192. package/dist/modules/agenda/adapters/node-cron/index.d.ts.map +1 -0
  193. package/dist/modules/agenda/adapters/node-cron/index.js +30 -0
  194. package/dist/modules/agenda/adapters/node-cron/index.js.map +1 -0
  195. package/dist/modules/agenda/index.d.ts +63 -0
  196. package/dist/modules/agenda/index.d.ts.map +1 -0
  197. package/dist/modules/agenda/index.js +141 -0
  198. package/dist/modules/agenda/index.js.map +1 -0
  199. package/dist/modules/cli/index.d.ts +13 -0
  200. package/dist/modules/cli/index.d.ts.map +1 -0
  201. package/dist/modules/cli/index.js +672 -0
  202. package/dist/modules/cli/index.js.map +1 -0
  203. package/dist/modules/embedding/adapters/ai/index.d.ts +29 -0
  204. package/dist/modules/embedding/adapters/ai/index.d.ts.map +1 -0
  205. package/dist/modules/embedding/adapters/ai/index.js +58 -0
  206. package/dist/modules/embedding/adapters/ai/index.js.map +1 -0
  207. package/dist/modules/embedding/index.d.ts +36 -0
  208. package/dist/modules/embedding/index.d.ts.map +1 -0
  209. package/dist/modules/embedding/index.js +60 -0
  210. package/dist/modules/embedding/index.js.map +1 -0
  211. package/dist/modules/nlp/engine.d.ts +126 -0
  212. package/dist/modules/nlp/engine.d.ts.map +1 -0
  213. package/dist/modules/nlp/engine.js +299 -0
  214. package/dist/modules/nlp/engine.js.map +1 -0
  215. package/dist/modules/nlp/index.d.ts +27 -0
  216. package/dist/modules/nlp/index.d.ts.map +1 -0
  217. package/dist/modules/nlp/index.js +56 -0
  218. package/dist/modules/nlp/index.js.map +1 -0
  219. package/dist/persistence/index.d.ts +12 -0
  220. package/dist/persistence/index.d.ts.map +1 -0
  221. package/dist/persistence/index.js +24 -0
  222. package/dist/persistence/index.js.map +1 -0
  223. package/dist/persistence/neo4j/driver.d.ts +26 -0
  224. package/dist/persistence/neo4j/driver.d.ts.map +1 -0
  225. package/dist/persistence/neo4j/driver.js +64 -0
  226. package/dist/persistence/neo4j/driver.js.map +1 -0
  227. package/dist/persistence/neo4j/entity-store.d.ts +15 -0
  228. package/dist/persistence/neo4j/entity-store.d.ts.map +1 -0
  229. package/dist/persistence/neo4j/entity-store.js +136 -0
  230. package/dist/persistence/neo4j/entity-store.js.map +1 -0
  231. package/dist/persistence/neo4j/execution-tracer.d.ts +19 -0
  232. package/dist/persistence/neo4j/execution-tracer.d.ts.map +1 -0
  233. package/dist/persistence/neo4j/execution-tracer.js +166 -0
  234. package/dist/persistence/neo4j/execution-tracer.js.map +1 -0
  235. package/dist/persistence/neo4j/memory-adapter.d.ts +35 -0
  236. package/dist/persistence/neo4j/memory-adapter.d.ts.map +1 -0
  237. package/dist/persistence/neo4j/memory-adapter.js +252 -0
  238. package/dist/persistence/neo4j/memory-adapter.js.map +1 -0
  239. package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts +22 -0
  240. package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts.map +1 -0
  241. package/dist/persistence/neo4j/petri-checkpoint-adapter.js +141 -0
  242. package/dist/persistence/neo4j/petri-checkpoint-adapter.js.map +1 -0
  243. package/dist/pipeline/agent-pipeline.d.ts +99 -0
  244. package/dist/pipeline/agent-pipeline.d.ts.map +1 -0
  245. package/dist/pipeline/agent-pipeline.js +356 -0
  246. package/dist/pipeline/agent-pipeline.js.map +1 -0
  247. package/dist/routing/checkpoint-adapter.d.ts +30 -0
  248. package/dist/routing/checkpoint-adapter.d.ts.map +1 -0
  249. package/dist/routing/checkpoint-adapter.js +83 -0
  250. package/dist/routing/checkpoint-adapter.js.map +1 -0
  251. package/dist/routing/documentation-generator.d.ts +47 -0
  252. package/dist/routing/documentation-generator.d.ts.map +1 -0
  253. package/dist/routing/documentation-generator.js +320 -0
  254. package/dist/routing/documentation-generator.js.map +1 -0
  255. package/dist/routing/index.d.ts +38 -0
  256. package/dist/routing/index.d.ts.map +1 -0
  257. package/dist/routing/index.js +375 -0
  258. package/dist/routing/index.js.map +1 -0
  259. package/dist/routing/intent-classifier.d.ts +206 -0
  260. package/dist/routing/intent-classifier.d.ts.map +1 -0
  261. package/dist/routing/intent-classifier.js +267 -0
  262. package/dist/routing/intent-classifier.js.map +1 -0
  263. package/dist/routing/matrix.d.ts +6 -0
  264. package/dist/routing/matrix.d.ts.map +1 -0
  265. package/dist/routing/matrix.js +131 -0
  266. package/dist/routing/matrix.js.map +1 -0
  267. package/dist/routing/orchestrator.d.ts +87 -0
  268. package/dist/routing/orchestrator.d.ts.map +1 -0
  269. package/dist/routing/orchestrator.js +425 -0
  270. package/dist/routing/orchestrator.js.map +1 -0
  271. package/dist/routing/postgres-checkpoint-adapter.d.ts +32 -0
  272. package/dist/routing/postgres-checkpoint-adapter.d.ts.map +1 -0
  273. package/dist/routing/postgres-checkpoint-adapter.js +167 -0
  274. package/dist/routing/postgres-checkpoint-adapter.js.map +1 -0
  275. package/dist/routing/redis-checkpoint-adapter.d.ts +34 -0
  276. package/dist/routing/redis-checkpoint-adapter.d.ts.map +1 -0
  277. package/dist/routing/redis-checkpoint-adapter.js +170 -0
  278. package/dist/routing/redis-checkpoint-adapter.js.map +1 -0
  279. package/dist/routing/types.d.ts +49 -0
  280. package/dist/routing/types.d.ts.map +1 -0
  281. package/dist/routing/types.js +3 -0
  282. package/dist/routing/types.js.map +1 -0
  283. package/dist/types/agent.d.ts +289 -0
  284. package/dist/types/agent.d.ts.map +1 -0
  285. package/dist/types/agent.js +78 -0
  286. package/dist/types/agent.js.map +1 -0
  287. package/dist/types/index.d.ts +343 -0
  288. package/dist/types/index.d.ts.map +1 -0
  289. package/dist/types/index.js +3 -0
  290. package/dist/types/index.js.map +1 -0
  291. package/dist/utils/generate-action-schema.d.ts +4 -0
  292. package/dist/utils/generate-action-schema.d.ts.map +1 -0
  293. package/dist/utils/generate-action-schema.js +46 -0
  294. package/dist/utils/generate-action-schema.js.map +1 -0
  295. package/dist/utils/header-builder.d.ts +12 -0
  296. package/dist/utils/header-builder.d.ts.map +1 -0
  297. package/dist/utils/header-builder.js +35 -0
  298. package/dist/utils/header-builder.js.map +1 -0
  299. package/dist/utils/logger.d.ts +27 -0
  300. package/dist/utils/logger.d.ts.map +1 -0
  301. package/dist/utils/logger.js +45 -0
  302. package/dist/utils/logger.js.map +1 -0
  303. package/docs/.gitbook/assets/image (1).png +0 -0
  304. package/docs/.gitbook/assets/image (2).png +0 -0
  305. package/docs/.gitbook/assets/image (3).png +0 -0
  306. package/docs/.gitbook/assets/image (4).png +0 -0
  307. package/docs/.gitbook/assets/image (5).png +0 -0
  308. package/docs/.gitbook/assets/image (6).png +0 -0
  309. package/docs/.gitbook/assets/image.png +0 -0
  310. package/docs/README.md +57 -0
  311. package/docs/SUMMARY.md +34 -0
  312. package/docs/cas-dusages.md +69 -0
  313. package/docs/cli/README.md +65 -0
  314. package/docs/concepts-cles.md +50 -0
  315. package/docs/core/architecture.md +87 -0
  316. package/docs/core/benchmark.md +59 -0
  317. package/docs/core/checkpoint.md +72 -0
  318. package/docs/core/documentation.md +55 -0
  319. package/docs/core/graphcontroller.md +63 -0
  320. package/docs/core/graphflow.md +137 -0
  321. package/docs/core/introduction.md +41 -0
  322. package/docs/core/les-evenements.md +95 -0
  323. package/docs/modules/agenda/README.md +63 -0
  324. package/docs/modules/agenda/interface-iagenda.md +170 -0
  325. package/docs/modules/agenda/les-adaptateurs/README.md +237 -0
  326. package/docs/modules/agenda/les-adaptateurs/nodecronadapter.md +91 -0
  327. package/docs/modules/introduction.md +55 -0
  328. package/docs/modules/les-adaptateurs.md +52 -0
  329. package/docs/modules/memoire/README.md +68 -0
  330. package/docs/modules/memoire/interface-imemory.md +183 -0
  331. package/docs/modules/memoire/les-adaptateurs/README.md +209 -0
  332. package/docs/modules/memoire/les-adaptateurs/inmemoryadapter.md +110 -0
  333. package/docs/modules/memoire/les-adaptateurs/meilisearchadapter.md +147 -0
  334. package/docs/modules/memoire/les-adaptateurs/redisadapter.md +212 -0
  335. package/docs/modules/nlp/README.md +44 -0
  336. package/docs/philosophie.md +51 -0
  337. package/docs/tutoriels/ajouter-des-conditions.md +150 -0
  338. package/docs/tutoriels/branching.md +194 -0
  339. package/docs/tutoriels/checkpoint-usage.md +99 -0
  340. package/docs/tutoriels/creer-agent-onchain.md +1041 -0
  341. package/docs/tutoriels/creer-un-agent.md +108 -0
  342. package/docs/tutoriels/creer-un-graphe-simple.md +92 -0
  343. package/docs/tutoriels/gerer-les-erreurs.md +124 -0
  344. package/docs/tutoriels/pour-commencer.md +73 -0
  345. package/docs/tutoriels/retry.md +166 -0
  346. package/execution/adapters/in-memory-checkpoint.ts +35 -0
  347. package/execution/compiler.ts +47 -0
  348. package/execution/controller.ts +84 -0
  349. package/execution/event-manager.ts +331 -0
  350. package/execution/index.ts +800 -0
  351. package/execution/logger.ts +70 -0
  352. package/execution/node.ts +315 -0
  353. package/execution/observer.ts +192 -0
  354. package/execution/planner.ts +40 -0
  355. package/execution/reducer.ts +73 -0
  356. package/execution/registry.ts +86 -0
  357. package/execution/send-api.ts +58 -0
  358. package/execution/types.parallel.ts +81 -0
  359. package/execution/visualizer.ts +158 -0
  360. package/index.ts +55 -465
  361. package/interfaces/index.ts +597 -0
  362. package/modules/agenda/adapters/node-cron/index.ts +25 -0
  363. package/modules/agenda/index.ts +146 -0
  364. package/modules/cli/index.ts +580 -0
  365. package/modules/embedding/adapters/ai/index.ts +42 -0
  366. package/modules/embedding/index.ts +45 -0
  367. package/modules/nlp/engine.ts +324 -0
  368. package/modules/nlp/index.ts +45 -0
  369. package/package.json +81 -9
  370. package/persistence/index.ts +27 -0
  371. package/persistence/neo4j/driver.ts +34 -0
  372. package/persistence/neo4j/entity-store.ts +141 -0
  373. package/persistence/neo4j/execution-tracer.ts +194 -0
  374. package/persistence/neo4j/memory-adapter.ts +281 -0
  375. package/persistence/neo4j/petri-checkpoint-adapter.ts +153 -0
  376. package/pipeline/agent-pipeline.ts +426 -0
  377. package/routing/checkpoint-adapter.ts +79 -0
  378. package/routing/documentation-generator.ts +358 -0
  379. package/routing/index.ts +459 -0
  380. package/routing/intent-classifier.ts +360 -0
  381. package/routing/matrix.ts +138 -0
  382. package/routing/orchestrator.ts +498 -0
  383. package/routing/patterns/data-extraction.json +79 -0
  384. package/routing/patterns/human-approval.json +64 -0
  385. package/routing/patterns/rag-search.json +68 -0
  386. package/routing/postgres-checkpoint-adapter.ts +172 -0
  387. package/routing/redis-checkpoint-adapter.ts +187 -0
  388. package/routing/types.ts +59 -0
  389. package/routing/web-server.ts +260 -0
  390. package/scripts/generate-petri-docs.ts +70 -0
  391. package/scripts/get-gmail-token.js +65 -0
  392. package/scripts/get-gmail-token.ts +65 -0
  393. package/test/agent/agent.test.ts +92 -0
  394. package/test/agent/clone.test.ts +143 -0
  395. package/test/agent/cognitive-handler.test.ts +78 -0
  396. package/test/agent/entity-store.test.ts +80 -0
  397. package/test/agent/generic-executor.test.ts +230 -0
  398. package/test/agent/handoff.test.ts +163 -0
  399. package/test/agent/llm-factory.test.ts +40 -0
  400. package/test/agent/orchestrator.test.ts +156 -0
  401. package/test/agent/registry.test.ts +97 -0
  402. package/test/agent/tools.test.ts +267 -0
  403. package/test/execution/checkpoint.test.ts +811 -0
  404. package/test/execution/controller.test.ts +236 -0
  405. package/test/execution/event-manager.test.ts +118 -0
  406. package/test/execution/index.test.ts +690 -0
  407. package/test/execution/node.test.ts +464 -0
  408. package/test/execution/observer.test.ts +393 -0
  409. package/test/execution/parallel.test.ts +135 -0
  410. package/test/execution/plan-llm-integration.test.ts +290 -0
  411. package/test/execution/plan-real-onchain.test.ts +226 -0
  412. package/test/execution/send-api.test.ts +121 -0
  413. package/test/modules/agenda/node-cron.test.ts +307 -0
  414. package/test/modules/cli/index.test.ts +125 -0
  415. package/test/persistence/neo4j-execution-tracer.test.ts +96 -0
  416. package/test/persistence/neo4j-memory-adapter.test.ts +107 -0
  417. package/test/persistence/neo4j-petri-checkpoint.test.ts +89 -0
  418. package/test/pipeline/agent-pipeline.test.ts +118 -0
  419. package/test/routing/checkpoint-persistence.test.ts +58 -0
  420. package/test/routing/documentation-generator.test.ts +76 -0
  421. package/test/routing/integration.test.ts +261 -0
  422. package/test/routing/intent-classifier.test.ts +102 -0
  423. package/test/routing/petri.test.ts +156 -0
  424. package/test/routing/real-llm.test.ts +260 -0
  425. package/test-petri-features.ts +218 -0
  426. package/test-pipeline-api.ts +163 -0
  427. package/tsconfig.json +30 -108
  428. package/types/agent.ts +296 -0
  429. package/types/index.ts +387 -0
  430. package/utils/generate-action-schema.ts +47 -0
  431. package/utils/header-builder.ts +40 -0
  432. package/utils/logger.ts +40 -0
  433. package/package copy.json +0 -21
  434. package/types.ts +0 -62
  435. package/utils/executor.ts +0 -42
@@ -0,0 +1,237 @@
1
+ ---
2
+ description: >-
3
+ Un adaptateur d’Agenda est un composant permettant de gérer la persistance et
4
+ la récupération des tâches planifiées selon le moteur de stockage sous-jacent.
5
+ ---
6
+
7
+ # Les adaptateurs
8
+
9
+ ### **Qu’est-ce qu’un adaptateur Agenda ?**
10
+
11
+ Un **adaptateur Agenda** est un composant permettant de gérer **la planification et la persistance des tâches planifiées** en fonction du moteur sous-jacent.
12
+
13
+ Il encapsule :
14
+
15
+ * **Le moteur d'exécution des tâches** (**ICronService**) : responsable du déclenchement effectif des tâches.
16
+ * **Le moteur de stockage des tâches** (**IMemoryAdapter**) : garantit la persistance et la récupération des tâches planifiées.
17
+
18
+ Grâce aux adaptateurs, **l’agent peut changer de moteur sans modifier sa logique métier**.
19
+
20
+ ***
21
+
22
+ ### **Fonctionnement des adaptateurs Agenda**
23
+
24
+ Tous les adaptateurs doivent implémenter **deux interfaces clés** :
25
+
26
+ #### **ICronService : Gestion de l'exécution des tâches**
27
+
28
+ ```ts
29
+ /**
30
+ * Interface pour le service de planification des tâches
31
+ */
32
+ export interface ICronService {
33
+ /**
34
+ * Planifie une tâche en utilisant une expression cron.
35
+ * @param {string} expression - Expression cron définissant l’exécution
36
+ * @param {Function} callback - Fonction exécutée lors du déclenchement
37
+ * @returns {ICronJob} Interface de gestion de la tâche
38
+ */
39
+ schedule(expression: string, callback: () => void): ICronJob;
40
+ }
41
+
42
+ /**
43
+ * Interface pour contrôler une tâche planifiée
44
+ */
45
+ export interface ICronJob {
46
+ /**
47
+ * Démarre la tâche planifiée
48
+ */
49
+ start(): void;
50
+
51
+ /**
52
+ * Arrête la tâche planifiée
53
+ */
54
+ stop(): void;
55
+ }
56
+ ```
57
+
58
+ #### **IMemoryAdapter : Persistance des tâches planifiées**
59
+
60
+ ```ts
61
+ /**
62
+ * Interface pour la gestion de la persistance des tâches d'Agenda
63
+ */
64
+ export interface IMemoryAdapter {
65
+ init(roomId?: string): Promise<void>;
66
+
67
+ saveJob(id: string, job: ICronJob): Promise<void>;
68
+ saveRequest(id: string, request: ScheduledRequest): Promise<void>;
69
+
70
+ getJob(id: string): Promise<ICronJob | undefined>;
71
+ getRequest(id: string): Promise<ScheduledRequest | undefined>;
72
+
73
+ deleteJob(id: string): Promise<void>;
74
+ deleteRequest(id: string): Promise<void>;
75
+
76
+ getAllRequests(): Promise<ScheduledRequest[]>;
77
+ clear(): Promise<void>;
78
+ }
79
+ ```
80
+
81
+ Ainsi, **les adaptateurs permettent d'intégrer plusieurs moteurs sans modifier l'agent.**
82
+
83
+ ***
84
+
85
+ ### **Adaptateurs intégrés (par défaut)**
86
+
87
+ Le framework propose plusieurs adaptateurs intégrés.
88
+
89
+ #### **1. NodeCronAdapter (exécution des tâches)**
90
+
91
+ * Basé sur la bibliothèque **node-cron**.
92
+ * Idéal pour **exécuter des tâches en local sans dépendance externe**.
93
+
94
+ ```ts
95
+ import cron from "node-cron";
96
+ import { ICronJob, ICronService } from "../../../../interfaces";
97
+
98
+ /**
99
+ * @module NodeCronAdapter
100
+ * @description Adaptateur utilisant node-cron pour exécuter des tâches planifiées.
101
+ */
102
+ export class NodeCronAdapter implements ICronService {
103
+ schedule(expression: string, callback: () => void): ICronJob {
104
+ const job = cron.schedule(expression, callback);
105
+
106
+ return {
107
+ start: () => job.start(),
108
+ stop: () => job.stop(),
109
+ };
110
+ }
111
+ }
112
+ ```
113
+
114
+ ***
115
+
116
+ #### **2. InMemoryAdapter (stockage en mémoire)**
117
+
118
+ * Stocke les tâches planifiées **en RAM** via une `Map`.
119
+ * **Non persistant** : les tâches sont perdues après un redémarrage.
120
+ * Idéal pour **les tests et le prototypage**.
121
+
122
+ ```ts
123
+ import { IMemoryAdapter } from "../../../../interfaces";
124
+ import { ScheduledRequest } from "../../../../types";
125
+
126
+ /**
127
+ * @module InMemoryAdapter
128
+ * @description Adaptateur mémoire stockant les tâches planifiées en RAM.
129
+ */
130
+ export class InMemoryAdapter implements IMemoryAdapter {
131
+ private storage: Map<string, ScheduledRequest> = new Map();
132
+
133
+ async saveRequest(id: string, request: ScheduledRequest): Promise<void> {
134
+ this.storage.set(id, request);
135
+ }
136
+
137
+ async getRequest(id: string): Promise<ScheduledRequest | undefined> {
138
+ return this.storage.get(id);
139
+ }
140
+
141
+ async deleteRequest(id: string): Promise<void> {
142
+ this.storage.delete(id);
143
+ }
144
+
145
+ async getAllRequests(): Promise<ScheduledRequest[]> {
146
+ return Array.from(this.storage.values());
147
+ }
148
+
149
+ async clear(): Promise<void> {
150
+ this.storage.clear();
151
+ }
152
+ }
153
+ ```
154
+
155
+ ***
156
+
157
+ ### **Créer un nouvel adaptateur : Exemple avec Redis**
158
+
159
+ Si on veut **persister les tâches avec Redis**, on peut créer un nouvel adaptateur.
160
+
161
+ #### **1. Installer la dépendance**
162
+
163
+ ```sh
164
+ npm install ioredis
165
+ ```
166
+
167
+ #### **2. Implémenter l’adaptateur**
168
+
169
+ ```ts
170
+ import { IMemoryAdapter } from "../../../../interfaces";
171
+ import Redis from "ioredis";
172
+ import { ScheduledRequest } from "../../../../types";
173
+
174
+ /**
175
+ * @module RedisAdapter
176
+ * @description Adaptateur stockant les tâches planifiées dans Redis.
177
+ */
178
+ export class RedisAdapter implements IMemoryAdapter {
179
+ private redis: Redis;
180
+
181
+ constructor(redisUrl: string) {
182
+ this.redis = new Redis(redisUrl);
183
+ }
184
+
185
+ async saveRequest(id: string, request: ScheduledRequest): Promise<void> {
186
+ await this.redis.set(id, JSON.stringify(request));
187
+ }
188
+
189
+ async getRequest(id: string): Promise<ScheduledRequest | undefined> {
190
+ const data = await this.redis.get(id);
191
+ return data ? JSON.parse(data) : undefined;
192
+ }
193
+
194
+ async deleteRequest(id: string): Promise<void> {
195
+ await this.redis.del(id);
196
+ }
197
+
198
+ async getAllRequests(): Promise<ScheduledRequest[]> {
199
+ const keys = await this.redis.keys("*");
200
+ const requests = await Promise.all(keys.map((key) => this.getRequest(key)));
201
+ return requests.filter((req) => req !== undefined) as ScheduledRequest[];
202
+ }
203
+
204
+ async clear(): Promise<void> {
205
+ await this.redis.flushall();
206
+ }
207
+ }
208
+ ```
209
+
210
+ ***
211
+
212
+ ### **Intégrer un adaptateur dans l’Agenda**
213
+
214
+ Une fois l’adaptateur Redis implémenté, on peut l’intégrer **dans le module Agenda**.
215
+
216
+ ```ts
217
+ import { Agenda } from "../modules/agenda";
218
+ import { NodeCronAdapter } from "../modules/agenda/adapters/cron/node-cron";
219
+ import { RedisAdapter } from "../modules/memory/adapters/redis";
220
+
221
+ // Initialisation avec Redis et NodeCron
222
+ const cronService = new NodeCronAdapter();
223
+ const jobStorage = new RedisAdapter("redis://localhost:6379");
224
+ const agenda = new Agenda(cronService, jobStorage);
225
+
226
+ async function run() {
227
+ await agenda.scheduleRequest({
228
+ originalRequest: "Générer un rapport",
229
+ cronExpression: "0 9 * * *",
230
+ });
231
+
232
+ const tasks = await agenda.getScheduledRequests();
233
+ console.log("Tâches planifiées :", tasks);
234
+ }
235
+
236
+ run();
237
+ ```
@@ -0,0 +1,91 @@
1
+ ---
2
+ description: >-
3
+ Le NodeCronAdapter est utilise bibliothèque node-cron pour exécuter des tâches
4
+ à intervalles réguliers.
5
+ ---
6
+
7
+ # NodeCronAdapter
8
+
9
+ `NodeCronAdapter` est une implémentation de l’interface `ICronService` basée sur **node-cron**. Il permet d’exécuter des tâches planifiées selon des expressions cron standards. Cet adaptateur est conçu pour gérer des actions récurrentes sans nécessiter de persistance ni de gestion avancée des exécutions.
10
+
11
+ Ce type d’adaptateur est particulièrement utile pour les tâches légères et autonomes, telles que la mise à jour de caches, l’exécution périodique de requêtes ou la maintenance automatique.
12
+
13
+ ***
14
+
15
+ ### **Spécificités techniques de NodeCronAdapter**
16
+
17
+ **Encapsulation de node-cron**
18
+
19
+ L’adaptateur encapsule `node-cron` en exposant une interface conforme à `ICronService`. Il simplifie l’utilisation en garantissant que chaque tâche planifiée retourne un objet contrôlable avec `start()` et `stop()`.
20
+
21
+ ```ts
22
+ schedule(expression: string, callback: () => void): ICronJob {
23
+ const job = cron.schedule(expression, callback);
24
+ return {
25
+ start: () => job.start(),
26
+ stop: () => job.stop(),
27
+ };
28
+ }
29
+ ```
30
+
31
+ Cela permet d’abstraire `node-cron` et de **remplacer l’implémentation sous-jacente** si nécessaire, sans modifier le reste de l’application.
32
+
33
+ ***
34
+
35
+ ## **Démarrage et arrêt des tâches**
36
+
37
+ Lorsqu’un job est programmé, il est créé en **état stoppé** par défaut, puis activé via `start()`. Cela permet d’éviter des exécutions accidentelles avant une configuration complète.
38
+
39
+ ```ts
40
+ const job = cron.schedule(expression, callback);
41
+ job.stop(); // S'assure que le job ne démarre pas immédiatement
42
+ ```
43
+
44
+ L’arrêt d’un job via `stop()` suspend son exécution jusqu’à un nouvel appel à `start()`. Cela permet de **désactiver temporairement des tâches** sans les recréer.
45
+
46
+ ***
47
+
48
+ #### **Limitations et considérations**
49
+
50
+ #### **Dépendance à node-cron**
51
+
52
+ L’adaptateur repose entièrement sur **node-cron**, qui fonctionne uniquement sous **Node.js**. Il ne peut pas être utilisé directement **dans un navigateur ou un environnement sans accès au runtime Node.js**.
53
+
54
+ #### **Planification limitée aux expressions cron**
55
+
56
+ NodeCronAdapter **ne gère que les expressions cron classiques**. Contrairement à d’autres gestionnaires comme **Agenda.js ou BullMQ**, il ne prend pas en charge :
57
+
58
+ * La persistance des tâches.
59
+ * La gestion des échecs avec retries.
60
+ * Le chaînage dynamique d’exécutions.
61
+
62
+ Si ces fonctionnalités sont nécessaires, un gestionnaire plus avancé peut être requis.
63
+
64
+ #### **Non persistant**
65
+
66
+ Les tâches planifiées existent uniquement **en mémoire** et **sont perdues en cas de redémarrage du serveur**.\
67
+ Si une **reprise après redémarrage** est nécessaire, les tâches doivent être **stockées en base de données** et **rechargées** au démarrage.
68
+
69
+ **Solution** : Stocker les jobs dans une base externe (Redis, SQLite) et les restaurer au lancement de l’application.
70
+
71
+ #### **Précision limitée**
72
+
73
+ Node-cron **ne garantit pas une exécution milliseconde-précise**.
74
+
75
+ * Il repose sur **l’horloge système**, donc son exécution peut être affectée par **la charge CPU**.
76
+ * Dans un environnement **serverless** (AWS Lambda, Cloud Functions), des retards peuvent apparaître si l’instance est mise en veille.
77
+
78
+ Pour des tâches nécessitant **une exécution strictement précise**, une alternative comme **Systemd Timers, Quartz Scheduler ou Celery** peut être plus adaptée.
79
+
80
+ ***
81
+
82
+ ### **Cas d’usage adaptés**
83
+
84
+ **`NodeCronAdapter`** est une solution efficace pour :&#x20;
85
+
86
+ * **Exécuter des tâches légères** sans persistance.
87
+ * **Rafraîchir des caches** périodiquement.
88
+ * **Automatiser des mises à jour de données**.
89
+ * **Gérer des workflows simples** nécessitant des intervalles définis.
90
+
91
+ Cependant, pour une gestion avancée (reprise après crash, files d’attente, monitoring), des solutions comme **BullMQ, Agenda.js ou Redis-based task queues** sont recommandées.
@@ -0,0 +1,55 @@
1
+ # Modular Extensions
2
+
3
+ `@ai.ntellect/core` is built on a **Pluggable Architecture**. While the core engine handles GraphFlows and Petri Nets, specialized capabilities are provided via **Modules**.
4
+
5
+ ## 🧩 What is a Module?
6
+
7
+ A module is an optional, independent component that extends the framework's capabilities. Instead of bloating the core engine, we use a **Service-Adapter pattern** to ensure that modules are:
8
+ - **Swappable**: Change your database or NLP provider without touching your workflow logic.
9
+ - **Optional**: Only include the modules your specific agent needs.
10
+ - **Testable**: Each module has a single responsibility and a clean interface.
11
+
12
+ ---
13
+
14
+ ## 🛠️ Available Modules
15
+
16
+ ### 1. Memory System
17
+ Handles the persistence and retrieval of data. It's the "long-term brain" of your agent.
18
+ - **Core Interface**: `IMemoryAdapter`
19
+ - **Adapters**:
20
+ - `InMemoryAdapter`: Fast, volatile storage for testing.
21
+ - `RedisAdapter`: Distributed, high-performance persistence.
22
+ - `MeilisearchAdapter`: Full-text and semantic search for RAG.
23
+
24
+ ### 2. Agenda (Scheduling)
25
+ Adds a temporal dimension to your agents. Instead of just reacting to users, your agent can **act on its own**.
26
+ - **Core Interface**: `ICronService`
27
+ - **Capabilities**:
28
+ - Schedule a `GraphFlow` to run every Monday at 9 AM.
29
+ - Trigger a "follow-up" node 24 hours after a user interaction.
30
+ - Manage recurring maintenance tasks.
31
+
32
+ ### 3. NLP Engine
33
+ Provides lightweight natural language processing for tasks that don't require a full LLM call (saving latency and cost).
34
+ - **Capabilities**: Sentiment analysis, entity extraction, and keyword classification.
35
+ - **Integration**: Used as a standard `GraphNode` within a workflow.
36
+
37
+ ---
38
+
39
+ ## 📐 Design Principles
40
+
41
+ ### Dependency Inversion (IoC)
42
+ Modules never depend on a specific technology. They depend on **Interfaces**.
43
+ For example, the `Memory` module doesn't know about Redis; it knows about `IMemoryAdapter`. You inject the adapter at runtime:
44
+
45
+ ```typescript
46
+ const memory = new Memory(new RedisAdapter({ url: "redis://localhost:6379" }));
47
+ ```
48
+
49
+ ### Synergy with GraphFlow
50
+ Modules are designed to be called from within `GraphNodes`.
51
+ - A node can save a result to **Memory**.
52
+ - A node can schedule a future run via the **Agenda**.
53
+ - A node can classify a string using the **NLP** module.
54
+
55
+ **This creates a powerful loop: LLM classifies $\rightarrow$ GraphFlow executes $\rightarrow$ Modules persist/schedule.**
@@ -0,0 +1,52 @@
1
+ ---
2
+ description: Dans @ai.ntellect/core, chaque module dispose d'adaptateurs par défaut.
3
+ ---
4
+
5
+ # Les adaptateurs
6
+
7
+ Les modules de `@ai.ntellect/core` proposent des **adaptateurs par défaut** qui couvrent les besoins les plus fréquents. Mais l’architecture du framework permet également de créer et brancher des adaptateurs personnalisés, implémentés en dehors du code source principal.
8
+
9
+ ### Pourquoi des adaptateurs
10
+
11
+ Le concept d’« adaptateur » sert à séparer la **logique métier** (la logique du module lui-même) de l’**implémentation technique** (accès à une base de données, intégration avec un service de planification, etc.). Un module définit une **interface** (ex. `IMemoryAdapter`, `ICronService`), et chaque adaptateur s’engage à respecter cette interface. Ainsi, on peut :
12
+
13
+ • Basculer d’un backend à un autre (ex. passer de « in-memory » à « redis ») sans réécrire toute l’application.\
14
+ • Développer un adaptateur pour un service ou une base particulière (cloud SaaS, interne à l’entreprise) sans forker ou modifier le cœur du module.
15
+
16
+ ### Adaptateurs par défaut
17
+
18
+ Les adaptateurs par défaut sont inclus dans le dossier `adapters/` de chaque module. Parmi les exemples courants :
19
+
20
+ • In-memory (pratique pour les tests et les prototypes)\
21
+ • node-cron (permet de planifier des tâches en local)\
22
+ • redis ou meilisearch (assure la persistance pour un module Memory)
23
+
24
+ Ces adaptateurs offrent une solution standard prête à l’emploi, et servent aussi de référence pour comprendre comment en créer d’autres.
25
+
26
+ ### Création d’un adaptateur externe
27
+
28
+ Si aucun adaptateur par défaut ne répond aux besoins d’une application, il est possible de développer un adaptateur externe dans un projet distinct.&#x20;
29
+
30
+ L’essentiel est de se conformer à l’interface attendue par le module.&#x20;
31
+
32
+ Par exemple, un module Memory attend un `IMemoryAdapter` qui définisse les méthodes de création, lecture, suppression, etc.&#x20;
33
+
34
+ Une fois l’adaptateur codé :
35
+
36
+ • Il peut être testé et validé de façon indépendante (tests unitaires ciblés).\
37
+ • Il est ensuite injecté au module (par exemple, `new Memory(myCustomAdapter)`).\
38
+ • L’ensemble du code client continuera de fonctionner normalement, car il dépend de l’interface, pas de l’implémentation sous-jacente.
39
+
40
+ ### Intérêt de la modularité
41
+
42
+ Grâce à la logique d’adaptateurs, chaque module demeure décorrélé de la technologie employée : un nœud GraphFlow ou un agent IA peut appeler le module Memory ou l’Agenda sans connaître les détails du backend.&#x20;
43
+
44
+ Les bénéfices principaux sont :
45
+
46
+ • Flexibilité : on peut démarrer en mode simple (in-memory) et évoluer vers une base plus robuste (redis, SaaS externe) quand le besoin se fait sentir.\
47
+ • Maintenabilité : si un adaptateur est défaillant ou nécessite une optimisation, on corrige cette partie sans toucher à la logique métier du module.\
48
+ • Personnalisation : toute entreprise ayant un service interne (base de données, moteur d’indexation, service de scheduling) peut l’intégrer en codant un adaptateur conforme à l’interface requise.
49
+
50
+ ### En résumé
51
+
52
+ Les adaptateurs, qu’ils soient **par défaut** (inclus dans le framework) ou **externes** (développés spécifiquement pour un cas d’usage), offrent une **souplesse** et une **extensibilité** essentielles. En respectant l’interface imposée par le module, il devient possible de changer ou d’ajouter de nouvelles implémentations sans affecter le reste de l’application, ni le cœur du framework. C’est là un élément clé de la philosophie modulaire de `@ai.ntellect/core`.
@@ -0,0 +1,68 @@
1
+ # Module Mémoire
2
+
3
+ Persistance de données pour les agents.
4
+
5
+ ## Utilisation
6
+
7
+ ```typescript
8
+ import { Memory } from "@ai.ntellect/core";
9
+ import { InMemoryAdapter } from "@ai.ntellect/core/modules/memory/adapters/in-memory";
10
+
11
+ const memory = new Memory(new InMemoryAdapter());
12
+ await memory.init();
13
+
14
+ // Sauvegarder
15
+ await memory.save("my_key", { data: "hello" });
16
+
17
+ // Récupérer
18
+ const result = await memory.recall("my_key");
19
+
20
+ // Supprimer
21
+ await memory.delete("my_key");
22
+ ```
23
+
24
+ ## Adaptateurs
25
+
26
+ | Adaptateur | Description |
27
+ |------------|-------------|
28
+ | `InMemoryAdapter` | Stockage en mémoire (volatile) |
29
+ | `RedisAdapter` | Redis pour persistance |
30
+ | `MeilisearchAdapter` | Recherche vectorielle |
31
+
32
+ ## Redis
33
+
34
+ ```typescript
35
+ import { RedisAdapter } from "@ai.ntellect/core/modules/memory/adapters/redis";
36
+
37
+ const memory = new Memory(
38
+ new RedisAdapter({
39
+ host: "localhost",
40
+ port: 6379,
41
+ })
42
+ );
43
+ await memory.init();
44
+ ```
45
+
46
+ ## Meilisearch
47
+
48
+ ```typescript
49
+ import { MeilisearchAdapter } from "@ai.ntellect/core/modules/memory/adapters/meilisearch";
50
+
51
+ const memory = new Memory(
52
+ new MeilisearchAdapter({
53
+ apiKey: "your_key",
54
+ host: "http://localhost:7700",
55
+ })
56
+ );
57
+ await memory.init();
58
+ ```
59
+
60
+ ## API
61
+
62
+ ```typescript
63
+ memory.init(): Promise<void>
64
+ memory.save(key: string, data: any): Promise<void>
65
+ memory.recall(key: string): Promise<any>
66
+ memory.delete(key: string): Promise<void>
67
+ memory.clear(): Promise<void>
68
+ ```
@@ -0,0 +1,183 @@
1
+ ---
2
+ description: >-
3
+ L'interface IMemory définit une abstraction pour stocker, rechercher et gérer
4
+ des entrées mémorielles
5
+ ---
6
+
7
+ # Interface IMemory
8
+
9
+ L'interface `IMemory` définit une abstraction pour **stocker, rechercher et gérer des entrées mémorielles** dans un environnement où un agent doit retenir des informations sur le long terme ou pour des sessions temporaires.
10
+
11
+ Ce module suit une **approche modulaire et agnostique** du backend, permettant d’être implémenté avec différents moteurs de stockage :
12
+
13
+ * **Stockage en mémoire** (`InMemoryAdapter`)
14
+ * **Base de données** (`MeilisearchAdapter`, `RedisAdapter`, `PostgreSQLAdapter`)
15
+ * **Stockage distribué** (`VectorDBAdapter`, `PineconeAdapter`)
16
+
17
+ ***
18
+
19
+ ### **Objectif de l'interface**
20
+
21
+ L'interface `IMemory` doit permettre :
22
+
23
+ * **Le stockage structuré et sécurisé d'informations** persistantes ou temporaires.
24
+ * **Une récupération rapide** avec support des **requêtes sémantiques** (recherche par similarité).
25
+ * **La gestion dynamique du cycle de vie des mémoires** (création, expiration, suppression).
26
+ * **L’adaptabilité à différents backends**, grâce aux `IMemoryAdapter` interchangeables.
27
+
28
+ ***
29
+
30
+ ### **Définition de l’interface**
31
+
32
+ ```typescript
33
+ /**
34
+ * Interface pour la gestion de la mémoire d'un agent
35
+ */
36
+ export interface IMemory {
37
+ /**
38
+ * Initialise le service mémoire avec les configurations requises
39
+ * @returns {Promise<void>}
40
+ */
41
+ init(): Promise<void>;
42
+
43
+ /**
44
+ * Crée une nouvelle entrée mémoire.
45
+ * @param {MemoryInput} input - Données de la mémoire à enregistrer.
46
+ * @returns {Promise<MemoryEntry | undefined>} Retourne l’entrée créée, ou `undefined` en cas d’échec.
47
+ */
48
+ createMemory(input: MemoryInput): Promise<MemoryEntry | undefined>;
49
+
50
+ /**
51
+ * Récupère une entrée mémoire par son identifiant.
52
+ * @param {string} id - Identifiant unique de la mémoire.
53
+ * @param {string} roomId - Identifiant de la session ou du contexte.
54
+ * @returns {Promise<MemoryEntry | null>} Retourne l'entrée mémoire si trouvée, sinon `null`.
55
+ */
56
+ getMemoryById(id: string, roomId: string): Promise<MemoryEntry | null>;
57
+
58
+ /**
59
+ * Effectue une recherche d’entrées mémoire selon une requête textuelle.
60
+ * @param {string} query - Texte de la requête.
61
+ * @param {MemorySearchOptions} options - Options de recherche.
62
+ * @returns {Promise<MemoryEntry[]>} Retourne une liste d'entrées mémorielles correspondantes.
63
+ */
64
+ searchMemory(
65
+ query: string,
66
+ options: MemorySearchOptions
67
+ ): Promise<MemoryEntry[]>;
68
+
69
+ /**
70
+ * Récupère toutes les mémoires associées à un `roomId`.
71
+ * @param {string} roomId - Identifiant de la session.
72
+ * @returns {Promise<MemoryEntry[]>} Liste des entrées mémorielles.
73
+ */
74
+ getAllMemories(roomId: string): Promise<MemoryEntry[]>;
75
+
76
+ /**
77
+ * Supprime une entrée mémoire spécifique.
78
+ * @param {string} id - Identifiant de la mémoire.
79
+ * @param {string} roomId - Identifiant de la session.
80
+ * @returns {Promise<void>}
81
+ */
82
+ deleteMemoryById(id: string, roomId: string): Promise<void>;
83
+
84
+ /**
85
+ * Supprime toutes les entrées mémorielles d'un `roomId`.
86
+ * @param {string} roomId - Identifiant de la session.
87
+ * @returns {Promise<void>}
88
+ */
89
+ clearMemories(roomId: string): Promise<void>;
90
+ }
91
+ ```
92
+
93
+ ***
94
+
95
+ ### **Interfaces associées**
96
+
97
+ #### **1. `MemoryInput` : Données pour une nouvelle entrée mémoire**
98
+
99
+ Lorsqu’une nouvelle mémoire est créée, elle doit suivre une structure bien définie.
100
+
101
+ ```typescript
102
+ /**
103
+ * Données nécessaires pour créer une mémoire
104
+ */
105
+ export interface MemoryInput {
106
+ /** Identifiant unique de la mémoire (optionnel, généré si absent) */
107
+ id?: string;
108
+ /** Contenu textuel de la mémoire */
109
+ data: string;
110
+ /** Identifiant de la session ou du contexte */
111
+ roomId: string;
112
+ /** (Optionnel) Vecteur d’embedding pour recherche sémantique */
113
+ embedding?: number[];
114
+ /** Date d’expiration (TTL) */
115
+ expiresAt?: Date;
116
+ }
117
+ ```
118
+
119
+ #### **2. `MemoryEntry` : Représentation d’une mémoire stockée**
120
+
121
+ Une mémoire active stockée doit être représentée sous cette forme.
122
+
123
+ ```typescript
124
+ /**
125
+ * Représentation d'une mémoire stockée
126
+ */
127
+ export interface MemoryEntry extends MemoryInput {
128
+ /** Identifiant unique attribué à la mémoire */
129
+ id: string;
130
+ /** Date de création de la mémoire */
131
+ createdAt: Date;
132
+ }
133
+ ```
134
+
135
+ #### **3. `MemorySearchOptions` : Options de recherche avancées**
136
+
137
+ La recherche mémoire peut inclure des critères supplémentaires pour affiner les résultats.
138
+
139
+ ```typescript
140
+ /**
141
+ * Options de recherche pour requêtes mémoire
142
+ */
143
+ export interface MemorySearchOptions {
144
+ /** Identifiant du contexte de recherche */
145
+ roomId: string;
146
+ /** Nombre maximal de résultats */
147
+ limit?: number;
148
+ /** Score minimal de similarité si une recherche sémantique est utilisée */
149
+ minSimilarity?: number;
150
+ }
151
+ ```
152
+
153
+ ***
154
+
155
+ ### **Pourquoi cette interface ?**
156
+
157
+ L’interface `IMemory` permet une **gestion optimisée et évolutive** des données mémoire :
158
+
159
+ 1. **Abstraction complète du moteur de stockage**
160
+ * Permet d’implémenter `IMemory` avec **n’importe quel backend** (`Redis`, `PostgreSQL`, `VectorDB`, etc.).
161
+ * Découple la **logique métier** de la **logique de persistance**.
162
+ 2. **Support des recherches sémantiques**
163
+ * Les données peuvent être indexées sous forme de **vecteurs** (`embedding`).
164
+ * Permet des recherches avancées **par similarité** et non uniquement par mots-clés.
165
+ 3. **Modèle flexible et dynamique**
166
+ * Gestion **multi-sessions (`roomId`)** pour segmenter la mémoire selon les contextes.
167
+ * Prise en charge d’un **TTL** (`expiresAt`) pour éviter l’accumulation inutile de données.
168
+ 4. **Extensibilité via des adaptateurs (`IMemoryAdapter`)**
169
+ * Compatible avec **des moteurs de stockage externes** (`Meilisearch`, `Pinecone`, etc.).
170
+ * Possibilité d’intégrer **plusieurs sources de mémoire** (ex: mémoire immédiate + historique long-terme).
171
+
172
+ ***
173
+
174
+ ### **Cas d’usage**
175
+
176
+ L’interface `IMemory` peut être utilisée dans plusieurs scénarios :
177
+
178
+ | **Cas d'usage** | **Exemple** |
179
+ | --------------------------------- | ---------------------------------------------------------------- |
180
+ | Stockage d’historique utilisateur | Mémorisation des interactions d’un chatbot avec un utilisateur. |
181
+ | Recherche sémantique | Trouver des documents ou réponses similaires à une requête. |
182
+ | Maintien du contexte | Conserver un état conversationnel pour un agent autonome. |
183
+ | Mémoire dynamique | Stocker temporairement des informations utiles dans un `roomId`. |