@ai.ntellect/core 0.8.3 → 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 (460) hide show
  1. package/.mocharc.json +2 -1
  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 +413 -199
  7. package/agent/agent-workflow.ts +569 -0
  8. package/agent/agent.ts +183 -0
  9. package/{modules/agent → agent}/base/executor.ts +11 -8
  10. package/{modules/agent → agent}/base/index.ts +2 -14
  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/{modules/agent → agent}/prompt-builder.ts +1 -1
  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/{modules/agent → agent}/base/executor.d.ts +3 -3
  44. package/dist/agent/base/executor.d.ts.map +1 -0
  45. package/dist/{modules/agent → agent}/base/executor.js +8 -5
  46. package/dist/agent/base/executor.js.map +1 -0
  47. package/dist/{modules/agent → agent}/base/index.d.ts +1 -1
  48. package/dist/agent/base/index.d.ts.map +1 -0
  49. package/dist/{modules/agent → agent}/base/index.js +0 -12
  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/{modules/agent → agent}/generic-executor.d.ts +37 -27
  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.map +1 -0
  96. package/dist/agent/llm-factory.js +297 -0
  97. package/dist/agent/llm-factory.js.map +1 -0
  98. package/dist/agent/orchestrator.d.ts +18 -0
  99. package/dist/agent/orchestrator.d.ts.map +1 -0
  100. package/dist/agent/orchestrator.js +44 -0
  101. package/dist/agent/orchestrator.js.map +1 -0
  102. package/dist/{modules/agent → agent}/prompt-builder.d.ts +1 -1
  103. package/dist/agent/prompt-builder.d.ts.map +1 -0
  104. package/dist/agent/prompt-builder.js.map +1 -0
  105. package/dist/agent/registry.d.ts +19 -0
  106. package/dist/agent/registry.d.ts.map +1 -0
  107. package/dist/agent/registry.js +48 -0
  108. package/dist/agent/registry.js.map +1 -0
  109. package/dist/agent/tools/file-system.d.ts +11 -0
  110. package/dist/agent/tools/file-system.d.ts.map +1 -0
  111. package/dist/agent/tools/file-system.js +528 -0
  112. package/dist/agent/tools/file-system.js.map +1 -0
  113. package/dist/agent/tools/index.d.ts +4 -0
  114. package/dist/agent/tools/index.d.ts.map +1 -0
  115. package/dist/agent/tools/index.js +20 -0
  116. package/dist/agent/tools/index.js.map +1 -0
  117. package/dist/agent/tools/logger.d.ts +33 -0
  118. package/dist/agent/tools/logger.d.ts.map +1 -0
  119. package/dist/agent/tools/logger.js +86 -0
  120. package/dist/agent/tools/logger.js.map +1 -0
  121. package/dist/agent/tools/tool-resolver.d.ts +7 -0
  122. package/dist/agent/tools/tool-resolver.d.ts.map +1 -0
  123. package/dist/agent/tools/tool-resolver.js +122 -0
  124. package/dist/agent/tools/tool-resolver.js.map +1 -0
  125. package/dist/execution/adapters/in-memory-checkpoint.d.ts +11 -0
  126. package/dist/execution/adapters/in-memory-checkpoint.d.ts.map +1 -0
  127. package/dist/execution/adapters/in-memory-checkpoint.js +54 -0
  128. package/dist/execution/adapters/in-memory-checkpoint.js.map +1 -0
  129. package/dist/execution/compiler.d.ts +8 -0
  130. package/dist/execution/compiler.d.ts.map +1 -0
  131. package/dist/execution/compiler.js +50 -0
  132. package/dist/execution/compiler.js.map +1 -0
  133. package/dist/execution/controller.d.ts.map +1 -0
  134. package/dist/execution/controller.js.map +1 -0
  135. package/dist/execution/event-manager.d.ts +29 -0
  136. package/dist/execution/event-manager.d.ts.map +1 -0
  137. package/dist/{graph → execution}/event-manager.js +4 -114
  138. package/dist/execution/event-manager.js.map +1 -0
  139. package/dist/{graph → execution}/index.d.ts +50 -2
  140. package/dist/execution/index.d.ts.map +1 -0
  141. package/dist/execution/index.js +638 -0
  142. package/dist/execution/index.js.map +1 -0
  143. package/dist/execution/logger.d.ts.map +1 -0
  144. package/dist/execution/logger.js.map +1 -0
  145. package/dist/{graph → execution}/node.d.ts +6 -1
  146. package/dist/execution/node.d.ts.map +1 -0
  147. package/dist/{graph → execution}/node.js +83 -10
  148. package/dist/execution/node.js.map +1 -0
  149. package/dist/execution/observer.d.ts.map +1 -0
  150. package/dist/execution/observer.js.map +1 -0
  151. package/dist/execution/planner.d.ts +14 -0
  152. package/dist/execution/planner.d.ts.map +1 -0
  153. package/dist/execution/planner.js +43 -0
  154. package/dist/execution/planner.js.map +1 -0
  155. package/dist/execution/reducer.d.ts +19 -0
  156. package/dist/execution/reducer.d.ts.map +1 -0
  157. package/dist/execution/reducer.js +61 -0
  158. package/dist/execution/reducer.js.map +1 -0
  159. package/dist/execution/registry.d.ts +38 -0
  160. package/dist/execution/registry.d.ts.map +1 -0
  161. package/dist/execution/registry.js +63 -0
  162. package/dist/execution/registry.js.map +1 -0
  163. package/dist/execution/send-api.d.ts +24 -0
  164. package/dist/execution/send-api.d.ts.map +1 -0
  165. package/dist/execution/send-api.js +52 -0
  166. package/dist/execution/send-api.js.map +1 -0
  167. package/dist/execution/types.parallel.d.ts +61 -0
  168. package/dist/execution/types.parallel.d.ts.map +1 -0
  169. package/dist/execution/types.parallel.js +3 -0
  170. package/dist/execution/types.parallel.js.map +1 -0
  171. package/dist/execution/visualizer.d.ts.map +1 -0
  172. package/dist/execution/visualizer.js.map +1 -0
  173. package/dist/index.d.ts +27 -8
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +42 -8
  176. package/dist/index.js.map +1 -1
  177. package/dist/interfaces/index.d.ts +32 -1
  178. package/dist/interfaces/index.d.ts.map +1 -1
  179. package/dist/interfaces/index.js.map +1 -1
  180. package/dist/modules/cli/index.d.ts +13 -0
  181. package/dist/modules/cli/index.d.ts.map +1 -0
  182. package/dist/modules/cli/index.js +672 -0
  183. package/dist/modules/cli/index.js.map +1 -0
  184. package/dist/modules/nlp/engine.d.ts.map +1 -1
  185. package/dist/modules/nlp/engine.js +0 -1
  186. package/dist/modules/nlp/engine.js.map +1 -1
  187. package/dist/persistence/index.d.ts +12 -0
  188. package/dist/persistence/index.d.ts.map +1 -0
  189. package/dist/persistence/index.js +24 -0
  190. package/dist/persistence/index.js.map +1 -0
  191. package/dist/persistence/neo4j/driver.d.ts +26 -0
  192. package/dist/persistence/neo4j/driver.d.ts.map +1 -0
  193. package/dist/persistence/neo4j/driver.js +64 -0
  194. package/dist/persistence/neo4j/driver.js.map +1 -0
  195. package/dist/persistence/neo4j/entity-store.d.ts +15 -0
  196. package/dist/persistence/neo4j/entity-store.d.ts.map +1 -0
  197. package/dist/persistence/neo4j/entity-store.js +136 -0
  198. package/dist/persistence/neo4j/entity-store.js.map +1 -0
  199. package/dist/persistence/neo4j/execution-tracer.d.ts +19 -0
  200. package/dist/persistence/neo4j/execution-tracer.d.ts.map +1 -0
  201. package/dist/persistence/neo4j/execution-tracer.js +166 -0
  202. package/dist/persistence/neo4j/execution-tracer.js.map +1 -0
  203. package/dist/persistence/neo4j/memory-adapter.d.ts +35 -0
  204. package/dist/persistence/neo4j/memory-adapter.d.ts.map +1 -0
  205. package/dist/persistence/neo4j/memory-adapter.js +252 -0
  206. package/dist/persistence/neo4j/memory-adapter.js.map +1 -0
  207. package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts +22 -0
  208. package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts.map +1 -0
  209. package/dist/persistence/neo4j/petri-checkpoint-adapter.js +141 -0
  210. package/dist/persistence/neo4j/petri-checkpoint-adapter.js.map +1 -0
  211. package/dist/pipeline/agent-pipeline.d.ts +99 -0
  212. package/dist/pipeline/agent-pipeline.d.ts.map +1 -0
  213. package/dist/pipeline/agent-pipeline.js +356 -0
  214. package/dist/pipeline/agent-pipeline.js.map +1 -0
  215. package/dist/routing/checkpoint-adapter.d.ts +30 -0
  216. package/dist/routing/checkpoint-adapter.d.ts.map +1 -0
  217. package/dist/routing/checkpoint-adapter.js +83 -0
  218. package/dist/routing/checkpoint-adapter.js.map +1 -0
  219. package/dist/routing/documentation-generator.d.ts +47 -0
  220. package/dist/routing/documentation-generator.d.ts.map +1 -0
  221. package/dist/routing/documentation-generator.js +320 -0
  222. package/dist/routing/documentation-generator.js.map +1 -0
  223. package/dist/routing/index.d.ts +38 -0
  224. package/dist/routing/index.d.ts.map +1 -0
  225. package/dist/routing/index.js +375 -0
  226. package/dist/routing/index.js.map +1 -0
  227. package/dist/routing/intent-classifier.d.ts +206 -0
  228. package/dist/routing/intent-classifier.d.ts.map +1 -0
  229. package/dist/routing/intent-classifier.js +267 -0
  230. package/dist/routing/intent-classifier.js.map +1 -0
  231. package/dist/routing/matrix.d.ts +6 -0
  232. package/dist/routing/matrix.d.ts.map +1 -0
  233. package/dist/routing/matrix.js +131 -0
  234. package/dist/routing/matrix.js.map +1 -0
  235. package/dist/routing/orchestrator.d.ts +87 -0
  236. package/dist/routing/orchestrator.d.ts.map +1 -0
  237. package/dist/routing/orchestrator.js +425 -0
  238. package/dist/routing/orchestrator.js.map +1 -0
  239. package/dist/routing/postgres-checkpoint-adapter.d.ts +32 -0
  240. package/dist/routing/postgres-checkpoint-adapter.d.ts.map +1 -0
  241. package/dist/routing/postgres-checkpoint-adapter.js +167 -0
  242. package/dist/routing/postgres-checkpoint-adapter.js.map +1 -0
  243. package/dist/routing/redis-checkpoint-adapter.d.ts +34 -0
  244. package/dist/routing/redis-checkpoint-adapter.d.ts.map +1 -0
  245. package/dist/routing/redis-checkpoint-adapter.js +170 -0
  246. package/dist/routing/redis-checkpoint-adapter.js.map +1 -0
  247. package/dist/routing/types.d.ts +49 -0
  248. package/dist/routing/types.d.ts.map +1 -0
  249. package/dist/routing/types.js +3 -0
  250. package/dist/routing/types.js.map +1 -0
  251. package/dist/types/agent.d.ts +144 -88
  252. package/dist/types/agent.d.ts.map +1 -1
  253. package/dist/types/agent.js +49 -0
  254. package/dist/types/agent.js.map +1 -1
  255. package/dist/types/index.d.ts +46 -4
  256. package/dist/types/index.d.ts.map +1 -1
  257. package/dist/utils/generate-action-schema.d.ts +2 -3
  258. package/dist/utils/generate-action-schema.d.ts.map +1 -1
  259. package/dist/utils/generate-action-schema.js +3 -1
  260. package/dist/utils/generate-action-schema.js.map +1 -1
  261. package/dist/utils/logger.d.ts +27 -0
  262. package/dist/utils/logger.d.ts.map +1 -0
  263. package/dist/utils/logger.js +45 -0
  264. package/dist/utils/logger.js.map +1 -0
  265. package/docs/.gitbook/assets/image (1).png +0 -0
  266. package/docs/.gitbook/assets/image (2).png +0 -0
  267. package/docs/.gitbook/assets/image (3).png +0 -0
  268. package/docs/.gitbook/assets/image (4).png +0 -0
  269. package/docs/.gitbook/assets/image (5).png +0 -0
  270. package/docs/.gitbook/assets/image (6).png +0 -0
  271. package/docs/.gitbook/assets/image.png +0 -0
  272. package/docs/README.md +57 -0
  273. package/docs/SUMMARY.md +34 -0
  274. package/docs/cas-dusages.md +69 -0
  275. package/docs/cli/README.md +65 -0
  276. package/docs/concepts-cles.md +50 -0
  277. package/docs/core/architecture.md +87 -0
  278. package/docs/core/benchmark.md +59 -0
  279. package/docs/core/checkpoint.md +72 -0
  280. package/docs/core/documentation.md +55 -0
  281. package/docs/core/graphcontroller.md +63 -0
  282. package/docs/core/graphflow.md +137 -0
  283. package/docs/core/introduction.md +41 -0
  284. package/docs/core/les-evenements.md +95 -0
  285. package/docs/modules/agenda/README.md +63 -0
  286. package/docs/modules/agenda/interface-iagenda.md +170 -0
  287. package/docs/modules/agenda/les-adaptateurs/README.md +237 -0
  288. package/docs/modules/agenda/les-adaptateurs/nodecronadapter.md +91 -0
  289. package/docs/modules/introduction.md +55 -0
  290. package/docs/modules/les-adaptateurs.md +52 -0
  291. package/docs/modules/memoire/README.md +68 -0
  292. package/docs/modules/memoire/interface-imemory.md +183 -0
  293. package/docs/modules/memoire/les-adaptateurs/README.md +209 -0
  294. package/docs/modules/memoire/les-adaptateurs/inmemoryadapter.md +110 -0
  295. package/docs/modules/memoire/les-adaptateurs/meilisearchadapter.md +147 -0
  296. package/docs/modules/memoire/les-adaptateurs/redisadapter.md +212 -0
  297. package/docs/modules/nlp/README.md +44 -0
  298. package/docs/philosophie.md +51 -0
  299. package/docs/tutoriels/ajouter-des-conditions.md +150 -0
  300. package/docs/tutoriels/branching.md +194 -0
  301. package/docs/tutoriels/checkpoint-usage.md +99 -0
  302. package/docs/tutoriels/creer-agent-onchain.md +1041 -0
  303. package/docs/tutoriels/creer-un-agent.md +108 -0
  304. package/docs/tutoriels/creer-un-graphe-simple.md +92 -0
  305. package/docs/tutoriels/gerer-les-erreurs.md +124 -0
  306. package/docs/tutoriels/pour-commencer.md +73 -0
  307. package/docs/tutoriels/retry.md +166 -0
  308. package/execution/adapters/in-memory-checkpoint.ts +35 -0
  309. package/execution/compiler.ts +47 -0
  310. package/{graph → execution}/event-manager.ts +4 -117
  311. package/{graph → execution}/index.ts +376 -8
  312. package/{graph → execution}/node.ts +116 -12
  313. package/execution/planner.ts +40 -0
  314. package/execution/reducer.ts +73 -0
  315. package/execution/registry.ts +86 -0
  316. package/execution/send-api.ts +58 -0
  317. package/execution/types.parallel.ts +81 -0
  318. package/index.ts +35 -8
  319. package/interfaces/index.ts +37 -0
  320. package/modules/cli/index.ts +580 -0
  321. package/modules/nlp/engine.ts +0 -1
  322. package/package.json +50 -16
  323. package/persistence/index.ts +27 -0
  324. package/persistence/neo4j/driver.ts +34 -0
  325. package/persistence/neo4j/entity-store.ts +141 -0
  326. package/persistence/neo4j/execution-tracer.ts +194 -0
  327. package/persistence/neo4j/memory-adapter.ts +281 -0
  328. package/persistence/neo4j/petri-checkpoint-adapter.ts +153 -0
  329. package/pipeline/agent-pipeline.ts +426 -0
  330. package/routing/checkpoint-adapter.ts +79 -0
  331. package/routing/documentation-generator.ts +358 -0
  332. package/routing/index.ts +459 -0
  333. package/routing/intent-classifier.ts +360 -0
  334. package/routing/matrix.ts +138 -0
  335. package/routing/orchestrator.ts +498 -0
  336. package/routing/patterns/data-extraction.json +79 -0
  337. package/routing/patterns/human-approval.json +64 -0
  338. package/routing/patterns/rag-search.json +68 -0
  339. package/routing/postgres-checkpoint-adapter.ts +172 -0
  340. package/routing/redis-checkpoint-adapter.ts +187 -0
  341. package/routing/types.ts +59 -0
  342. package/routing/web-server.ts +260 -0
  343. package/scripts/generate-petri-docs.ts +70 -0
  344. package/scripts/get-gmail-token.js +65 -0
  345. package/scripts/get-gmail-token.ts +65 -0
  346. package/test/agent/agent.test.ts +92 -0
  347. package/test/agent/clone.test.ts +143 -0
  348. package/test/agent/cognitive-handler.test.ts +78 -0
  349. package/test/agent/entity-store.test.ts +80 -0
  350. package/test/agent/generic-executor.test.ts +230 -0
  351. package/test/agent/handoff.test.ts +163 -0
  352. package/test/agent/llm-factory.test.ts +40 -0
  353. package/test/agent/orchestrator.test.ts +156 -0
  354. package/test/agent/registry.test.ts +97 -0
  355. package/test/agent/tools.test.ts +267 -0
  356. package/test/execution/checkpoint.test.ts +811 -0
  357. package/test/{graph → execution}/controller.test.ts +2 -2
  358. package/test/{graph → execution}/event-manager.test.ts +1 -1
  359. package/test/{graph → execution}/index.test.ts +24 -15
  360. package/test/{graph → execution}/node.test.ts +3 -3
  361. package/test/{graph → execution}/observer.test.ts +2 -2
  362. package/test/execution/parallel.test.ts +135 -0
  363. package/test/execution/plan-llm-integration.test.ts +290 -0
  364. package/test/execution/plan-real-onchain.test.ts +226 -0
  365. package/test/execution/send-api.test.ts +121 -0
  366. package/test/modules/cli/index.test.ts +125 -0
  367. package/test/persistence/neo4j-execution-tracer.test.ts +96 -0
  368. package/test/persistence/neo4j-memory-adapter.test.ts +107 -0
  369. package/test/persistence/neo4j-petri-checkpoint.test.ts +89 -0
  370. package/test/pipeline/agent-pipeline.test.ts +118 -0
  371. package/test/routing/checkpoint-persistence.test.ts +58 -0
  372. package/test/routing/documentation-generator.test.ts +76 -0
  373. package/test/routing/integration.test.ts +261 -0
  374. package/test/routing/intent-classifier.test.ts +102 -0
  375. package/test/routing/petri.test.ts +156 -0
  376. package/test/routing/real-llm.test.ts +260 -0
  377. package/test-petri-features.ts +218 -0
  378. package/test-pipeline-api.ts +163 -0
  379. package/tsconfig.json +5 -2
  380. package/types/agent.ts +126 -4
  381. package/types/index.ts +66 -5
  382. package/utils/generate-action-schema.ts +5 -4
  383. package/utils/logger.ts +40 -0
  384. package/dist/graph/controller.d.ts.map +0 -1
  385. package/dist/graph/controller.js.map +0 -1
  386. package/dist/graph/event-manager.d.ts +0 -101
  387. package/dist/graph/event-manager.d.ts.map +0 -1
  388. package/dist/graph/event-manager.js.map +0 -1
  389. package/dist/graph/index.d.ts.map +0 -1
  390. package/dist/graph/index.js +0 -340
  391. package/dist/graph/index.js.map +0 -1
  392. package/dist/graph/logger.d.ts.map +0 -1
  393. package/dist/graph/logger.js.map +0 -1
  394. package/dist/graph/node.d.ts.map +0 -1
  395. package/dist/graph/node.js.map +0 -1
  396. package/dist/graph/observer.d.ts.map +0 -1
  397. package/dist/graph/observer.js.map +0 -1
  398. package/dist/graph/visualizer.d.ts.map +0 -1
  399. package/dist/graph/visualizer.js.map +0 -1
  400. package/dist/modules/agent/agent.d.ts +0 -35
  401. package/dist/modules/agent/agent.d.ts.map +0 -1
  402. package/dist/modules/agent/agent.js +0 -103
  403. package/dist/modules/agent/agent.js.map +0 -1
  404. package/dist/modules/agent/base/executor.d.ts.map +0 -1
  405. package/dist/modules/agent/base/executor.js.map +0 -1
  406. package/dist/modules/agent/base/index.d.ts.map +0 -1
  407. package/dist/modules/agent/base/index.js.map +0 -1
  408. package/dist/modules/agent/generic-assistant.d.ts +0 -20
  409. package/dist/modules/agent/generic-assistant.d.ts.map +0 -1
  410. package/dist/modules/agent/generic-assistant.js +0 -89
  411. package/dist/modules/agent/generic-assistant.js.map +0 -1
  412. package/dist/modules/agent/generic-executor.d.ts.map +0 -1
  413. package/dist/modules/agent/generic-executor.js +0 -189
  414. package/dist/modules/agent/generic-executor.js.map +0 -1
  415. package/dist/modules/agent/llm-factory.d.ts.map +0 -1
  416. package/dist/modules/agent/llm-factory.js +0 -56
  417. package/dist/modules/agent/llm-factory.js.map +0 -1
  418. package/dist/modules/agent/prompt-builder.d.ts.map +0 -1
  419. package/dist/modules/agent/prompt-builder.js.map +0 -1
  420. package/dist/modules/memory/adapters/in-memory/index.d.ts +0 -120
  421. package/dist/modules/memory/adapters/in-memory/index.d.ts.map +0 -1
  422. package/dist/modules/memory/adapters/in-memory/index.js +0 -212
  423. package/dist/modules/memory/adapters/in-memory/index.js.map +0 -1
  424. package/dist/modules/memory/adapters/meilisearch/index.d.ts +0 -110
  425. package/dist/modules/memory/adapters/meilisearch/index.d.ts.map +0 -1
  426. package/dist/modules/memory/adapters/meilisearch/index.js +0 -324
  427. package/dist/modules/memory/adapters/meilisearch/index.js.map +0 -1
  428. package/dist/modules/memory/adapters/redis/index.d.ts +0 -82
  429. package/dist/modules/memory/adapters/redis/index.d.ts.map +0 -1
  430. package/dist/modules/memory/adapters/redis/index.js +0 -160
  431. package/dist/modules/memory/adapters/redis/index.js.map +0 -1
  432. package/dist/modules/memory/index.d.ts +0 -67
  433. package/dist/modules/memory/index.d.ts.map +0 -1
  434. package/dist/modules/memory/index.js +0 -104
  435. package/dist/modules/memory/index.js.map +0 -1
  436. package/modules/agent/agent.ts +0 -107
  437. package/modules/agent/generic-assistant.ts +0 -92
  438. package/modules/agent/generic-executor.ts +0 -252
  439. package/modules/agent/llm-factory.ts +0 -47
  440. package/modules/memory/adapters/in-memory/index.ts +0 -208
  441. package/modules/memory/adapters/meilisearch/index.ts +0 -364
  442. package/modules/memory/adapters/redis/index.ts +0 -165
  443. package/modules/memory/index.ts +0 -93
  444. package/test/modules/memory/adapters/in-memory.test.ts +0 -153
  445. package/test/modules/memory/adapters/meilisearch.test.ts +0 -287
  446. package/test/modules/memory/base.test.ts +0 -230
  447. /package/dist/{modules/agent → agent}/llm-factory.d.ts +0 -0
  448. /package/dist/{modules/agent → agent}/prompt-builder.js +0 -0
  449. /package/dist/{graph → execution}/controller.d.ts +0 -0
  450. /package/dist/{graph → execution}/controller.js +0 -0
  451. /package/dist/{graph → execution}/logger.d.ts +0 -0
  452. /package/dist/{graph → execution}/logger.js +0 -0
  453. /package/dist/{graph → execution}/observer.d.ts +0 -0
  454. /package/dist/{graph → execution}/observer.js +0 -0
  455. /package/dist/{graph → execution}/visualizer.d.ts +0 -0
  456. /package/dist/{graph → execution}/visualizer.js +0 -0
  457. /package/{graph → execution}/controller.ts +0 -0
  458. /package/{graph → execution}/logger.ts +0 -0
  459. /package/{graph → execution}/observer.ts +0 -0
  460. /package/{graph → execution}/visualizer.ts +0 -0
@@ -0,0 +1,170 @@
1
+ ---
2
+ description: >-
3
+ L’interface IAgenda définit les fonctionnalités essentielles pour planifier,
4
+ exécuter et gérer des tâches dans un système de workflows automatisés.
5
+ ---
6
+
7
+ # Interface IAgenda
8
+
9
+ L’interface **IAgenda** définit les fonctionnalités essentielles pour **planifier, exécuter et gérer des tâches** dans un système automatisé.
10
+
11
+ Ce module suit une approche **agnostique du moteur**, permettant une intégration avec **différents services de planification** (**Node-Cron, Redis, AWS EventBridge**) ainsi qu’un **stockage persistant des tâches** via **IMemoryAdapter**.
12
+
13
+ ***
14
+
15
+ ### **Objectif de l'interface**
16
+
17
+ L'interface **IAgenda** doit permettre :
18
+
19
+ * **Planification dynamique** de tâches périodiques ou ponctuelles.
20
+ * **Stockage et récupération** des tâches planifiées via **IMemoryAdapter**.
21
+ * **Gestion complète du cycle de vie** des tâches (**création, exécution, annulation**).
22
+ * **Intégration avec un moteur de planification configurable** (**ICronService**).
23
+ * **Persistance des tâches après redémarrage** via un stockage mémoire.
24
+ * **Interopérabilité avec plusieurs moteurs de planification** (local, distribué, cloud).
25
+
26
+ ***
27
+
28
+ ### **Définition de l’interface**
29
+
30
+ ```ts
31
+ /**
32
+ * Interface pour la gestion des tâches planifiées
33
+ */
34
+ export interface IAgenda {
35
+ /**
36
+ * Planifie une tâche à exécuter périodiquement ou une seule fois.
37
+ * @param {ScheduledTaskInput} request - Configuration de la tâche à planifier.
38
+ * @param {ScheduledTaskCallbacks} [callbacks] - Callbacks pour suivre l’exécution.
39
+ * @returns {Promise<string>} ID unique de la tâche planifiée.
40
+ */
41
+ scheduleTask(
42
+ request: ScheduledTaskInput,
43
+ callbacks?: ScheduledTaskCallbacks
44
+ ): Promise<string>;
45
+
46
+ /**
47
+ * Annule une tâche planifiée en fonction de son ID.
48
+ * @param {string} taskId - ID de la tâche à annuler.
49
+ * @returns {Promise<boolean>} `true` si la tâche a été annulée, sinon `false`.
50
+ */
51
+ cancelTask(taskId: string): Promise<boolean>;
52
+
53
+ /**
54
+ * Récupère toutes les tâches planifiées stockées en mémoire.
55
+ * @returns {Promise<ScheduledTask[]>} Liste des tâches stockées.
56
+ */
57
+ getScheduledTasks(): Promise<ScheduledTask[]>;
58
+
59
+ /**
60
+ * Annule toutes les tâches planifiées.
61
+ * @returns {Promise<void>}
62
+ */
63
+ cancelAllTasks(): Promise<void>;
64
+
65
+ /**
66
+ * Arrête l’ensemble des tâches et libère les ressources.
67
+ * @returns {Promise<void>}
68
+ */
69
+ shutdown(): Promise<void>;
70
+ }
71
+ ```
72
+
73
+ ***
74
+
75
+ ### **Interfaces associées**
76
+
77
+ #### **ScheduledTaskInput : Définition d’une tâche planifiée**
78
+
79
+ ```ts
80
+ /**
81
+ * Configuration d'une tâche planifiée
82
+ */
83
+ export interface ScheduledTaskInput {
84
+ /** ID unique de la tâche (optionnel) */
85
+ id?: string;
86
+ /** Requête ou action à exécuter */
87
+ originalRequest: string;
88
+ /** Expression `cron` définissant la récurrence */
89
+ cronExpression: string;
90
+ /** Indique si la tâche est récurrente */
91
+ isRecurring?: boolean;
92
+ /** Date de début d’exécution (optionnel) */
93
+ startDate?: Date;
94
+ }
95
+ ```
96
+
97
+ ***
98
+
99
+ #### **ScheduledTask : Représentation d’une tâche active**
100
+
101
+ ```ts
102
+ /**
103
+ * Représentation d'une tâche planifiée
104
+ */
105
+ export interface ScheduledTask extends ScheduledTaskInput {
106
+ /** ID unique attribué à la tâche */
107
+ id: string;
108
+ /** Date de création de la tâche */
109
+ createdAt: Date;
110
+ }
111
+ ```
112
+
113
+ ***
114
+
115
+ #### **ScheduledTaskCallbacks : Suivi de l’exécution**
116
+
117
+ ```ts
118
+ /**
119
+ * Callbacks pour suivre l'exécution d'une tâche planifiée
120
+ */
121
+ export interface ScheduledTaskCallbacks {
122
+ /** Appelé lorsque la tâche est planifiée */
123
+ onScheduled?: (id: string) => void;
124
+ /** Appelé lorsque la tâche est exécutée */
125
+ onExecuted?: (id: string, originalRequest: string) => void;
126
+ }
127
+ ```
128
+
129
+ ***
130
+
131
+ ### **Pourquoi cette interface ?**
132
+
133
+ L’interface **IAgenda** offre plusieurs avantages en termes de conception et d’extensibilité :
134
+
135
+ #### **Indépendance du moteur de planification**
136
+
137
+ * Compatible avec **Node-Cron, Redis, AWS EventBridge**, et d’autres solutions.
138
+ * Séparation claire entre **la logique métier** et **le moteur de tâches**.
139
+
140
+ #### **Persistance des tâches**
141
+
142
+ * Intégration avec **IMemoryAdapter** pour **stocker les tâches planifiées** même après un redémarrage.
143
+ * Permet une **synchronisation avec des bases de données** (**Redis, Meilisearch, SQLite, etc.**).
144
+
145
+ #### **Gestion avancée du cycle de vie**
146
+
147
+ * **Annulation, exécution immédiate, reprogrammation dynamique**.
148
+ * Suivi des exécutions via des **callbacks événementiels**.
149
+
150
+ ***
151
+
152
+ ### **Cas d’usage**
153
+
154
+ L’interface **IAgenda** est conçue pour gérer **la planification automatique des tâches**, avec des cas d’usage variés :
155
+
156
+ #### **Tâches périodiques et planification automatique**
157
+
158
+ * Exécution de **mises à jour programmées** toutes les nuits.
159
+ * **Relances automatiques** en cas d’échec.
160
+
161
+ #### **Orchestration de workflows distribués**
162
+
163
+ * Utilisation d’un **adaptateur Redis** pour **synchroniser plusieurs agents**.
164
+ * Planification de tâches sur **AWS EventBridge** pour **déclencher des workflows serverless**.
165
+
166
+ #### **Persistance et reprise après redémarrage**
167
+
168
+ * **Sauvegarde des tâches planifiées** dans **Meilisearch ou Redis**.
169
+ * Reprise automatique après un **redémarrage du système**.
170
+
@@ -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
+ ```