@falai/agent 0.8.1 → 0.9.0-alpha-2
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 +332 -147
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +223 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1660 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +73 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +514 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +145 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +343 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +86 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +217 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +45 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +80 -41
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +38 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +235 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +65 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/{types → cjs/src/types}/tool.d.ts +17 -13
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +35 -32
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +223 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1656 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +71 -18
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +32 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +510 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +145 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +339 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +129 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +211 -113
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +86 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +213 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +45 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +80 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +80 -41
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +38 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +235 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{cjs → src}/types/tool.d.ts +17 -13
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +33 -32
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +925 -255
- package/docs/api/overview.md +952 -0
- package/docs/core/agent/README.md +787 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
- package/docs/core/ai-integration/prompt-composition.md +220 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +176 -0
- package/docs/core/conversation-flows/data-collection.md +623 -0
- package/docs/core/conversation-flows/route-dsl.md +502 -0
- package/docs/core/conversation-flows/routes.md +117 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +348 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +406 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
- package/examples/ai-providers/anthropic-integration.ts +384 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
- package/examples/conversation-flows/completion-transitions.ts +277 -0
- package/examples/core-concepts/basic-agent.ts +443 -0
- package/examples/core-concepts/schema-driven-extraction.ts +305 -0
- package/examples/core-concepts/session-management.ts +406 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +609 -0
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/persistence/redis-persistence.ts +490 -0
- package/examples/tools/basic-tools.ts +561 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1431 -526
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +103 -49
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +128 -46
- package/src/core/ResponsePipeline.ts +830 -0
- package/src/core/Route.ts +222 -53
- package/src/core/RoutingEngine.ts +345 -229
- package/src/core/SessionManager.ts +265 -0
- package/src/core/Step.ts +157 -67
- package/src/core/ToolExecutor.ts +52 -43
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +81 -46
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +45 -7
- package/src/types/persistence.ts +45 -28
- package/src/types/route.ts +122 -57
- package/src/types/session.ts +20 -220
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +23 -19
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts +0 -197
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -203
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -109
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -175
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/types/tool.d.ts.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts +0 -197
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -199
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -109
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts +0 -175
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/declarative-agent.ts +0 -401
- package/examples/domain-scoping.ts +0 -366
- package/examples/healthcare-agent.ts +0 -511
- package/examples/redis-persistence.ts +0 -525
- package/examples/route-transitions.ts +0 -266
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
package/README.md
CHANGED
|
@@ -97,9 +97,9 @@ After building production AI applications, we found existing solutions either:
|
|
|
97
97
|
|
|
98
98
|
### 🔧 **Tools & Data Integration**
|
|
99
99
|
|
|
100
|
-
- **
|
|
101
|
-
- **
|
|
102
|
-
- **
|
|
100
|
+
- **Advanced Tool System** - Context-aware tools with data access and lifecycle integration
|
|
101
|
+
- **Dynamic Tool Calling** - AI can call tools during streaming responses
|
|
102
|
+
- **Tool Result Processing** - Tools update context and collected data automatically
|
|
103
103
|
|
|
104
104
|
</td>
|
|
105
105
|
</tr>
|
|
@@ -119,6 +119,28 @@ After building production AI applications, we found existing solutions either:
|
|
|
119
119
|
|
|
120
120
|
- **Always-On Routing** - Users can change their mind mid-conversation
|
|
121
121
|
- **Context Awareness** - Router sees current progress and collected data
|
|
122
|
+
|
|
123
|
+
</td>
|
|
124
|
+
</tr>
|
|
125
|
+
<tr>
|
|
126
|
+
<td width="50%">
|
|
127
|
+
|
|
128
|
+
### 🚀 **Advanced Features**
|
|
129
|
+
|
|
130
|
+
- **Streaming Responses** - Real-time response generation with tool execution
|
|
131
|
+
- **Lifecycle Hooks** - `prepare`/`finalize` functions or tools on steps, context/data update hooks
|
|
132
|
+
- **Sequential Steps** - Define linear conversation flows with `steps` array
|
|
133
|
+
- **Route Transitions** - Automatic flow transitions when routes complete
|
|
134
|
+
- **Smart Step Control** - `skipIf` and `requires` for data-driven flow control
|
|
135
|
+
|
|
136
|
+
</td>
|
|
137
|
+
<td width="50%">
|
|
138
|
+
|
|
139
|
+
### 🎨 **Behavioral Control**
|
|
140
|
+
|
|
141
|
+
- **Guidelines & Rules** - Define agent behavior patterns and restrictions
|
|
142
|
+
- **Route-Specific Logic** - Different rules for different conversation contexts
|
|
143
|
+
- **Knowledge Base** - Structured information available to AI during responses
|
|
122
144
|
- **Session Step** - Track conversation progress across turns
|
|
123
145
|
|
|
124
146
|
</td>
|
|
@@ -151,7 +173,12 @@ yarn add @falai/agent
|
|
|
151
173
|
Create a minimal conversational agent:
|
|
152
174
|
|
|
153
175
|
```typescript
|
|
154
|
-
import {
|
|
176
|
+
import {
|
|
177
|
+
Agent,
|
|
178
|
+
GeminiProvider,
|
|
179
|
+
createMessageEvent,
|
|
180
|
+
EventSource,
|
|
181
|
+
} from "@falai/agent";
|
|
155
182
|
|
|
156
183
|
// Create your agent
|
|
157
184
|
const agent = new Agent({
|
|
@@ -159,24 +186,26 @@ const agent = new Agent({
|
|
|
159
186
|
description: "A helpful assistant",
|
|
160
187
|
provider: new GeminiProvider({
|
|
161
188
|
apiKey: process.env.GEMINI_API_KEY,
|
|
162
|
-
model: "models/gemini-2.
|
|
189
|
+
model: "models/gemini-2.5-flash",
|
|
163
190
|
}),
|
|
164
191
|
});
|
|
165
192
|
|
|
166
|
-
// Create a simple route
|
|
193
|
+
// Create a simple route with sequential steps
|
|
167
194
|
agent.createRoute({
|
|
168
195
|
title: "General Help",
|
|
169
196
|
description: "Answers user questions",
|
|
170
197
|
conditions: ["User needs help or asks a question"],
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
198
|
+
steps: [
|
|
199
|
+
{
|
|
200
|
+
id: "answer_question",
|
|
201
|
+
description: "Answer the user's question helpfully",
|
|
202
|
+
prompt: "Answer the user's question helpfully",
|
|
203
|
+
},
|
|
204
|
+
],
|
|
174
205
|
});
|
|
175
206
|
|
|
176
|
-
// Start chatting
|
|
177
|
-
const response = await agent.respond(
|
|
178
|
-
history: [{ source: "customer", name: "Alice", content: "What can you do?" }],
|
|
179
|
-
});
|
|
207
|
+
// Start chatting - simple message-based API
|
|
208
|
+
const response = await agent.respond("What can you do?");
|
|
180
209
|
|
|
181
210
|
console.log(response.message);
|
|
182
211
|
```
|
|
@@ -185,6 +214,60 @@ console.log(response.message);
|
|
|
185
214
|
|
|
186
215
|
---
|
|
187
216
|
|
|
217
|
+
## 🔧 Advanced Step Configuration
|
|
218
|
+
|
|
219
|
+
### Using Tools as Prepare/Finalize Hooks
|
|
220
|
+
|
|
221
|
+
Steps can use tools for `prepare` and `finalize` lifecycle hooks, enabling powerful data processing and side effects:
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
// Define a preparation tool
|
|
225
|
+
const validateUser = {
|
|
226
|
+
id: "validate_user",
|
|
227
|
+
description: "Validate user data before processing",
|
|
228
|
+
parameters: { type: "object", properties: {} },
|
|
229
|
+
handler: ({ context, data }) => {
|
|
230
|
+
// Validation logic
|
|
231
|
+
if (!data.email?.includes("@")) {
|
|
232
|
+
throw new Error("Invalid email address");
|
|
233
|
+
}
|
|
234
|
+
return { data: "User validated" };
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
// Use tools in step lifecycle
|
|
239
|
+
agent.createRoute({
|
|
240
|
+
title: "User Registration",
|
|
241
|
+
schema: {
|
|
242
|
+
/* ... */
|
|
243
|
+
},
|
|
244
|
+
steps: [
|
|
245
|
+
{
|
|
246
|
+
id: "collect_info",
|
|
247
|
+
description: "Collect user information",
|
|
248
|
+
collect: ["name", "email"],
|
|
249
|
+
prompt: "Please provide your name and email.",
|
|
250
|
+
finalize: validateUser, // Tool validates data after collection
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
id: "send_welcome",
|
|
254
|
+
description: "Send welcome email",
|
|
255
|
+
prompt: "Welcome! Check your email for confirmation.",
|
|
256
|
+
prepare: "send_welcome_email", // Tool ID string - sends email before AI responds
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
});
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Benefits:**
|
|
263
|
+
|
|
264
|
+
- ✅ **Reusable Logic** - Tools can be shared across steps and routes
|
|
265
|
+
- ✅ **Error Handling** - Tool execution includes automatic error handling
|
|
266
|
+
- ✅ **Context Access** - Tools receive full context and collected data
|
|
267
|
+
- ✅ **Data Updates** - Tools can modify collected data or agent context
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
188
271
|
### Level 2: Data Extraction (The Real Power)
|
|
189
272
|
|
|
190
273
|
Now let's build an agent that intelligently collects structured data:
|
|
@@ -193,11 +276,9 @@ Now let's build an agent that intelligently collects structured data:
|
|
|
193
276
|
import {
|
|
194
277
|
Agent,
|
|
195
278
|
OpenAIProvider,
|
|
196
|
-
defineTool,
|
|
197
279
|
createMessageEvent,
|
|
198
280
|
EventSource,
|
|
199
|
-
|
|
200
|
-
type ToolContext,
|
|
281
|
+
type Tool,
|
|
201
282
|
} from "@falai/agent";
|
|
202
283
|
|
|
203
284
|
// 1️⃣ Define the data you want to collect
|
|
@@ -207,93 +288,100 @@ interface HotelBookingData {
|
|
|
207
288
|
guests: number;
|
|
208
289
|
}
|
|
209
290
|
|
|
210
|
-
// 2️⃣ Create your agent
|
|
211
|
-
const agent = new Agent({
|
|
291
|
+
// 2️⃣ Create your agent with centralized data schema
|
|
292
|
+
const agent = new Agent<{}, HotelBookingData>({
|
|
212
293
|
name: "BookingBot",
|
|
213
294
|
description: "A hotel booking assistant that collects information.",
|
|
214
295
|
provider: new OpenAIProvider({
|
|
215
296
|
apiKey: process.env.OPENAI_API_KEY,
|
|
216
|
-
model: "gpt-
|
|
297
|
+
model: "gpt-4", // or your preferred model
|
|
217
298
|
}),
|
|
299
|
+
|
|
300
|
+
// Agent-level schema defines all possible data fields
|
|
301
|
+
schema: {
|
|
302
|
+
type: "object",
|
|
303
|
+
properties: {
|
|
304
|
+
hotelName: { type: "string", description: "The name of the hotel." },
|
|
305
|
+
date: { type: "string", description: "The desired booking date." },
|
|
306
|
+
guests: { type: "number", description: "The number of guests." },
|
|
307
|
+
},
|
|
308
|
+
required: ["hotelName", "date", "guests"],
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
// Agent-level data validation and enrichment
|
|
312
|
+
hooks: {
|
|
313
|
+
onDataUpdate: async (data, previousData) => {
|
|
314
|
+
// Auto-validate and enrich data
|
|
315
|
+
if (data.guests && data.guests > 10) {
|
|
316
|
+
throw new Error("Maximum 10 guests allowed");
|
|
317
|
+
}
|
|
318
|
+
return data;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
218
321
|
});
|
|
219
322
|
|
|
220
|
-
// 3️⃣ Define a tool that uses the collected data
|
|
221
|
-
const bookHotel =
|
|
222
|
-
"book_hotel",
|
|
223
|
-
|
|
224
|
-
|
|
323
|
+
// 3️⃣ Define a tool that uses the agent-level collected data
|
|
324
|
+
const bookHotel: Tool<unknown, [], string, HotelBookingData> = {
|
|
325
|
+
id: "book_hotel",
|
|
326
|
+
description: "Books a hotel once all information is collected.",
|
|
327
|
+
parameters: { type: "object", properties: {} },
|
|
328
|
+
handler: ({ data }) => {
|
|
329
|
+
// Tool receives complete agent data
|
|
225
330
|
return {
|
|
226
|
-
data: `Booking confirmed for ${data
|
|
331
|
+
data: `Booking confirmed for ${data.guests} guests at ${data.hotelName} on ${data.date}!`,
|
|
227
332
|
};
|
|
228
333
|
},
|
|
229
|
-
{ description: "Books a hotel once all information is collected." }
|
|
230
|
-
);
|
|
231
|
-
|
|
232
|
-
const schema = {
|
|
233
|
-
type: "object",
|
|
234
|
-
properties: {
|
|
235
|
-
hotelName: { type: "string", description: "The name of the hotel." },
|
|
236
|
-
date: { type: "string", description: "The desired booking date." },
|
|
237
|
-
guests: { type: "number", description: "The number of guests." },
|
|
238
|
-
},
|
|
239
|
-
required: ["hotelName", "date", "guests"],
|
|
240
334
|
};
|
|
241
335
|
|
|
242
|
-
// 4️⃣ Create a
|
|
243
|
-
|
|
336
|
+
// 4️⃣ Create a route with required fields specification
|
|
337
|
+
agent.createRoute({
|
|
244
338
|
title: "Book Hotel",
|
|
245
339
|
description: "Guides the user through the hotel booking process.",
|
|
246
340
|
conditions: ["User wants to book a hotel"],
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// 6️⃣ Start conversing
|
|
283
|
-
const response = await agent.respond({
|
|
284
|
-
history: [
|
|
285
|
-
createMessageEvent(
|
|
286
|
-
EventSource.CUSTOMER,
|
|
287
|
-
"Alice",
|
|
288
|
-
"I want to book a room at the Grand Hotel for 2 people."
|
|
289
|
-
),
|
|
341
|
+
requiredFields: ["hotelName", "date", "guests"], // Required for route completion
|
|
342
|
+
|
|
343
|
+
// 5️⃣ Define the flow to collect data step-by-step
|
|
344
|
+
steps: [
|
|
345
|
+
{
|
|
346
|
+
id: "ask_hotel",
|
|
347
|
+
description: "Ask which hotel they want to book",
|
|
348
|
+
prompt: "Which hotel would you like to book?",
|
|
349
|
+
collect: ["hotelName"],
|
|
350
|
+
skipIf: (data: Partial<HotelBookingData>) => !!data.hotelName,
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
id: "ask_date",
|
|
354
|
+
description: "Ask for the booking date",
|
|
355
|
+
prompt: "What date would you like to book for?",
|
|
356
|
+
collect: ["date"],
|
|
357
|
+
requires: ["hotelName"], // Prerequisites from agent data
|
|
358
|
+
skipIf: (data: Partial<HotelBookingData>) => !!data.date,
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
id: "ask_guests",
|
|
362
|
+
description: "Ask for the number of guests",
|
|
363
|
+
prompt: "How many guests will be staying?",
|
|
364
|
+
collect: ["guests"],
|
|
365
|
+
requires: ["hotelName", "date"], // Prerequisites from agent data
|
|
366
|
+
skipIf: (data: Partial<HotelBookingData>) => data.guests !== undefined,
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
id: "confirm_booking",
|
|
370
|
+
description: "Confirm and book the hotel",
|
|
371
|
+
prompt: "Let me confirm your booking details.",
|
|
372
|
+
tools: [bookHotel], // Tool accesses complete agent data
|
|
373
|
+
requires: ["hotelName", "date", "guests"],
|
|
374
|
+
},
|
|
290
375
|
],
|
|
291
376
|
});
|
|
292
377
|
|
|
378
|
+
// 5️⃣ Start conversing - simple message API
|
|
379
|
+
const response = await agent.respond("I want to book a room at the Grand Hotel for 2 people.");
|
|
380
|
+
|
|
293
381
|
// The agent sees that `hotelName` and `guests` are provided,
|
|
294
382
|
// skips the first and third steps, and only asks for the date.
|
|
295
383
|
console.log(response.message);
|
|
296
|
-
// Expected: "
|
|
384
|
+
// Expected: "What date would you like to book for?"
|
|
297
385
|
```
|
|
298
386
|
|
|
299
387
|
**That's it!** The data-driven agent will:
|
|
@@ -306,32 +394,61 @@ console.log(response.message);
|
|
|
306
394
|
|
|
307
395
|
This creates a flexible and natural conversation, guided by a clear data structure.
|
|
308
396
|
|
|
309
|
-
📖 **[See more examples →](./
|
|
397
|
+
📖 **[See more examples →](./examples/)** | **[Full tutorial →](./docs/guides/getting-started/README.md)**
|
|
310
398
|
|
|
311
399
|
### ⚡ Advanced Features
|
|
312
400
|
|
|
313
401
|
**Streaming responses** for real-time UX:
|
|
314
402
|
|
|
315
403
|
```typescript
|
|
316
|
-
for await (const chunk of agent.respondStream(
|
|
404
|
+
for await (const chunk of agent.respondStream("Hello")) {
|
|
317
405
|
process.stdout.write(chunk.delta);
|
|
406
|
+
if (chunk.done) {
|
|
407
|
+
console.log("\nTool calls:", chunk.toolCalls);
|
|
408
|
+
}
|
|
318
409
|
}
|
|
319
410
|
```
|
|
320
411
|
|
|
321
|
-
**
|
|
412
|
+
**Automatic session management** for multi-turn conversations:
|
|
322
413
|
|
|
323
414
|
```typescript
|
|
324
|
-
|
|
325
|
-
const
|
|
326
|
-
|
|
415
|
+
// Server-side: Create agent with sessionId
|
|
416
|
+
const agent = new Agent({
|
|
417
|
+
name: "Assistant",
|
|
418
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
419
|
+
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
420
|
+
sessionId: "user-123" // Automatically loads or creates session
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
// Simple conversation - no manual session management needed
|
|
424
|
+
const response = await agent.respond("Hello, how are you?");
|
|
425
|
+
console.log(response.message);
|
|
426
|
+
console.log(agent.session.id); // Session ID for client
|
|
327
427
|
```
|
|
328
428
|
|
|
329
|
-
**
|
|
429
|
+
**Automatic session persistence** with any adapter:
|
|
330
430
|
|
|
331
431
|
```typescript
|
|
332
432
|
import { PrismaAdapter } from "@falai/agent";
|
|
333
|
-
|
|
334
|
-
|
|
433
|
+
|
|
434
|
+
// Server endpoint - sessions managed automatically
|
|
435
|
+
app.post('/chat', async (req, res) => {
|
|
436
|
+
const { sessionId, message } = req.body;
|
|
437
|
+
|
|
438
|
+
const agent = new Agent({
|
|
439
|
+
name: "ChatBot",
|
|
440
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
441
|
+
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
442
|
+
sessionId // Automatically loads or creates this session
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
const response = await agent.respond(message);
|
|
446
|
+
|
|
447
|
+
res.json({
|
|
448
|
+
message: response.message,
|
|
449
|
+
sessionId: agent.session.id, // Return session ID to client
|
|
450
|
+
isComplete: response.isRouteComplete
|
|
451
|
+
});
|
|
335
452
|
});
|
|
336
453
|
```
|
|
337
454
|
|
|
@@ -341,104 +458,172 @@ const agent = new Agent({
|
|
|
341
458
|
|
|
342
459
|
## 📚 Documentation
|
|
343
460
|
|
|
344
|
-
📋 **[Complete Documentation Index →](docs/
|
|
461
|
+
📋 **[Complete Documentation Index →](docs/README.md)** - Searchable index of all docs
|
|
462
|
+
|
|
463
|
+
### 🚀 Getting Started
|
|
464
|
+
|
|
465
|
+
- **[Quick Start Guide](./docs/guides/getting-started/README.md)** - Build your first agent in 15 minutes
|
|
466
|
+
|
|
467
|
+
### 🏗️ Core Framework
|
|
345
468
|
|
|
346
|
-
**
|
|
469
|
+
- **[Agent Orchestration](./docs/core/agent/README.md)** - Agent lifecycle, configuration & hooks
|
|
470
|
+
- **[Context Management](./docs/core/agent/context-management.md)** - Dynamic context providers & updates
|
|
471
|
+
- **[Session Management](./docs/core/agent/session-management.md)** - Session persistence & state
|
|
347
472
|
|
|
348
|
-
|
|
349
|
-
- 🏗️ **[Architecture](./docs/ARCHITECTURE.md)** - Design principles & philosophy
|
|
350
|
-
- 🔧 **[API Reference](./docs/API_REFERENCE.md)** - Complete API documentation
|
|
351
|
-
- 📝 **[Examples](./docs/EXAMPLES.md)** - Production-ready code examples
|
|
473
|
+
### 💬 Conversation Flows
|
|
352
474
|
|
|
353
|
-
**
|
|
475
|
+
- **[Routes](./docs/core/conversation-flows/routes.md)** - Route definition & lifecycle
|
|
476
|
+
- **[Steps](./docs/core/conversation-flows/steps.md)** - Step transitions & logic
|
|
354
477
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
-
|
|
358
|
-
-
|
|
359
|
-
-
|
|
360
|
-
|
|
361
|
-
|
|
478
|
+
### 🤖 AI Integration
|
|
479
|
+
|
|
480
|
+
- **[AI Providers](./docs/core/ai-integration/providers.md)** - Gemini, OpenAI, Anthropic, OpenRouter
|
|
481
|
+
- **[Prompt Composition](./docs/core/ai-integration/prompt-composition/)** - How prompts are built
|
|
482
|
+
- **[Response Processing](./docs/core/ai-integration/response-processing/)** - Schema extraction & tool calls
|
|
483
|
+
|
|
484
|
+
### 🔧 Tools & Data
|
|
485
|
+
|
|
486
|
+
- **[Tool Definition](./docs/core/tools/tool-definition.md)** - Creating and configuring tools
|
|
487
|
+
- **[Tool Execution](./docs/core/tools/tool-execution.md)** - Dynamic tool calling and context updates
|
|
488
|
+
- **[Tool Scoping](./docs/core/tools/tool-scoping.md)** - Agent, route, and step-level tool management
|
|
489
|
+
|
|
490
|
+
### 💾 Persistence
|
|
491
|
+
|
|
492
|
+
- **[Session Storage](./docs/core/persistence/session-storage.md)** - Session persistence patterns
|
|
493
|
+
- **[Database Adapters](./docs/core/persistence/adapters.md)** - Built-in adapter configurations
|
|
494
|
+
|
|
495
|
+
### 🚀 Advanced Guides
|
|
496
|
+
|
|
497
|
+
- **[Building Agents](./docs/guides/building-agents/)** - Complete agent construction patterns
|
|
498
|
+
- **[Advanced Patterns](./docs/guides/advanced-patterns/)** - Complex use cases & integrations
|
|
499
|
+
- **[API Reference](./docs/api/overview.md)** - Complete API documentation
|
|
362
500
|
|
|
363
501
|
---
|
|
364
502
|
|
|
365
|
-
## 🎯 Examples -
|
|
503
|
+
## 🎯 Examples - By Domain
|
|
504
|
+
|
|
505
|
+
### 🏗️ Core Concepts
|
|
506
|
+
|
|
507
|
+
Fundamental patterns every agent needs:
|
|
508
|
+
|
|
509
|
+
- **[Basic Agent](./examples/core-concepts/basic-agent.ts)** - Minimal agent setup and configuration
|
|
510
|
+
- **[Schema-Driven Extraction](./examples/core-concepts/schema-driven-extraction.ts)** - Type-safe data collection with JSON Schema
|
|
511
|
+
- **[Session Management](./examples/core-concepts/session-management.ts)** - Multi-turn conversations with persistence
|
|
512
|
+
- **[Context Providers](./examples/core-concepts/context-providers.ts)** - Dynamic context fetching and updates
|
|
513
|
+
|
|
514
|
+
### 💬 Conversation Flows
|
|
366
515
|
|
|
367
|
-
|
|
516
|
+
Building intelligent dialogue systems:
|
|
368
517
|
|
|
369
|
-
|
|
518
|
+
- **[Simple Route](./examples/conversation-flows/simple-route.ts)** - Basic route with linear step progression
|
|
519
|
+
- **[Data-Driven Flows](./examples/conversation-flows/data-driven-flows.ts)** - Conditional logic with skipIf and requires
|
|
520
|
+
- **[Conditional Branching](./examples/conversation-flows/conditional-branching.ts)** - AI-powered branching decisions
|
|
521
|
+
- **[Completion Transitions](./examples/conversation-flows/completion-transitions.ts)** - Route transitions when flows complete
|
|
370
522
|
|
|
371
|
-
|
|
372
|
-
- ✈️ **[Travel Agent](./examples/travel-agent.ts)** - Flight & hotel booking with session step
|
|
373
|
-
- 🏥 **[Healthcare Assistant](./examples/healthcare-agent.ts)** - Appointment scheduling & lab result delivery
|
|
523
|
+
### 🤖 AI Providers
|
|
374
524
|
|
|
375
|
-
|
|
525
|
+
Integrating different AI services:
|
|
376
526
|
|
|
377
|
-
|
|
527
|
+
- **[Gemini Integration](./examples/ai-providers/gemini-integration.ts)** - Google Gemini with advanced features
|
|
528
|
+
- **[OpenAI Integration](./examples/ai-providers/openai-integration.ts)** - GPT-4 and GPT-3.5 Turbo
|
|
529
|
+
- **[Anthropic Integration](./examples/ai-providers/anthropic-integration.ts)** - Claude with streaming and tool calling
|
|
530
|
+
- **[Custom Provider](./examples/ai-providers/custom-provider.ts)** - Build your own AI provider integration
|
|
378
531
|
|
|
379
|
-
|
|
380
|
-
- ⚡ **[Redis Persistence](./examples/redis-persistence.ts)** - High-performance in-memory sessions
|
|
381
|
-
- 🔐 **[Domain Scoping](./examples/domain-scoping.ts)** - Tool security & access control
|
|
532
|
+
### 💾 Persistence
|
|
382
533
|
|
|
383
|
-
|
|
534
|
+
Session storage and data persistence:
|
|
384
535
|
|
|
385
|
-
|
|
536
|
+
- **[Memory Sessions](./examples/persistence/memory-sessions.ts)** - In-memory session management
|
|
537
|
+
- **[Redis Persistence](./examples/persistence/redis-persistence.ts)** - High-performance Redis storage
|
|
538
|
+
- **[Database Persistence](./examples/persistence/database-persistence.ts)** - SQL/NoSQL database integration
|
|
539
|
+
- **[Custom Adapter](./examples/persistence/custom-adapter.ts)** - Build custom persistence adapters
|
|
386
540
|
|
|
387
|
-
|
|
388
|
-
- ⚡ **[Streaming Responses](./examples/streaming-agent.ts)** - Real-time response streaming
|
|
389
|
-
- 📜 **[Rules & Prohibitions](./examples/rules-prohibitions.ts)** - Fine-grained behavior control
|
|
541
|
+
### 🔧 Tools
|
|
390
542
|
|
|
391
|
-
|
|
543
|
+
Tool creation and data manipulation:
|
|
544
|
+
|
|
545
|
+
- **[Basic Tools](./examples/tools/basic-tools.ts)** - Simple tool creation and execution
|
|
546
|
+
- **[Data Enrichment Tools](./examples/tools/data-enrichment-tools.ts)** - Tools that modify collected data
|
|
547
|
+
- **[Context Updating Tools](./examples/tools/context-updating-tools.ts)** - Tools that modify agent context
|
|
548
|
+
- **[Domain Scoped Tools](./examples/tools/domain-scoped-tools.ts)** - Tool security and access control
|
|
549
|
+
|
|
550
|
+
### 🚀 Advanced Patterns
|
|
551
|
+
|
|
552
|
+
Complex use cases and integrations:
|
|
553
|
+
|
|
554
|
+
- **[Multi-Turn Conversations](./examples/advanced-patterns/multi-turn-conversations.ts)** - Complex dialogue flows with backtracking
|
|
555
|
+
- **[Streaming Responses](./examples/advanced-patterns/streaming-responses.ts)** - Real-time response streaming
|
|
556
|
+
- **[Route Lifecycle Hooks](./examples/advanced-patterns/route-lifecycle-hooks.ts)** - Custom route behavior
|
|
557
|
+
- **[Custom Response Schemas](./examples/advanced-patterns/custom-response-schemas.ts)** - Advanced schema patterns
|
|
558
|
+
|
|
559
|
+
### 🔗 Integrations
|
|
560
|
+
|
|
561
|
+
External service integrations:
|
|
562
|
+
|
|
563
|
+
- **[Server Deployment](./examples/integrations/server-deployment.ts)** - HTTP API with WebSocket streaming
|
|
564
|
+
- **[Database Integration](./examples/integrations/database-integration.ts)** - Direct database access patterns
|
|
565
|
+
- **[Webhook Integration](./examples/integrations/webhook-integration.ts)** - HTTP webhook handling
|
|
566
|
+
- **[API Integration](./examples/integrations/api-integration.ts)** - External API calls and responses
|
|
567
|
+
|
|
568
|
+
📖 **[See all examples with detailed explanations →](./examples/)**
|
|
392
569
|
|
|
393
570
|
---
|
|
394
571
|
|
|
395
572
|
## 🏗️ How It Works
|
|
396
573
|
|
|
397
|
-
`@falai/agent` uses a **schema-first,
|
|
574
|
+
`@falai/agent` uses a **schema-first, pipeline-driven architecture** with sophisticated data extraction and lifecycle management:
|
|
398
575
|
|
|
399
576
|
```
|
|
400
|
-
User Message
|
|
577
|
+
User Message + Session State
|
|
401
578
|
↓
|
|
402
579
|
┌─────────────────────────────────────────┐
|
|
403
|
-
│ 1.
|
|
404
|
-
│ •
|
|
405
|
-
│ •
|
|
406
|
-
│ •
|
|
580
|
+
│ 1. RESPONSE PIPELINE │
|
|
581
|
+
│ • Prepare context & session │
|
|
582
|
+
│ • Handle pending transitions │
|
|
583
|
+
│ • Execute step prepare() functions │
|
|
407
584
|
└─────────────────────────────────────────┘
|
|
408
585
|
↓
|
|
409
586
|
┌─────────────────────────────────────────┐
|
|
410
|
-
│ 2. ROUTING
|
|
411
|
-
│ • Evaluate
|
|
412
|
-
│ •
|
|
413
|
-
│ • Select best route
|
|
587
|
+
│ 2. ROUTING + STEP SELECTION │
|
|
588
|
+
│ • Evaluate routes (AI scoring) │
|
|
589
|
+
│ • Filter steps (skipIf, requires) │
|
|
590
|
+
│ • Select best route & step │
|
|
414
591
|
└─────────────────────────────────────────┘
|
|
415
592
|
↓
|
|
416
593
|
┌─────────────────────────────────────────┐
|
|
417
|
-
│ 3.
|
|
418
|
-
│ •
|
|
419
|
-
│ •
|
|
420
|
-
│ •
|
|
594
|
+
│ 3. RESPONSE GENERATION │
|
|
595
|
+
│ • Build prompt with context/schema │
|
|
596
|
+
│ • Stream or generate AI response │
|
|
597
|
+
│ • Extract data via JSON Schema │
|
|
598
|
+
│ • Execute dynamic tools (streaming) │
|
|
421
599
|
└─────────────────────────────────────────┘
|
|
422
600
|
↓
|
|
423
601
|
┌─────────────────────────────────────────┐
|
|
424
|
-
│ 4.
|
|
425
|
-
│ •
|
|
426
|
-
│ •
|
|
427
|
-
│ •
|
|
602
|
+
│ 4. POST-PROCESSING │
|
|
603
|
+
│ • Run finalize() functions │
|
|
604
|
+
│ • Update context/data (lifecycle) │
|
|
605
|
+
│ • Auto-save session │
|
|
606
|
+
│ • Handle route completion/transitions│
|
|
428
607
|
└─────────────────────────────────────────┘
|
|
429
608
|
↓
|
|
430
|
-
Response
|
|
609
|
+
Response + Updated Session State
|
|
431
610
|
```
|
|
432
611
|
|
|
433
612
|
### Key Principles:
|
|
434
613
|
|
|
435
|
-
✅ **AI decides:** Route selection,
|
|
436
|
-
✅ **Code decides:**
|
|
614
|
+
✅ **AI decides:** Route selection, message generation, data extraction, tool calling
|
|
615
|
+
✅ **Code decides:** Step flow control (`skipIf`/`requires`), tool execution, lifecycle hooks, data validation
|
|
437
616
|
✅ **Result:** Predictable, testable agents with natural conversations
|
|
438
617
|
|
|
439
|
-
|
|
618
|
+
### New Features:
|
|
619
|
+
|
|
620
|
+
🚀 **Streaming Support**: Real-time response generation with tool execution
|
|
621
|
+
🔄 **Lifecycle Hooks**: `prepare`/`finalize` functions or tools, context/data update hooks
|
|
622
|
+
📊 **Data-Driven Flows**: Smart step skipping, prerequisite checking, schema validation
|
|
623
|
+
🛠️ **Advanced Tools**: Context-aware tools with data access and lifecycle integration
|
|
624
|
+
💾 **Session Management**: Automatic persistence, state restoration, route transitions
|
|
440
625
|
|
|
441
|
-
📖 **[Read the
|
|
626
|
+
📖 **[Read the architecture docs →](./docs/core/agent/README.md)**
|
|
442
627
|
|
|
443
628
|
---
|
|
444
629
|
|
|
@@ -469,8 +654,8 @@ MIT © 2025
|
|
|
469
654
|
|
|
470
655
|
**Choose your path:**
|
|
471
656
|
|
|
472
|
-
👶 **New to AI agents?** → [
|
|
473
|
-
🏗️ **Building production app?** → [Architecture
|
|
657
|
+
👶 **New to AI agents?** → [Quick Start Guide](./docs/guides/getting-started/README.md)
|
|
658
|
+
🏗️ **Building production app?** → [Agent Architecture](./docs/core/agent/README.md)
|
|
474
659
|
💡 **Have questions?** → [Open a discussion](https://github.com/falai-dev/agent/discussions)
|
|
475
660
|
|
|
476
661
|
---
|