@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/docs/api/overview.md
DELETED
|
@@ -1,1410 +0,0 @@
|
|
|
1
|
-
# API Reference
|
|
2
|
-
|
|
3
|
-
Complete API documentation for `@falai/agent`. This framework provides a strongly-typed, modular agent architecture with AI-powered routing and schema-driven data collection.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Core Classes](#core-classes)
|
|
8
|
-
- [Agent](#agent)
|
|
9
|
-
- [ResponseModal](#responsemodal)
|
|
10
|
-
- [Route](#route)
|
|
11
|
-
- [Step](#step)
|
|
12
|
-
- [RoutingEngine](#routingengine)
|
|
13
|
-
- [ResponseEngine](#responseengine)
|
|
14
|
-
- [PromptComposer](#promptcomposer)
|
|
15
|
-
- [StreamingToolExecutor](#streamingtoolexecutor)
|
|
16
|
-
- [CompactionEngine](#compactionengine)
|
|
17
|
-
- [PromptSectionCache](#promptsectioncache)
|
|
18
|
-
|
|
19
|
-
- [AI Providers](#ai-providers)
|
|
20
|
-
- [Persistence Adapters](#persistence-adapters)
|
|
21
|
-
- [Types & Interfaces](#types--interfaces)
|
|
22
|
-
- [EnhancedTool](#enhancedtool)
|
|
23
|
-
- [Utilities](#utilities)
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Core Classes
|
|
28
|
-
|
|
29
|
-
### Agent
|
|
30
|
-
|
|
31
|
-
The central orchestrator class that manages conversation flow, routing, tool execution, and agent-level data collection.
|
|
32
|
-
|
|
33
|
-
#### Constructor
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
new Agent<TContext = unknown, TData = unknown>(options: AgentOptions<TContext, TData>)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
#### Properties
|
|
40
|
-
|
|
41
|
-
- `name: string` - Agent display name
|
|
42
|
-
- `description?: string` - Detailed description
|
|
43
|
-
- `goal?: string` - Primary objective
|
|
44
|
-
- `context?: TContext` - Static context data
|
|
45
|
-
- `session?: SessionState` - Current session state
|
|
46
|
-
|
|
47
|
-
#### Methods
|
|
48
|
-
|
|
49
|
-
##### Route Management
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
createRoute(options: RouteOptions<TContext, TData>): Route<TContext, TData>
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Creates a new conversation route with required fields specification that references the agent-level schema.
|
|
56
|
-
|
|
57
|
-
##### Context Management
|
|
58
|
-
|
|
59
|
-
```typescript
|
|
60
|
-
updateContext(updates: Partial<TContext>): Promise<void>
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Updates agent context and triggers lifecycle hooks.
|
|
64
|
-
|
|
65
|
-
```typescript
|
|
66
|
-
getContext(): Promise<TContext | undefined>
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Gets current context, fetching from provider if configured.
|
|
70
|
-
|
|
71
|
-
##### Agent-Level Data Management
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
getCollectedData(): Partial<TData>
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Gets the current agent-level collected data.
|
|
78
|
-
|
|
79
|
-
```typescript
|
|
80
|
-
updateCollectedData(updates: Partial<TData>): Promise<void>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Updates agent-level collected data and triggers validation and lifecycle hooks.
|
|
84
|
-
|
|
85
|
-
```typescript
|
|
86
|
-
validateData(data: Partial<TData>): ValidationResult
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Validates data against the agent-level schema, returning detailed validation results.
|
|
90
|
-
|
|
91
|
-
##### Response Generation
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
respond(params: {
|
|
95
|
-
history: Event[];
|
|
96
|
-
session?: SessionState;
|
|
97
|
-
contextOverride?: Partial<TContext>;
|
|
98
|
-
signal?: AbortSignal;
|
|
99
|
-
}): Promise<{
|
|
100
|
-
message: string;
|
|
101
|
-
session?: SessionState;
|
|
102
|
-
toolCalls?: ToolCall[];
|
|
103
|
-
isRouteComplete?: boolean;
|
|
104
|
-
}>
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Generates a single response based on conversation history.
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
respondStream(params: {
|
|
111
|
-
history: Event[];
|
|
112
|
-
session?: SessionState;
|
|
113
|
-
contextOverride?: Partial<TContext>;
|
|
114
|
-
signal?: AbortSignal;
|
|
115
|
-
}): AsyncGenerator<{
|
|
116
|
-
delta: string;
|
|
117
|
-
accumulated: string;
|
|
118
|
-
done: boolean;
|
|
119
|
-
session?: SessionState;
|
|
120
|
-
toolCalls?: ToolCall[];
|
|
121
|
-
isRouteComplete?: boolean;
|
|
122
|
-
}>
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Generates a streaming response with real-time updates. **Note:** Now delegates to internal ResponseModal class.
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
stream(message?: string, options?: StreamOptions<TContext>): AsyncGenerator<AgentResponseStreamChunk<TData>>
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**NEW:** Modern streaming API with automatic session management. Recommended for new implementations.
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
// Simple streaming
|
|
135
|
-
for await (const chunk of agent.stream("Hello")) {
|
|
136
|
-
console.log(chunk.delta);
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
##### Tool Management
|
|
141
|
-
|
|
142
|
-
```typescript
|
|
143
|
-
addTool(definition: Tool<TContext, TData, TResult>): this
|
|
144
|
-
tool: ToolManager<TContext, TData> // Access to ToolManager instance
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Comprehensive Tool Examples:**
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
// 1. Simple return value (most common)
|
|
151
|
-
agent.addTool({
|
|
152
|
-
id: "calculate_tip",
|
|
153
|
-
description: "Calculate tip amount",
|
|
154
|
-
handler: async ({ context, data }, args) => {
|
|
155
|
-
const tip = args.amount * args.percentage;
|
|
156
|
-
return `Tip: $${tip.toFixed(2)}`; // Simple string return
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
// 2. Complex ToolResult pattern
|
|
161
|
-
agent.addTool({
|
|
162
|
-
id: "process_order",
|
|
163
|
-
description: "Process customer order",
|
|
164
|
-
handler: async ({ context, data }, args) => {
|
|
165
|
-
const order = await orderService.process(args.items);
|
|
166
|
-
return {
|
|
167
|
-
data: `Order ${order.id} processed successfully`,
|
|
168
|
-
success: true,
|
|
169
|
-
contextUpdate: { lastOrderId: order.id },
|
|
170
|
-
dataUpdate: { orderStatus: 'processed' }
|
|
171
|
-
}; // Detailed ToolResult object
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
// 3. Registry for reuse
|
|
176
|
-
agent.tool.register({
|
|
177
|
-
id: "send_notification",
|
|
178
|
-
description: "Send notification to user",
|
|
179
|
-
handler: async ({ context }, args) => {
|
|
180
|
-
await notificationService.send(context.userId, args.message);
|
|
181
|
-
return "Notification sent"; // Simple return
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
// 4. Pattern helper
|
|
186
|
-
const validationTool = agent.tool.createValidation({
|
|
187
|
-
id: "validate_email",
|
|
188
|
-
fields: ['email'],
|
|
189
|
-
validator: async (context, data) => ({
|
|
190
|
-
valid: /\S+@\S+\.\S+/.test(data.email),
|
|
191
|
-
errors: []
|
|
192
|
-
})
|
|
193
|
-
});
|
|
194
|
-
agent.tool.register(validationTool);
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
##### Domain Knowledge
|
|
198
|
-
|
|
199
|
-
```typescript
|
|
200
|
-
createTerm(term: Term<TContext>): this
|
|
201
|
-
createGuideline(guideline: Guideline<TContext>): this
|
|
202
|
-
getTerms(): Term<TContext>[]
|
|
203
|
-
getGuidelines(): Guideline<TContext>[]
|
|
204
|
-
getKnowledgeBase(): Record<string, unknown>
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
##### Session Management
|
|
208
|
-
|
|
209
|
-
```typescript
|
|
210
|
-
setCurrentSession(session: SessionState): void
|
|
211
|
-
getCurrentSession(): SessionState | undefined
|
|
212
|
-
clearCurrentSession(): void
|
|
213
|
-
getData<TData = unknown>(routeId?: string): Partial<TData>
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
##### Route Transitions
|
|
217
|
-
|
|
218
|
-
```typescript
|
|
219
|
-
nextStepRoute(
|
|
220
|
-
routeIdOrTitle: string,
|
|
221
|
-
session?: SessionState,
|
|
222
|
-
condition?: Template<TContext, unknown>,
|
|
223
|
-
history?: Event[]
|
|
224
|
-
): Promise<SessionState>
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
Manually transitions to a different route.
|
|
228
|
-
|
|
229
|
-
##### Persistence
|
|
230
|
-
|
|
231
|
-
```typescript
|
|
232
|
-
getPersistenceManager(): PersistenceManager | undefined
|
|
233
|
-
hasPersistence(): boolean
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
### ResponseModal
|
|
239
|
-
|
|
240
|
-
**NEW:** Internal class that centralizes all response generation logic for improved architecture and maintainability.
|
|
241
|
-
|
|
242
|
-
#### Constructor
|
|
243
|
-
|
|
244
|
-
```typescript
|
|
245
|
-
new ResponseModal<TContext = unknown, TData = unknown>(
|
|
246
|
-
agent: Agent<TContext, TData>,
|
|
247
|
-
options?: ResponseModalOptions
|
|
248
|
-
)
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
#### Methods
|
|
252
|
-
|
|
253
|
-
##### Modern APIs (Recommended)
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
stream(message?: string, options?: StreamOptions<TContext>): AsyncGenerator<AgentResponseStreamChunk<TData>>
|
|
257
|
-
generate(message?: string, options?: GenerateOptions<TContext>): Promise<AgentResponse<TData>>
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
Modern streaming and non-streaming APIs with automatic session management.
|
|
261
|
-
|
|
262
|
-
##### Legacy APIs (Backward Compatible)
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
respond(params: RespondParams<TContext, TData>): Promise<AgentResponse<TData>>
|
|
266
|
-
respondStream(params: RespondParams<TContext, TData>): AsyncGenerator<AgentResponseStreamChunk<TData>>
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
Legacy APIs that maintain full backward compatibility with existing code.
|
|
270
|
-
|
|
271
|
-
##### Error Handling
|
|
272
|
-
|
|
273
|
-
```typescript
|
|
274
|
-
ResponseGenerationError: Error class for response-specific errors
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
Comprehensive error handling with detailed context and phase information.
|
|
278
|
-
|
|
279
|
-
#### Key Features
|
|
280
|
-
|
|
281
|
-
- **Unified Logic**: Both streaming and non-streaming use the same underlying logic
|
|
282
|
-
- **Modern APIs**: Simple `stream()` and `generate()` methods for new code
|
|
283
|
-
- **Backward Compatibility**: Existing `respond()` and `respondStream()` methods work unchanged
|
|
284
|
-
- **Error Handling**: Detailed error context with phase and original error information
|
|
285
|
-
- **Performance**: Optimized response pipeline with minimal code duplication
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
### Route
|
|
290
|
-
|
|
291
|
-
Represents a conversational journey with required fields specification and steps that collect data into the agent-level schema.
|
|
292
|
-
|
|
293
|
-
#### Constructor
|
|
294
|
-
|
|
295
|
-
```typescript
|
|
296
|
-
new Route<TContext = unknown, TData = unknown>(options: RouteOptions<TContext, TData>)
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
#### Properties
|
|
300
|
-
|
|
301
|
-
- `id: string` - Unique route identifier
|
|
302
|
-
- `title: string` - Human-readable title
|
|
303
|
-
- `description?: string` - Detailed description
|
|
304
|
-
- `identity?: Template<TContext, TData>` - Route-specific identity
|
|
305
|
-
- `personality?: Template<TContext, TData>` - Route-specific personality
|
|
306
|
-
- `initialStep: Step<TContext, TData>` - Entry point for the route
|
|
307
|
-
|
|
308
|
-
#### Methods
|
|
309
|
-
|
|
310
|
-
##### Step Management
|
|
311
|
-
|
|
312
|
-
```typescript
|
|
313
|
-
createStep(options: StepOptions<TContext, TData>): Step<TContext, TData>
|
|
314
|
-
getStep(stepId: string): Step<TContext, TData> | undefined
|
|
315
|
-
getAllSteps(): Step<TContext, TData>[]
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
##### Route Completion Logic
|
|
319
|
-
|
|
320
|
-
```typescript
|
|
321
|
-
isComplete(data: Partial<TData>): boolean
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Checks if all required fields are collected based on agent-level data.
|
|
325
|
-
|
|
326
|
-
```typescript
|
|
327
|
-
getMissingRequiredFields(data: Partial<TData>): (keyof TData)[]
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
Returns the fields still needed for route completion.
|
|
331
|
-
|
|
332
|
-
```typescript
|
|
333
|
-
getCompletionProgress(data: Partial<TData>): number
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
Returns completion progress as a number between 0 and 1.
|
|
337
|
-
|
|
338
|
-
##### Data Collection
|
|
339
|
-
|
|
340
|
-
```typescript
|
|
341
|
-
getRules(): Template<TContext, TData>[]
|
|
342
|
-
getProhibitions(): Template<TContext, TData>[]
|
|
343
|
-
getTerms(): Term<TContext>[]
|
|
344
|
-
getKnowledgeBase(): Record<string, unknown>
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
##### Schema & Validation
|
|
348
|
-
|
|
349
|
-
```typescript
|
|
350
|
-
getResponseOutputSchema(): StructuredSchema | undefined
|
|
351
|
-
getRoutingExtrasSchema(): StructuredSchema | undefined
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
##### Tool Management
|
|
355
|
-
|
|
356
|
-
```typescript
|
|
357
|
-
addTool(definition: Tool<TContext, TData, TResult>): this
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
##### Lifecycle Hooks
|
|
361
|
-
|
|
362
|
-
```typescript
|
|
363
|
-
handleDataUpdate(data: Partial<TData>, previousData: Partial<TData>): Promise<Partial<TData>>
|
|
364
|
-
handleContextUpdate(newContext: TContext, previousContext: TContext): Promise<void>
|
|
365
|
-
evaluateOnComplete(session: { data?: Partial<TData> }, context?: TContext): Promise<RouteTransitionConfig | undefined>
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
### Step
|
|
371
|
-
|
|
372
|
-
Represents an individual conversation state within a route.
|
|
373
|
-
|
|
374
|
-
#### Constructor
|
|
375
|
-
|
|
376
|
-
```typescript
|
|
377
|
-
new Step<TContext = unknown, TData = unknown>(routeId: string, options?: StepOptions<TContext, TData>)
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
#### Properties
|
|
381
|
-
|
|
382
|
-
- `id: string` - Unique step identifier
|
|
383
|
-
- `routeId: string` - Parent route identifier
|
|
384
|
-
- `description?: string` - Human-readable description
|
|
385
|
-
- `collect?: string[]` - Fields to extract from AI responses
|
|
386
|
-
- `requires?: string[]` - Required data fields
|
|
387
|
-
- `prompt?: Template<TContext, TData>` - Step-specific prompt
|
|
388
|
-
- `tools?: (string | Tool)[]` - Step-specific tools
|
|
389
|
-
|
|
390
|
-
#### Methods
|
|
391
|
-
|
|
392
|
-
##### Configuration
|
|
393
|
-
|
|
394
|
-
```typescript
|
|
395
|
-
configure(config: Partial<StepOptions<TContext, TData>>): this
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
##### Transitions
|
|
399
|
-
|
|
400
|
-
```typescript
|
|
401
|
-
nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
|
|
402
|
-
branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
|
|
403
|
-
endRoute(options?: Omit<StepOptions<TContext, TData>, 'step'>): StepResult<TContext, TData>
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
##### Validation
|
|
407
|
-
|
|
408
|
-
```typescript
|
|
409
|
-
shouldSkip(data: Partial<TData>): boolean
|
|
410
|
-
hasRequires(data: Partial<TData>): boolean
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
##### Tool Management
|
|
414
|
-
|
|
415
|
-
```typescript
|
|
416
|
-
addGuideline(guideline: Guideline<TContext>): void
|
|
417
|
-
getGuidelines(): Guideline<TContext>[]
|
|
418
|
-
getTransitions(): Step<TContext, TData>[]
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
##### References
|
|
422
|
-
|
|
423
|
-
```typescript
|
|
424
|
-
getRef(): StepRef
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
|
|
429
|
-
### StepResult
|
|
430
|
-
|
|
431
|
-
Result interface returned by step transition methods that enables fluent chaining of conversation flows.
|
|
432
|
-
|
|
433
|
-
#### Interface
|
|
434
|
-
|
|
435
|
-
```typescript
|
|
436
|
-
interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
|
|
437
|
-
nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
|
|
438
|
-
branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
|
|
439
|
-
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
|
|
440
|
-
}
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
#### Methods
|
|
444
|
-
|
|
445
|
-
##### Chaining
|
|
446
|
-
|
|
447
|
-
```typescript
|
|
448
|
-
nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
Creates a transition and returns a chainable result for building linear flows.
|
|
452
|
-
|
|
453
|
-
##### Branching
|
|
454
|
-
|
|
455
|
-
```typescript
|
|
456
|
-
branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
|
|
457
|
-
```
|
|
458
|
-
|
|
459
|
-
Creates multiple conditional branches for complex conversation flows.
|
|
460
|
-
|
|
461
|
-
##### Route Completion
|
|
462
|
-
|
|
463
|
-
```typescript
|
|
464
|
-
endRoute(options?: Omit<StepOptions<TContext, TData>, "step">): StepResult<TContext, TData>
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
Shortcut method to end the current route with optional completion configuration.
|
|
468
|
-
|
|
469
|
-
#### Properties
|
|
470
|
-
|
|
471
|
-
Inherits from `StepRef`:
|
|
472
|
-
|
|
473
|
-
- `id: string` - Step identifier
|
|
474
|
-
- `routeId: string` - Route this step belongs to
|
|
475
|
-
|
|
476
|
-
---
|
|
477
|
-
|
|
478
|
-
### RoutingEngine
|
|
479
|
-
|
|
480
|
-
AI-powered routing system that intelligently selects routes and steps based on conversation context.
|
|
481
|
-
|
|
482
|
-
#### Constructor
|
|
483
|
-
|
|
484
|
-
```typescript
|
|
485
|
-
new RoutingEngine(options?: RoutingEngineOptions)
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
#### Methods
|
|
489
|
-
|
|
490
|
-
##### Route Selection
|
|
491
|
-
|
|
492
|
-
```typescript
|
|
493
|
-
decideRouteAndStep(params: {
|
|
494
|
-
routes: Route[];
|
|
495
|
-
session: SessionState;
|
|
496
|
-
history: Event[];
|
|
497
|
-
agentOptions?: AgentOptions;
|
|
498
|
-
provider: AiProvider;
|
|
499
|
-
context: unknown;
|
|
500
|
-
signal?: AbortSignal;
|
|
501
|
-
}): Promise<{
|
|
502
|
-
selectedRoute?: Route;
|
|
503
|
-
selectedStep?: Step;
|
|
504
|
-
responseDirectives?: string[];
|
|
505
|
-
session: SessionState;
|
|
506
|
-
isRouteComplete?: boolean;
|
|
507
|
-
}>
|
|
508
|
-
```
|
|
509
|
-
|
|
510
|
-
##### Single Route Optimization
|
|
511
|
-
|
|
512
|
-
```typescript
|
|
513
|
-
decideSingleRouteStep(params: {
|
|
514
|
-
route: Route;
|
|
515
|
-
session: SessionState;
|
|
516
|
-
history: Event[];
|
|
517
|
-
agentOptions?: AgentOptions;
|
|
518
|
-
provider: AiProvider;
|
|
519
|
-
context: unknown;
|
|
520
|
-
signal?: AbortSignal;
|
|
521
|
-
}): Promise<{
|
|
522
|
-
selectedRoute?: Route;
|
|
523
|
-
selectedStep?: Step;
|
|
524
|
-
responseDirectives?: string[];
|
|
525
|
-
session: SessionState;
|
|
526
|
-
isRouteComplete?: boolean;
|
|
527
|
-
}>
|
|
528
|
-
```
|
|
529
|
-
|
|
530
|
-
##### Candidate Discovery
|
|
531
|
-
|
|
532
|
-
```typescript
|
|
533
|
-
getCandidateSteps<TData>(
|
|
534
|
-
route: Route,
|
|
535
|
-
currentStep: Step | undefined,
|
|
536
|
-
data: Partial<TData>
|
|
537
|
-
): CandidateStep[]
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
##### Prompt Generation
|
|
541
|
-
|
|
542
|
-
```typescript
|
|
543
|
-
buildRoutingPrompt(params: BuildRoutingPromptParams): Promise<string>
|
|
544
|
-
buildStepSelectionPrompt(params: BuildStepSelectionPromptParams): Promise<string>
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
---
|
|
548
|
-
|
|
549
|
-
### ResponseEngine
|
|
550
|
-
|
|
551
|
-
Handles prompt composition and response schema generation for AI interactions.
|
|
552
|
-
|
|
553
|
-
#### Methods
|
|
554
|
-
|
|
555
|
-
##### Schema Generation
|
|
556
|
-
|
|
557
|
-
```typescript
|
|
558
|
-
responseSchemaForRoute(route: Route, currentStep?: Step): StructuredSchema
|
|
559
|
-
```
|
|
560
|
-
|
|
561
|
-
##### Prompt Building
|
|
562
|
-
|
|
563
|
-
```typescript
|
|
564
|
-
buildResponsePrompt(params: BuildResponsePromptParams): Promise<string>
|
|
565
|
-
buildFallbackPrompt(params: BuildFallbackPromptParams): Promise<string>
|
|
566
|
-
```
|
|
567
|
-
|
|
568
|
-
---
|
|
569
|
-
|
|
570
|
-
### PromptComposer
|
|
571
|
-
|
|
572
|
-
Utility for composing structured prompts with agent metadata, knowledge, and context.
|
|
573
|
-
|
|
574
|
-
#### Constructor
|
|
575
|
-
|
|
576
|
-
```typescript
|
|
577
|
-
new PromptComposer<TContext = unknown, TData = unknown>(context?: TemplateContext<TContext, TData>)
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
#### Methods
|
|
581
|
-
|
|
582
|
-
##### Metadata Addition
|
|
583
|
-
|
|
584
|
-
```typescript
|
|
585
|
-
addAgentMeta(agent: AgentOptions): Promise<this>
|
|
586
|
-
addGlossary(terms: Term[]): Promise<this>
|
|
587
|
-
addGuidelines(guidelines: Guideline[]): Promise<this>
|
|
588
|
-
addKnowledgeBase(agentKb?: Record<string, unknown>, routeKb?: Record<string, unknown>): Promise<this>
|
|
589
|
-
```
|
|
590
|
-
|
|
591
|
-
##### Content Addition
|
|
592
|
-
|
|
593
|
-
```typescript
|
|
594
|
-
addInstruction(text: string): Promise<this>
|
|
595
|
-
addInteractionHistory(history: Event[], note?: string): Promise<this>
|
|
596
|
-
addLastMessage(message: string): Promise<this>
|
|
597
|
-
addRoutingOverview(routes: Route[]): Promise<this>
|
|
598
|
-
addDirectives(directives?: string[]): Promise<this>
|
|
599
|
-
```
|
|
600
|
-
|
|
601
|
-
##### Finalization
|
|
602
|
-
|
|
603
|
-
```typescript
|
|
604
|
-
build(): Promise<string>
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
---
|
|
610
|
-
|
|
611
|
-
### StreamingToolExecutor
|
|
612
|
-
|
|
613
|
-
Executes tools as they arrive from the LLM stream with concurrency control, abort handling, and ordered result yielding.
|
|
614
|
-
|
|
615
|
-
#### Constructor
|
|
616
|
-
|
|
617
|
-
```typescript
|
|
618
|
-
new StreamingToolExecutor<TContext, TData>(
|
|
619
|
-
toolContext: ToolContext<TContext, TData>,
|
|
620
|
-
options?: {
|
|
621
|
-
maxParallel?: number; // default: 10
|
|
622
|
-
signal?: AbortSignal;
|
|
623
|
-
}
|
|
624
|
-
)
|
|
625
|
-
```
|
|
626
|
-
|
|
627
|
-
#### Methods
|
|
628
|
-
|
|
629
|
-
```typescript
|
|
630
|
-
addTool(toolCall: ToolCallRequest, tool: EnhancedTool<TContext, TData>): void
|
|
631
|
-
```
|
|
632
|
-
|
|
633
|
-
Queue a tool for execution. Concurrency safety is evaluated once at queue time.
|
|
634
|
-
|
|
635
|
-
```typescript
|
|
636
|
-
getCompletedResults(): Generator<ToolExecutionUpdate<TData>>
|
|
637
|
-
```
|
|
638
|
-
|
|
639
|
-
Synchronous generator yielding available results in request order.
|
|
640
|
-
|
|
641
|
-
```typescript
|
|
642
|
-
getRemainingResults(): AsyncGenerator<ToolExecutionUpdate<TData>>
|
|
643
|
-
```
|
|
644
|
-
|
|
645
|
-
Async generator yielding all results, waiting for pending tools.
|
|
646
|
-
|
|
647
|
-
```typescript
|
|
648
|
-
discard(): void
|
|
649
|
-
getUpdatedContext(): TContext
|
|
650
|
-
hasUnfinishedTools(): boolean
|
|
651
|
-
```
|
|
652
|
-
|
|
653
|
-
See [Streaming Execution Guide](../core/tools/streaming-execution.md) for detailed usage.
|
|
654
|
-
|
|
655
|
-
---
|
|
656
|
-
|
|
657
|
-
### CompactionEngine
|
|
658
|
-
|
|
659
|
-
Manages conversation history size through multi-layered compaction strategies.
|
|
660
|
-
|
|
661
|
-
#### Static Methods
|
|
662
|
-
|
|
663
|
-
```typescript
|
|
664
|
-
CompactionEngine.estimateTokens(history: HistoryItem[]): number
|
|
665
|
-
CompactionEngine.applyToolResultBudget(history: HistoryItem[], maxCharsPerResult: number): HistoryItem[]
|
|
666
|
-
CompactionEngine.validateOptions(options: CompactionOptions): void
|
|
667
|
-
CompactionEngine.checkAndCompact(history: HistoryItem[], options: CompactionOptions): Promise<CompactionResult>
|
|
668
|
-
```
|
|
669
|
-
|
|
670
|
-
See [Context Compaction Guide](../guides/context-compaction.md) for detailed usage.
|
|
671
|
-
|
|
672
|
-
---
|
|
673
|
-
|
|
674
|
-
### PromptSectionCache
|
|
675
|
-
|
|
676
|
-
Memoizes static prompt sections across turns, recomputing only dynamic sections per-turn. Integrates with `PromptComposer` for optimized prompt generation.
|
|
677
|
-
|
|
678
|
-
#### Constructor
|
|
679
|
-
|
|
680
|
-
```typescript
|
|
681
|
-
new PromptSectionCache(config?: PromptCacheConfig)
|
|
682
|
-
```
|
|
683
|
-
|
|
684
|
-
#### Configuration
|
|
685
|
-
|
|
686
|
-
```typescript
|
|
687
|
-
interface PromptCacheConfig {
|
|
688
|
-
enabled?: boolean; // default: true
|
|
689
|
-
volatileKeys?: string[]; // keys that always recompute
|
|
690
|
-
}
|
|
691
|
-
```
|
|
692
|
-
|
|
693
|
-
#### Methods
|
|
694
|
-
|
|
695
|
-
```typescript
|
|
696
|
-
register(key: string, type: PromptSectionType, compute: () => string | null | Promise<string | null>): void
|
|
697
|
-
```
|
|
698
|
-
|
|
699
|
-
Register a section as `'static'` (cached) or `'dynamic'` (recomputed every turn).
|
|
700
|
-
|
|
701
|
-
```typescript
|
|
702
|
-
get(key: string): Promise<string | null>
|
|
703
|
-
```
|
|
704
|
-
|
|
705
|
-
Get a section's value, using cache for static sections.
|
|
706
|
-
|
|
707
|
-
```typescript
|
|
708
|
-
resolveAll(): Promise<(string | null)[]>
|
|
709
|
-
```
|
|
710
|
-
|
|
711
|
-
Resolve all sections in registration order.
|
|
712
|
-
|
|
713
|
-
```typescript
|
|
714
|
-
invalidate(key: string): void
|
|
715
|
-
invalidateAll(): void
|
|
716
|
-
```
|
|
717
|
-
|
|
718
|
-
Invalidate a specific section or all sections.
|
|
719
|
-
|
|
720
|
-
See [Prompt Optimization Guide](../guides/prompt-optimization.md) for detailed usage.
|
|
721
|
-
|
|
722
|
-
---
|
|
723
|
-
|
|
724
|
-
## AI Providers
|
|
725
|
-
|
|
726
|
-
### OpenAIProvider
|
|
727
|
-
|
|
728
|
-
```typescript
|
|
729
|
-
new OpenAIProvider(options: OpenAIProviderOptions)
|
|
730
|
-
|
|
731
|
-
generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
|
|
732
|
-
generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
|
|
733
|
-
```
|
|
734
|
-
|
|
735
|
-
### GeminiProvider
|
|
736
|
-
|
|
737
|
-
```typescript
|
|
738
|
-
new GeminiProvider(options: GeminiProviderOptions)
|
|
739
|
-
|
|
740
|
-
generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
|
|
741
|
-
generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
|
|
742
|
-
```
|
|
743
|
-
|
|
744
|
-
### AnthropicProvider
|
|
745
|
-
|
|
746
|
-
```typescript
|
|
747
|
-
new AnthropicProvider(options: AnthropicProviderOptions)
|
|
748
|
-
|
|
749
|
-
generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
|
|
750
|
-
generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
|
|
751
|
-
```
|
|
752
|
-
|
|
753
|
-
### OpenRouterProvider
|
|
754
|
-
|
|
755
|
-
```typescript
|
|
756
|
-
new OpenRouterProvider(options: OpenRouterProviderOptions)
|
|
757
|
-
|
|
758
|
-
generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>
|
|
759
|
-
generateMessageStream(input: GenerateMessageInput): AsyncGenerator<GenerateMessageStreamChunk>
|
|
760
|
-
```
|
|
761
|
-
|
|
762
|
-
---
|
|
763
|
-
|
|
764
|
-
## Persistence Adapters
|
|
765
|
-
|
|
766
|
-
### PrismaAdapter
|
|
767
|
-
|
|
768
|
-
```typescript
|
|
769
|
-
new PrismaAdapter(options: {
|
|
770
|
-
prisma: PrismaClient;
|
|
771
|
-
tables?: { sessions?: string; messages?: string };
|
|
772
|
-
fieldMappings?: FieldMappings;
|
|
773
|
-
})
|
|
774
|
-
|
|
775
|
-
sessionRepository: SessionRepository
|
|
776
|
-
messageRepository: MessageRepository
|
|
777
|
-
```
|
|
778
|
-
|
|
779
|
-
### RedisAdapter
|
|
780
|
-
|
|
781
|
-
```typescript
|
|
782
|
-
new RedisAdapter(options: {
|
|
783
|
-
redis: Redis;
|
|
784
|
-
keyPrefix?: string;
|
|
785
|
-
sessionTTL?: number;
|
|
786
|
-
messageTTL?: number;
|
|
787
|
-
})
|
|
788
|
-
|
|
789
|
-
sessionRepository: SessionRepository
|
|
790
|
-
messageRepository: MessageRepository
|
|
791
|
-
```
|
|
792
|
-
|
|
793
|
-
### MongoAdapter
|
|
794
|
-
|
|
795
|
-
```typescript
|
|
796
|
-
new MongoAdapter(options: {
|
|
797
|
-
client: MongoClient;
|
|
798
|
-
databaseName: string;
|
|
799
|
-
collections?: { sessions?: string; messages?: string };
|
|
800
|
-
})
|
|
801
|
-
|
|
802
|
-
sessionRepository: SessionRepository
|
|
803
|
-
messageRepository: MessageRepository
|
|
804
|
-
```
|
|
805
|
-
|
|
806
|
-
### PostgreSQLAdapter
|
|
807
|
-
|
|
808
|
-
```typescript
|
|
809
|
-
new PostgreSQLAdapter(options: {
|
|
810
|
-
client: Client;
|
|
811
|
-
tables?: { sessions?: string; messages?: string };
|
|
812
|
-
})
|
|
813
|
-
|
|
814
|
-
sessionRepository: SessionRepository
|
|
815
|
-
messageRepository: MessageRepository
|
|
816
|
-
|
|
817
|
-
initialize(): Promise<void> // Auto-create tables
|
|
818
|
-
```
|
|
819
|
-
|
|
820
|
-
### SQLiteAdapter
|
|
821
|
-
|
|
822
|
-
```typescript
|
|
823
|
-
new SQLiteAdapter(options: { db: Database })
|
|
824
|
-
|
|
825
|
-
sessionRepository: SessionRepository
|
|
826
|
-
messageRepository: MessageRepository
|
|
827
|
-
|
|
828
|
-
initialize(): Promise<void> // Auto-create tables
|
|
829
|
-
```
|
|
830
|
-
|
|
831
|
-
### OpenSearchAdapter
|
|
832
|
-
|
|
833
|
-
```typescript
|
|
834
|
-
new OpenSearchAdapter(client: Client, options: {
|
|
835
|
-
indices?: { sessions?: string; messages?: string };
|
|
836
|
-
autoCreateIndices?: boolean;
|
|
837
|
-
refresh?: string;
|
|
838
|
-
})
|
|
839
|
-
|
|
840
|
-
sessionRepository: SessionRepository
|
|
841
|
-
messageRepository: MessageRepository
|
|
842
|
-
```
|
|
843
|
-
|
|
844
|
-
### MemoryAdapter
|
|
845
|
-
|
|
846
|
-
```typescript
|
|
847
|
-
new MemoryAdapter()
|
|
848
|
-
|
|
849
|
-
sessionRepository: SessionRepository
|
|
850
|
-
messageRepository: MessageRepository
|
|
851
|
-
|
|
852
|
-
clear(): void
|
|
853
|
-
getSnapshot(): { sessions: SessionData[]; messages: MessageData[] }
|
|
854
|
-
```
|
|
855
|
-
|
|
856
|
-
---
|
|
857
|
-
|
|
858
|
-
## Types & Interfaces
|
|
859
|
-
|
|
860
|
-
### Core Types
|
|
861
|
-
|
|
862
|
-
```typescript
|
|
863
|
-
interface AgentOptions<TContext = unknown, TData = unknown> {
|
|
864
|
-
name: string;
|
|
865
|
-
provider: AiProvider;
|
|
866
|
-
description?: string;
|
|
867
|
-
goal?: string;
|
|
868
|
-
personality?: Template<TContext, TData>;
|
|
869
|
-
identity?: Template<TContext, TData>;
|
|
870
|
-
context?: TContext;
|
|
871
|
-
contextProvider?: ContextProvider<TContext>;
|
|
872
|
-
|
|
873
|
-
// NEW: Agent-level data schema and initial data
|
|
874
|
-
schema?: StructuredSchema;
|
|
875
|
-
initialData?: Partial<TData>;
|
|
876
|
-
|
|
877
|
-
// NEW: Agent-wide rules and prohibitions
|
|
878
|
-
rules?: Template<TContext, TData>[];
|
|
879
|
-
prohibitions?: Template<TContext, TData>[];
|
|
880
|
-
|
|
881
|
-
// NEW: Control multi-step batching
|
|
882
|
-
maxStepsPerBatch?: number; // Default: 1 (single-step). Set higher or Infinity to batch.
|
|
883
|
-
|
|
884
|
-
hooks?: ContextLifecycleHooks<TContext, TData>;
|
|
885
|
-
debug?: boolean;
|
|
886
|
-
session?: SessionState;
|
|
887
|
-
persistence?: PersistenceConfig;
|
|
888
|
-
terms?: Term<TContext>[];
|
|
889
|
-
guidelines?: Guideline<TContext>[];
|
|
890
|
-
tools?: Tool<TContext, unknown[], unknown, TData>[];
|
|
891
|
-
routes?: RouteOptions<TContext, TData>[];
|
|
892
|
-
knowledgeBase?: Record<string, unknown>;
|
|
893
|
-
}
|
|
894
|
-
|
|
895
|
-
interface RouteOptions<TContext = unknown, TData = unknown> {
|
|
896
|
-
id?: string;
|
|
897
|
-
title: string;
|
|
898
|
-
description?: string;
|
|
899
|
-
identity?: Template<TContext, TData>;
|
|
900
|
-
personality?: Template<TContext, TData>;
|
|
901
|
-
when?: ConditionTemplate<TContext, TData>;
|
|
902
|
-
skipIf?: ConditionTemplate<TContext, TData>;
|
|
903
|
-
rules?: Template<TContext, TData>[];
|
|
904
|
-
prohibitions?: Template<TContext, TData>[];
|
|
905
|
-
|
|
906
|
-
// NEW: Required fields for route completion (replaces schema)
|
|
907
|
-
requiredFields?: (keyof TData)[];
|
|
908
|
-
optionalFields?: (keyof TData)[];
|
|
909
|
-
|
|
910
|
-
// REMOVED: schema (now at agent level)
|
|
911
|
-
// schema?: StructuredSchema;
|
|
912
|
-
|
|
913
|
-
initialData?: Partial<TData>;
|
|
914
|
-
steps?: StepOptions<TContext, TData>[];
|
|
915
|
-
initialStep?: Omit<StepOptions<TContext, TData>, "step">;
|
|
916
|
-
endStep?: Omit<StepOptions<TContext, TData>, "step" | "condition" | "skipIf">;
|
|
917
|
-
onComplete?: string | RouteTransitionConfig | RouteCompletionHandler;
|
|
918
|
-
hooks?: RouteLifecycleHooks<TContext, TData>;
|
|
919
|
-
guidelines?: Guideline<TContext>[];
|
|
920
|
-
terms?: Term<TContext>[];
|
|
921
|
-
tools?: Tool<TContext, unknown[], unknown, TData>[];
|
|
922
|
-
knowledgeBase?: Record<string, unknown>;
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
interface StepOptions<TContext = unknown, TData = unknown> {
|
|
926
|
-
id?: string;
|
|
927
|
-
description?: string;
|
|
928
|
-
prompt?: Template<TContext, TData>;
|
|
929
|
-
collect?: string[];
|
|
930
|
-
skipIf?: (data: Partial<TData>) => boolean;
|
|
931
|
-
requires?: string[];
|
|
932
|
-
when?: Template<TContext, TData>;
|
|
933
|
-
prepare?: string | Tool<TContext, unknown[], unknown, TData> | ((
|
|
934
|
-
context: TContext,
|
|
935
|
-
data?: Partial<TData>
|
|
936
|
-
) => void | Promise<void>);
|
|
937
|
-
finalize?: string | Tool<TContext, unknown[], unknown, TData> | ((
|
|
938
|
-
context: TContext,
|
|
939
|
-
data?: Partial<TData>
|
|
940
|
-
) => void | Promise<void>);
|
|
941
|
-
tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
|
|
942
|
-
}
|
|
943
|
-
|
|
944
|
-
interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
|
|
945
|
-
nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
|
|
946
|
-
branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
|
|
947
|
-
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
interface BranchResult<TContext = unknown, TData = unknown> {
|
|
951
|
-
[branchName: string]: StepResult<TContext, TData>;
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
interface BranchSpec<TContext = unknown, TData = unknown> {
|
|
955
|
-
name: string;
|
|
956
|
-
id?: string;
|
|
957
|
-
step: StepOptions<TContext, TData>;
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
interface StepRef {
|
|
961
|
-
id: string;
|
|
962
|
-
routeId: string;
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
interface RouteRef {
|
|
966
|
-
id: string;
|
|
967
|
-
}
|
|
968
|
-
|
|
969
|
-
// ==============================================================================
|
|
970
|
-
// LIFECYCLE HOOKS: prepare & finalize
|
|
971
|
-
// ==============================================================================
|
|
972
|
-
|
|
973
|
-
/**
|
|
974
|
-
* Step lifecycle hooks allow you to execute custom logic before and after AI responses.
|
|
975
|
-
* Both prepare and finalize can be functions, tool references, or inline tool definitions.
|
|
976
|
-
*/
|
|
977
|
-
|
|
978
|
-
// Example: Using functions (traditional approach)
|
|
979
|
-
{
|
|
980
|
-
prepare: (context, data) => {
|
|
981
|
-
console.log("Preparing step execution...");
|
|
982
|
-
},
|
|
983
|
-
finalize: (context, data) => {
|
|
984
|
-
console.log("Finalizing step execution...");
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
|
|
988
|
-
// Example: Using existing tools (unified Tool interface)
|
|
989
|
-
{
|
|
990
|
-
prepare: "validate_user_data", // Tool ID string - simple return value
|
|
991
|
-
finalize: "send_notification", // Tool ID string - ToolResult pattern
|
|
992
|
-
}
|
|
993
|
-
|
|
994
|
-
// Example: Inline tool definition with flexible returns
|
|
995
|
-
{
|
|
996
|
-
prepare: {
|
|
997
|
-
id: "setup_step_context",
|
|
998
|
-
description: "Prepare context for this step",
|
|
999
|
-
parameters: { type: "object", properties: {} },
|
|
1000
|
-
handler: ({ context, data }) => {
|
|
1001
|
-
// Simple return value
|
|
1002
|
-
return "Setup complete";
|
|
1003
|
-
}
|
|
1004
|
-
},
|
|
1005
|
-
finalize: {
|
|
1006
|
-
id: "cleanup_step_context",
|
|
1007
|
-
description: "Clean up after step completion",
|
|
1008
|
-
handler: ({ context, data }) => {
|
|
1009
|
-
// Complex ToolResult pattern
|
|
1010
|
-
return {
|
|
1011
|
-
data: "Cleanup complete",
|
|
1012
|
-
success: true,
|
|
1013
|
-
contextUpdate: { lastCleanup: new Date() }
|
|
1014
|
-
};
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
}
|
|
1018
|
-
```
|
|
1019
|
-
|
|
1020
|
-
### Session Types
|
|
1021
|
-
|
|
1022
|
-
```typescript
|
|
1023
|
-
interface SessionState<TData = unknown> {
|
|
1024
|
-
id?: string;
|
|
1025
|
-
data: Partial<TData>;
|
|
1026
|
-
dataByRoute: Record<string, Partial<TData>>;
|
|
1027
|
-
routeHistory: RouteHistoryEntry[];
|
|
1028
|
-
currentRoute?: RouteRef;
|
|
1029
|
-
currentStep?: StepRef;
|
|
1030
|
-
metadata?: SessionMetadata;
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
|
-
interface SessionData {
|
|
1034
|
-
id: string;
|
|
1035
|
-
userId?: string;
|
|
1036
|
-
agentName?: string;
|
|
1037
|
-
status: SessionStatus;
|
|
1038
|
-
currentRoute?: string;
|
|
1039
|
-
currentStep?: string;
|
|
1040
|
-
collectedData?: Record<string, unknown>;
|
|
1041
|
-
messageCount: number;
|
|
1042
|
-
lastMessageAt?: Date;
|
|
1043
|
-
completedAt?: Date;
|
|
1044
|
-
createdAt: Date;
|
|
1045
|
-
updatedAt: Date;
|
|
1046
|
-
}
|
|
1047
|
-
```
|
|
1048
|
-
|
|
1049
|
-
### Batch Execution Types
|
|
1050
|
-
|
|
1051
|
-
Types for multi-step batch execution:
|
|
1052
|
-
|
|
1053
|
-
```typescript
|
|
1054
|
-
/**
|
|
1055
|
-
* Reason why batch execution stopped
|
|
1056
|
-
*/
|
|
1057
|
-
type StoppedReason =
|
|
1058
|
-
| 'needs_input' // Step requires uncollected data
|
|
1059
|
-
| 'end_route' // Reached END_ROUTE
|
|
1060
|
-
| 'route_complete' // All Steps processed
|
|
1061
|
-
| 'max_steps_reached' // Batch hit the maxStepsPerBatch limit
|
|
1062
|
-
| 'prepare_error' // Error in prepare hook
|
|
1063
|
-
| 'llm_error' // Error during LLM call
|
|
1064
|
-
| 'validation_error' // Error validating collected data
|
|
1065
|
-
| 'finalize_error'; // Error in finalize hook (non-fatal)
|
|
1066
|
-
|
|
1067
|
-
/**
|
|
1068
|
-
* Result of batch determination - which steps can execute together
|
|
1069
|
-
*/
|
|
1070
|
-
interface BatchResult<TContext = unknown, TData = unknown> {
|
|
1071
|
-
/** Steps included in this batch */
|
|
1072
|
-
steps: StepOptions<TContext, TData>[];
|
|
1073
|
-
/** Why the batch stopped */
|
|
1074
|
-
stoppedReason: StoppedReason;
|
|
1075
|
-
/** The Step that caused the stop (if applicable) */
|
|
1076
|
-
stoppedAtStep?: StepOptions<TContext, TData>;
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1079
|
-
/**
|
|
1080
|
-
* Result of executing a batch of steps
|
|
1081
|
-
*/
|
|
1082
|
-
interface BatchExecutionResult<TData = unknown> {
|
|
1083
|
-
/** The generated message */
|
|
1084
|
-
message: string;
|
|
1085
|
-
/** Updated session state */
|
|
1086
|
-
session: SessionState<TData>;
|
|
1087
|
-
/** Steps that were executed */
|
|
1088
|
-
executedSteps: StepRef[];
|
|
1089
|
-
/** Why execution stopped */
|
|
1090
|
-
stoppedReason: StoppedReason;
|
|
1091
|
-
/** Collected data from the batch */
|
|
1092
|
-
collectedData?: Partial<TData>;
|
|
1093
|
-
/** Any errors that occurred */
|
|
1094
|
-
error?: BatchExecutionError;
|
|
1095
|
-
}
|
|
1096
|
-
|
|
1097
|
-
/**
|
|
1098
|
-
* Error details for batch execution failures
|
|
1099
|
-
*/
|
|
1100
|
-
interface BatchExecutionError {
|
|
1101
|
-
/** Type of error that occurred */
|
|
1102
|
-
type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
|
|
1103
|
-
'llm_call' | 'data_validation' | 'finalize_hook';
|
|
1104
|
-
/** Error message */
|
|
1105
|
-
message: string;
|
|
1106
|
-
/** Step where error occurred (if applicable) */
|
|
1107
|
-
stepId?: string;
|
|
1108
|
-
/** Additional error details */
|
|
1109
|
-
details?: unknown;
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
|
-
/**
|
|
1113
|
-
* Event emitted during batch execution for debugging
|
|
1114
|
-
*/
|
|
1115
|
-
interface BatchExecutionEvent {
|
|
1116
|
-
/** Type of batch execution event */
|
|
1117
|
-
type: 'batch_start' | 'step_included' | 'step_skipped' | 'batch_stop' | 'batch_complete';
|
|
1118
|
-
/** Timestamp when the event occurred */
|
|
1119
|
-
timestamp: Date;
|
|
1120
|
-
/** Event-specific details */
|
|
1121
|
-
details: {
|
|
1122
|
-
stepId?: string;
|
|
1123
|
-
reason?: string;
|
|
1124
|
-
batchSize?: number;
|
|
1125
|
-
stoppedReason?: StoppedReason;
|
|
1126
|
-
timing?: BatchExecutionTiming;
|
|
1127
|
-
};
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
/**
|
|
1131
|
-
* Timing information for batch execution phases
|
|
1132
|
-
*/
|
|
1133
|
-
interface BatchExecutionTiming {
|
|
1134
|
-
/** Total batch execution time in milliseconds */
|
|
1135
|
-
totalMs: number;
|
|
1136
|
-
/** Time spent in batch determination phase */
|
|
1137
|
-
determinationMs?: number;
|
|
1138
|
-
/** Time spent executing prepare hooks */
|
|
1139
|
-
prepareHooksMs?: number;
|
|
1140
|
-
/** Time spent in LLM call */
|
|
1141
|
-
llmCallMs?: number;
|
|
1142
|
-
/** Time spent collecting data */
|
|
1143
|
-
dataCollectionMs?: number;
|
|
1144
|
-
/** Time spent executing finalize hooks */
|
|
1145
|
-
finalizeHooksMs?: number;
|
|
1146
|
-
}
|
|
1147
|
-
```
|
|
1148
|
-
|
|
1149
|
-
### Enhanced AgentResponse
|
|
1150
|
-
|
|
1151
|
-
The AgentResponse interface includes batch execution fields:
|
|
1152
|
-
|
|
1153
|
-
```typescript
|
|
1154
|
-
interface AgentResponse<TData = unknown> {
|
|
1155
|
-
/** The generated message */
|
|
1156
|
-
message: string;
|
|
1157
|
-
/** Updated session state */
|
|
1158
|
-
session?: SessionState<TData>;
|
|
1159
|
-
/** Tool calls made during response */
|
|
1160
|
-
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
1161
|
-
/** Whether the route is complete */
|
|
1162
|
-
isRouteComplete?: boolean;
|
|
1163
|
-
|
|
1164
|
-
// Multi-step execution fields
|
|
1165
|
-
/** Steps executed in this response */
|
|
1166
|
-
executedSteps?: StepRef[];
|
|
1167
|
-
/** Why execution stopped */
|
|
1168
|
-
stoppedReason?: StoppedReason;
|
|
1169
|
-
/** Error information if execution failed */
|
|
1170
|
-
error?: BatchExecutionError;
|
|
1171
|
-
}
|
|
1172
|
-
```
|
|
1173
|
-
|
|
1174
|
-
### Tool Types
|
|
1175
|
-
|
|
1176
|
-
```typescript
|
|
1177
|
-
interface Tool<TContext, TArgs extends unknown[], TResult, TData> {
|
|
1178
|
-
id: string;
|
|
1179
|
-
description: string;
|
|
1180
|
-
parameters: StructuredSchema;
|
|
1181
|
-
execute: ToolHandler<TContext, TArgs, TResult, TData>;
|
|
1182
|
-
}
|
|
1183
|
-
|
|
1184
|
-
type ToolHandler<TContext, TArgs extends unknown[], TResult, TData> = (
|
|
1185
|
-
args: TArgs[0],
|
|
1186
|
-
context: {
|
|
1187
|
-
context: TContext;
|
|
1188
|
-
data: Partial<TData>;
|
|
1189
|
-
}
|
|
1190
|
-
) => Promise<{
|
|
1191
|
-
data: unknown;
|
|
1192
|
-
contextUpdate?: Partial<TContext>;
|
|
1193
|
-
dataUpdate?: Partial<TData>;
|
|
1194
|
-
}>;
|
|
1195
|
-
```
|
|
1196
|
-
|
|
1197
|
-
### EnhancedTool
|
|
1198
|
-
|
|
1199
|
-
Extends `Tool` with optional metadata for concurrency, permissions, validation, and result budgeting. See [EnhancedTool Reference](../core/tools/enhanced-tool.md) for full documentation.
|
|
1200
|
-
|
|
1201
|
-
```typescript
|
|
1202
|
-
interface EnhancedTool<TContext, TData, TResult> extends Tool<TContext, TData, TResult> {
|
|
1203
|
-
isConcurrencySafe?(input?: Record<string, unknown>): boolean;
|
|
1204
|
-
isReadOnly?(input?: Record<string, unknown>): boolean;
|
|
1205
|
-
isDestructive?(input?: Record<string, unknown>): boolean;
|
|
1206
|
-
interruptBehavior?(): 'cancel' | 'block';
|
|
1207
|
-
maxResultSizeChars?: number;
|
|
1208
|
-
validateInput?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolValidationResult> | ToolValidationResult;
|
|
1209
|
-
checkPermissions?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolPermissionResult> | ToolPermissionResult;
|
|
1210
|
-
}
|
|
1211
|
-
|
|
1212
|
-
interface ToolValidationResult { valid: boolean; error?: string; correctedInput?: Record<string, unknown>; }
|
|
1213
|
-
interface ToolPermissionResult { allowed: boolean; reason?: string; canOverride?: boolean; }
|
|
1214
|
-
interface ToolCallRequest { id: string; toolName: string; arguments: Record<string, unknown>; }
|
|
1215
|
-
interface ToolExecutionUpdate<TData> { toolCallId: string; result?: ToolExecutionResult; progress?: string; contextUpdate?: Record<string, unknown>; dataUpdate?: Partial<TData>; }
|
|
1216
|
-
interface CompactionOptions { maxTokens: number; compactionThreshold: number; preserveRecentCount: number; maxToolResultChars: number; provider: AiProvider; }
|
|
1217
|
-
interface CompactionResult<TData> { history: HistoryItem[]; strategy: 'none' | 'tool_result_budget' | 'micro_compact' | 'auto_compact'; estimatedTokens: number; messagesCompacted: number; summary?: string; }
|
|
1218
|
-
```
|
|
1219
|
-
|
|
1220
|
-
### AI Provider Types
|
|
1221
|
-
|
|
1222
|
-
```typescript
|
|
1223
|
-
interface AiProvider {
|
|
1224
|
-
name: string;
|
|
1225
|
-
generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>;
|
|
1226
|
-
generateMessageStream(
|
|
1227
|
-
input: GenerateMessageInput
|
|
1228
|
-
): AsyncGenerator<GenerateMessageStreamChunk>;
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1231
|
-
interface GenerateMessageInput<TContext = unknown> {
|
|
1232
|
-
prompt: string;
|
|
1233
|
-
history: Event[];
|
|
1234
|
-
context?: TContext;
|
|
1235
|
-
tools?: ToolDefinition[];
|
|
1236
|
-
parameters?: {
|
|
1237
|
-
jsonSchema?: StructuredSchema;
|
|
1238
|
-
schemaName?: string;
|
|
1239
|
-
maxOutputTokens?: number;
|
|
1240
|
-
reasoning?: { effort: "low" | "medium" | "high" };
|
|
1241
|
-
};
|
|
1242
|
-
signal?: AbortSignal;
|
|
1243
|
-
}
|
|
1244
|
-
```
|
|
1245
|
-
|
|
1246
|
-
---
|
|
1247
|
-
|
|
1248
|
-
## Utilities
|
|
1249
|
-
|
|
1250
|
-
### Session Utilities
|
|
1251
|
-
|
|
1252
|
-
```typescript
|
|
1253
|
-
// Overload 1: Classic — ID + metadata
|
|
1254
|
-
createSession<TData = unknown>(sessionId?: string, metadata?: SessionMetadata): SessionState<TData>
|
|
1255
|
-
|
|
1256
|
-
// Overload 2: Partial state — merge with defaults
|
|
1257
|
-
createSession<TData = unknown>(state: Partial<SessionState<TData>>): SessionState<TData>
|
|
1258
|
-
|
|
1259
|
-
// Generate a unique session ID without creating a full session
|
|
1260
|
-
createSessionId(): string
|
|
1261
|
-
|
|
1262
|
-
enterRoute<TData>(
|
|
1263
|
-
session: SessionState<TData>,
|
|
1264
|
-
routeId: string,
|
|
1265
|
-
routeTitle: string
|
|
1266
|
-
): SessionState<TData>
|
|
1267
|
-
|
|
1268
|
-
enterStep<TData>(
|
|
1269
|
-
session: SessionState<TData>,
|
|
1270
|
-
stepId: string,
|
|
1271
|
-
stepDescription?: string
|
|
1272
|
-
): SessionState<TData>
|
|
1273
|
-
|
|
1274
|
-
mergeCollected<TData>(
|
|
1275
|
-
session: SessionState<TData>,
|
|
1276
|
-
data: Partial<TData>
|
|
1277
|
-
): SessionState<TData>
|
|
1278
|
-
```
|
|
1279
|
-
|
|
1280
|
-
### Template Utilities
|
|
1281
|
-
|
|
1282
|
-
```typescript
|
|
1283
|
-
render<TContext, TData>(
|
|
1284
|
-
template: Template<TContext, TData> | undefined,
|
|
1285
|
-
params: TemplateContext<TContext, TData>
|
|
1286
|
-
): Promise<string>
|
|
1287
|
-
|
|
1288
|
-
renderMany<TContext, TData>(
|
|
1289
|
-
templates: Template<TContext, TData>[] | undefined,
|
|
1290
|
-
params: TemplateContext<TContext, TData>
|
|
1291
|
-
): Promise<string[]>
|
|
1292
|
-
|
|
1293
|
-
formatKnowledgeBase(
|
|
1294
|
-
data: Record<string, unknown>,
|
|
1295
|
-
title?: string,
|
|
1296
|
-
maxDepth?: number
|
|
1297
|
-
): string
|
|
1298
|
-
```
|
|
1299
|
-
|
|
1300
|
-
### ID Generators
|
|
1301
|
-
|
|
1302
|
-
```typescript
|
|
1303
|
-
generateRouteId(title: string): string
|
|
1304
|
-
generateStepId(routeId: string, description?: string): string
|
|
1305
|
-
generateToolId(name: string): string
|
|
1306
|
-
```
|
|
1307
|
-
|
|
1308
|
-
## Agent-Level Data Collection Example
|
|
1309
|
-
|
|
1310
|
-
Here's a comprehensive example showing the new agent-level data collection architecture:
|
|
1311
|
-
|
|
1312
|
-
```typescript
|
|
1313
|
-
import { Agent, OpenAIProvider } from "@falai/agent";
|
|
1314
|
-
|
|
1315
|
-
// Define comprehensive agent-level data interface
|
|
1316
|
-
interface CustomerServiceData {
|
|
1317
|
-
// Customer identification
|
|
1318
|
-
customerId?: string;
|
|
1319
|
-
customerName?: string;
|
|
1320
|
-
email?: string;
|
|
1321
|
-
phone?: string;
|
|
1322
|
-
|
|
1323
|
-
// Issue tracking
|
|
1324
|
-
issueType?: 'booking' | 'billing' | 'technical' | 'other';
|
|
1325
|
-
issueDescription?: string;
|
|
1326
|
-
priority?: 'low' | 'medium' | 'high';
|
|
1327
|
-
|
|
1328
|
-
// Feedback
|
|
1329
|
-
rating?: number;
|
|
1330
|
-
comments?: string;
|
|
1331
|
-
recommendToFriend?: boolean;
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
|
-
// Create agent with centralized schema
|
|
1335
|
-
const agent = new Agent<{}, CustomerServiceData>({
|
|
1336
|
-
name: "Customer Service Agent",
|
|
1337
|
-
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY, model: "gpt-4" }),
|
|
1338
|
-
|
|
1339
|
-
// Agent-level schema defines all possible data fields
|
|
1340
|
-
schema: {
|
|
1341
|
-
type: "object",
|
|
1342
|
-
properties: {
|
|
1343
|
-
customerId: { type: "string" },
|
|
1344
|
-
customerName: { type: "string" },
|
|
1345
|
-
email: { type: "string", format: "email" },
|
|
1346
|
-
phone: { type: "string" },
|
|
1347
|
-
issueType: { type: "string", enum: ["booking", "billing", "technical", "other"] },
|
|
1348
|
-
issueDescription: { type: "string" },
|
|
1349
|
-
priority: { type: "string", enum: ["low", "medium", "high"] },
|
|
1350
|
-
rating: { type: "number", minimum: 1, maximum: 5 },
|
|
1351
|
-
comments: { type: "string" },
|
|
1352
|
-
recommendToFriend: { type: "boolean" }
|
|
1353
|
-
}
|
|
1354
|
-
},
|
|
1355
|
-
|
|
1356
|
-
// Agent-level data validation and enrichment
|
|
1357
|
-
hooks: {
|
|
1358
|
-
onDataUpdate: async (data, previousData) => {
|
|
1359
|
-
// Auto-set priority based on issue type
|
|
1360
|
-
if (data.issueType === 'billing' && !data.priority) {
|
|
1361
|
-
data.priority = 'high';
|
|
1362
|
-
}
|
|
1363
|
-
|
|
1364
|
-
// Enrich customer data
|
|
1365
|
-
if (data.customerName && !data.customerId) {
|
|
1366
|
-
data.customerId = await lookupCustomerId(data.customerName);
|
|
1367
|
-
}
|
|
1368
|
-
|
|
1369
|
-
return data;
|
|
1370
|
-
}
|
|
1371
|
-
}
|
|
1372
|
-
});
|
|
1373
|
-
|
|
1374
|
-
// Routes specify required fields instead of schemas
|
|
1375
|
-
const supportRoute = agent.createRoute({
|
|
1376
|
-
title: "Customer Support",
|
|
1377
|
-
requiredFields: ["customerName", "email", "issueType", "issueDescription"],
|
|
1378
|
-
optionalFields: ["phone", "priority"],
|
|
1379
|
-
|
|
1380
|
-
initialStep: {
|
|
1381
|
-
prompt: "I'm here to help with your issue. Can you tell me your name and email?",
|
|
1382
|
-
collect: ["customerName", "email"]
|
|
1383
|
-
}
|
|
1384
|
-
});
|
|
1385
|
-
|
|
1386
|
-
const feedbackRoute = agent.createRoute({
|
|
1387
|
-
title: "Feedback Collection",
|
|
1388
|
-
requiredFields: ["customerName", "email", "rating"],
|
|
1389
|
-
optionalFields: ["comments", "recommendToFriend"],
|
|
1390
|
-
|
|
1391
|
-
initialStep: {
|
|
1392
|
-
prompt: "I'd love to get your feedback. What's your name and email?",
|
|
1393
|
-
collect: ["customerName", "email"]
|
|
1394
|
-
}
|
|
1395
|
-
});
|
|
1396
|
-
|
|
1397
|
-
// Cross-route data sharing example
|
|
1398
|
-
const response1 = await agent.respond("Hi, I'm John Doe, email john@example.com, I have a billing issue");
|
|
1399
|
-
// Agent data: { customerName: "John Doe", email: "john@example.com", issueType: "billing" }
|
|
1400
|
-
|
|
1401
|
-
const response2 = await agent.respond("Actually, I want to leave feedback instead. I'd rate you 5 stars.");
|
|
1402
|
-
// Feedback route completes immediately: already has name, email, and now rating
|
|
1403
|
-
// { customerName: "John Doe", email: "john@example.com", rating: 5 }
|
|
1404
|
-
|
|
1405
|
-
// Check route completion
|
|
1406
|
-
console.log(feedbackRoute.isComplete(agent.getCollectedData())); // true
|
|
1407
|
-
console.log(feedbackRoute.getCompletionProgress(agent.getCollectedData())); // 1.0
|
|
1408
|
-
```
|
|
1409
|
-
|
|
1410
|
-
This API reference covers the complete @falai/agent framework. For more detailed examples and usage patterns, see the [examples directory](../../examples/) and [guides](../../docs/guides/).
|