@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.
- 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 +411 -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,222 @@
|
|
|
1
|
+
import { ChatOllama } from '@langchain/ollama';
|
|
2
|
+
import { StateGraph, Annotation } from '@langchain/langgraph';
|
|
3
|
+
import { google } from 'googleapis';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
|
|
7
|
+
// Initialize Ollama
|
|
8
|
+
const model = new ChatOllama({
|
|
9
|
+
model: 'llama3:latest',
|
|
10
|
+
baseUrl: 'http://localhost:11434',
|
|
11
|
+
temperature: 0,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// Gmail client
|
|
15
|
+
function createGmailClient() {
|
|
16
|
+
const tokenPath = path.join(__dirname, '../gmail_token.json');
|
|
17
|
+
const credentials = JSON.parse(fs.readFileSync(path.join(__dirname, '../client_secret.json'), 'utf8'));
|
|
18
|
+
const token = JSON.parse(fs.readFileSync(tokenPath, 'utf8'));
|
|
19
|
+
|
|
20
|
+
const oauth2Client = new google.auth.OAuth2(
|
|
21
|
+
credentials.web.client_id,
|
|
22
|
+
credentials.web.client_secret,
|
|
23
|
+
'http://localhost:3000/oauth2callback'
|
|
24
|
+
);
|
|
25
|
+
oauth2Client.setCredentials(token);
|
|
26
|
+
return google.gmail({ version: 'v1', auth: oauth2Client });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Fetch mails
|
|
30
|
+
async function fetchMails(gmail: any, maxResults = 5) {
|
|
31
|
+
console.log(' [Fetch] Fetching mails from Gmail API...');
|
|
32
|
+
const res = await gmail.users.messages.list({
|
|
33
|
+
userId: 'me',
|
|
34
|
+
maxResults,
|
|
35
|
+
q: '',
|
|
36
|
+
});
|
|
37
|
+
const messages = res.data.messages || [];
|
|
38
|
+
const mails: any[] = [];
|
|
39
|
+
for (const msg of messages) {
|
|
40
|
+
const detail = await gmail.users.messages.get({
|
|
41
|
+
userId: 'me',
|
|
42
|
+
id: msg.id!,
|
|
43
|
+
format: 'metadata',
|
|
44
|
+
metadataHeaders: ['Subject', 'From'],
|
|
45
|
+
});
|
|
46
|
+
const headers = detail.data.payload?.headers || [];
|
|
47
|
+
mails.push({
|
|
48
|
+
id: msg.id,
|
|
49
|
+
subject: headers.find((h: any) => h.name === 'Subject')?.value || '(no subject)',
|
|
50
|
+
from: headers.find((h: any) => h.name === 'From')?.value || '(unknown)',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return mails;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Summarize
|
|
57
|
+
async function summarizeMails(mails: any[]) {
|
|
58
|
+
console.log(' [Summarize] Summarizing with LLM...');
|
|
59
|
+
const mailText = mails.map((m: any) => `From: ${m.from}\nSubject: ${m.subject}`).join('\n\n');
|
|
60
|
+
const prompt = `Summarize these emails in 3 bullet points max:\n\n${mailText}\n\nRespond in JSON: {"summary": "..."}`;
|
|
61
|
+
|
|
62
|
+
const response = await model.invoke([{ role: 'user', content: prompt }]);
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(response.content as string);
|
|
65
|
+
return parsed.summary;
|
|
66
|
+
} catch {
|
|
67
|
+
return response.content;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// LangGraph workflow
|
|
72
|
+
const MailState = Annotation.Root({
|
|
73
|
+
messages: Annotation<Array<{ role: 'user' | 'assistant'; content: string }>>({
|
|
74
|
+
reducer: (curr, update) => curr.concat(update),
|
|
75
|
+
}),
|
|
76
|
+
mails: Annotation<any[]>(),
|
|
77
|
+
summary: Annotation<string>(),
|
|
78
|
+
maxMails: Annotation<number>(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const workflow = new StateGraph(MailState)
|
|
82
|
+
.addNode('fetch_mails', async (state) => {
|
|
83
|
+
const gmail = createGmailClient();
|
|
84
|
+
const mails = await fetchMails(gmail, state.maxMails || 5);
|
|
85
|
+
console.log(` [LangGraph] Fetched ${mails.length} mails`);
|
|
86
|
+
return { mails };
|
|
87
|
+
})
|
|
88
|
+
.addNode('summarize', async (state) => {
|
|
89
|
+
const summary = await summarizeMails(state.mails);
|
|
90
|
+
console.log(` [LangGraph] Summary: ${summary}`);
|
|
91
|
+
return { summary };
|
|
92
|
+
})
|
|
93
|
+
.addEdge('__start__', 'fetch_mails')
|
|
94
|
+
.addEdge('fetch_mails', 'summarize')
|
|
95
|
+
.addEdge('summarize', '__end__');
|
|
96
|
+
|
|
97
|
+
const graph = workflow.compile();
|
|
98
|
+
|
|
99
|
+
async function runLangGraph() {
|
|
100
|
+
console.log('\n🚀 Starting LangGraph benchmark...\n');
|
|
101
|
+
const startTime = Date.now();
|
|
102
|
+
const startMemory = process.memoryUsage().heapUsed;
|
|
103
|
+
|
|
104
|
+
const result = await graph.invoke({
|
|
105
|
+
messages: [{ role: 'user', content: 'Fetch 5 mails and summarize' }],
|
|
106
|
+
maxMails: 5,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const endTime = Date.now();
|
|
110
|
+
const endMemory = process.memoryUsage().heapUsed;
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
framework: 'LangGraph',
|
|
114
|
+
totalTime: endTime - startTime,
|
|
115
|
+
llmCalls: 1,
|
|
116
|
+
memoryUsed: endMemory - startMemory,
|
|
117
|
+
summary: result.summary,
|
|
118
|
+
mailsCount: result.mails?.length || 0,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// CortexFlow simulation (lightweight)
|
|
123
|
+
async function runCortexFlow() {
|
|
124
|
+
console.log('\n🚀 Starting CortexFlow benchmark...\n');
|
|
125
|
+
const startTime = Date.now();
|
|
126
|
+
const startMemory = process.memoryUsage().heapUsed;
|
|
127
|
+
let llmCalls = 0;
|
|
128
|
+
|
|
129
|
+
const llmCall = async (prompt: string) => {
|
|
130
|
+
llmCalls++;
|
|
131
|
+
const response = await fetch('http://localhost:11434/api/generate', {
|
|
132
|
+
method: 'POST',
|
|
133
|
+
headers: { 'Content-Type': 'application/json' },
|
|
134
|
+
body: JSON.stringify({
|
|
135
|
+
model: 'llama3:latest',
|
|
136
|
+
prompt,
|
|
137
|
+
stream: false,
|
|
138
|
+
format: 'json',
|
|
139
|
+
}),
|
|
140
|
+
signal: AbortSignal.timeout(30000),
|
|
141
|
+
});
|
|
142
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
143
|
+
const data = await response.json();
|
|
144
|
+
return data.response;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const gmail = createGmailClient();
|
|
148
|
+
|
|
149
|
+
// Simulate intent classification
|
|
150
|
+
llmCalls++;
|
|
151
|
+
const intent = await llmCall(`Classify intent: "fetch 5 mails". Possible: FETCH_MAILS, SUMMARIZE. JSON: {"intent": "...", "confidence": 0.9}`);
|
|
152
|
+
|
|
153
|
+
// Fetch mails
|
|
154
|
+
const mails = await fetchMails(gmail, 5);
|
|
155
|
+
|
|
156
|
+
// Summarize
|
|
157
|
+
const summary = await summarizeMails(mails);
|
|
158
|
+
|
|
159
|
+
const endTime = Date.now();
|
|
160
|
+
const endMemory = process.memoryUsage().heapUsed;
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
framework: 'CortexFlow',
|
|
164
|
+
totalTime: endTime - startTime,
|
|
165
|
+
llmCalls,
|
|
166
|
+
memoryUsed: endMemory - startMemory,
|
|
167
|
+
summary,
|
|
168
|
+
mailsCount: mails.length,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Main benchmark
|
|
173
|
+
async function main() {
|
|
174
|
+
console.log('═══════════════════════════════════════════');
|
|
175
|
+
console.log(' CortexFlow vs LangGraph Benchmark');
|
|
176
|
+
console.log(' Scenario: Fetch 5 Gmail + LLM Summarization');
|
|
177
|
+
console.log('═══════════════════════════════════════════\n');
|
|
178
|
+
|
|
179
|
+
const cortexResult = await runCortexFlow();
|
|
180
|
+
const langGraphResult = await runLangGraph();
|
|
181
|
+
|
|
182
|
+
console.log('\n═══════════════════════════════════════════');
|
|
183
|
+
console.log(' RESULTS');
|
|
184
|
+
console.log('═══════════════════════════════════════════\n');
|
|
185
|
+
|
|
186
|
+
console.log('Framework'.padEnd(20) + 'CortexFlow'.padEnd(20) + 'LangGraph');
|
|
187
|
+
console.log('-'.repeat(60));
|
|
188
|
+
console.log(
|
|
189
|
+
'Total Time'.padEnd(20) +
|
|
190
|
+
`${cortexResult.totalTime}ms`.padEnd(20) +
|
|
191
|
+
`${langGraphResult.totalTime}ms`
|
|
192
|
+
);
|
|
193
|
+
console.log(
|
|
194
|
+
'LLM Calls'.padEnd(20) +
|
|
195
|
+
`${cortexResult.llmCalls}`.padEnd(20) +
|
|
196
|
+
`${langGraphResult.llmCalls}`
|
|
197
|
+
);
|
|
198
|
+
console.log(
|
|
199
|
+
'Memory Used'.padEnd(20) +
|
|
200
|
+
`${(cortexResult.memoryUsed / 1024 / 1024).toFixed(2)}MB`.padEnd(20) +
|
|
201
|
+
`${(langGraphResult.memoryUsed / 1024 / 1024).toFixed(2)}MB`
|
|
202
|
+
);
|
|
203
|
+
console.log(
|
|
204
|
+
'Mails Fetched'.padEnd(20) +
|
|
205
|
+
`${cortexResult.mailsCount}`.padEnd(20) +
|
|
206
|
+
`${langGraphResult.mailsCount}`
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
console.log('\n─────────────────────────────────────────────');
|
|
210
|
+
console.log('Summary Comparison:');
|
|
211
|
+
console.log('CortexFlow:', cortexResult.summary?.substring(0, 100) + '...');
|
|
212
|
+
console.log('LangGraph:', langGraphResult.summary?.substring(0, 100) + '...');
|
|
213
|
+
|
|
214
|
+
if (langGraphResult.totalTime > 0) {
|
|
215
|
+
const speedup = (langGraphResult.totalTime / cortexResult.totalTime).toFixed(2);
|
|
216
|
+
console.log(`\n⚡ CortexFlow is ${speedup}x faster than LangGraph`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
console.log('\n═══════════════════════════════════════════\n');
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
main().catch(console.error);
|
package/cli-dev.ts
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file cli-dev.ts
|
|
3
|
+
* @description CortexFlow interactive development REPL.
|
|
4
|
+
*
|
|
5
|
+
* Provides a lightweight command-line debugger for Petri Net workflows.
|
|
6
|
+
* Load a JSON workflow definition, inspect token state, fire transitions manually
|
|
7
|
+
* or automatically, inject tokens, and export the graph to DOT format — all
|
|
8
|
+
* without writing a single line of test code.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```sh
|
|
12
|
+
* npx ts-node cli-dev.ts [workflow.json]
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Commands available at the prompt:
|
|
16
|
+
* - `load <file.json>` — Load a workflow definition from disk
|
|
17
|
+
* - `show [placeId]` — Display current token marking (optionally filtered to one place)
|
|
18
|
+
* - `enabled` — List all currently enabled transitions
|
|
19
|
+
* - `step <transitionId>` — Fire a single transition
|
|
20
|
+
* - `auto` — Auto-fire transitions until the net is blocked (max 100 steps)
|
|
21
|
+
* - `inject <placeId> [json]` — Inject a token into a place
|
|
22
|
+
* - `history` — Show the ordered transition fire history
|
|
23
|
+
* - `dot` — Print a Graphviz DOT representation of the net
|
|
24
|
+
* - `reset` — Reset marking to the initial state
|
|
25
|
+
* - `help` — Print this command reference
|
|
26
|
+
* - `exit` — Quit the REPL
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import * as readline from 'readline';
|
|
30
|
+
import { PetriNet, TransitionResult } from './routing/index';
|
|
31
|
+
import * as fs from 'fs';
|
|
32
|
+
import * as path from 'path';
|
|
33
|
+
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Types
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* JSON schema for a workflow definition file loaded by the `load` command.
|
|
40
|
+
*
|
|
41
|
+
* Example file:
|
|
42
|
+
* ```json
|
|
43
|
+
* {
|
|
44
|
+
* "name": "approval_flow",
|
|
45
|
+
* "places": [
|
|
46
|
+
* { "id": "idle", "type": "initial", "tokens": [{ "id": "start" }] },
|
|
47
|
+
* { "id": "pending", "type": "normal" },
|
|
48
|
+
* { "id": "approved", "type": "final" }
|
|
49
|
+
* ],
|
|
50
|
+
* "transitions": [
|
|
51
|
+
* { "id": "submit", "from": ["idle"], "to": "pending" },
|
|
52
|
+
* { "id": "approve", "from": ["pending"], "to": "approved" }
|
|
53
|
+
* ]
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
interface WorkflowDefinition {
|
|
58
|
+
name: string;
|
|
59
|
+
places: Array<{
|
|
60
|
+
id: string;
|
|
61
|
+
type: 'initial' | 'normal' | 'final';
|
|
62
|
+
tokens?: Array<{ id: string; data?: any }>;
|
|
63
|
+
}>;
|
|
64
|
+
transitions: Array<{
|
|
65
|
+
id: string;
|
|
66
|
+
from: string[];
|
|
67
|
+
to: string | string[];
|
|
68
|
+
description?: string;
|
|
69
|
+
}>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Helpers
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Reads and parses a workflow definition JSON file, building a live `PetriNet`.
|
|
78
|
+
*
|
|
79
|
+
* @param filePath - Path to the JSON file (relative or absolute).
|
|
80
|
+
* @returns A fully configured `PetriNet` instance.
|
|
81
|
+
* @throws If the file does not exist or the JSON is malformed.
|
|
82
|
+
*/
|
|
83
|
+
function loadWorkflow(filePath: string): PetriNet {
|
|
84
|
+
const absPath = path.resolve(filePath);
|
|
85
|
+
if (!fs.existsSync(absPath)) {
|
|
86
|
+
throw new Error(`Workflow file not found: ${absPath}`);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const def: WorkflowDefinition = JSON.parse(fs.readFileSync(absPath, 'utf8'));
|
|
90
|
+
const net = new PetriNet(def.name || 'loaded');
|
|
91
|
+
|
|
92
|
+
for (const place of def.places) {
|
|
93
|
+
net.addPlace({
|
|
94
|
+
id: place.id,
|
|
95
|
+
type: place.type,
|
|
96
|
+
tokens: place.tokens?.map(t => ({
|
|
97
|
+
id: t.id,
|
|
98
|
+
data: t.data || {},
|
|
99
|
+
createdAt: Date.now(),
|
|
100
|
+
})) || [],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
for (const transition of def.transitions) {
|
|
105
|
+
net.addTransition({
|
|
106
|
+
id: transition.id,
|
|
107
|
+
from: transition.from,
|
|
108
|
+
to: transition.to,
|
|
109
|
+
description: transition.description,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return net;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Prints the full command reference to stdout. */
|
|
117
|
+
function showHelp(): void {
|
|
118
|
+
console.log(`
|
|
119
|
+
CortexFlow DEV CLI — Interactive Petri Net Debugger
|
|
120
|
+
════════════════════════════════════════════════════
|
|
121
|
+
|
|
122
|
+
Commands:
|
|
123
|
+
load <file.json> Load a workflow from a JSON file
|
|
124
|
+
show [placeId] Display token marking (all places, or one specific place)
|
|
125
|
+
enabled List currently enabled transitions
|
|
126
|
+
step <transitionId> Fire a specific transition
|
|
127
|
+
auto Auto-fire all enabled transitions until blocked (max 100 steps)
|
|
128
|
+
inject <placeId> [json] Inject a token into a place (optional JSON data)
|
|
129
|
+
history Show the ordered transition fire history
|
|
130
|
+
dot Export the net to Graphviz DOT format
|
|
131
|
+
reset Reset marking to the initial state
|
|
132
|
+
help / ? Show this help message
|
|
133
|
+
exit / quit Quit the REPL
|
|
134
|
+
|
|
135
|
+
Examples:
|
|
136
|
+
load ./examples/approval_flow.json
|
|
137
|
+
show
|
|
138
|
+
show idle
|
|
139
|
+
step submit
|
|
140
|
+
inject pending {"priority":"high"}
|
|
141
|
+
auto
|
|
142
|
+
dot > graph.dot
|
|
143
|
+
`);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Renders the full token marking of a Petri net to stdout.
|
|
148
|
+
*
|
|
149
|
+
* Each place is prefixed with an icon reflecting its type:
|
|
150
|
+
* - 🟢 initial
|
|
151
|
+
* - 🔴 final
|
|
152
|
+
* - ⚪ normal
|
|
153
|
+
*
|
|
154
|
+
* Up to 3 token payloads are shown inline; excess tokens are summarised.
|
|
155
|
+
*
|
|
156
|
+
* @param net - The `PetriNet` whose marking to display.
|
|
157
|
+
*/
|
|
158
|
+
function showMarking(net: PetriNet): void {
|
|
159
|
+
console.log('\n📊 Current Marking:');
|
|
160
|
+
const places = (net as any).places as Map<string, any>;
|
|
161
|
+
const marking = (net as any).state.marking as Map<string, any[]>;
|
|
162
|
+
|
|
163
|
+
for (const [pid, place] of places) {
|
|
164
|
+
const tokens = marking.get(pid) || [];
|
|
165
|
+
const icon = place.type === 'initial' ? '🟢' : place.type === 'final' ? '🔴' : '⚪';
|
|
166
|
+
console.log(` ${icon} ${pid} (${place.type}): ${tokens.length} token(s)`);
|
|
167
|
+
|
|
168
|
+
const preview = tokens.slice(0, 3);
|
|
169
|
+
for (const token of preview) {
|
|
170
|
+
console.log(` - ${token.id}: ${JSON.stringify(token.data || {})}`);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (tokens.length > 3) {
|
|
174
|
+
console.log(` … and ${tokens.length - 3} more`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
console.log();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
// Main REPL
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
|
|
184
|
+
async function main(): Promise<void> {
|
|
185
|
+
const rl = readline.createInterface({
|
|
186
|
+
input: process.stdin,
|
|
187
|
+
output: process.stdout,
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
let net: PetriNet | null = null;
|
|
191
|
+
const args = process.argv.slice(2);
|
|
192
|
+
|
|
193
|
+
console.log('\n🚀 CortexFlow DEV CLI\n');
|
|
194
|
+
|
|
195
|
+
if (args.length > 0) {
|
|
196
|
+
try {
|
|
197
|
+
net = loadWorkflow(args[0]);
|
|
198
|
+
console.log(`✅ Loaded workflow: ${net.name}\n`);
|
|
199
|
+
showMarking(net);
|
|
200
|
+
} catch (error) {
|
|
201
|
+
console.error(`❌ Error loading workflow:`, (error as Error).message);
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
console.log('No workflow file provided. Use "load <file>" to load one.\n');
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const prompt = () => {
|
|
209
|
+
const prefix = net ? `${net.name}> ` : 'cortex> ';
|
|
210
|
+
rl.question(prefix, async (input) => {
|
|
211
|
+
const parts = input.trim().split(/\s+/);
|
|
212
|
+
const cmd = parts[0]?.toLowerCase();
|
|
213
|
+
|
|
214
|
+
if (!cmd) {
|
|
215
|
+
prompt();
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
try {
|
|
220
|
+
switch (cmd) {
|
|
221
|
+
// ── load ──────────────────────────────────────────────────────────
|
|
222
|
+
case 'load': {
|
|
223
|
+
if (!parts[1]) { console.log('Usage: load <file.json>'); break; }
|
|
224
|
+
try {
|
|
225
|
+
net = loadWorkflow(parts[1]);
|
|
226
|
+
console.log(`✅ Loaded workflow: ${net.name}\n`);
|
|
227
|
+
showMarking(net);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
console.error(`❌ Error:`, (error as Error).message);
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// ── show ──────────────────────────────────────────────────────────
|
|
235
|
+
case 'show': {
|
|
236
|
+
if (!net) { console.log('No workflow loaded. Use "load" first.'); break; }
|
|
237
|
+
if (parts[1]) {
|
|
238
|
+
const marking = (net as any).state.marking as Map<string, any[]>;
|
|
239
|
+
const tokens = marking.get(parts[1]) || [];
|
|
240
|
+
console.log(`Place ${parts[1]}: ${tokens.length} token(s)`);
|
|
241
|
+
tokens.forEach(t => console.log(` - ${t.id}:`, t.data));
|
|
242
|
+
} else {
|
|
243
|
+
showMarking(net);
|
|
244
|
+
}
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ── enabled ───────────────────────────────────────────────────────
|
|
249
|
+
case 'enabled': {
|
|
250
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
251
|
+
const enabled = net.getEnabledTransitions();
|
|
252
|
+
if (enabled.length === 0) {
|
|
253
|
+
console.log('⚠️ No enabled transitions');
|
|
254
|
+
} else {
|
|
255
|
+
console.log('✅ Enabled transitions:');
|
|
256
|
+
enabled.forEach(tid => console.log(` - ${tid}`));
|
|
257
|
+
}
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// ── step ──────────────────────────────────────────────────────────
|
|
262
|
+
case 'step': {
|
|
263
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
264
|
+
const tid = parts[1];
|
|
265
|
+
if (!tid) { console.log('Usage: step <transitionId>'); break; }
|
|
266
|
+
|
|
267
|
+
const result: TransitionResult = await net.fireTransition(tid);
|
|
268
|
+
if (result.success) {
|
|
269
|
+
console.log(`✅ Transition "${tid}" fired successfully`);
|
|
270
|
+
if (result.consumedTokens?.length) {
|
|
271
|
+
console.log(` Consumed: ${result.consumedTokens.length} token(s)`);
|
|
272
|
+
}
|
|
273
|
+
if (result.producedTokens?.length) {
|
|
274
|
+
console.log(` Produced: ${result.producedTokens.length} token(s)`);
|
|
275
|
+
}
|
|
276
|
+
showMarking(net);
|
|
277
|
+
} else {
|
|
278
|
+
console.log(`❌ Failed to fire "${tid}": ${result.error || 'Unknown error'}`);
|
|
279
|
+
}
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// ── auto ──────────────────────────────────────────────────────────
|
|
284
|
+
case 'auto': {
|
|
285
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
286
|
+
let steps = 0;
|
|
287
|
+
const MAX_AUTO_STEPS = 100;
|
|
288
|
+
|
|
289
|
+
while (true) {
|
|
290
|
+
const enabled = net.getEnabledTransitions();
|
|
291
|
+
if (enabled.length === 0) {
|
|
292
|
+
console.log(`⏹ Blocked after ${steps} step(s)`);
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const tid = enabled[0];
|
|
297
|
+
const result = await net.fireTransition(tid);
|
|
298
|
+
if (!result.success) {
|
|
299
|
+
console.log(`❌ Failed at step ${steps + 1} ("${tid}"): ${result.error}`);
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
steps++;
|
|
304
|
+
process.stdout.write(` Step ${steps}: "${tid}"`);
|
|
305
|
+
|
|
306
|
+
// Inline token counts for the first 10 steps to avoid flooding the terminal.
|
|
307
|
+
if (steps <= 10) {
|
|
308
|
+
const marking = (net as any).state.marking as Map<string, any[]>;
|
|
309
|
+
const nonEmpty = Array.from(marking.entries())
|
|
310
|
+
.filter(([, tokens]) => tokens.length > 0)
|
|
311
|
+
.map(([pid, tokens]) => `${pid}:${tokens.length}`)
|
|
312
|
+
.join(' ');
|
|
313
|
+
process.stdout.write(` [${nonEmpty}]`);
|
|
314
|
+
}
|
|
315
|
+
process.stdout.write('\n');
|
|
316
|
+
|
|
317
|
+
if (steps >= MAX_AUTO_STEPS) {
|
|
318
|
+
console.log(`⚠️ Stopping auto after ${MAX_AUTO_STEPS} steps`);
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
showMarking(net);
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// ── inject ────────────────────────────────────────────────────────
|
|
328
|
+
case 'inject': {
|
|
329
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
330
|
+
const placeId = parts[1];
|
|
331
|
+
if (!placeId) { console.log('Usage: inject <placeId> [jsonData]'); break; }
|
|
332
|
+
|
|
333
|
+
const jsonStr = parts.slice(2).join(' ');
|
|
334
|
+
const data = jsonStr ? JSON.parse(jsonStr) : {};
|
|
335
|
+
const marking = (net as any).state.marking as Map<string, any[]>;
|
|
336
|
+
|
|
337
|
+
if (!marking.has(placeId)) {
|
|
338
|
+
console.log(`❌ Place "${placeId}" not found`);
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
marking.get(placeId)!.push({
|
|
343
|
+
id: `token_${Date.now()}`,
|
|
344
|
+
data,
|
|
345
|
+
createdAt: Date.now(),
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
console.log(`✅ Token injected into "${placeId}"`);
|
|
349
|
+
showMarking(net);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// ── history ───────────────────────────────────────────────────────
|
|
354
|
+
case 'history': {
|
|
355
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
356
|
+
const history = (net as any).state.history as string[];
|
|
357
|
+
if (history.length === 0) {
|
|
358
|
+
console.log('No transition history yet.');
|
|
359
|
+
} else {
|
|
360
|
+
console.log('📜 Transition History:');
|
|
361
|
+
history.forEach((tid, i) => console.log(` ${i + 1}. ${tid}`));
|
|
362
|
+
}
|
|
363
|
+
break;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// ── dot ───────────────────────────────────────────────────────────
|
|
367
|
+
case 'dot': {
|
|
368
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
369
|
+
console.log(net.toDot());
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// ── reset ─────────────────────────────────────────────────────────
|
|
374
|
+
case 'reset': {
|
|
375
|
+
if (!net) { console.log('No workflow loaded.'); break; }
|
|
376
|
+
const places = (net as any).places as Map<string, any>;
|
|
377
|
+
const marking = (net as any).state.marking as Map<string, any[]>;
|
|
378
|
+
|
|
379
|
+
for (const [pid, place] of places) {
|
|
380
|
+
if (place.type === 'initial') {
|
|
381
|
+
marking.set(pid, place.tokens.map((t: any) => ({ ...t })));
|
|
382
|
+
} else {
|
|
383
|
+
marking.set(pid, []);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
(net as any).state.history = [];
|
|
387
|
+
console.log('✅ Reset to initial marking\n');
|
|
388
|
+
showMarking(net);
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// ── help ──────────────────────────────────────────────────────────
|
|
393
|
+
case 'help':
|
|
394
|
+
case '?':
|
|
395
|
+
showHelp();
|
|
396
|
+
break;
|
|
397
|
+
|
|
398
|
+
// ── exit ──────────────────────────────────────────────────────────
|
|
399
|
+
case 'exit':
|
|
400
|
+
case 'quit':
|
|
401
|
+
console.log('\n👋 Goodbye!\n');
|
|
402
|
+
rl.close();
|
|
403
|
+
process.exit(0);
|
|
404
|
+
|
|
405
|
+
default:
|
|
406
|
+
console.log(`Unknown command: "${cmd}". Type "help" for available commands.`);
|
|
407
|
+
}
|
|
408
|
+
} catch (error) {
|
|
409
|
+
console.error(`❌ Error:`, (error as Error).message);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
prompt();
|
|
413
|
+
});
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
prompt();
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { GraphFlow } from "../execution/index";
|
|
2
|
+
import { AgentContext, AgentContextSchema } from "../types/agent";
|
|
3
|
+
import { AgentLogger } from "./tools/logger";
|
|
4
|
+
import { BaseAgent } from "./base";
|
|
5
|
+
export interface CognitiveNodeContext {
|
|
6
|
+
executor: {
|
|
7
|
+
makeDecision: (context: AgentContext) => Promise<{
|
|
8
|
+
actions: any[];
|
|
9
|
+
response: string;
|
|
10
|
+
thought?: string;
|
|
11
|
+
}>;
|
|
12
|
+
executeActions: (actions: any[], context: AgentContext) => Promise<void>;
|
|
13
|
+
updateDynamicGoal: (context: AgentContext) => Promise<string>;
|
|
14
|
+
reflect: (context: AgentContext) => Promise<{
|
|
15
|
+
learning: string;
|
|
16
|
+
adjustedGoal?: string;
|
|
17
|
+
}>;
|
|
18
|
+
scheduleTask?: (cron: string, request: string) => Promise<string | null>;
|
|
19
|
+
decomposeTask?: (actions: any[], context: AgentContext) => Promise<{
|
|
20
|
+
groups: any[][];
|
|
21
|
+
response: string;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
baseAgent: BaseAgent;
|
|
25
|
+
logger: AgentLogger;
|
|
26
|
+
maxIterations: number;
|
|
27
|
+
enableClone?: boolean;
|
|
28
|
+
entityResolver?: {
|
|
29
|
+
resolve: (ctx: any) => any;
|
|
30
|
+
getIndex: () => any;
|
|
31
|
+
};
|
|
32
|
+
exploreStrategy?: {
|
|
33
|
+
plan: (candidates: any[], cwd: string) => {
|
|
34
|
+
type: string;
|
|
35
|
+
path: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare function buildAgentWorkflow(ctx: CognitiveNodeContext): GraphFlow<typeof AgentContextSchema>;
|
|
41
|
+
//# sourceMappingURL=agent-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-workflow.d.ts","sourceRoot":"","sources":["../../agent/agent-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAmB,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE;QACR,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzG,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACzE,iBAAiB,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACzE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC3G,CAAC;IACF,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE;QACf,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;QAC3B,QAAQ,EAAE,MAAM,GAAG,CAAC;KACrB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC5F,CAAC;CACH;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,GAAG,SAAS,CAAC,OAAO,kBAAkB,CAAC,CA4hBlG"}
|