@ai.ntellect/core 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.json +6 -0
- package/AGENTS.md +50 -0
- package/ARCHITECTURE.md +58 -0
- package/BENCHMARK.md +38 -0
- package/CHANGELOG.md +224 -0
- package/README.md +363 -142
- package/agent/agent-workflow.ts +569 -0
- package/agent/agent.ts +183 -0
- package/agent/base/executor.ts +103 -0
- package/agent/base/index.ts +87 -0
- package/agent/entity-resolver/confidence.ts +54 -0
- package/agent/entity-resolver/entity-index.ts +241 -0
- package/agent/entity-resolver/explore-strategy.ts +82 -0
- package/agent/entity-resolver/index.ts +22 -0
- package/agent/entity-resolver/resolver.ts +193 -0
- package/agent/entity-resolver/scorer.ts +211 -0
- package/agent/entity-resolver/types.ts +98 -0
- package/agent/generic-executor.ts +713 -0
- package/agent/handlers/cognitive-handler.ts +197 -0
- package/agent/handlers/index.ts +1 -0
- package/agent/handoff.ts +58 -0
- package/agent/llm-factory.ts +343 -0
- package/agent/orchestrator.ts +45 -0
- package/agent/prompt-builder.ts +78 -0
- package/agent/registry.ts +64 -0
- package/agent/tools/file-system.ts +471 -0
- package/agent/tools/index.ts +23 -0
- package/agent/tools/logger.ts +105 -0
- package/agent/tools/tool-resolver.ts +104 -0
- package/benchmark/cortexflow-workflow.ts +182 -0
- package/benchmark/langgraph-workflow.ts +201 -0
- package/benchmark/llm-client.ts +76 -0
- package/benchmark/run-benchmark.ts +222 -0
- package/cli-dev.ts +419 -0
- package/dist/agent/agent-workflow.d.ts +41 -0
- package/dist/agent/agent-workflow.d.ts.map +1 -0
- package/dist/agent/agent-workflow.js +560 -0
- package/dist/agent/agent-workflow.js.map +1 -0
- package/dist/agent/agent.d.ts +38 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +149 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/base/executor.d.ts +51 -0
- package/dist/agent/base/executor.d.ts.map +1 -0
- package/dist/agent/base/executor.js +69 -0
- package/dist/agent/base/executor.js.map +1 -0
- package/dist/agent/base/index.d.ts +30 -0
- package/dist/agent/base/index.d.ts.map +1 -0
- package/dist/agent/base/index.js +88 -0
- package/dist/agent/base/index.js.map +1 -0
- package/dist/agent/entity-resolver/confidence.d.ts +4 -0
- package/dist/agent/entity-resolver/confidence.d.ts.map +1 -0
- package/dist/agent/entity-resolver/confidence.js +47 -0
- package/dist/agent/entity-resolver/confidence.js.map +1 -0
- package/dist/agent/entity-resolver/entity-index.d.ts +40 -0
- package/dist/agent/entity-resolver/entity-index.d.ts.map +1 -0
- package/dist/agent/entity-resolver/entity-index.js +244 -0
- package/dist/agent/entity-resolver/entity-index.js.map +1 -0
- package/dist/agent/entity-resolver/explore-strategy.d.ts +13 -0
- package/dist/agent/entity-resolver/explore-strategy.d.ts.map +1 -0
- package/dist/agent/entity-resolver/explore-strategy.js +109 -0
- package/dist/agent/entity-resolver/explore-strategy.js.map +1 -0
- package/dist/agent/entity-resolver/index.d.ts +8 -0
- package/dist/agent/entity-resolver/index.d.ts.map +1 -0
- package/dist/agent/entity-resolver/index.js +16 -0
- package/dist/agent/entity-resolver/index.js.map +1 -0
- package/dist/agent/entity-resolver/resolver.d.ts +18 -0
- package/dist/agent/entity-resolver/resolver.d.ts.map +1 -0
- package/dist/agent/entity-resolver/resolver.js +158 -0
- package/dist/agent/entity-resolver/resolver.js.map +1 -0
- package/dist/agent/entity-resolver/scorer.d.ts +3 -0
- package/dist/agent/entity-resolver/scorer.d.ts.map +1 -0
- package/dist/agent/entity-resolver/scorer.js +182 -0
- package/dist/agent/entity-resolver/scorer.js.map +1 -0
- package/dist/agent/entity-resolver/types.d.ts +89 -0
- package/dist/agent/entity-resolver/types.d.ts.map +1 -0
- package/dist/agent/entity-resolver/types.js +3 -0
- package/dist/agent/entity-resolver/types.js.map +1 -0
- package/dist/agent/generic-executor.d.ts +68 -0
- package/dist/agent/generic-executor.d.ts.map +1 -0
- package/dist/agent/generic-executor.js +620 -0
- package/dist/agent/generic-executor.js.map +1 -0
- package/dist/agent/handlers/cognitive-handler.d.ts +44 -0
- package/dist/agent/handlers/cognitive-handler.d.ts.map +1 -0
- package/dist/agent/handlers/cognitive-handler.js +172 -0
- package/dist/agent/handlers/cognitive-handler.js.map +1 -0
- package/dist/agent/handlers/index.d.ts +2 -0
- package/dist/agent/handlers/index.d.ts.map +1 -0
- package/dist/agent/handlers/index.js +7 -0
- package/dist/agent/handlers/index.js.map +1 -0
- package/dist/agent/handoff.d.ts +12 -0
- package/dist/agent/handoff.d.ts.map +1 -0
- package/dist/agent/handoff.js +62 -0
- package/dist/agent/handoff.js.map +1 -0
- package/dist/agent/llm-factory.d.ts +19 -0
- package/dist/agent/llm-factory.d.ts.map +1 -0
- package/dist/agent/llm-factory.js +297 -0
- package/dist/agent/llm-factory.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +18 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +44 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/prompt-builder.d.ts +35 -0
- package/dist/agent/prompt-builder.d.ts.map +1 -0
- package/dist/agent/prompt-builder.js +76 -0
- package/dist/agent/prompt-builder.js.map +1 -0
- package/dist/agent/registry.d.ts +19 -0
- package/dist/agent/registry.d.ts.map +1 -0
- package/dist/agent/registry.js +48 -0
- package/dist/agent/registry.js.map +1 -0
- package/dist/agent/tools/file-system.d.ts +11 -0
- package/dist/agent/tools/file-system.d.ts.map +1 -0
- package/dist/agent/tools/file-system.js +528 -0
- package/dist/agent/tools/file-system.js.map +1 -0
- package/dist/agent/tools/index.d.ts +4 -0
- package/dist/agent/tools/index.d.ts.map +1 -0
- package/dist/agent/tools/index.js +20 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/tools/logger.d.ts +33 -0
- package/dist/agent/tools/logger.d.ts.map +1 -0
- package/dist/agent/tools/logger.js +86 -0
- package/dist/agent/tools/logger.js.map +1 -0
- package/dist/agent/tools/tool-resolver.d.ts +7 -0
- package/dist/agent/tools/tool-resolver.d.ts.map +1 -0
- package/dist/agent/tools/tool-resolver.js +122 -0
- package/dist/agent/tools/tool-resolver.js.map +1 -0
- package/dist/execution/adapters/in-memory-checkpoint.d.ts +11 -0
- package/dist/execution/adapters/in-memory-checkpoint.d.ts.map +1 -0
- package/dist/execution/adapters/in-memory-checkpoint.js +54 -0
- package/dist/execution/adapters/in-memory-checkpoint.js.map +1 -0
- package/dist/execution/compiler.d.ts +8 -0
- package/dist/execution/compiler.d.ts.map +1 -0
- package/dist/execution/compiler.js +50 -0
- package/dist/execution/compiler.js.map +1 -0
- package/dist/execution/controller.d.ts +30 -0
- package/dist/execution/controller.d.ts.map +1 -0
- package/dist/execution/controller.js +80 -0
- package/dist/execution/controller.js.map +1 -0
- package/dist/execution/event-manager.d.ts +29 -0
- package/dist/execution/event-manager.d.ts.map +1 -0
- package/dist/execution/event-manager.js +264 -0
- package/dist/execution/event-manager.js.map +1 -0
- package/dist/execution/index.d.ts +221 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +638 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/logger.d.ts +46 -0
- package/dist/execution/logger.d.ts.map +1 -0
- package/dist/execution/logger.js +69 -0
- package/dist/execution/logger.js.map +1 -0
- package/dist/execution/node.d.ts +65 -0
- package/dist/execution/node.d.ts.map +1 -0
- package/dist/execution/node.js +250 -0
- package/dist/execution/node.js.map +1 -0
- package/dist/execution/observer.d.ts +38 -0
- package/dist/execution/observer.d.ts.map +1 -0
- package/dist/execution/observer.js +111 -0
- package/dist/execution/observer.js.map +1 -0
- package/dist/execution/planner.d.ts +14 -0
- package/dist/execution/planner.d.ts.map +1 -0
- package/dist/execution/planner.js +43 -0
- package/dist/execution/planner.js.map +1 -0
- package/dist/execution/reducer.d.ts +19 -0
- package/dist/execution/reducer.d.ts.map +1 -0
- package/dist/execution/reducer.js +61 -0
- package/dist/execution/reducer.js.map +1 -0
- package/dist/execution/registry.d.ts +38 -0
- package/dist/execution/registry.d.ts.map +1 -0
- package/dist/execution/registry.js +63 -0
- package/dist/execution/registry.js.map +1 -0
- package/dist/execution/send-api.d.ts +24 -0
- package/dist/execution/send-api.d.ts.map +1 -0
- package/dist/execution/send-api.js +52 -0
- package/dist/execution/send-api.js.map +1 -0
- package/dist/execution/types.parallel.d.ts +61 -0
- package/dist/execution/types.parallel.d.ts.map +1 -0
- package/dist/execution/types.parallel.js +3 -0
- package/dist/execution/types.parallel.js.map +1 -0
- package/dist/execution/visualizer.d.ts +35 -0
- package/dist/execution/visualizer.d.ts.map +1 -0
- package/dist/execution/visualizer.js +131 -0
- package/dist/execution/visualizer.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +487 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +75 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/modules/agenda/adapters/node-cron/index.d.ts +17 -0
- package/dist/modules/agenda/adapters/node-cron/index.d.ts.map +1 -0
- package/dist/modules/agenda/adapters/node-cron/index.js +30 -0
- package/dist/modules/agenda/adapters/node-cron/index.js.map +1 -0
- package/dist/modules/agenda/index.d.ts +63 -0
- package/dist/modules/agenda/index.d.ts.map +1 -0
- package/dist/modules/agenda/index.js +141 -0
- package/dist/modules/agenda/index.js.map +1 -0
- package/dist/modules/cli/index.d.ts +13 -0
- package/dist/modules/cli/index.d.ts.map +1 -0
- package/dist/modules/cli/index.js +672 -0
- package/dist/modules/cli/index.js.map +1 -0
- package/dist/modules/embedding/adapters/ai/index.d.ts +29 -0
- package/dist/modules/embedding/adapters/ai/index.d.ts.map +1 -0
- package/dist/modules/embedding/adapters/ai/index.js +58 -0
- package/dist/modules/embedding/adapters/ai/index.js.map +1 -0
- package/dist/modules/embedding/index.d.ts +36 -0
- package/dist/modules/embedding/index.d.ts.map +1 -0
- package/dist/modules/embedding/index.js +60 -0
- package/dist/modules/embedding/index.js.map +1 -0
- package/dist/modules/nlp/engine.d.ts +126 -0
- package/dist/modules/nlp/engine.d.ts.map +1 -0
- package/dist/modules/nlp/engine.js +299 -0
- package/dist/modules/nlp/engine.js.map +1 -0
- package/dist/modules/nlp/index.d.ts +27 -0
- package/dist/modules/nlp/index.d.ts.map +1 -0
- package/dist/modules/nlp/index.js +56 -0
- package/dist/modules/nlp/index.js.map +1 -0
- package/dist/persistence/index.d.ts +12 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +24 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/neo4j/driver.d.ts +26 -0
- package/dist/persistence/neo4j/driver.d.ts.map +1 -0
- package/dist/persistence/neo4j/driver.js +64 -0
- package/dist/persistence/neo4j/driver.js.map +1 -0
- package/dist/persistence/neo4j/entity-store.d.ts +15 -0
- package/dist/persistence/neo4j/entity-store.d.ts.map +1 -0
- package/dist/persistence/neo4j/entity-store.js +136 -0
- package/dist/persistence/neo4j/entity-store.js.map +1 -0
- package/dist/persistence/neo4j/execution-tracer.d.ts +19 -0
- package/dist/persistence/neo4j/execution-tracer.d.ts.map +1 -0
- package/dist/persistence/neo4j/execution-tracer.js +166 -0
- package/dist/persistence/neo4j/execution-tracer.js.map +1 -0
- package/dist/persistence/neo4j/memory-adapter.d.ts +35 -0
- package/dist/persistence/neo4j/memory-adapter.d.ts.map +1 -0
- package/dist/persistence/neo4j/memory-adapter.js +252 -0
- package/dist/persistence/neo4j/memory-adapter.js.map +1 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts +22 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts.map +1 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.js +141 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.js.map +1 -0
- package/dist/pipeline/agent-pipeline.d.ts +99 -0
- package/dist/pipeline/agent-pipeline.d.ts.map +1 -0
- package/dist/pipeline/agent-pipeline.js +356 -0
- package/dist/pipeline/agent-pipeline.js.map +1 -0
- package/dist/routing/checkpoint-adapter.d.ts +30 -0
- package/dist/routing/checkpoint-adapter.d.ts.map +1 -0
- package/dist/routing/checkpoint-adapter.js +83 -0
- package/dist/routing/checkpoint-adapter.js.map +1 -0
- package/dist/routing/documentation-generator.d.ts +47 -0
- package/dist/routing/documentation-generator.d.ts.map +1 -0
- package/dist/routing/documentation-generator.js +320 -0
- package/dist/routing/documentation-generator.js.map +1 -0
- package/dist/routing/index.d.ts +38 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +375 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/intent-classifier.d.ts +206 -0
- package/dist/routing/intent-classifier.d.ts.map +1 -0
- package/dist/routing/intent-classifier.js +267 -0
- package/dist/routing/intent-classifier.js.map +1 -0
- package/dist/routing/matrix.d.ts +6 -0
- package/dist/routing/matrix.d.ts.map +1 -0
- package/dist/routing/matrix.js +131 -0
- package/dist/routing/matrix.js.map +1 -0
- package/dist/routing/orchestrator.d.ts +87 -0
- package/dist/routing/orchestrator.d.ts.map +1 -0
- package/dist/routing/orchestrator.js +425 -0
- package/dist/routing/orchestrator.js.map +1 -0
- package/dist/routing/postgres-checkpoint-adapter.d.ts +32 -0
- package/dist/routing/postgres-checkpoint-adapter.d.ts.map +1 -0
- package/dist/routing/postgres-checkpoint-adapter.js +167 -0
- package/dist/routing/postgres-checkpoint-adapter.js.map +1 -0
- package/dist/routing/redis-checkpoint-adapter.d.ts +34 -0
- package/dist/routing/redis-checkpoint-adapter.d.ts.map +1 -0
- package/dist/routing/redis-checkpoint-adapter.js +170 -0
- package/dist/routing/redis-checkpoint-adapter.js.map +1 -0
- package/dist/routing/types.d.ts +49 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/routing/types.js +3 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/types/agent.d.ts +289 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +78 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/index.d.ts +343 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/generate-action-schema.d.ts +4 -0
- package/dist/utils/generate-action-schema.d.ts.map +1 -0
- package/dist/utils/generate-action-schema.js +46 -0
- package/dist/utils/generate-action-schema.js.map +1 -0
- package/dist/utils/header-builder.d.ts +12 -0
- package/dist/utils/header-builder.d.ts.map +1 -0
- package/dist/utils/header-builder.js +35 -0
- package/dist/utils/header-builder.js.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +45 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/.gitbook/assets/image (1).png +0 -0
- package/docs/.gitbook/assets/image (2).png +0 -0
- package/docs/.gitbook/assets/image (3).png +0 -0
- package/docs/.gitbook/assets/image (4).png +0 -0
- package/docs/.gitbook/assets/image (5).png +0 -0
- package/docs/.gitbook/assets/image (6).png +0 -0
- package/docs/.gitbook/assets/image.png +0 -0
- package/docs/README.md +57 -0
- package/docs/SUMMARY.md +34 -0
- package/docs/cas-dusages.md +69 -0
- package/docs/cli/README.md +65 -0
- package/docs/concepts-cles.md +50 -0
- package/docs/core/architecture.md +87 -0
- package/docs/core/benchmark.md +59 -0
- package/docs/core/checkpoint.md +72 -0
- package/docs/core/documentation.md +55 -0
- package/docs/core/graphcontroller.md +63 -0
- package/docs/core/graphflow.md +137 -0
- package/docs/core/introduction.md +41 -0
- package/docs/core/les-evenements.md +95 -0
- package/docs/modules/agenda/README.md +63 -0
- package/docs/modules/agenda/interface-iagenda.md +170 -0
- package/docs/modules/agenda/les-adaptateurs/README.md +237 -0
- package/docs/modules/agenda/les-adaptateurs/nodecronadapter.md +91 -0
- package/docs/modules/introduction.md +55 -0
- package/docs/modules/les-adaptateurs.md +52 -0
- package/docs/modules/memoire/README.md +68 -0
- package/docs/modules/memoire/interface-imemory.md +183 -0
- package/docs/modules/memoire/les-adaptateurs/README.md +209 -0
- package/docs/modules/memoire/les-adaptateurs/inmemoryadapter.md +110 -0
- package/docs/modules/memoire/les-adaptateurs/meilisearchadapter.md +147 -0
- package/docs/modules/memoire/les-adaptateurs/redisadapter.md +212 -0
- package/docs/modules/nlp/README.md +44 -0
- package/docs/philosophie.md +51 -0
- package/docs/tutoriels/ajouter-des-conditions.md +150 -0
- package/docs/tutoriels/branching.md +194 -0
- package/docs/tutoriels/checkpoint-usage.md +99 -0
- package/docs/tutoriels/creer-agent-onchain.md +1041 -0
- package/docs/tutoriels/creer-un-agent.md +108 -0
- package/docs/tutoriels/creer-un-graphe-simple.md +92 -0
- package/docs/tutoriels/gerer-les-erreurs.md +124 -0
- package/docs/tutoriels/pour-commencer.md +73 -0
- package/docs/tutoriels/retry.md +166 -0
- package/execution/adapters/in-memory-checkpoint.ts +35 -0
- package/execution/compiler.ts +47 -0
- package/execution/controller.ts +84 -0
- package/execution/event-manager.ts +331 -0
- package/execution/index.ts +800 -0
- package/execution/logger.ts +70 -0
- package/execution/node.ts +315 -0
- package/execution/observer.ts +192 -0
- package/execution/planner.ts +40 -0
- package/execution/reducer.ts +73 -0
- package/execution/registry.ts +86 -0
- package/execution/send-api.ts +58 -0
- package/execution/types.parallel.ts +81 -0
- package/execution/visualizer.ts +158 -0
- package/index.ts +55 -465
- package/interfaces/index.ts +597 -0
- package/modules/agenda/adapters/node-cron/index.ts +25 -0
- package/modules/agenda/index.ts +146 -0
- package/modules/cli/index.ts +580 -0
- package/modules/embedding/adapters/ai/index.ts +42 -0
- package/modules/embedding/index.ts +45 -0
- package/modules/nlp/engine.ts +324 -0
- package/modules/nlp/index.ts +45 -0
- package/package.json +81 -9
- package/persistence/index.ts +27 -0
- package/persistence/neo4j/driver.ts +34 -0
- package/persistence/neo4j/entity-store.ts +141 -0
- package/persistence/neo4j/execution-tracer.ts +194 -0
- package/persistence/neo4j/memory-adapter.ts +281 -0
- package/persistence/neo4j/petri-checkpoint-adapter.ts +153 -0
- package/pipeline/agent-pipeline.ts +426 -0
- package/routing/checkpoint-adapter.ts +79 -0
- package/routing/documentation-generator.ts +358 -0
- package/routing/index.ts +459 -0
- package/routing/intent-classifier.ts +360 -0
- package/routing/matrix.ts +138 -0
- package/routing/orchestrator.ts +498 -0
- package/routing/patterns/data-extraction.json +79 -0
- package/routing/patterns/human-approval.json +64 -0
- package/routing/patterns/rag-search.json +68 -0
- package/routing/postgres-checkpoint-adapter.ts +172 -0
- package/routing/redis-checkpoint-adapter.ts +187 -0
- package/routing/types.ts +59 -0
- package/routing/web-server.ts +260 -0
- package/scripts/generate-petri-docs.ts +70 -0
- package/scripts/get-gmail-token.js +65 -0
- package/scripts/get-gmail-token.ts +65 -0
- package/test/agent/agent.test.ts +92 -0
- package/test/agent/clone.test.ts +143 -0
- package/test/agent/cognitive-handler.test.ts +78 -0
- package/test/agent/entity-store.test.ts +80 -0
- package/test/agent/generic-executor.test.ts +230 -0
- package/test/agent/handoff.test.ts +163 -0
- package/test/agent/llm-factory.test.ts +40 -0
- package/test/agent/orchestrator.test.ts +156 -0
- package/test/agent/registry.test.ts +97 -0
- package/test/agent/tools.test.ts +267 -0
- package/test/execution/checkpoint.test.ts +811 -0
- package/test/execution/controller.test.ts +236 -0
- package/test/execution/event-manager.test.ts +118 -0
- package/test/execution/index.test.ts +690 -0
- package/test/execution/node.test.ts +464 -0
- package/test/execution/observer.test.ts +393 -0
- package/test/execution/parallel.test.ts +135 -0
- package/test/execution/plan-llm-integration.test.ts +290 -0
- package/test/execution/plan-real-onchain.test.ts +226 -0
- package/test/execution/send-api.test.ts +121 -0
- package/test/modules/agenda/node-cron.test.ts +307 -0
- package/test/modules/cli/index.test.ts +125 -0
- package/test/persistence/neo4j-execution-tracer.test.ts +96 -0
- package/test/persistence/neo4j-memory-adapter.test.ts +107 -0
- package/test/persistence/neo4j-petri-checkpoint.test.ts +89 -0
- package/test/pipeline/agent-pipeline.test.ts +118 -0
- package/test/routing/checkpoint-persistence.test.ts +58 -0
- package/test/routing/documentation-generator.test.ts +76 -0
- package/test/routing/integration.test.ts +261 -0
- package/test/routing/intent-classifier.test.ts +102 -0
- package/test/routing/petri.test.ts +156 -0
- package/test/routing/real-llm.test.ts +260 -0
- package/test-petri-features.ts +218 -0
- package/test-pipeline-api.ts +163 -0
- package/tsconfig.json +30 -108
- package/types/agent.ts +296 -0
- package/types/index.ts +387 -0
- package/utils/generate-action-schema.ts +47 -0
- package/utils/header-builder.ts +40 -0
- package/utils/logger.ts +40 -0
- package/package copy.json +0 -21
- package/types.ts +0 -62
- package/utils/executor.ts +0 -42
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { BehaviorSubject, Subject } from "rxjs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { GraphFlow } from "../../execution";
|
|
5
|
+
import { GraphObserver } from "../../execution/observer";
|
|
6
|
+
import { GraphContext, GraphEvent, GraphNodeConfig } from "../../types";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Test schema definition for observer tests
|
|
10
|
+
* Defines a schema with:
|
|
11
|
+
* - value: numeric value for tracking state changes
|
|
12
|
+
* - status: enum representing node execution status
|
|
13
|
+
*/
|
|
14
|
+
const TestSchema = z.object({
|
|
15
|
+
value: z.number().default(0),
|
|
16
|
+
status: z.enum(["pending", "completed", "failed"]).optional(),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Test suite for the GraphObserver implementation
|
|
21
|
+
* This suite validates the reactive observation capabilities:
|
|
22
|
+
* - State observation (global and node-specific)
|
|
23
|
+
* - Property observation (single and multiple)
|
|
24
|
+
* - Event observation and correlation
|
|
25
|
+
* - Workflow monitoring
|
|
26
|
+
* - Node execution triggers
|
|
27
|
+
*/
|
|
28
|
+
describe("GraphObserver", () => {
|
|
29
|
+
let graph: GraphFlow<typeof TestSchema>;
|
|
30
|
+
let eventSubject: Subject<GraphEvent<typeof TestSchema>>;
|
|
31
|
+
let stateSubject: BehaviorSubject<GraphContext<typeof TestSchema>>;
|
|
32
|
+
let destroySubject: Subject<void>;
|
|
33
|
+
let observer: GraphObserver<typeof TestSchema>;
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
graph = new GraphFlow({
|
|
37
|
+
name: "TestGraph",
|
|
38
|
+
nodes: [],
|
|
39
|
+
context: { value: 0 },
|
|
40
|
+
schema: TestSchema,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Initialize subjects
|
|
44
|
+
eventSubject = new Subject();
|
|
45
|
+
stateSubject = new BehaviorSubject(graph.getContext());
|
|
46
|
+
destroySubject = new Subject();
|
|
47
|
+
|
|
48
|
+
// Create observer instance
|
|
49
|
+
observer = new GraphObserver(
|
|
50
|
+
graph,
|
|
51
|
+
eventSubject,
|
|
52
|
+
stateSubject,
|
|
53
|
+
destroySubject,
|
|
54
|
+
graph["eventManager"]
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Test suite for state observation functionality
|
|
60
|
+
* Validates the ability to track and react to state changes
|
|
61
|
+
* in the graph context
|
|
62
|
+
*/
|
|
63
|
+
describe("State Observation", () => {
|
|
64
|
+
/**
|
|
65
|
+
* Tests sequential state change observation
|
|
66
|
+
* Validates that:
|
|
67
|
+
* - All state changes are captured in order
|
|
68
|
+
* - Multiple state changes in a single node are tracked
|
|
69
|
+
* - Initial state is included in observations
|
|
70
|
+
*/
|
|
71
|
+
it("should observe state changes", async () => {
|
|
72
|
+
const states: any[] = [];
|
|
73
|
+
const testNode: GraphNodeConfig<typeof TestSchema> = {
|
|
74
|
+
name: "testNode",
|
|
75
|
+
execute: async (context) => {
|
|
76
|
+
context.value = 1;
|
|
77
|
+
context.value = 2;
|
|
78
|
+
context.value = 3;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
graph.addNode(testNode);
|
|
83
|
+
const subscription = graph
|
|
84
|
+
.observe()
|
|
85
|
+
.state()
|
|
86
|
+
.subscribe((state) => {
|
|
87
|
+
if (state.value !== undefined) {
|
|
88
|
+
states.push(state.value);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
await graph.execute("testNode");
|
|
93
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
94
|
+
subscription.unsubscribe();
|
|
95
|
+
|
|
96
|
+
expect(states).to.deep.equal([0, 1, 2, 3]);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Tests node-specific state observation
|
|
101
|
+
* Validates that:
|
|
102
|
+
* - State changes for specific nodes are tracked
|
|
103
|
+
* - Status transitions are captured correctly
|
|
104
|
+
* - Async state changes are properly observed
|
|
105
|
+
*/
|
|
106
|
+
it("should observe specific node state changes", async () => {
|
|
107
|
+
const states: any[] = [];
|
|
108
|
+
const testNode: GraphNodeConfig<typeof TestSchema> = {
|
|
109
|
+
name: "testNode",
|
|
110
|
+
execute: async (context) => {
|
|
111
|
+
context.status = "pending";
|
|
112
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
113
|
+
context.status = "completed";
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
graph.addNode(testNode);
|
|
118
|
+
const subscription = graph
|
|
119
|
+
.observe()
|
|
120
|
+
.node("testNode")
|
|
121
|
+
.subscribe((state) => state.status && states.push(state.status));
|
|
122
|
+
|
|
123
|
+
await graph.execute("testNode");
|
|
124
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
125
|
+
subscription.unsubscribe();
|
|
126
|
+
|
|
127
|
+
expect(states).to.deep.equal(["pending", "completed"]);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Tests multi-node state observation
|
|
132
|
+
* Validates that:
|
|
133
|
+
* - Multiple nodes can be observed simultaneously
|
|
134
|
+
* - State changes are correctly attributed to nodes
|
|
135
|
+
* - Sequential execution is properly tracked
|
|
136
|
+
*/
|
|
137
|
+
it("should observe multiple nodes", async () => {
|
|
138
|
+
const states: any[] = [];
|
|
139
|
+
const node1: GraphNodeConfig<typeof TestSchema> = {
|
|
140
|
+
name: "node1",
|
|
141
|
+
execute: async (context) => {
|
|
142
|
+
context.value = 1;
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
const node2: GraphNodeConfig<typeof TestSchema> = {
|
|
146
|
+
name: "node2",
|
|
147
|
+
execute: async (context) => {
|
|
148
|
+
context.value = 2;
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
graph.addNode(node1);
|
|
153
|
+
graph.addNode(node2);
|
|
154
|
+
|
|
155
|
+
const subscription = graph
|
|
156
|
+
.observe()
|
|
157
|
+
.nodes(["node1", "node2"])
|
|
158
|
+
.subscribe((state) => state.value && states.push(state.value));
|
|
159
|
+
|
|
160
|
+
await graph.execute("node1");
|
|
161
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
162
|
+
await graph.execute("node2");
|
|
163
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
164
|
+
subscription.unsubscribe();
|
|
165
|
+
|
|
166
|
+
expect(states).to.deep.equal([1, 2]);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Test suite for property observation functionality
|
|
172
|
+
* Validates the ability to track specific properties
|
|
173
|
+
* of the graph context
|
|
174
|
+
*/
|
|
175
|
+
describe("Property Observation", () => {
|
|
176
|
+
/**
|
|
177
|
+
* Tests single property observation
|
|
178
|
+
* Validates that:
|
|
179
|
+
* - Individual property changes are tracked
|
|
180
|
+
* - Initial property value is captured
|
|
181
|
+
* - Property updates trigger observations
|
|
182
|
+
*/
|
|
183
|
+
it("should observe single property", async () => {
|
|
184
|
+
const values: any[] = [];
|
|
185
|
+
const testNode: GraphNodeConfig<typeof TestSchema> = {
|
|
186
|
+
name: "testNode",
|
|
187
|
+
execute: async (context) => {
|
|
188
|
+
context.value = 42;
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
graph.addNode(testNode);
|
|
193
|
+
const subscription = graph
|
|
194
|
+
.observe()
|
|
195
|
+
.property("value")
|
|
196
|
+
.subscribe((state) => values.push(state.value));
|
|
197
|
+
|
|
198
|
+
await graph.execute("testNode");
|
|
199
|
+
subscription.unsubscribe();
|
|
200
|
+
|
|
201
|
+
expect(values).to.deep.equal([0, 42]);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Tests multiple property observation
|
|
206
|
+
* Validates that:
|
|
207
|
+
* - Multiple properties can be tracked simultaneously
|
|
208
|
+
* - Changes to any observed property trigger updates
|
|
209
|
+
* - Final state contains all tracked properties
|
|
210
|
+
*/
|
|
211
|
+
it("should observe multiple properties", async () => {
|
|
212
|
+
const values: any[] = [];
|
|
213
|
+
const testNode: GraphNodeConfig<typeof TestSchema> = {
|
|
214
|
+
name: "testNode",
|
|
215
|
+
execute: async (context) => {
|
|
216
|
+
context.value = 42;
|
|
217
|
+
context.status = "completed";
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
graph.addNode(testNode);
|
|
222
|
+
const subscription = graph
|
|
223
|
+
.observe()
|
|
224
|
+
.property(["value", "status"])
|
|
225
|
+
.subscribe((change) => {
|
|
226
|
+
const { name, ...rest } = change;
|
|
227
|
+
values.push(rest);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
await graph.execute("testNode");
|
|
231
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
232
|
+
subscription.unsubscribe();
|
|
233
|
+
|
|
234
|
+
expect(values[values.length - 1]).to.deep.equal({
|
|
235
|
+
value: 42,
|
|
236
|
+
status: "completed",
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Tests condition-based observation
|
|
242
|
+
* Validates that:
|
|
243
|
+
* - Multiple conditions can be combined
|
|
244
|
+
* - Observation completes when conditions are met
|
|
245
|
+
* - State reflects all required changes
|
|
246
|
+
*/
|
|
247
|
+
it("should wait for multiple conditions", async () => {
|
|
248
|
+
const testNode: GraphNodeConfig<typeof TestSchema> = {
|
|
249
|
+
name: "testNode",
|
|
250
|
+
execute: async (context) => {
|
|
251
|
+
context.value = 42;
|
|
252
|
+
context.status = "completed";
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
graph.addNode(testNode);
|
|
257
|
+
const promise = graph
|
|
258
|
+
.observe()
|
|
259
|
+
.until(
|
|
260
|
+
graph.observe().property(["value", "status"]),
|
|
261
|
+
(state) => state.value === 42 && state.status === "completed"
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
await graph.execute("testNode");
|
|
265
|
+
await promise;
|
|
266
|
+
|
|
267
|
+
const context = graph.getContext();
|
|
268
|
+
expect(context.value).to.equal(42);
|
|
269
|
+
expect(context.status).to.equal("completed");
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Test suite for event observation functionality
|
|
275
|
+
* Validates the handling of events and event correlation
|
|
276
|
+
*/
|
|
277
|
+
describe("Event Observation", () => {
|
|
278
|
+
/**
|
|
279
|
+
* Tests specific event observation
|
|
280
|
+
*/
|
|
281
|
+
it("should observe specific events", async () => {
|
|
282
|
+
const events: GraphEvent<typeof TestSchema>[] = [];
|
|
283
|
+
const subscription = graph
|
|
284
|
+
.observe()
|
|
285
|
+
.event("testEvent")
|
|
286
|
+
.subscribe((e) => events.push(e));
|
|
287
|
+
|
|
288
|
+
await graph.emit("testEvent", { value: 1 });
|
|
289
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
290
|
+
subscription.unsubscribe();
|
|
291
|
+
|
|
292
|
+
expect(events.length).to.equal(1);
|
|
293
|
+
expect(events[0].type).to.equal("testEvent");
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Tests debounced event handling
|
|
298
|
+
*/
|
|
299
|
+
it("should handle debounced events", async () => {
|
|
300
|
+
const events: GraphEvent<typeof TestSchema>[] = [];
|
|
301
|
+
const subscription = graph
|
|
302
|
+
.observe()
|
|
303
|
+
.event("event1")
|
|
304
|
+
.subscribe((e) => events.push(e));
|
|
305
|
+
|
|
306
|
+
await graph.emit("event1", { value: 1 });
|
|
307
|
+
await graph.emit("event1", { value: 2 });
|
|
308
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
309
|
+
subscription.unsubscribe();
|
|
310
|
+
|
|
311
|
+
expect(events.length).to.equal(2);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Tests event correlation functionality
|
|
316
|
+
* Validates that:
|
|
317
|
+
* - Multiple events can be correlated
|
|
318
|
+
* - Correlation conditions are properly evaluated
|
|
319
|
+
* - Timeout handling works correctly
|
|
320
|
+
* - Events are captured in correct order
|
|
321
|
+
*/
|
|
322
|
+
it("should wait for correlated events", async () => {
|
|
323
|
+
const promise = observer.waitForCorrelatedEvents(
|
|
324
|
+
["eventA", "eventB"],
|
|
325
|
+
1000,
|
|
326
|
+
(events) => events.every((e) => e.payload?.status === "success")
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
// Émettre les événements immédiatement
|
|
330
|
+
eventSubject.next({
|
|
331
|
+
type: "eventA",
|
|
332
|
+
payload: { status: "success" },
|
|
333
|
+
timestamp: Date.now(),
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
eventSubject.next({
|
|
337
|
+
type: "eventB",
|
|
338
|
+
payload: { status: "success" },
|
|
339
|
+
timestamp: Date.now(),
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
const events = await promise;
|
|
343
|
+
expect(events).to.have.length(2);
|
|
344
|
+
expect(events[0].type).to.equal("eventA");
|
|
345
|
+
expect(events[1].type).to.equal("eventB");
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
afterEach(() => {
|
|
349
|
+
destroySubject.next();
|
|
350
|
+
destroySubject.complete();
|
|
351
|
+
eventSubject.complete();
|
|
352
|
+
stateSubject.complete();
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Test suite for workflow observation functionality
|
|
358
|
+
* Validates the ability to monitor complete workflow execution
|
|
359
|
+
*/
|
|
360
|
+
describe("Workflow Observation", () => {
|
|
361
|
+
/**
|
|
362
|
+
* Tests complete workflow observation
|
|
363
|
+
* Validates that:
|
|
364
|
+
* - Entire workflow execution is tracked
|
|
365
|
+
* - State transitions are captured
|
|
366
|
+
* - Final state reflects completed workflow
|
|
367
|
+
*/
|
|
368
|
+
it("should observe complete workflow", async () => {
|
|
369
|
+
const states: any[] = [];
|
|
370
|
+
const node: GraphNodeConfig<typeof TestSchema> = {
|
|
371
|
+
name: "testNode",
|
|
372
|
+
execute: async (context) => {
|
|
373
|
+
context.status = "pending";
|
|
374
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
375
|
+
context.status = "completed";
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
graph.addNode(node);
|
|
380
|
+
const subscription = graph
|
|
381
|
+
.observe()
|
|
382
|
+
.node("testNode")
|
|
383
|
+
.subscribe((state) => states.push(state));
|
|
384
|
+
|
|
385
|
+
await graph.execute("testNode");
|
|
386
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
387
|
+
subscription.unsubscribe();
|
|
388
|
+
|
|
389
|
+
expect(states.length).to.be.greaterThan(0);
|
|
390
|
+
expect(states[states.length - 1].status).to.equal("completed");
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
});
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { GraphFlow } from "../../execution";
|
|
3
|
+
import { nodeRegistry } from "../../execution/registry";
|
|
4
|
+
import { ParallelNodeConfig } from "../../execution/types.parallel";
|
|
5
|
+
import { GraphContext } from "../../types";
|
|
6
|
+
|
|
7
|
+
describe("Fork-Join Parallelism", () => {
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
// Nettoyer le registry avant chaque test
|
|
10
|
+
(nodeRegistry as any).executeFunctions.clear();
|
|
11
|
+
(nodeRegistry as any).nodeConfigs.clear();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("should execute branches in parallel with Promise.all", async () => {
|
|
15
|
+
const executionTimes: number[] = [];
|
|
16
|
+
const startTime = Date.now();
|
|
17
|
+
|
|
18
|
+
const nodes: ParallelNodeConfig<any>[] = [
|
|
19
|
+
{
|
|
20
|
+
name: "A",
|
|
21
|
+
execute: async (ctx: any) => {
|
|
22
|
+
ctx.value = 1;
|
|
23
|
+
},
|
|
24
|
+
parallel: { enabled: true, joinNode: "C" },
|
|
25
|
+
next: ["B1", "B2", "B3"],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "B1",
|
|
29
|
+
execute: async (ctx: any) => {
|
|
30
|
+
const start = Date.now();
|
|
31
|
+
await new Promise(r => setTimeout(r, 100));
|
|
32
|
+
executionTimes.push(Date.now() - start);
|
|
33
|
+
ctx.results = [...(ctx.results || []), "B1"];
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "B2",
|
|
38
|
+
execute: async (ctx: any) => {
|
|
39
|
+
const start = Date.now();
|
|
40
|
+
await new Promise(r => setTimeout(r, 50));
|
|
41
|
+
executionTimes.push(Date.now() - start);
|
|
42
|
+
ctx.results = [...(ctx.results || []), "B2"];
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "B3",
|
|
47
|
+
execute: async (ctx: any) => {
|
|
48
|
+
const start = Date.now();
|
|
49
|
+
await new Promise(r => setTimeout(r, 150));
|
|
50
|
+
executionTimes.push(Date.now() - start);
|
|
51
|
+
ctx.results = [...(ctx.results || []), "B3"];
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "C",
|
|
56
|
+
execute: async (ctx: any) => {
|
|
57
|
+
ctx.value = 2;
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const graph = new GraphFlow({
|
|
63
|
+
name: "fork-join-test",
|
|
64
|
+
schema: { parse: (ctx: any) => ctx } as any,
|
|
65
|
+
context: { value: 0, results: [] as string[] },
|
|
66
|
+
nodes: nodes,
|
|
67
|
+
entryNode: "A",
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Enregistrer les nodes
|
|
71
|
+
nodes.forEach(node => nodeRegistry.registerParallel(node));
|
|
72
|
+
|
|
73
|
+
const context = await graph.execute("A");
|
|
74
|
+
|
|
75
|
+
const totalTime = Date.now() - startTime;
|
|
76
|
+
|
|
77
|
+
expect(context.value).to.equal(2);
|
|
78
|
+
expect(context.results).to.have.length(3);
|
|
79
|
+
expect(context.results).to.include("B1");
|
|
80
|
+
expect(context.results).to.include("B2");
|
|
81
|
+
expect(context.results).to.include("B3");
|
|
82
|
+
|
|
83
|
+
// Le temps total devrait être proche du max(100, 50, 150) = 150ms
|
|
84
|
+
// et non 100+50+150 = 300ms (séquentiel)
|
|
85
|
+
expect(totalTime).to.be.lessThan(250); // Marge de manœuvre
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("should merge contexts with deep-merge by default", async () => {
|
|
89
|
+
const nodes: ParallelNodeConfig<any>[] = [
|
|
90
|
+
{
|
|
91
|
+
name: "start",
|
|
92
|
+
execute: async (ctx: any) => {
|
|
93
|
+
ctx.base = "base";
|
|
94
|
+
},
|
|
95
|
+
parallel: { enabled: true, joinNode: "merge" },
|
|
96
|
+
next: ["branch1", "branch2"],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "branch1",
|
|
100
|
+
execute: async (ctx: any) => {
|
|
101
|
+
ctx.fromBranch1 = "value1";
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "branch2",
|
|
106
|
+
execute: async (ctx: any) => {
|
|
107
|
+
ctx.fromBranch2 = "value2";
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "merge",
|
|
112
|
+
execute: async (ctx: any) => {
|
|
113
|
+
ctx.merged = true;
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
const graph = new GraphFlow({
|
|
119
|
+
name: "merge-test",
|
|
120
|
+
schema: { parse: (ctx: any) => ctx } as any,
|
|
121
|
+
context: {} as any,
|
|
122
|
+
nodes: nodes,
|
|
123
|
+
entryNode: "start",
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
nodes.forEach(node => nodeRegistry.registerParallel(node));
|
|
127
|
+
|
|
128
|
+
const context = await graph.execute("start");
|
|
129
|
+
|
|
130
|
+
expect(context.base).to.equal("base");
|
|
131
|
+
expect(context.fromBranch1).to.equal("value1");
|
|
132
|
+
expect(context.fromBranch2).to.equal("value2");
|
|
133
|
+
expect(context.merged).to.be.true;
|
|
134
|
+
});
|
|
135
|
+
});
|