@falai/agent 1.2.8 → 2.0.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/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +1 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js → flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +1 -1
- package/dist/providers/AnthropicProvider.js +1 -1
- package/dist/providers/GeminiProvider.d.ts +1 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +1 -1
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +1 -1
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +22 -200
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +14 -0
- package/docs/migration/route-to-flow.md +561 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/providers/AnthropicProvider.ts +2 -2
- package/src/providers/GeminiProvider.ts +2 -2
- package/src/providers/OpenAIProvider.ts +2 -2
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
package/dist/cjs/core/Step.d.ts
CHANGED
|
@@ -1,26 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Step in the route DSL
|
|
3
3
|
*/
|
|
4
|
-
import type { StepRef, StepOptions,
|
|
5
|
-
import {
|
|
4
|
+
import type { StepRef, StepOptions, BranchMap, Instruction, Tool, PrepareResult } from "../types";
|
|
5
|
+
import type { StepResult, BranchSpec, BranchResult } from "../types/flow";
|
|
6
|
+
import { ToolScope, Template, TemplateContext } from "../types";
|
|
7
|
+
import type { ConditionWhen, ConditionIf } from "../types/flow";
|
|
6
8
|
import { Agent } from './Agent';
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when a step's configuration violates auto-step constraints.
|
|
11
|
+
*/
|
|
12
|
+
export declare class FlowConfigurationError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
7
15
|
/**
|
|
8
16
|
* Represents a step within a route
|
|
9
17
|
*/
|
|
10
18
|
export declare class Step<TContext = unknown, TData = unknown> {
|
|
11
19
|
readonly id: string;
|
|
12
20
|
private nextSteps;
|
|
13
|
-
private
|
|
14
|
-
readonly
|
|
21
|
+
private _instructions;
|
|
22
|
+
readonly flowId: string;
|
|
15
23
|
collect?: (keyof TData)[];
|
|
16
24
|
description?: string;
|
|
17
|
-
when?:
|
|
18
|
-
|
|
25
|
+
when?: ConditionWhen;
|
|
26
|
+
if?: ConditionIf<TContext, TData>;
|
|
27
|
+
skip?: ConditionIf<TContext, TData>;
|
|
19
28
|
requires?: (keyof TData)[];
|
|
20
29
|
prompt?: Template<TContext, TData>;
|
|
21
|
-
|
|
22
|
-
|
|
30
|
+
reply?: Template<TContext, TData>;
|
|
31
|
+
prepare?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult>);
|
|
32
|
+
finalize?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult>);
|
|
23
33
|
tools?: (string | Tool<TContext, TData>)[];
|
|
34
|
+
private readonly _auto;
|
|
35
|
+
private readonly _branches?;
|
|
36
|
+
/** Whether this step runs without an LLM call (computational only). */
|
|
37
|
+
get auto(): boolean;
|
|
38
|
+
/** Explicit source-local fork entries, if declared. */
|
|
39
|
+
get branches(): BranchMap<TContext, TData> | undefined;
|
|
24
40
|
private parentAgent?;
|
|
25
41
|
constructor(routeId: string, options?: StepOptions<TContext, TData>, parentAgent?: Agent<TContext, TData>);
|
|
26
42
|
/**
|
|
@@ -30,20 +46,13 @@ export declare class Step<TContext = unknown, TData = unknown> {
|
|
|
30
46
|
configure(config: {
|
|
31
47
|
description?: string;
|
|
32
48
|
collect?: (keyof TData)[];
|
|
33
|
-
|
|
49
|
+
skip?: ConditionIf<TContext, TData>;
|
|
34
50
|
requires?: (keyof TData)[];
|
|
35
51
|
prompt?: Template<TContext, TData>;
|
|
36
52
|
prepare?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
37
53
|
finalize?: string | Tool<TContext, TData> | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
38
54
|
tools?: (string | Tool<TContext, TData>)[];
|
|
39
55
|
}): this;
|
|
40
|
-
/**
|
|
41
|
-
* Shortcut to end the current route
|
|
42
|
-
*
|
|
43
|
-
* @param options - Optional step options for the end step
|
|
44
|
-
* @returns Terminal step result
|
|
45
|
-
*/
|
|
46
|
-
endRoute(options?: Omit<StepOptions<TContext, TData>, "step">): StepResult<TContext, TData>;
|
|
47
56
|
/**
|
|
48
57
|
* Create a transition from this step to another
|
|
49
58
|
*
|
|
@@ -59,18 +68,13 @@ export declare class Step<TContext = unknown, TData = unknown> {
|
|
|
59
68
|
*/
|
|
60
69
|
branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>;
|
|
61
70
|
/**
|
|
62
|
-
* Add
|
|
71
|
+
* Add an instruction to this step.
|
|
63
72
|
*/
|
|
64
|
-
|
|
73
|
+
addInstruction(instruction: Instruction<TContext, TData>): void;
|
|
65
74
|
/**
|
|
66
|
-
* Get
|
|
75
|
+
* Get instructions for this step
|
|
67
76
|
*/
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Evaluate and match active guidelines based on their conditions
|
|
71
|
-
* Returns guidelines that should be active given the current context
|
|
72
|
-
*/
|
|
73
|
-
evaluateGuidelines(context?: TContext, session?: SessionState<TData>, history?: Event[]): Promise<GuidelineMatch<TContext, TData>[]>;
|
|
77
|
+
getInstructions(): Instruction<TContext, TData>[];
|
|
74
78
|
/**
|
|
75
79
|
* Add a tool to this step using the unified Tool interface
|
|
76
80
|
* Creates and adds the tool to step scope in one operation
|
|
@@ -126,7 +130,9 @@ export declare class Step<TContext = unknown, TData = unknown> {
|
|
|
126
130
|
*/
|
|
127
131
|
getTransitions(): Step<TContext, TData>[];
|
|
128
132
|
/**
|
|
129
|
-
* Evaluate when
|
|
133
|
+
* Evaluate when/if conditions using the v2 split logic.
|
|
134
|
+
* `if` (code predicate) evaluates first (free); `when` (AI) evaluates only when `if` passes.
|
|
135
|
+
* Both are combined with AND semantics.
|
|
130
136
|
*/
|
|
131
137
|
evaluateWhen(templateContext: TemplateContext<TContext, TData>): Promise<{
|
|
132
138
|
shouldActivate: boolean;
|
|
@@ -134,9 +140,10 @@ export declare class Step<TContext = unknown, TData = unknown> {
|
|
|
134
140
|
hasProgrammaticConditions: boolean;
|
|
135
141
|
}>;
|
|
136
142
|
/**
|
|
137
|
-
* Evaluate
|
|
143
|
+
* Evaluate the skip condition (if-only shape — code predicates, OR semantics).
|
|
144
|
+
* Returns true if the step should be skipped.
|
|
138
145
|
*/
|
|
139
|
-
|
|
146
|
+
evaluateSkip(templateContext: TemplateContext<TContext, TData>): Promise<{
|
|
140
147
|
shouldSkip: boolean;
|
|
141
148
|
aiContextStrings: string[];
|
|
142
149
|
hasProgrammaticConditions: boolean;
|
|
@@ -153,10 +160,6 @@ export declare class Step<TContext = unknown, TData = unknown> {
|
|
|
153
160
|
* Create a step reference with nextStep capability for chaining
|
|
154
161
|
*/
|
|
155
162
|
private createStepRefWithTransition;
|
|
156
|
-
/**
|
|
157
|
-
* Create a terminal step reference (for END_ROUTE)
|
|
158
|
-
*/
|
|
159
|
-
private createTerminalRef;
|
|
160
163
|
/**
|
|
161
164
|
* Create a transition result for this step
|
|
162
165
|
*/
|
|
@@ -166,5 +169,13 @@ export declare class Step<TContext = unknown, TData = unknown> {
|
|
|
166
169
|
* @returns StepOptions that can be used to create a new step with identical configuration
|
|
167
170
|
*/
|
|
168
171
|
toOptions(): StepOptions<TContext, TData>;
|
|
172
|
+
/**
|
|
173
|
+
* Validate the branches array at construction time.
|
|
174
|
+
* Checks:
|
|
175
|
+
* - Non-empty array
|
|
176
|
+
* - Unconditional entries (no `when` and no `if`) only legal as the last entry
|
|
177
|
+
* - Directive `then` values: at most one position field, no empty `goTo: {}`
|
|
178
|
+
*/
|
|
179
|
+
private validateBranches;
|
|
169
180
|
}
|
|
170
181
|
//# sourceMappingURL=Step.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/core/Step.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/core/Step.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/core/Step.js
CHANGED
|
@@ -3,33 +3,104 @@
|
|
|
3
3
|
* Step in the route DSL
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Step = void 0;
|
|
6
|
+
exports.Step = exports.FlowConfigurationError = void 0;
|
|
7
7
|
const types_1 = require("../types");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when a step's configuration violates auto-step constraints.
|
|
11
|
+
*/
|
|
12
|
+
class FlowConfigurationError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "FlowConfigurationError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.FlowConfigurationError = FlowConfigurationError;
|
|
10
19
|
/**
|
|
11
20
|
* Represents a step within a route
|
|
12
21
|
*/
|
|
13
22
|
class Step {
|
|
23
|
+
/** Whether this step runs without an LLM call (computational only). */
|
|
24
|
+
get auto() {
|
|
25
|
+
return this._auto;
|
|
26
|
+
}
|
|
27
|
+
/** Explicit source-local fork entries, if declared. */
|
|
28
|
+
get branches() {
|
|
29
|
+
return this._branches;
|
|
30
|
+
}
|
|
14
31
|
constructor(routeId, options = {}, parentAgent) {
|
|
15
32
|
this.nextSteps = [];
|
|
16
|
-
this.
|
|
33
|
+
this._instructions = [];
|
|
17
34
|
// Use provided ID or generate a deterministic one
|
|
18
35
|
this.id = options.id || (0, utils_1.generateStepId)(routeId, options.description);
|
|
19
|
-
this.
|
|
36
|
+
this.flowId = routeId;
|
|
20
37
|
this.description = options.description;
|
|
38
|
+
this._auto = options.auto ?? false;
|
|
39
|
+
this._branches = options.branches;
|
|
21
40
|
this.collect = options.collect;
|
|
22
|
-
this.
|
|
41
|
+
this.skip = options.skip;
|
|
23
42
|
this.requires = options.requires;
|
|
24
43
|
this.prompt = options.prompt;
|
|
44
|
+
this.reply = options.reply;
|
|
25
45
|
this.when = options.when;
|
|
46
|
+
this.if = options.if;
|
|
26
47
|
this.prepare = options.prepare;
|
|
27
48
|
this.finalize = options.finalize;
|
|
28
49
|
this.tools = options.tools;
|
|
29
|
-
//
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
50
|
+
// Validate when/if split: functions belong on `if`, not `when`
|
|
51
|
+
if (this.when !== undefined) {
|
|
52
|
+
const whenValue = this.when;
|
|
53
|
+
if (typeof whenValue === 'function') {
|
|
54
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Step "${this.id}" has a function on "when": functions belong on "if" only. Move the function to the "if" field.`);
|
|
55
|
+
}
|
|
56
|
+
if (Array.isArray(whenValue)) {
|
|
57
|
+
for (let i = 0; i < whenValue.length; i++) {
|
|
58
|
+
if (typeof whenValue[i] === 'function') {
|
|
59
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Step "${this.id}" has a function at "when[${i}]": functions belong on "if" only. Move the function to the "if" field.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Validate auto-step shape: auto-steps cannot define prompt, collect, tools, or finalize
|
|
65
|
+
if (this._auto) {
|
|
66
|
+
const violatingFields = [];
|
|
67
|
+
if (this.prompt != null)
|
|
68
|
+
violatingFields.push('prompt');
|
|
69
|
+
if (this.collect != null && this.collect.length > 0)
|
|
70
|
+
violatingFields.push('collect');
|
|
71
|
+
if (this.tools != null && this.tools.length > 0)
|
|
72
|
+
violatingFields.push('tools');
|
|
73
|
+
if (this.finalize != null)
|
|
74
|
+
violatingFields.push('finalize');
|
|
75
|
+
if (violatingFields.length > 0) {
|
|
76
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Auto-step "${this.id}" cannot define: ${violatingFields.join(', ')}. Auto-steps run without an LLM call and must not declare prompt, collect, tools, or finalize. Remove these fields or set auto: false.`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Validate reply-step shape: reply steps cannot define prompt, collect, tools, finalize, or auto: true
|
|
80
|
+
if (this.reply != null) {
|
|
81
|
+
const conflictingFields = [];
|
|
82
|
+
if (this.prompt != null)
|
|
83
|
+
conflictingFields.push('prompt');
|
|
84
|
+
if (this.collect != null && this.collect.length > 0)
|
|
85
|
+
conflictingFields.push('collect');
|
|
86
|
+
if (this.tools != null && this.tools.length > 0)
|
|
87
|
+
conflictingFields.push('tools');
|
|
88
|
+
if (this.finalize != null)
|
|
89
|
+
conflictingFields.push('finalize');
|
|
90
|
+
if (this._auto)
|
|
91
|
+
conflictingFields.push('auto: true');
|
|
92
|
+
if (conflictingFields.length > 0) {
|
|
93
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Step "${this.id}" sets "reply" together with conflicting fields: ${conflictingFields.join(', ')}. A reply step skips the LLM call and cannot define prompt, collect, tools, finalize, or auto: true.`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Validate branches shape
|
|
97
|
+
if (this._branches !== undefined) {
|
|
98
|
+
this.validateBranches(this._branches);
|
|
99
|
+
}
|
|
100
|
+
// Initialize instructions from options
|
|
101
|
+
if (options.instructions) {
|
|
102
|
+
options.instructions.forEach((instruction) => {
|
|
103
|
+
this.addInstruction(instruction);
|
|
33
104
|
});
|
|
34
105
|
}
|
|
35
106
|
// Store reference to parent agent for ToolManager access
|
|
@@ -46,8 +117,8 @@ class Step {
|
|
|
46
117
|
if (config.collect !== undefined) {
|
|
47
118
|
this.collect = config.collect;
|
|
48
119
|
}
|
|
49
|
-
if (config.
|
|
50
|
-
this.
|
|
120
|
+
if (config.skip !== undefined) {
|
|
121
|
+
this.skip = config.skip;
|
|
51
122
|
}
|
|
52
123
|
if (config.requires !== undefined) {
|
|
53
124
|
this.requires = config.requires;
|
|
@@ -66,18 +137,6 @@ class Step {
|
|
|
66
137
|
}
|
|
67
138
|
return this;
|
|
68
139
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Shortcut to end the current route
|
|
71
|
-
*
|
|
72
|
-
* @param options - Optional step options for the end step
|
|
73
|
-
* @returns Terminal step result
|
|
74
|
-
*/
|
|
75
|
-
endRoute(options = {}) {
|
|
76
|
-
return this.nextStep({
|
|
77
|
-
...options,
|
|
78
|
-
step: constants_1.END_ROUTE,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
140
|
/**
|
|
82
141
|
* Create a transition from this step to another
|
|
83
142
|
*
|
|
@@ -85,23 +144,8 @@ class Step {
|
|
|
85
144
|
* @returns StepResult that supports chaining
|
|
86
145
|
*/
|
|
87
146
|
nextStep(spec) {
|
|
88
|
-
// Handle END_ROUTE
|
|
89
|
-
if (spec.step && typeof spec.step === "symbol" && spec.step === constants_1.END_ROUTE) {
|
|
90
|
-
const endStep = new Step(this.routeId, {
|
|
91
|
-
...spec,
|
|
92
|
-
id: constants_1.END_ROUTE_ID,
|
|
93
|
-
}, this.parentAgent);
|
|
94
|
-
this.nextSteps.push(endStep);
|
|
95
|
-
return this.createTerminalRef();
|
|
96
|
-
}
|
|
97
|
-
// Handle direct step reference
|
|
98
|
-
if (spec.step && typeof spec.step !== "symbol") {
|
|
99
|
-
// This is a bit tricky. We need to find the actual Step instance.
|
|
100
|
-
// For now, let's assume the user will provide a Step instance directly.
|
|
101
|
-
// This part might need to be revisited.
|
|
102
|
-
}
|
|
103
147
|
// Create new target step for prompt or tool
|
|
104
|
-
const targetStep = new Step(this.
|
|
148
|
+
const targetStep = new Step(this.flowId, spec, this.parentAgent);
|
|
105
149
|
this.nextSteps.push(targetStep);
|
|
106
150
|
return this.createStepRefWithTransition(targetStep.getRef(), targetStep);
|
|
107
151
|
}
|
|
@@ -119,7 +163,7 @@ class Step {
|
|
|
119
163
|
? { ...branchSpec.step, id: branchSpec.id }
|
|
120
164
|
: branchSpec.step;
|
|
121
165
|
// Create a new step for this branch
|
|
122
|
-
const branchStep = new Step(this.
|
|
166
|
+
const branchStep = new Step(this.flowId, stepOptions, this.parentAgent);
|
|
123
167
|
// Add it to our transitions
|
|
124
168
|
this.nextSteps.push(branchStep);
|
|
125
169
|
// Create a step result for chaining
|
|
@@ -129,56 +173,21 @@ class Step {
|
|
|
129
173
|
return result;
|
|
130
174
|
}
|
|
131
175
|
/**
|
|
132
|
-
* Add
|
|
133
|
-
*/
|
|
134
|
-
addGuideline(guideline) {
|
|
135
|
-
this.guidelines.push(guideline);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get guidelines for this step
|
|
176
|
+
* Add an instruction to this step.
|
|
139
177
|
*/
|
|
140
|
-
|
|
141
|
-
|
|
178
|
+
addInstruction(instruction) {
|
|
179
|
+
this._instructions.push({
|
|
180
|
+
...instruction,
|
|
181
|
+
kind: instruction.kind || 'should',
|
|
182
|
+
id: instruction.id || `instruction_${this.id}_${this._instructions.length}`,
|
|
183
|
+
enabled: instruction.enabled !== false, // Default to true
|
|
184
|
+
});
|
|
142
185
|
}
|
|
143
186
|
/**
|
|
144
|
-
*
|
|
145
|
-
* Returns guidelines that should be active given the current context
|
|
187
|
+
* Get instructions for this step
|
|
146
188
|
*/
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const evaluator = (0, utils_1.createConditionEvaluator)(templateContext);
|
|
150
|
-
const matches = [];
|
|
151
|
-
for (const guideline of this.guidelines) {
|
|
152
|
-
// Skip disabled guidelines
|
|
153
|
-
if (guideline.enabled === false) {
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
if (guideline.condition) {
|
|
157
|
-
const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
|
|
158
|
-
// Include guideline if:
|
|
159
|
-
// 1. No programmatic conditions (only strings) - always active
|
|
160
|
-
// 2. Programmatic conditions evaluate to true
|
|
161
|
-
if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
|
|
162
|
-
const rationale = evaluation.aiContextStrings.length > 0
|
|
163
|
-
? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
|
|
164
|
-
: evaluation.hasProgrammaticConditions
|
|
165
|
-
? "Programmatic condition evaluated to true"
|
|
166
|
-
: "Always active (no conditions)";
|
|
167
|
-
matches.push({
|
|
168
|
-
guideline,
|
|
169
|
-
rationale
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
// No condition means always active
|
|
175
|
-
matches.push({
|
|
176
|
-
guideline,
|
|
177
|
-
rationale: "Always active (no conditions)"
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return matches;
|
|
189
|
+
getInstructions() {
|
|
190
|
+
return [...this._instructions];
|
|
182
191
|
}
|
|
183
192
|
/**
|
|
184
193
|
* Add a tool to this step using the unified Tool interface
|
|
@@ -260,7 +269,7 @@ class Step {
|
|
|
260
269
|
if (!this.parentAgent?.tool) {
|
|
261
270
|
// Fallback to local resolution if no ToolManager available
|
|
262
271
|
const resolved = this.resolveTools();
|
|
263
|
-
return resolved.find(tool => tool.id === toolId || tool.
|
|
272
|
+
return resolved.find(tool => tool.id === toolId || tool.id === toolId);
|
|
264
273
|
}
|
|
265
274
|
// Use ToolManager to find the tool with proper scope resolution
|
|
266
275
|
return this.parentAgent.tool.find(toolId, scope || types_1.ToolScope.ALL, this, undefined);
|
|
@@ -328,41 +337,107 @@ class Step {
|
|
|
328
337
|
return [...this.nextSteps];
|
|
329
338
|
}
|
|
330
339
|
/**
|
|
331
|
-
* Evaluate when
|
|
340
|
+
* Evaluate when/if conditions using the v2 split logic.
|
|
341
|
+
* `if` (code predicate) evaluates first (free); `when` (AI) evaluates only when `if` passes.
|
|
342
|
+
* Both are combined with AND semantics.
|
|
332
343
|
*/
|
|
333
344
|
async evaluateWhen(templateContext) {
|
|
334
|
-
|
|
345
|
+
// If neither `when` nor `if` is set, step is always eligible
|
|
346
|
+
if (!this.when && !this.if) {
|
|
335
347
|
return {
|
|
336
348
|
shouldActivate: true,
|
|
337
349
|
aiContextStrings: [],
|
|
338
350
|
hasProgrammaticConditions: false
|
|
339
351
|
};
|
|
340
352
|
}
|
|
341
|
-
|
|
342
|
-
|
|
353
|
+
// Evaluate `if` first (free, code-only)
|
|
354
|
+
if (this.if) {
|
|
355
|
+
const predicates = Array.isArray(this.if) ? this.if : [this.if];
|
|
356
|
+
for (const predicate of predicates) {
|
|
357
|
+
try {
|
|
358
|
+
const result = await predicate({
|
|
359
|
+
data: templateContext.data,
|
|
360
|
+
context: templateContext.context,
|
|
361
|
+
session: templateContext.session,
|
|
362
|
+
history: templateContext.history || [],
|
|
363
|
+
});
|
|
364
|
+
if (!result) {
|
|
365
|
+
// `if` failed — short-circuit, don't bother with `when`
|
|
366
|
+
return {
|
|
367
|
+
shouldActivate: false,
|
|
368
|
+
aiContextStrings: [],
|
|
369
|
+
hasProgrammaticConditions: true
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
utils_1.logger.warn(`[Step] "if" predicate failed for step "${this.id}":`, error);
|
|
375
|
+
return {
|
|
376
|
+
shouldActivate: false,
|
|
377
|
+
aiContextStrings: [],
|
|
378
|
+
hasProgrammaticConditions: true
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// `if` passed (or was absent) — now evaluate `when` (AI-evaluated strings)
|
|
384
|
+
if (this.when) {
|
|
385
|
+
const whenStrings = Array.isArray(this.when) ? this.when : [this.when];
|
|
386
|
+
// `when` strings are handed to the AI — return them as aiContextStrings
|
|
387
|
+
// The programmatic result is true (strings don't fail programmatically;
|
|
388
|
+
// they're scored by the AI at routing time)
|
|
389
|
+
return {
|
|
390
|
+
shouldActivate: true,
|
|
391
|
+
aiContextStrings: whenStrings,
|
|
392
|
+
hasProgrammaticConditions: !!this.if
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
// Only `if` was set and it passed
|
|
343
396
|
return {
|
|
344
|
-
shouldActivate:
|
|
345
|
-
aiContextStrings:
|
|
346
|
-
hasProgrammaticConditions:
|
|
397
|
+
shouldActivate: true,
|
|
398
|
+
aiContextStrings: [],
|
|
399
|
+
hasProgrammaticConditions: true
|
|
347
400
|
};
|
|
348
401
|
}
|
|
349
402
|
/**
|
|
350
|
-
* Evaluate
|
|
403
|
+
* Evaluate the skip condition (if-only shape — code predicates, OR semantics).
|
|
404
|
+
* Returns true if the step should be skipped.
|
|
351
405
|
*/
|
|
352
|
-
async
|
|
353
|
-
if (!this.
|
|
406
|
+
async evaluateSkip(templateContext) {
|
|
407
|
+
if (!this.skip) {
|
|
354
408
|
return {
|
|
355
409
|
shouldSkip: false,
|
|
356
410
|
aiContextStrings: [],
|
|
357
411
|
hasProgrammaticConditions: false
|
|
358
412
|
};
|
|
359
413
|
}
|
|
360
|
-
const
|
|
361
|
-
|
|
414
|
+
const predicates = Array.isArray(this.skip) ? this.skip : [this.skip];
|
|
415
|
+
// OR semantics: if ANY predicate returns true, skip
|
|
416
|
+
for (const predicate of predicates) {
|
|
417
|
+
try {
|
|
418
|
+
const result = await predicate({
|
|
419
|
+
data: templateContext.data,
|
|
420
|
+
context: templateContext.context,
|
|
421
|
+
session: templateContext.session,
|
|
422
|
+
history: templateContext.history || [],
|
|
423
|
+
});
|
|
424
|
+
if (result) {
|
|
425
|
+
return {
|
|
426
|
+
shouldSkip: true,
|
|
427
|
+
aiContextStrings: [],
|
|
428
|
+
hasProgrammaticConditions: true
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
utils_1.logger.warn(`[Step] "skip" predicate failed for step "${this.id}":`, error);
|
|
434
|
+
// On error, default to not skipping (safe fallback)
|
|
435
|
+
}
|
|
436
|
+
}
|
|
362
437
|
return {
|
|
363
|
-
shouldSkip:
|
|
364
|
-
aiContextStrings:
|
|
365
|
-
hasProgrammaticConditions:
|
|
438
|
+
shouldSkip: false,
|
|
439
|
+
aiContextStrings: [],
|
|
440
|
+
hasProgrammaticConditions: true
|
|
366
441
|
};
|
|
367
442
|
}
|
|
368
443
|
/**
|
|
@@ -379,7 +454,7 @@ class Step {
|
|
|
379
454
|
getRef() {
|
|
380
455
|
return {
|
|
381
456
|
id: this.id,
|
|
382
|
-
|
|
457
|
+
flowId: this.flowId,
|
|
383
458
|
};
|
|
384
459
|
}
|
|
385
460
|
/**
|
|
@@ -391,26 +466,6 @@ class Step {
|
|
|
391
466
|
...ref,
|
|
392
467
|
nextStep: (spec) => stepInstance.nextStep(spec),
|
|
393
468
|
branch: (branches) => stepInstance.branch(branches),
|
|
394
|
-
endRoute: (options) => stepInstance.endRoute(options),
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Create a terminal step reference (for END_ROUTE)
|
|
399
|
-
*/
|
|
400
|
-
createTerminalRef() {
|
|
401
|
-
const terminalRef = {
|
|
402
|
-
id: constants_1.END_ROUTE_ID,
|
|
403
|
-
routeId: this.routeId,
|
|
404
|
-
};
|
|
405
|
-
return {
|
|
406
|
-
...terminalRef,
|
|
407
|
-
nextStep: () => {
|
|
408
|
-
throw new Error("Cannot transition from END_ROUTE step");
|
|
409
|
-
},
|
|
410
|
-
branch: () => {
|
|
411
|
-
throw new Error("Cannot branch from END_ROUTE step");
|
|
412
|
-
},
|
|
413
|
-
endRoute: (options) => this.endRoute(options),
|
|
414
469
|
};
|
|
415
470
|
}
|
|
416
471
|
/**
|
|
@@ -421,7 +476,6 @@ class Step {
|
|
|
421
476
|
...this.getRef(),
|
|
422
477
|
nextStep: (spec) => this.nextStep(spec),
|
|
423
478
|
branch: (branches) => this.branch(branches),
|
|
424
|
-
endRoute: (options) => this.endRoute(options),
|
|
425
479
|
};
|
|
426
480
|
}
|
|
427
481
|
/**
|
|
@@ -432,17 +486,58 @@ class Step {
|
|
|
432
486
|
return {
|
|
433
487
|
id: this.id,
|
|
434
488
|
description: this.description,
|
|
489
|
+
auto: this._auto,
|
|
490
|
+
branches: this._branches,
|
|
435
491
|
prompt: this.prompt,
|
|
492
|
+
reply: this.reply,
|
|
436
493
|
tools: this.tools,
|
|
437
494
|
prepare: this.prepare,
|
|
438
495
|
finalize: this.finalize,
|
|
439
496
|
collect: this.collect,
|
|
440
|
-
|
|
497
|
+
skip: this.skip,
|
|
441
498
|
requires: this.requires,
|
|
442
499
|
when: this.when,
|
|
443
|
-
|
|
500
|
+
if: this.if,
|
|
501
|
+
instructions: this.getInstructions(),
|
|
444
502
|
};
|
|
445
503
|
}
|
|
504
|
+
/**
|
|
505
|
+
* Validate the branches array at construction time.
|
|
506
|
+
* Checks:
|
|
507
|
+
* - Non-empty array
|
|
508
|
+
* - Unconditional entries (no `when` and no `if`) only legal as the last entry
|
|
509
|
+
* - Directive `then` values: at most one position field, no empty `goTo: {}`
|
|
510
|
+
*/
|
|
511
|
+
validateBranches(branches) {
|
|
512
|
+
if (branches.length === 0) {
|
|
513
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Empty branches array on step "${this.id}": branches must contain at least one entry. Add branch entries or remove the branches field.`);
|
|
514
|
+
}
|
|
515
|
+
const POSITION_FIELDS = ['goTo', 'goToStep', 'complete', 'abort', 'reset'];
|
|
516
|
+
for (let i = 0; i < branches.length; i++) {
|
|
517
|
+
const entry = branches[i];
|
|
518
|
+
const isLast = i === branches.length - 1;
|
|
519
|
+
// Non-last entry without `when` or `if` is dead code — later entries are unreachable
|
|
520
|
+
if (!isLast && !entry.when && !entry.if) {
|
|
521
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Dead-code branch at index ${i}: branches[${i}] has neither "when" nor "if" and is not the last entry. Entries after index ${i} are unreachable. Move the unconditional entry to the end or add a condition.`);
|
|
522
|
+
}
|
|
523
|
+
// Validate Directive `then` values
|
|
524
|
+
if (entry.then && typeof entry.then === 'object') {
|
|
525
|
+
const directive = entry.then;
|
|
526
|
+
// Check for multiple position fields
|
|
527
|
+
const setPositionFields = POSITION_FIELDS.filter((field) => directive[field] !== undefined);
|
|
528
|
+
if (setPositionFields.length > 1) {
|
|
529
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Multiple position fields in branches[${i}].then: Directive sets ${setPositionFields.join(', ')}. At most one position field is allowed per Directive. Remove all but one.`);
|
|
530
|
+
}
|
|
531
|
+
// Check for empty goTo: {}
|
|
532
|
+
if (directive.goTo !== undefined && typeof directive.goTo === 'object' && directive.goTo !== null) {
|
|
533
|
+
const goToObj = directive.goTo;
|
|
534
|
+
if (Object.keys(goToObj).length === 0) {
|
|
535
|
+
throw new FlowConfigurationError(`[FlowConfigurationError] Empty goTo in branches[${i}].then: Directive has "goTo: {}" with no flow target. Provide at least a flow id or title.`);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
446
541
|
}
|
|
447
542
|
exports.Step = Step;
|
|
448
543
|
//# sourceMappingURL=Step.js.map
|