@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
package/README.md CHANGED
@@ -1,193 +1,462 @@
1
- # @ai.ntellect/workflow
1
+ # @ai.ntellect/core
2
2
 
3
- The **@ai.ntellect/workflow** package is a robust framework for managing and executing workflows, supporting dynamic decision-making, conditional paths, event-driven execution, and state persistence.
3
+ **Stop your AI agents from going off-rails in production.**
4
4
 
5
- ## Features
5
+ *LLMs generate. You control.*
6
6
 
7
- - **Dynamic Workflow Execution:** Manage workflows with complex branching and parallel paths.
8
- - **Conditional Logic:** Execute nodes based on real-time conditions.
9
- - **Event-Driven Execution:** Trigger actions dynamically using events.
10
- - **State Management:** Handle shared and persistent states.
11
- - **Visualization:** Generate workflow diagrams using Mermaid syntax.
7
+ One LLM call $\rightarrow$ deterministic execution $\rightarrow$ no routing hallucinations.
12
8
 
13
- ## Installation
9
+ ---
10
+
11
+ ## Why
12
+
13
+ LLMs are great at generating text.
14
+ **They are bad at controlling systems.**
15
+
16
+ Most frameworks let the LLM decide everything:
17
+ - which tool to call
18
+ - in what order
19
+ - with what context
20
+
21
+ $\rightarrow$ This breaks as complexity grows.
22
+
23
+ **This framework does the opposite:**
24
+ - LLM decides **intent (once)**
25
+ - Your system handles **execution (deterministically)**
26
+
27
+ No drift. No hidden loops. No surprises.
28
+
29
+ **This is not an agent framework. It's a control layer for LLM systems.**
30
+
31
+ ---
32
+
33
+ ### The Contrast
34
+
35
+ **Most frameworks:**
36
+ `User` $\rightarrow$ `LLM` $\rightarrow$ `LLM` $\rightarrow$ `LLM` $\rightarrow$ `Tool` $\rightarrow$ `LLM` (Probabilistic Chaos)
37
+
38
+ **This framework:**
39
+ `User` $\rightarrow$ `LLM` $\rightarrow$ `System` $\rightarrow$ `Done` (Deterministic Control)
40
+
41
+ ---
42
+
43
+ ## Why this works
14
44
 
15
- Install the package via npm:
45
+ We replaced probabilistic guessing with explicit definitions. Routing is **defined**, not **learned**.
46
+
47
+ - **No prompt drift**: Your agent won't change its behavior because of a minor prompt tweak.
48
+ - **No hidden loops**: Execution paths are explicit and finite.
49
+ - **No probabilistic branching**: If the intent is X, the path is ALWAYS Y.
50
+
51
+ Just state + transitions.
52
+
53
+ ---
54
+
55
+ ## Quick Reference
16
56
 
17
- ```bash
18
- npm install @ai.ntellect/workflow
19
57
  ```
58
+ User → LLM (intent) → Petri Net (routing) → GraphFlow (execution)
59
+ ```
60
+
61
+ One decision. Then control.
20
62
 
21
- Import the `Workflow` class:
63
+ ---
22
64
 
23
- ```javascript
24
- import { Workflow } from "@ai.ntellect/workflow";
65
+ ## Installation
66
+
67
+ ```sh
68
+ pnpm add @ai.ntellect/core zod
25
69
  ```
26
70
 
27
- ## Creating a content pipeline workflow
71
+ **Requirements**: TypeScript 5.x+, Node.js 18+.
28
72
 
29
- Here is an example of creating a workflow to manage a content pipeline:
73
+ ---
30
74
 
31
- ```javascript
32
- import { Workflow } from "@ai.ntellect/workflow";
75
+ ## Table of Contents
33
76
 
34
- const contentPipelineDefinition = {
35
- name: "ContentPipeline",
36
- entryNode: "fetchContent",
37
- nodes: {
38
- fetchContent: {
39
- name: "fetchContent",
40
- description: "Fetch content from external APIs",
41
- execute: async (state) => {
42
- console.log("Fetching content...");
43
- state.content = ["Article1", "Article2"];
44
- return state;
45
- },
46
- next: ["processContent"],
47
- },
48
- processContent: {
49
- name: "processContent",
50
- description: "Process and analyze content",
51
- execute: async (state) => {
52
- console.log("Processing content:", state.content);
53
- state.processedContent = state.content.map((c) => c.toUpperCase());
54
- return state;
55
- },
56
- next: ["publishContent"],
77
+ - [Core Thesis](#core-thesis)
78
+ - [Source Structure](#source-structure)
79
+ - [GraphFlow — Typed Execution](#graphflow--typed-execution)
80
+ - [CortexFlow — Intent Routing](#cortexflow--intent-routing)
81
+ - [Agent — Cognitive Loop](#agent--cognitive-loop)
82
+ - [AgentPipeline — Declarative Pipelines](#agentpipeline--declarative-pipelines)
83
+ - [Persistence Memory & Checkpoints](#persistence--memory--checkpoints)
84
+ - [Planner & Compiler](#planner--compiler)
85
+ - [CLI (Interactive REPL)](#cli-interactive-repl)
86
+ - [Testing & Build](#testing--build)
87
+
88
+ ---
89
+
90
+ ## Core Thesis
91
+
92
+ The framework architecture is the **Classifier-Controller Split**:
93
+
94
+ | Layer | Role | Technology | Correctness |
95
+ |-------|------|-----------|-------------|
96
+ | **Intent** | Classify user input | LLM | Probabilistic (confidence threshold) |
97
+ | **Routing** | Choose execution path | Petri Net | Deterministic (verified) |
98
+ | **Execution** | Run business logic | GraphFlow | Typed (Zod validated) |
99
+
100
+ This split means the LLM is called exactly **once per turn** for intent classification. All subsequent routing and execution is handled by verified, typed code.
101
+
102
+ ---
103
+
104
+ ## Source Structure
105
+
106
+ ```
107
+ @ai.ntellect/core
108
+ ├── execution/ # GraphFlow engine (typed nodes, events, checkpoints, planner, compiler)
109
+ ├── routing/ # PetriNet, CortexFlowOrchestrator, IntentClassifier
110
+ ├── agent/ # Agent, GenericExecutor, handlers, tools
111
+ ├── persistence/ # Barrel: Memory + checkpoint adapters
112
+ ├── pipeline/ # AgentPipeline (trigger → stages → gate)
113
+ ├── modules/ # Plugins: agenda, cli, embedding, memory, nlp
114
+ ├── interfaces/ # Contract interfaces
115
+ ├── types/ # Zod schemas
116
+ └── index.ts # Barrel: all public API exports
117
+ ```
118
+
119
+ ### Path Aliases
120
+
121
+ - `@ai.ntellect/core` — root barrel (all major exports)
122
+ - `@ai.ntellect/core/execution/...` — deep imports for GraphFlow internals
123
+ - `@ai.ntellect/core/routing/...` — deep imports for PetriNet / CortexFlow
124
+ - `@ai.ntellect/core/agent/...` — deep imports for Agent module
125
+ - `@ai.ntellect/core/pipeline/...` — deep imports for AgentPipeline
126
+
127
+ ---
128
+
129
+ ## GraphFlow — Typed Execution
130
+
131
+ A `GraphFlow` is a **typed state machine** where each node is a discrete unit of logic.
132
+
133
+ ```typescript
134
+ import { z } from "zod";
135
+ import { GraphFlow } from "@ai.ntellect/core";
136
+
137
+ const schema = z.object({ count: z.number().default(0) });
138
+
139
+ const workflow = new GraphFlow({
140
+ name: "counter",
141
+ schema,
142
+ context: { count: 0 },
143
+ nodes: [
144
+ {
145
+ name: "increment",
146
+ execute: async (ctx) => { ctx.count++; },
147
+ next: "double",
57
148
  },
58
- publishContent: {
59
- name: "publishContent",
60
- description: "Publish processed content",
61
- execute: async (state) => {
62
- console.log("Publishing content:", state.processedContent);
63
- state.published = true;
64
- return state;
65
- },
149
+ {
150
+ name: "double",
151
+ execute: async (ctx) => { ctx.count *= 2; },
66
152
  },
153
+ ],
154
+ });
155
+
156
+ await workflow.execute("increment");
157
+ console.log(workflow.context.count); // 2
158
+ ```
159
+
160
+ ### Node Types
161
+
162
+ | Type | Description |
163
+ |------|-------------|
164
+ | **Sequential** | `next: "nodeName"` or `next: (ctx) => condition ? "a" : "b"` |
165
+ | **Parallel** | `parallel: { enabled: true, joinNode: "merge" }` — fork-join model |
166
+ | **Send API** | Dynamic fan-out: create N parallel branches at runtime |
167
+ | **Event-Driven** | `when: "event.name"` — pause and wait for external event |
168
+
169
+ ### Checkpoints
170
+
171
+ Save/resume workflow state with time-travel debugging and human-in-the-loop breakpoints:
172
+
173
+ ```typescript
174
+ import { InMemoryCheckpointAdapter } from "@ai.ntellect/core";
175
+
176
+ const adapter = new InMemoryCheckpointAdapter();
177
+ const cpId = await workflow.executeWithCheckpoint("start", adapter, {
178
+ breakpoints: ["approve_payment"],
179
+ });
180
+
181
+ // Later, resume with optional state modification:
182
+ await workflow.resumeFromCheckpoint(cpId, adapter, {
183
+ contextModifications: { status: "approved" },
184
+ });
185
+ ```
186
+
187
+ ---
188
+
189
+ ## CortexFlow — Intent Routing
190
+
191
+ CortexFlow wraps intent classification + Petri Net routing. The LLM identifies intent once; the Petri Net handles all control flow deterministically.
192
+
193
+ ### Basic Usage
194
+
195
+ ```typescript
196
+ import { CortexFlowOrchestrator, IntentClassifier } from "@ai.ntellect/core/routing/orchestrator";
197
+ import { ToolRegistry } from "@ai.ntellect/core";
198
+ import { GraphFlow } from "@ai.ntellect/core";
199
+
200
+ const llmFn = async (prompt: string) => { /* your LLM call */ };
201
+ const registry = new ToolRegistry();
202
+ const orchestrator = new CortexFlowOrchestrator("mail_assistant", registry);
203
+
204
+ const classifier = new IntentClassifier(llmFn, {
205
+ intents: ["FETCH_MAILS", "SUMMARIZE", "UNKNOWN"],
206
+ confidenceThreshold: 0.7,
207
+ });
208
+ orchestrator.setIntentClassifier(IntentClassifier.toFn(classifier), classifier);
209
+ orchestrator.setLLMCall(llmFn);
210
+
211
+ // Build Petri Net
212
+ const net = orchestrator.petri;
213
+ net.addPlace({ id: "idle", type: "initial", tokens: [{ id: "start", data: {}, createdAt: 0 }] });
214
+ net.addPlace({ id: "done", type: "final", tokens: [] });
215
+ net.addTransition({
216
+ id: "process_mails",
217
+ from: ["idle"],
218
+ to: "done",
219
+ action: { type: "graphflow", name: "mail_fetch" },
220
+ });
221
+
222
+ registry.register({ name: "mail_fetch", description: "...", graph: new GraphFlow({...}), startNode: "fetch" });
223
+
224
+ const sessionId = orchestrator.startSession();
225
+ const result = await orchestrator.orchestrate("Summarise my last 5 emails", sessionId);
226
+ ```
227
+
228
+ ### Key Components
229
+
230
+ | Export | Source | Description |
231
+ |--------|--------|-------------|
232
+ | `PetriNet` | `@ai.ntellect/core` | Core Petri Net engine |
233
+ | `CortexFlowOrchestrator` | `@ai.ntellect/core/routing` | Intent → routing → execution |
234
+ | `IntentClassifier` | `@ai.ntellect/core/routing` | LLM-based intent classification |
235
+ | `HybridIntentClassifier` | `@ai.ntellect/core/routing` | Keyword + LLM fallback |
236
+
237
+ ### Advanced Features
238
+
239
+ - **Hybrid Fallback**: Delegate to conversational LLM on low confidence
240
+ - **Multi-Intent**: Execute multiple intents sequentially
241
+ - **Formal Verification**: Deadlock detection via incidence matrices
242
+ - **Persistence**: Redis/PostgreSQL checkpoint adapters
243
+
244
+ ---
245
+
246
+ ## Agent — Cognitive Loop
247
+
248
+ The `Agent` class wraps a cognitive loop (think → execute → reply) on top of GraphFlow, with LLM-driven tool selection.
249
+
250
+ ```typescript
251
+ import { Agent, createCalculatorTool } from "@ai.ntellect/core";
252
+
253
+ const agent = new Agent({
254
+ role: "Math Assistant",
255
+ tools: [createCalculatorTool()],
256
+ llmConfig: {
257
+ provider: "groq",
258
+ model: "llama-3.1-8b-instant",
259
+ apiKey: process.env.GROQ_API_KEY,
67
260
  },
68
- };
261
+ });
69
262
 
70
- const workflow = new Workflow(contentPipelineDefinition);
263
+ const result = await agent.process("What is 25 + 7?");
71
264
  ```
72
265
 
73
- ## Executing the workflow
266
+ ### Cognitive Loop Components
267
+
268
+ | Component | Location | Description |
269
+ |-----------|----------|-------------|
270
+ | `Agent` | `agent/agent.ts` | Public API: orchestrates the cognitive loop |
271
+ | `GenericExecutor` | `agent/generic-executor.ts` | Decision-making + action execution |
272
+ | `DynamicGoalHandler` | `agent/handlers/` | Context-aware goal computation |
273
+ | `DynamicNextHandler` | `agent/handlers/` | Next-state routing |
274
+ | `LLMFactory` | `agent/llm-factory.ts` | Multi-provider LLM client |
275
+ | `PromptBuilder` | `agent/prompt-builder.ts` | Structured prompt construction |
276
+ | Tools (`file-system`, etc.) | `agent/tools/` | Prebuilt agent tools |
277
+
278
+ ### Built-in Agent Tools
279
+
280
+ ```typescript
281
+ import {
282
+ createFileReaderTool,
283
+ createFileWriterTool,
284
+ createShellTool,
285
+ createDirectoryListerTool,
286
+ createAllAgentTools,
287
+ createCalculatorTool,
288
+ } from "@ai.ntellect/core";
289
+ ```
290
+
291
+ ---
292
+
293
+ ## AgentPipeline — Declarative Pipelines
294
+
295
+ Declarative pipelines with triggers, typed stages, and human gates.
74
296
 
75
- Run the content pipeline workflow with an initial state:
297
+ ```typescript
298
+ import { AgentPipeline } from "@ai.ntellect/core";
299
+ import { InMemoryPetriCheckpointAdapter } from "@ai.ntellect/core";
76
300
 
77
- ```javascript
78
- const initialState = {};
79
- await workflow.execute(initialState, "fetchContent");
301
+ const pipeline = new AgentPipeline({
302
+ name: "price-monitor",
303
+ stages: [
304
+ {
305
+ id: "fetch",
306
+ run: async (ctx) => ({ data: await fetchData() }),
307
+ retry: { max: 3, delayMs: 1000 },
308
+ },
309
+ {
310
+ id: "process",
311
+ run: async (ctx) => ({ result: processData(ctx.data) }),
312
+ },
313
+ ],
314
+ trigger: { type: "cron", expression: "*/5 * * * *" },
315
+ gate: "human",
316
+ checkpointAdapter: new InMemoryPetriCheckpointAdapter(),
317
+ });
318
+
319
+ await pipeline.start();
80
320
  ```
81
321
 
82
- Example output:
322
+ ---
83
323
 
84
- ```text
85
- Fetching content...
86
- Processing content: [ 'Article1', 'Article2' ]
87
- Publishing content: [ 'ARTICLE1', 'ARTICLE2' ]
324
+ ## Persistence — Memory & Checkpoints
325
+
326
+ The `persistence/` barrel provides a unified interface for storage:
327
+
328
+ ```typescript
329
+ import {
330
+ Memory,
331
+ InMemoryCheckpointAdapter,
332
+ InMemoryPetriCheckpointAdapter,
333
+ RedisPetriCheckpointAdapter,
334
+ PostgresPetriCheckpointAdapter,
335
+ } from "@ai.ntellect/core";
88
336
  ```
89
337
 
90
- ## Visualizing the workflow
338
+ ### Memory
91
339
 
92
- Generate a visual representation of the content pipeline workflow:
340
+ ```typescript
341
+ import { Memory } from "@ai.ntellect/core";
342
+ import { InMemoryAdapter } from "@ai.ntellect/core/modules/memory";
93
343
 
94
- ```javascript
95
- workflow.visualize("Content Pipeline Workflow");
344
+ const memory = new Memory(new InMemoryAdapter());
345
+ await memory.init();
346
+ await memory.createMemory({ content: "Hello", roomId: "default" });
347
+ const results = await memory.getMemoryByIndex("Hello", { roomId: "default" });
96
348
  ```
97
349
 
98
- Output example:
350
+ ### Checkpoint Adapters
351
+
352
+ | Adapter | Use Case |
353
+ |---------|----------|
354
+ | `InMemoryCheckpointAdapter` | Testing / development |
355
+ | `InMemoryPetriCheckpointAdapter` | PetriNet checkpoint testing |
356
+ | `RedisPetriCheckpointAdapter` | Distributed / production |
357
+ | `PostgresPetriCheckpointAdapter` | SQL-backed persistence |
358
+ | `Neo4jPetriCheckpointAdapter` | Graph-backed persistence |
99
359
 
100
- ```mermaid
101
- workflow TD
102
- fetchContent[Fetch Content]
103
- processContent[Process Content]
104
- publishContent[Publish Content]
105
- fetchContent --> processContent
106
- processContent --> publishContent
360
+ ### Graph Observability & Persistence (Neo4j)
361
+
362
+ Because the framework relies on explicit routing (Petri Nets) and state machines (GraphFlow), **Neo4j** is supported as a first-class citizen. It allows you to visually audit execution traces, map long-term memory relations, and persist agent entity resolutions without polluting your business logic.
363
+
364
+ ```typescript
365
+ import {
366
+ createDriver,
367
+ Neo4jMemoryAdapter,
368
+ Neo4jExecutionTracer,
369
+ Neo4jEntityStore
370
+ } from "@ai.ntellect/core/persistence";
371
+
372
+ const { driver } = await createDriver({ url: "bolt://localhost:7687", username: "neo4j", password: "password" });
373
+
374
+ // 1. Graph Memory (Semantic & Relational)
375
+ const memoryAdapter = new Neo4jMemoryAdapter(driver);
376
+ await memoryAdapter.addRelation({ fromId: "mem-1", toId: "mem-2", type: "RELATES_TO", roomId: "user-1" });
377
+
378
+ // 2. Visual Execution Tracing (Zero-invasion event listener)
379
+ const tracer = Neo4jExecutionTracer.attach(workflow, driver, "exec-123");
380
+ // Visually query in Neo4j Browser: MATCH path=(e:Execution)-[:HAS_RUN]->(n:NodeRun) RETURN path
381
+
382
+ // 3. Persistent Entity Resolution
383
+ const entityStore = new Neo4jEntityStore(driver);
384
+ await entityStore.recordResolution("ent-1", "find user intent", 0.95);
107
385
  ```
108
386
 
109
- ## Advanced features
387
+ ---
110
388
 
111
- ### Event-driven execution
389
+ ## Planner & Compiler
112
390
 
113
- Add event-driven nodes to the workflow:
391
+ For advanced workflows, the LLM generates a Zod-validated JSON plan that is compiled into a deterministic GraphFlow at runtime.
114
392
 
115
- ```javascript
116
- workflow.addNode(
117
- {
118
- name: "eventDrivenNode",
119
- description: "Node triggered by a custom event",
120
- execute: async (state) => {
121
- console.log("Custom event processed.");
122
- return state;
123
- },
124
- },
125
- { events: ["customEvent"] }
126
- );
393
+ ```typescript
394
+ import { Planner, Compiler } from "@ai.ntellect/core";
395
+
396
+ const planner = new Planner(llmFn);
397
+ const plan = await planner.createPlan("Send 0.5 ETH to Alice after checking balance");
398
+
399
+ const compiler = new Compiler();
400
+ const workflow = compiler.compile(plan);
127
401
 
128
- workflow.emit("customEvent", { state: { exampleKey: "exampleValue" } });
402
+ await workflow.execute("start");
129
403
  ```
130
404
 
131
- Example output:
405
+ ---
132
406
 
133
- ```text
134
- Custom event processed.
407
+ ## CLI (Interactive REPL)
408
+
409
+ ```sh
410
+ pnpm cli -p groq -m llama-3.1-8b-instant
411
+ pnpm cli -p openai -m gpt-4o-mini
412
+ pnpm cli -p ollama -m llama3
135
413
  ```
136
414
 
137
- ### Parallel execution
415
+ **Slash commands**: `/status`, `/history`, `/list`, `/resume [cpId]`, `/approve`, `/reject`, `/modify k=v`, `/clear`, `/help`.
416
+
417
+ The CLI automatically loads API keys from `.env` (`GROQ_API_KEY`, `OPENAI_API_KEY`, `OPENROUTER_API_KEY`, `GOOGLE_API_KEY`).
418
+
419
+ ---
138
420
 
139
- Execute multiple nodes concurrently:
421
+ ## GraphController
140
422
 
141
- ```javascript
142
- await workflow.executeParallel(
143
- { data: "Parallel Execution" },
144
- ["nodeA", "nodeB"],
145
- 2
146
- );
423
+ Orchestrate multiple GraphFlows in parallel or sequence:
424
+
425
+ ```typescript
426
+ import { GraphController } from "@ai.ntellect/core";
427
+
428
+ const controller = new GraphController();
429
+ controller.add("workflow_a", graphA);
430
+ controller.add("workflow_b", graphB);
431
+
432
+ await controller.parallel("workflow_a", "workflow_b");
433
+ await controller.sequential("workflow_a", "workflow_b");
147
434
  ```
148
435
 
149
- ### Conditional logic
436
+ ---
150
437
 
151
- Add conditional nodes to control the workflow path:
438
+ ## Testing & Build
152
439
 
153
- ```javascript
154
- workflow.addNode(
155
- {
156
- name: "conditionalNode",
157
- description: "Node executed conditionally",
158
- execute: async (state) => {
159
- console.log("Condition met, executing node...");
160
- return state;
161
- },
162
- },
163
- {
164
- condition: (state) => state.content && state.content.length > 0,
165
- next: ["publishContent"],
166
- }
167
- );
168
- ```
169
-
170
- ### Sub-workflows
171
-
172
- Embed sub-workflows for modularity:
173
-
174
- ```javascript
175
- const subWorkflowDefinition = {
176
- name: "SubWorkflow",
177
- nodes: {
178
- subNode: {
179
- name: "subNode",
180
- execute: async (state) => {
181
- console.log("Executing sub-workflow.");
182
- return state;
183
- },
184
- },
185
- },
186
- };
440
+ ```sh
441
+ pnpm run build # tsc → dist/
442
+ pnpm test # Mocha via ts-node (5s timeout)
443
+ pnpm run test:all # Full suite (test/**/*.test.ts)
444
+ pnpm test --grep "suite name" # Focused suite
445
+ pnpm run test:watch # Watch mode
446
+ ```
447
+
448
+ **Real LLM tests**: `pnpm test --grep "CortexFlow Real LLM"` (requires Ollama `llama3:latest` on `localhost:11434`).
449
+
450
+ **Examples**:
187
451
 
188
- workflow.addSubWorkflow(
189
- new Workflow(subWorkflowDefinition),
190
- "subNode",
191
- "processContent"
192
- );
452
+ ```sh
453
+ pnpm run example:hello
454
+ pnpm run example:agent
455
+ pnpm run example:onchain
193
456
  ```
457
+
458
+ ---
459
+
460
+ ## License
461
+
462
+ MIT