@falai/agent 0.9.2 → 1.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 +281 -42
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.d.ts +16 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +63 -2
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +850 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +217 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +211 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +752 -74
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +34 -5
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Route.js +196 -19
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/{src → cjs}/core/Step.d.ts +31 -10
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Step.js +105 -10
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +12 -1
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +15 -3
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +2 -1
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +6 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +111 -12
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{src/core → core}/Agent.d.ts +16 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +64 -3
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +845 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +213 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +207 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +752 -74
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/{src/core → core}/Route.js +195 -18
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +310 -60
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/{src/core → core}/Step.js +104 -9
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +3 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +15 -3
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +111 -12
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/README.md +1 -0
- package/docs/api/README.md +237 -12
- package/docs/api/overview.md +206 -3
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +156 -5
- package/docs/core/agent/rules-and-prohibitions.md +113 -0
- package/docs/core/agent/session-management.md +1 -1
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +146 -0
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +2 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +193 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/guides/getting-started/README.md +284 -3
- package/docs/guides/migration/README.md +27 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +373 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
- package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +4 -4
- package/examples/ai-providers/openai-integration.ts +1 -1
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +54 -33
- package/examples/core-concepts/schema-driven-extraction.ts +33 -9
- package/examples/core-concepts/session-management.ts +51 -16
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +10 -10
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +8 -8
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +3 -3
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/data-enrichment-tools.ts +4 -4
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +78 -2
- package/src/core/BatchExecutor.ts +1166 -0
- package/src/core/BatchPromptBuilder.ts +293 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +168 -29
- package/src/core/ResponseModal.ts +954 -74
- package/src/core/ResponsePipeline.ts +17 -9
- package/src/core/Route.ts +223 -22
- package/src/core/RoutingEngine.ts +426 -83
- package/src/core/Step.ts +144 -16
- package/src/index.ts +19 -0
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +15 -3
- package/src/types/index.ts +12 -1
- package/src/types/route.ts +131 -12
- package/src/types/template.ts +70 -2
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolManager.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolManager.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.js +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.js +0 -0
- /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src/core → core}/ToolManager.js +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src/types → types}/tool.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
package/docs/api/overview.md
CHANGED
|
@@ -394,9 +394,9 @@ configure(config: Partial<StepOptions<TContext, TData>>): this
|
|
|
394
394
|
##### Transitions
|
|
395
395
|
|
|
396
396
|
```typescript
|
|
397
|
-
nextStep(spec: StepOptions<TContext, TData>):
|
|
397
|
+
nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
|
|
398
398
|
branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
|
|
399
|
-
endRoute(options?: Omit<StepOptions<TContext, TData>, 'step'>):
|
|
399
|
+
endRoute(options?: Omit<StepOptions<TContext, TData>, 'step'>): StepResult<TContext, TData>
|
|
400
400
|
```
|
|
401
401
|
|
|
402
402
|
##### Validation
|
|
@@ -422,6 +422,55 @@ getRef(): StepRef
|
|
|
422
422
|
|
|
423
423
|
---
|
|
424
424
|
|
|
425
|
+
### StepResult
|
|
426
|
+
|
|
427
|
+
Result interface returned by step transition methods that enables fluent chaining of conversation flows.
|
|
428
|
+
|
|
429
|
+
#### Interface
|
|
430
|
+
|
|
431
|
+
```typescript
|
|
432
|
+
interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
|
|
433
|
+
nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
|
|
434
|
+
branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
|
|
435
|
+
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
#### Methods
|
|
440
|
+
|
|
441
|
+
##### Chaining
|
|
442
|
+
|
|
443
|
+
```typescript
|
|
444
|
+
nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData>
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Creates a transition and returns a chainable result for building linear flows.
|
|
448
|
+
|
|
449
|
+
##### Branching
|
|
450
|
+
|
|
451
|
+
```typescript
|
|
452
|
+
branch(branches: BranchSpec<TContext, TData>[]): BranchResult<TContext, TData>
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
Creates multiple conditional branches for complex conversation flows.
|
|
456
|
+
|
|
457
|
+
##### Route Completion
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
endRoute(options?: Omit<StepOptions<TContext, TData>, "step">): StepResult<TContext, TData>
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
Shortcut method to end the current route with optional completion configuration.
|
|
464
|
+
|
|
465
|
+
#### Properties
|
|
466
|
+
|
|
467
|
+
Inherits from `StepRef`:
|
|
468
|
+
|
|
469
|
+
- `id: string` - Step identifier
|
|
470
|
+
- `routeId: string` - Route this step belongs to
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
425
474
|
### RoutingEngine
|
|
426
475
|
|
|
427
476
|
AI-powered routing system that intelligently selects routes and steps based on conversation context.
|
|
@@ -708,6 +757,10 @@ interface AgentOptions<TContext = unknown, TData = unknown> {
|
|
|
708
757
|
schema?: StructuredSchema;
|
|
709
758
|
initialData?: Partial<TData>;
|
|
710
759
|
|
|
760
|
+
// NEW: Agent-wide rules and prohibitions
|
|
761
|
+
rules?: Template<TContext, TData>[];
|
|
762
|
+
prohibitions?: Template<TContext, TData>[];
|
|
763
|
+
|
|
711
764
|
hooks?: ContextLifecycleHooks<TContext, TData>;
|
|
712
765
|
debug?: boolean;
|
|
713
766
|
session?: SessionState;
|
|
@@ -725,7 +778,8 @@ interface RouteOptions<TContext = unknown, TData = unknown> {
|
|
|
725
778
|
description?: string;
|
|
726
779
|
identity?: Template<TContext, TData>;
|
|
727
780
|
personality?: Template<TContext, TData>;
|
|
728
|
-
|
|
781
|
+
when?: ConditionTemplate<TContext, TData>;
|
|
782
|
+
skipIf?: ConditionTemplate<TContext, TData>;
|
|
729
783
|
rules?: Template<TContext, TData>[];
|
|
730
784
|
prohibitions?: Template<TContext, TData>[];
|
|
731
785
|
|
|
@@ -767,6 +821,31 @@ interface StepOptions<TContext = unknown, TData = unknown> {
|
|
|
767
821
|
tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
|
|
768
822
|
}
|
|
769
823
|
|
|
824
|
+
interface StepResult<TContext = unknown, TData = unknown> extends StepRef {
|
|
825
|
+
nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
|
|
826
|
+
branch: (branches: BranchSpec<TContext, TData>[]) => BranchResult<TContext, TData>;
|
|
827
|
+
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) => StepResult<TContext, TData>;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
interface BranchResult<TContext = unknown, TData = unknown> {
|
|
831
|
+
[branchName: string]: StepResult<TContext, TData>;
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
interface BranchSpec<TContext = unknown, TData = unknown> {
|
|
835
|
+
name: string;
|
|
836
|
+
id?: string;
|
|
837
|
+
step: StepOptions<TContext, TData>;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
interface StepRef {
|
|
841
|
+
id: string;
|
|
842
|
+
routeId: string;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
interface RouteRef {
|
|
846
|
+
id: string;
|
|
847
|
+
}
|
|
848
|
+
|
|
770
849
|
// ==============================================================================
|
|
771
850
|
// LIFECYCLE HOOKS: prepare & finalize
|
|
772
851
|
// ==============================================================================
|
|
@@ -847,6 +926,130 @@ interface SessionData {
|
|
|
847
926
|
}
|
|
848
927
|
```
|
|
849
928
|
|
|
929
|
+
### Batch Execution Types
|
|
930
|
+
|
|
931
|
+
Types for multi-step batch execution:
|
|
932
|
+
|
|
933
|
+
```typescript
|
|
934
|
+
/**
|
|
935
|
+
* Reason why batch execution stopped
|
|
936
|
+
*/
|
|
937
|
+
type StoppedReason =
|
|
938
|
+
| 'needs_input' // Step requires uncollected data
|
|
939
|
+
| 'end_route' // Reached END_ROUTE
|
|
940
|
+
| 'route_complete' // All Steps processed
|
|
941
|
+
| 'prepare_error' // Error in prepare hook
|
|
942
|
+
| 'llm_error' // Error during LLM call
|
|
943
|
+
| 'validation_error' // Error validating collected data
|
|
944
|
+
| 'finalize_error'; // Error in finalize hook (non-fatal)
|
|
945
|
+
|
|
946
|
+
/**
|
|
947
|
+
* Result of batch determination - which steps can execute together
|
|
948
|
+
*/
|
|
949
|
+
interface BatchResult<TContext = unknown, TData = unknown> {
|
|
950
|
+
/** Steps included in this batch */
|
|
951
|
+
steps: StepOptions<TContext, TData>[];
|
|
952
|
+
/** Why the batch stopped */
|
|
953
|
+
stoppedReason: StoppedReason;
|
|
954
|
+
/** The Step that caused the stop (if applicable) */
|
|
955
|
+
stoppedAtStep?: StepOptions<TContext, TData>;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* Result of executing a batch of steps
|
|
960
|
+
*/
|
|
961
|
+
interface BatchExecutionResult<TData = unknown> {
|
|
962
|
+
/** The generated message */
|
|
963
|
+
message: string;
|
|
964
|
+
/** Updated session state */
|
|
965
|
+
session: SessionState<TData>;
|
|
966
|
+
/** Steps that were executed */
|
|
967
|
+
executedSteps: StepRef[];
|
|
968
|
+
/** Why execution stopped */
|
|
969
|
+
stoppedReason: StoppedReason;
|
|
970
|
+
/** Collected data from the batch */
|
|
971
|
+
collectedData?: Partial<TData>;
|
|
972
|
+
/** Any errors that occurred */
|
|
973
|
+
error?: BatchExecutionError;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
/**
|
|
977
|
+
* Error details for batch execution failures
|
|
978
|
+
*/
|
|
979
|
+
interface BatchExecutionError {
|
|
980
|
+
/** Type of error that occurred */
|
|
981
|
+
type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
|
|
982
|
+
'llm_call' | 'data_validation' | 'finalize_hook';
|
|
983
|
+
/** Error message */
|
|
984
|
+
message: string;
|
|
985
|
+
/** Step where error occurred (if applicable) */
|
|
986
|
+
stepId?: string;
|
|
987
|
+
/** Additional error details */
|
|
988
|
+
details?: unknown;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
/**
|
|
992
|
+
* Event emitted during batch execution for debugging
|
|
993
|
+
*/
|
|
994
|
+
interface BatchExecutionEvent {
|
|
995
|
+
/** Type of batch execution event */
|
|
996
|
+
type: 'batch_start' | 'step_included' | 'step_skipped' | 'batch_stop' | 'batch_complete';
|
|
997
|
+
/** Timestamp when the event occurred */
|
|
998
|
+
timestamp: Date;
|
|
999
|
+
/** Event-specific details */
|
|
1000
|
+
details: {
|
|
1001
|
+
stepId?: string;
|
|
1002
|
+
reason?: string;
|
|
1003
|
+
batchSize?: number;
|
|
1004
|
+
stoppedReason?: StoppedReason;
|
|
1005
|
+
timing?: BatchExecutionTiming;
|
|
1006
|
+
};
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
/**
|
|
1010
|
+
* Timing information for batch execution phases
|
|
1011
|
+
*/
|
|
1012
|
+
interface BatchExecutionTiming {
|
|
1013
|
+
/** Total batch execution time in milliseconds */
|
|
1014
|
+
totalMs: number;
|
|
1015
|
+
/** Time spent in batch determination phase */
|
|
1016
|
+
determinationMs?: number;
|
|
1017
|
+
/** Time spent executing prepare hooks */
|
|
1018
|
+
prepareHooksMs?: number;
|
|
1019
|
+
/** Time spent in LLM call */
|
|
1020
|
+
llmCallMs?: number;
|
|
1021
|
+
/** Time spent collecting data */
|
|
1022
|
+
dataCollectionMs?: number;
|
|
1023
|
+
/** Time spent executing finalize hooks */
|
|
1024
|
+
finalizeHooksMs?: number;
|
|
1025
|
+
}
|
|
1026
|
+
```
|
|
1027
|
+
|
|
1028
|
+
### Enhanced AgentResponse
|
|
1029
|
+
|
|
1030
|
+
The AgentResponse interface includes batch execution fields:
|
|
1031
|
+
|
|
1032
|
+
```typescript
|
|
1033
|
+
interface AgentResponse<TData = unknown> {
|
|
1034
|
+
/** The generated message */
|
|
1035
|
+
message: string;
|
|
1036
|
+
/** Updated session state */
|
|
1037
|
+
session?: SessionState<TData>;
|
|
1038
|
+
/** Tool calls made during response */
|
|
1039
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
1040
|
+
/** Whether the route is complete */
|
|
1041
|
+
isRouteComplete?: boolean;
|
|
1042
|
+
|
|
1043
|
+
// Multi-step execution fields
|
|
1044
|
+
/** Steps executed in this response */
|
|
1045
|
+
executedSteps?: StepRef[];
|
|
1046
|
+
/** Why execution stopped */
|
|
1047
|
+
stoppedReason?: StoppedReason;
|
|
1048
|
+
/** Error information if execution failed */
|
|
1049
|
+
error?: BatchExecutionError;
|
|
1050
|
+
}
|
|
1051
|
+
```
|
|
1052
|
+
|
|
850
1053
|
### Tool Types
|
|
851
1054
|
|
|
852
1055
|
```typescript
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
# Data Extraction Flow Architecture
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
@falai/agent uses an **intelligent pre-extraction system** that captures data from user messages BEFORE entering conversation steps. This eliminates repetitive questions and creates efficient, natural conversations.
|
|
6
|
+
|
|
7
|
+
## The Problem with Traditional Approaches
|
|
8
|
+
|
|
9
|
+
Traditional conversational AI follows a rigid step-by-step approach:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
User: "I want to book the Grand Hotel for 2 people next Friday"
|
|
13
|
+
|
|
14
|
+
Traditional Flow:
|
|
15
|
+
Step 1: "Which hotel?" → User already said this!
|
|
16
|
+
Step 2: "How many guests?" → User already said this!
|
|
17
|
+
Step 3: "What date?" → User already said this!
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
This wastes user time and creates frustration.
|
|
21
|
+
|
|
22
|
+
## Our Solution: Pre-Extraction + Smart Step Selection
|
|
23
|
+
|
|
24
|
+
### Phase 1: Route Selection & Pre-Extraction
|
|
25
|
+
|
|
26
|
+
When a user message arrives:
|
|
27
|
+
|
|
28
|
+
1. **Route Evaluation** - AI scores all routes based on user intent
|
|
29
|
+
2. **Route Selection** - Best matching route is selected
|
|
30
|
+
3. **Pre-Extraction** - If entering a NEW route that collects data:
|
|
31
|
+
- AI extracts ALL relevant data from the message
|
|
32
|
+
- Data is validated against the agent schema
|
|
33
|
+
- Collected data is merged into session
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// User: "I want to book the Grand Hotel for 2 people next Friday"
|
|
37
|
+
|
|
38
|
+
// Pre-extraction automatically captures:
|
|
39
|
+
{
|
|
40
|
+
hotelName: "Grand Hotel",
|
|
41
|
+
guests: 2,
|
|
42
|
+
date: "next Friday"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Phase 2: Route Completion Check
|
|
47
|
+
|
|
48
|
+
After pre-extraction, the system checks if the route is complete:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// Route defines required fields
|
|
52
|
+
agent.createRoute({
|
|
53
|
+
title: "Book Hotel",
|
|
54
|
+
requiredFields: ["hotelName", "guests", "date"],
|
|
55
|
+
// ...
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// After pre-extraction, all required fields are present
|
|
59
|
+
// Route is marked as COMPLETE immediately
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Key Insight:** Routes complete when `requiredFields` are collected, NOT when reaching END_ROUTE step.
|
|
63
|
+
|
|
64
|
+
### Phase 3: Smart Step Selection
|
|
65
|
+
|
|
66
|
+
If route is NOT complete, determine which step to start at:
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// Steps with skipIf conditions
|
|
70
|
+
steps: [
|
|
71
|
+
{
|
|
72
|
+
id: "ask_hotel",
|
|
73
|
+
collect: ["hotelName"],
|
|
74
|
+
skipIf: (data) => !!data.hotelName // ✅ SKIP - already have it
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: "ask_guests",
|
|
78
|
+
collect: ["guests"],
|
|
79
|
+
skipIf: (data) => data.guests !== undefined // ✅ SKIP - already have it
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "ask_date",
|
|
83
|
+
collect: ["date"],
|
|
84
|
+
skipIf: (data) => !!data.date // ✅ SKIP - already have it
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
// Result: All steps skipped → Route complete
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Phase 4: Response Generation
|
|
92
|
+
|
|
93
|
+
**If route is complete:**
|
|
94
|
+
- Generate completion message
|
|
95
|
+
- Mark step as END_ROUTE
|
|
96
|
+
- Exclude route from future selection
|
|
97
|
+
|
|
98
|
+
**If route is NOT complete:**
|
|
99
|
+
- Enter the first non-skipped step
|
|
100
|
+
- Generate response asking for missing data
|
|
101
|
+
- Continue conversation
|
|
102
|
+
|
|
103
|
+
## Complete Flow Example
|
|
104
|
+
|
|
105
|
+
### Scenario: User provides all data at once
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
// Turn 1
|
|
109
|
+
User: "I want to book the Grand Hotel for 2 people next Friday"
|
|
110
|
+
|
|
111
|
+
System:
|
|
112
|
+
1. Routes to "Book Hotel" (AI scoring)
|
|
113
|
+
2. Pre-extracts: { hotelName: "Grand Hotel", guests: 2, date: "next Friday" }
|
|
114
|
+
3. Checks completion: All required fields present ✓
|
|
115
|
+
4. Generates completion message
|
|
116
|
+
5. Marks route as complete
|
|
117
|
+
|
|
118
|
+
AI: "Perfect! Booking confirmed for 2 guests at Grand Hotel on Friday!"
|
|
119
|
+
|
|
120
|
+
// Turn 2
|
|
121
|
+
User: "I'm feeling anxious about my visit"
|
|
122
|
+
|
|
123
|
+
System:
|
|
124
|
+
1. Evaluates routes
|
|
125
|
+
2. Excludes "Book Hotel" (already complete)
|
|
126
|
+
3. Routes to "General Healthcare Questions"
|
|
127
|
+
4. Generates response
|
|
128
|
+
|
|
129
|
+
AI: "I understand you're feeling anxious. How can I help?"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Scenario: User provides partial data
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// Turn 1
|
|
136
|
+
User: "I want to book the Grand Hotel"
|
|
137
|
+
|
|
138
|
+
System:
|
|
139
|
+
1. Routes to "Book Hotel"
|
|
140
|
+
2. Pre-extracts: { hotelName: "Grand Hotel" }
|
|
141
|
+
3. Checks completion: Missing guests and date ✗
|
|
142
|
+
4. Evaluates steps:
|
|
143
|
+
- ask_hotel: SKIP (have hotelName)
|
|
144
|
+
- ask_guests: ENTER (need guests)
|
|
145
|
+
5. Enters ask_guests step
|
|
146
|
+
|
|
147
|
+
AI: "How many guests will be staying?"
|
|
148
|
+
|
|
149
|
+
// Turn 2
|
|
150
|
+
User: "2 people next Friday"
|
|
151
|
+
|
|
152
|
+
System:
|
|
153
|
+
1. Already in "Book Hotel" route
|
|
154
|
+
2. Pre-extracts: { guests: 2, date: "next Friday" }
|
|
155
|
+
3. Checks completion: All required fields present ✓
|
|
156
|
+
4. Generates completion message
|
|
157
|
+
|
|
158
|
+
AI: "Booking confirmed for 2 guests at Grand Hotel on Friday!"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Key Design Decisions
|
|
162
|
+
|
|
163
|
+
### 1. Pre-Extraction Triggers
|
|
164
|
+
|
|
165
|
+
Pre-extraction only happens when:
|
|
166
|
+
- Entering a NEW route (not already in it)
|
|
167
|
+
- Route has `requiredFields`, `optionalFields`, OR steps with `collect` arrays
|
|
168
|
+
|
|
169
|
+
This minimizes unnecessary AI calls for purely conversational routes.
|
|
170
|
+
|
|
171
|
+
### 2. Route Completion Logic
|
|
172
|
+
|
|
173
|
+
A route is complete when:
|
|
174
|
+
- **All `requiredFields` are collected**, OR
|
|
175
|
+
- **Reached END_ROUTE marker in step flow**
|
|
176
|
+
|
|
177
|
+
Whichever comes first.
|
|
178
|
+
|
|
179
|
+
### 3. Completed Route Exclusion
|
|
180
|
+
|
|
181
|
+
Once a route is 100% complete:
|
|
182
|
+
- It's excluded from future route selection
|
|
183
|
+
- Users won't be forced back into finished tasks
|
|
184
|
+
- System falls back to other routes or general conversation
|
|
185
|
+
|
|
186
|
+
### 4. Step Skipping Logic
|
|
187
|
+
|
|
188
|
+
Steps are skipped when:
|
|
189
|
+
- `skipIf` condition evaluates to true
|
|
190
|
+
- `requires` fields are not yet collected
|
|
191
|
+
- Data for `collect` fields is already present
|
|
192
|
+
|
|
193
|
+
## Configuration
|
|
194
|
+
|
|
195
|
+
### Enable Pre-Extraction
|
|
196
|
+
|
|
197
|
+
Pre-extraction is automatic when you define:
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
// Option 1: Route-level required fields
|
|
201
|
+
agent.createRoute({
|
|
202
|
+
title: "Booking",
|
|
203
|
+
requiredFields: ["hotel", "date", "guests"],
|
|
204
|
+
// Pre-extraction enabled automatically
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// Option 2: Route-level optional fields
|
|
208
|
+
agent.createRoute({
|
|
209
|
+
title: "Booking",
|
|
210
|
+
optionalFields: ["specialRequests"],
|
|
211
|
+
// Pre-extraction enabled automatically
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// Option 3: Steps with collect arrays
|
|
215
|
+
agent.createRoute({
|
|
216
|
+
title: "Booking",
|
|
217
|
+
steps: [
|
|
218
|
+
{
|
|
219
|
+
id: "ask_hotel",
|
|
220
|
+
collect: ["hotel"], // Pre-extraction enabled automatically
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Disable Pre-Extraction
|
|
227
|
+
|
|
228
|
+
For purely conversational routes (no data collection):
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
agent.createRoute({
|
|
232
|
+
title: "General Chat",
|
|
233
|
+
// No requiredFields, optionalFields, or collect arrays
|
|
234
|
+
// Pre-extraction skipped automatically
|
|
235
|
+
steps: [
|
|
236
|
+
{
|
|
237
|
+
id: "chat",
|
|
238
|
+
prompt: "Have a friendly conversation"
|
|
239
|
+
// No collect array
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Performance Considerations
|
|
246
|
+
|
|
247
|
+
### AI Call Optimization
|
|
248
|
+
|
|
249
|
+
Pre-extraction adds ONE additional AI call when entering a new data-collecting route:
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
Traditional: N calls (one per step)
|
|
253
|
+
With Pre-Extraction: 1 + M calls (pre-extract + remaining steps)
|
|
254
|
+
|
|
255
|
+
Where M ≤ N (often M = 0 if all data extracted)
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Net Result:** Usually FEWER total AI calls due to step skipping.
|
|
259
|
+
|
|
260
|
+
### When to Use Pre-Extraction
|
|
261
|
+
|
|
262
|
+
✅ **Use for:** Data collection flows (booking, forms, surveys)
|
|
263
|
+
✅ **Use for:** Multi-field information gathering
|
|
264
|
+
❌ **Skip for:** Pure Q&A or conversational routes
|
|
265
|
+
❌ **Skip for:** Single-field collection
|
|
266
|
+
|
|
267
|
+
## Advanced Patterns
|
|
268
|
+
|
|
269
|
+
### Optional Fields
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
agent.createRoute({
|
|
273
|
+
title: "Booking",
|
|
274
|
+
requiredFields: ["hotel", "date"],
|
|
275
|
+
optionalFields: ["specialRequests", "dietaryRestrictions"],
|
|
276
|
+
|
|
277
|
+
// Route completes when required fields are collected
|
|
278
|
+
// Optional fields can be collected if user provides them
|
|
279
|
+
// But won't block completion
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Conditional Completion
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
agent.createRoute({
|
|
287
|
+
title: "Order",
|
|
288
|
+
requiredFields: ["items", "address"],
|
|
289
|
+
|
|
290
|
+
steps: [
|
|
291
|
+
// ... collection steps ...
|
|
292
|
+
{
|
|
293
|
+
id: "payment",
|
|
294
|
+
when: "Ready to process payment",
|
|
295
|
+
skipIf: (data) => data.paymentComplete,
|
|
296
|
+
// This step runs AFTER required fields are collected
|
|
297
|
+
// Allows post-completion actions
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
});
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Progressive Disclosure
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
agent.createRoute({
|
|
307
|
+
title: "Support",
|
|
308
|
+
requiredFields: ["issueType"],
|
|
309
|
+
optionalFields: ["accountNumber", "orderNumber"],
|
|
310
|
+
|
|
311
|
+
steps: [
|
|
312
|
+
{
|
|
313
|
+
id: "ask_issue",
|
|
314
|
+
collect: ["issueType"],
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
id: "ask_account",
|
|
318
|
+
collect: ["accountNumber"],
|
|
319
|
+
when: (data) => data.issueType === "account",
|
|
320
|
+
// Only ask for account if issue is account-related
|
|
321
|
+
}
|
|
322
|
+
]
|
|
323
|
+
});
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Debugging
|
|
327
|
+
|
|
328
|
+
Enable debug logging to see the extraction flow:
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
const agent = new Agent({
|
|
332
|
+
name: "Assistant",
|
|
333
|
+
provider: new GeminiProvider({ apiKey: "..." }),
|
|
334
|
+
debug: true // Enable detailed logging
|
|
335
|
+
});
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Look for these log messages:
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
[ResponseModal] Pre-extracting data for route: Book Hotel
|
|
342
|
+
[ResponseModal] Pre-extracted data: { hotelName: "Grand Hotel", ... }
|
|
343
|
+
[ResponseModal] Route Book Hotel completed after pre-extraction
|
|
344
|
+
[RoutingEngine] Excluding completed route: Book Hotel (100% complete)
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## Summary
|
|
348
|
+
|
|
349
|
+
The pre-extraction system creates efficient conversations by:
|
|
350
|
+
|
|
351
|
+
1. **Extracting data early** - Before entering steps
|
|
352
|
+
2. **Skipping unnecessary steps** - When data is already present
|
|
353
|
+
3. **Completing automatically** - When required fields are collected
|
|
354
|
+
4. **Protecting completed routes** - Preventing re-entry
|
|
355
|
+
|
|
356
|
+
This results in natural, efficient conversations that respect user time.
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
**Next Steps:**
|
|
361
|
+
- [Route Configuration](../core/conversation-flows/routes.md)
|
|
362
|
+
- [Step Configuration](../core/conversation-flows/steps.md)
|
|
363
|
+
- [Schema Design](../guides/building-agents/schema-design.md)
|