@falai/agent 0.8.0 → 0.9.0-alpha-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 +306 -133
- 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/{core → cjs/src/core}/Agent.d.ts +67 -69
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1433 -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/cjs/src/core/PersistenceManager.d.ts +98 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
- 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 +31 -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 +143 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +446 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +126 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/Route.js +116 -20
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +76 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +197 -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 +43 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
- 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 +54 -35
- 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 +39 -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/{types → src/types}/route.d.ts +85 -31
- 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 +70 -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/cjs/{types → src/types}/tool.d.ts +6 -8
- 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 +36 -13
- 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/{cjs → src}/core/Agent.d.ts +67 -69
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1429 -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/src/core/PersistenceManager.d.ts +98 -0
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +56 -26
- 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 +31 -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 +143 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +442 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +126 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/{core → src/core}/Route.js +116 -20
- package/dist/src/core/Route.js.map +1 -0
- package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +98 -104
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +76 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +193 -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 +43 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +70 -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 +54 -35
- 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 +39 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/{types → src/types}/route.d.ts +85 -31
- 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 +70 -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/{types → src/types}/tool.d.ts +6 -8
- package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
- 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 +34 -13
- 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} +902 -263
- package/docs/api/overview.md +798 -0
- package/docs/core/agent/README.md +642 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
- package/docs/core/ai-integration/prompt-composition.md +196 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +165 -0
- package/docs/core/conversation-flows/data-collection.md +545 -0
- package/docs/core/conversation-flows/route-dsl.md +479 -0
- package/docs/core/conversation-flows/routes.md +61 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +130 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +339 -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 +384 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
- package/examples/ai-providers/anthropic-integration.ts +377 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
- package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
- package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
- package/examples/core-concepts/schema-driven-extraction.ts +301 -0
- package/examples/core-concepts/session-management.ts +394 -0
- package/examples/integrations/database-integration.ts +615 -0
- package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
- package/examples/integrations/server-session-management.ts +299 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
- package/examples/persistence/memory-sessions.ts +506 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
- package/examples/tools/basic-tools.ts +550 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
- 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 +1102 -487
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +87 -57
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +118 -38
- package/src/core/ResponsePipeline.ts +715 -0
- package/src/core/Route.ts +168 -51
- package/src/core/RoutingEngine.ts +178 -209
- package/src/core/SessionManager.ts +241 -0
- package/src/core/Step.ts +149 -67
- package/src/core/ToolExecutor.ts +37 -42
- 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 +50 -38
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +43 -7
- package/src/types/persistence.ts +46 -28
- package/src/types/route.ts +104 -45
- package/src/types/session.ts +19 -213
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +9 -11
- 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 +229 -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.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 +0 -96
- 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.map +0 -1
- 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.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/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.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 +0 -96
- 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.map +0 -1
- 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.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/domain-scoping.ts +0 -366
- 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
|
|
@@ -213,21 +294,23 @@ const agent = new Agent({
|
|
|
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
|
}),
|
|
218
299
|
});
|
|
219
300
|
|
|
220
301
|
// 3️⃣ Define a tool that uses the collected data
|
|
221
|
-
const bookHotel =
|
|
222
|
-
"book_hotel",
|
|
223
|
-
|
|
302
|
+
const bookHotel: Tool<unknown, [], string, HotelBookingData> = {
|
|
303
|
+
id: "book_hotel",
|
|
304
|
+
description: "Books a hotel once all information is collected.",
|
|
305
|
+
parameters: { type: "object", properties: {} },
|
|
306
|
+
handler: ({ data }) => {
|
|
307
|
+
const bookingData = data as Partial<HotelBookingData>;
|
|
224
308
|
// Logic to book the hotel...
|
|
225
309
|
return {
|
|
226
|
-
data: `Booking confirmed for ${
|
|
310
|
+
data: `Booking confirmed for ${bookingData.guests} guests at ${bookingData.hotelName} on ${bookingData.date}!`,
|
|
227
311
|
};
|
|
228
312
|
},
|
|
229
|
-
|
|
230
|
-
);
|
|
313
|
+
};
|
|
231
314
|
|
|
232
315
|
const schema = {
|
|
233
316
|
type: "object",
|
|
@@ -239,61 +322,54 @@ const schema = {
|
|
|
239
322
|
required: ["hotelName", "date", "guests"],
|
|
240
323
|
};
|
|
241
324
|
|
|
242
|
-
// 4️⃣ Create a data-driven route
|
|
243
|
-
|
|
325
|
+
// 4️⃣ Create a data-driven route with sequential steps
|
|
326
|
+
agent.createRoute<HotelBookingData>({
|
|
244
327
|
title: "Book Hotel",
|
|
245
328
|
description: "Guides the user through the hotel booking process.",
|
|
246
329
|
conditions: ["User wants to book a hotel"],
|
|
247
330
|
schema,
|
|
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
|
-
),
|
|
331
|
+
// 5️⃣ Define the flow to collect data step-by-step
|
|
332
|
+
steps: [
|
|
333
|
+
{
|
|
334
|
+
id: "ask_hotel",
|
|
335
|
+
description: "Ask which hotel they want to book",
|
|
336
|
+
prompt: "Which hotel would you like to book?",
|
|
337
|
+
collect: ["hotelName"],
|
|
338
|
+
skipIf: (data: Partial<HotelBookingData>) => !!data.hotelName,
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
id: "ask_date",
|
|
342
|
+
description: "Ask for the booking date",
|
|
343
|
+
prompt: "What date would you like to book for?",
|
|
344
|
+
collect: ["date"],
|
|
345
|
+
requires: ["hotelName"],
|
|
346
|
+
skipIf: (data: Partial<HotelBookingData>) => !!data.date,
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
id: "ask_guests",
|
|
350
|
+
description: "Ask for the number of guests",
|
|
351
|
+
prompt: "How many guests will be staying?",
|
|
352
|
+
collect: ["guests"],
|
|
353
|
+
requires: ["hotelName", "date"],
|
|
354
|
+
skipIf: (data: Partial<HotelBookingData>) => data.guests !== undefined,
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
id: "confirm_booking",
|
|
358
|
+
description: "Confirm and book the hotel",
|
|
359
|
+
prompt: "Let me confirm your booking details.",
|
|
360
|
+
tools: [bookHotel],
|
|
361
|
+
requires: ["hotelName", "date", "guests"],
|
|
362
|
+
},
|
|
290
363
|
],
|
|
291
364
|
});
|
|
292
365
|
|
|
366
|
+
// 5️⃣ Start conversing - simple message API
|
|
367
|
+
const response = await agent.respond("I want to book a room at the Grand Hotel for 2 people.");
|
|
368
|
+
|
|
293
369
|
// The agent sees that `hotelName` and `guests` are provided,
|
|
294
370
|
// skips the first and third steps, and only asks for the date.
|
|
295
371
|
console.log(response.message);
|
|
296
|
-
// Expected: "
|
|
372
|
+
// Expected: "What date would you like to book for?"
|
|
297
373
|
```
|
|
298
374
|
|
|
299
375
|
**That's it!** The data-driven agent will:
|
|
@@ -306,32 +382,61 @@ console.log(response.message);
|
|
|
306
382
|
|
|
307
383
|
This creates a flexible and natural conversation, guided by a clear data structure.
|
|
308
384
|
|
|
309
|
-
📖 **[See more examples →](./
|
|
385
|
+
📖 **[See more examples →](./examples/)** | **[Full tutorial →](./docs/guides/getting-started/README.md)**
|
|
310
386
|
|
|
311
387
|
### ⚡ Advanced Features
|
|
312
388
|
|
|
313
389
|
**Streaming responses** for real-time UX:
|
|
314
390
|
|
|
315
391
|
```typescript
|
|
316
|
-
for await (const chunk of agent.respondStream(
|
|
392
|
+
for await (const chunk of agent.respondStream("Hello")) {
|
|
317
393
|
process.stdout.write(chunk.delta);
|
|
394
|
+
if (chunk.done) {
|
|
395
|
+
console.log("\nTool calls:", chunk.toolCalls);
|
|
396
|
+
}
|
|
318
397
|
}
|
|
319
398
|
```
|
|
320
399
|
|
|
321
|
-
**
|
|
400
|
+
**Automatic session management** for multi-turn conversations:
|
|
322
401
|
|
|
323
402
|
```typescript
|
|
324
|
-
|
|
325
|
-
const
|
|
326
|
-
|
|
403
|
+
// Server-side: Create agent with sessionId
|
|
404
|
+
const agent = new Agent({
|
|
405
|
+
name: "Assistant",
|
|
406
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
407
|
+
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
408
|
+
sessionId: "user-123" // Automatically loads or creates session
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
// Simple conversation - no manual session management needed
|
|
412
|
+
const response = await agent.respond("Hello, how are you?");
|
|
413
|
+
console.log(response.message);
|
|
414
|
+
console.log(agent.session.id); // Session ID for client
|
|
327
415
|
```
|
|
328
416
|
|
|
329
|
-
**
|
|
417
|
+
**Automatic session persistence** with any adapter:
|
|
330
418
|
|
|
331
419
|
```typescript
|
|
332
420
|
import { PrismaAdapter } from "@falai/agent";
|
|
333
|
-
|
|
334
|
-
|
|
421
|
+
|
|
422
|
+
// Server endpoint - sessions managed automatically
|
|
423
|
+
app.post('/chat', async (req, res) => {
|
|
424
|
+
const { sessionId, message } = req.body;
|
|
425
|
+
|
|
426
|
+
const agent = new Agent({
|
|
427
|
+
name: "ChatBot",
|
|
428
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
429
|
+
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
430
|
+
sessionId // Automatically loads or creates this session
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
const response = await agent.respond(message);
|
|
434
|
+
|
|
435
|
+
res.json({
|
|
436
|
+
message: response.message,
|
|
437
|
+
sessionId: agent.session.id, // Return session ID to client
|
|
438
|
+
isComplete: response.isRouteComplete
|
|
439
|
+
});
|
|
335
440
|
});
|
|
336
441
|
```
|
|
337
442
|
|
|
@@ -341,104 +446,172 @@ const agent = new Agent({
|
|
|
341
446
|
|
|
342
447
|
## 📚 Documentation
|
|
343
448
|
|
|
344
|
-
📋 **[Complete Documentation Index →](docs/
|
|
449
|
+
📋 **[Complete Documentation Index →](docs/README.md)** - Searchable index of all docs
|
|
450
|
+
|
|
451
|
+
### 🚀 Getting Started
|
|
452
|
+
|
|
453
|
+
- **[Quick Start Guide](./docs/guides/getting-started/README.md)** - Build your first agent in 15 minutes
|
|
454
|
+
|
|
455
|
+
### 🏗️ Core Framework
|
|
456
|
+
|
|
457
|
+
- **[Agent Orchestration](./docs/core/agent/README.md)** - Agent lifecycle, configuration & hooks
|
|
458
|
+
- **[Context Management](./docs/core/agent/context-management.md)** - Dynamic context providers & updates
|
|
459
|
+
- **[Session Management](./docs/core/agent/session-management.md)** - Session persistence & state
|
|
345
460
|
|
|
346
|
-
|
|
461
|
+
### 💬 Conversation Flows
|
|
347
462
|
|
|
348
|
-
-
|
|
349
|
-
-
|
|
350
|
-
- 🔧 **[API Reference](./docs/API_REFERENCE.md)** - Complete API documentation
|
|
351
|
-
- 📝 **[Examples](./docs/EXAMPLES.md)** - Production-ready code examples
|
|
463
|
+
- **[Routes](./docs/core/conversation-flows/routes.md)** - Route definition & lifecycle
|
|
464
|
+
- **[Steps](./docs/core/conversation-flows/steps.md)** - Step transitions & logic
|
|
352
465
|
|
|
353
|
-
|
|
466
|
+
### 🤖 AI Integration
|
|
354
467
|
|
|
355
|
-
-
|
|
356
|
-
-
|
|
357
|
-
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
-
|
|
468
|
+
- **[AI Providers](./docs/core/ai-integration/providers.md)** - Gemini, OpenAI, Anthropic, OpenRouter
|
|
469
|
+
- **[Prompt Composition](./docs/core/ai-integration/prompt-composition/)** - How prompts are built
|
|
470
|
+
- **[Response Processing](./docs/core/ai-integration/response-processing/)** - Schema extraction & tool calls
|
|
471
|
+
|
|
472
|
+
### 🔧 Tools & Data
|
|
473
|
+
|
|
474
|
+
- **[Tool Definition](./docs/core/tools/tool-definition.md)** - Creating and configuring tools
|
|
475
|
+
- **[Tool Execution](./docs/core/tools/tool-execution.md)** - Dynamic tool calling and context updates
|
|
476
|
+
- **[Tool Scoping](./docs/core/tools/tool-scoping.md)** - Agent, route, and step-level tool management
|
|
477
|
+
|
|
478
|
+
### 💾 Persistence
|
|
479
|
+
|
|
480
|
+
- **[Session Storage](./docs/core/persistence/session-storage.md)** - Session persistence patterns
|
|
481
|
+
- **[Database Adapters](./docs/core/persistence/adapters.md)** - Built-in adapter configurations
|
|
482
|
+
|
|
483
|
+
### 🚀 Advanced Guides
|
|
484
|
+
|
|
485
|
+
- **[Building Agents](./docs/guides/building-agents/)** - Complete agent construction patterns
|
|
486
|
+
- **[Advanced Patterns](./docs/guides/advanced-patterns/)** - Complex use cases & integrations
|
|
487
|
+
- **[API Reference](./docs/api/overview.md)** - Complete API documentation
|
|
362
488
|
|
|
363
489
|
---
|
|
364
490
|
|
|
365
|
-
## 🎯 Examples -
|
|
491
|
+
## 🎯 Examples - By Domain
|
|
492
|
+
|
|
493
|
+
### 🏗️ Core Concepts
|
|
494
|
+
|
|
495
|
+
Fundamental patterns every agent needs:
|
|
496
|
+
|
|
497
|
+
- **[Basic Agent](./examples/core-concepts/basic-agent.ts)** - Minimal agent setup and configuration
|
|
498
|
+
- **[Schema-Driven Extraction](./examples/core-concepts/schema-driven-extraction.ts)** - Type-safe data collection with JSON Schema
|
|
499
|
+
- **[Session Management](./examples/core-concepts/session-management.ts)** - Multi-turn conversations with persistence
|
|
500
|
+
- **[Context Providers](./examples/core-concepts/context-providers.ts)** - Dynamic context fetching and updates
|
|
501
|
+
|
|
502
|
+
### 💬 Conversation Flows
|
|
503
|
+
|
|
504
|
+
Building intelligent dialogue systems:
|
|
366
505
|
|
|
367
|
-
|
|
506
|
+
- **[Simple Route](./examples/conversation-flows/simple-route.ts)** - Basic route with linear step progression
|
|
507
|
+
- **[Data-Driven Flows](./examples/conversation-flows/data-driven-flows.ts)** - Conditional logic with skipIf and requires
|
|
508
|
+
- **[Conditional Branching](./examples/conversation-flows/conditional-branching.ts)** - AI-powered branching decisions
|
|
509
|
+
- **[Completion Transitions](./examples/conversation-flows/completion-transitions.ts)** - Route transitions when flows complete
|
|
368
510
|
|
|
369
|
-
|
|
511
|
+
### 🤖 AI Providers
|
|
370
512
|
|
|
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
|
|
513
|
+
Integrating different AI services:
|
|
374
514
|
|
|
375
|
-
|
|
515
|
+
- **[Gemini Integration](./examples/ai-providers/gemini-integration.ts)** - Google Gemini with advanced features
|
|
516
|
+
- **[OpenAI Integration](./examples/ai-providers/openai-integration.ts)** - GPT-4 and GPT-3.5 Turbo
|
|
517
|
+
- **[Anthropic Integration](./examples/ai-providers/anthropic-integration.ts)** - Claude with streaming and tool calling
|
|
518
|
+
- **[Custom Provider](./examples/ai-providers/custom-provider.ts)** - Build your own AI provider integration
|
|
376
519
|
|
|
377
|
-
|
|
520
|
+
### 💾 Persistence
|
|
378
521
|
|
|
379
|
-
|
|
380
|
-
- ⚡ **[Redis Persistence](./examples/redis-persistence.ts)** - High-performance in-memory sessions
|
|
381
|
-
- 🔐 **[Domain Scoping](./examples/domain-scoping.ts)** - Tool security & access control
|
|
522
|
+
Session storage and data persistence:
|
|
382
523
|
|
|
383
|
-
|
|
524
|
+
- **[Memory Sessions](./examples/persistence/memory-sessions.ts)** - In-memory session management
|
|
525
|
+
- **[Redis Persistence](./examples/persistence/redis-persistence.ts)** - High-performance Redis storage
|
|
526
|
+
- **[Database Persistence](./examples/persistence/database-persistence.ts)** - SQL/NoSQL database integration
|
|
527
|
+
- **[Custom Adapter](./examples/persistence/custom-adapter.ts)** - Build custom persistence adapters
|
|
384
528
|
|
|
385
|
-
|
|
529
|
+
### 🔧 Tools
|
|
386
530
|
|
|
387
|
-
|
|
388
|
-
- ⚡ **[Streaming Responses](./examples/streaming-agent.ts)** - Real-time response streaming
|
|
389
|
-
- 📜 **[Rules & Prohibitions](./examples/rules-prohibitions.ts)** - Fine-grained behavior control
|
|
531
|
+
Tool creation and data manipulation:
|
|
390
532
|
|
|
391
|
-
|
|
533
|
+
- **[Basic Tools](./examples/tools/basic-tools.ts)** - Simple tool creation and execution
|
|
534
|
+
- **[Data Enrichment Tools](./examples/tools/data-enrichment-tools.ts)** - Tools that modify collected data
|
|
535
|
+
- **[Context Updating Tools](./examples/tools/context-updating-tools.ts)** - Tools that modify agent context
|
|
536
|
+
- **[Domain Scoped Tools](./examples/tools/domain-scoped-tools.ts)** - Tool security and access control
|
|
537
|
+
|
|
538
|
+
### 🚀 Advanced Patterns
|
|
539
|
+
|
|
540
|
+
Complex use cases and integrations:
|
|
541
|
+
|
|
542
|
+
- **[Multi-Turn Conversations](./examples/advanced-patterns/multi-turn-conversations.ts)** - Complex dialogue flows with backtracking
|
|
543
|
+
- **[Streaming Responses](./examples/advanced-patterns/streaming-responses.ts)** - Real-time response streaming
|
|
544
|
+
- **[Route Lifecycle Hooks](./examples/advanced-patterns/route-lifecycle-hooks.ts)** - Custom route behavior
|
|
545
|
+
- **[Custom Response Schemas](./examples/advanced-patterns/custom-response-schemas.ts)** - Advanced schema patterns
|
|
546
|
+
|
|
547
|
+
### 🔗 Integrations
|
|
548
|
+
|
|
549
|
+
External service integrations:
|
|
550
|
+
|
|
551
|
+
- **[Server Deployment](./examples/integrations/server-deployment.ts)** - HTTP API with WebSocket streaming
|
|
552
|
+
- **[Database Integration](./examples/integrations/database-integration.ts)** - Direct database access patterns
|
|
553
|
+
- **[Webhook Integration](./examples/integrations/webhook-integration.ts)** - HTTP webhook handling
|
|
554
|
+
- **[API Integration](./examples/integrations/api-integration.ts)** - External API calls and responses
|
|
555
|
+
|
|
556
|
+
📖 **[See all examples with detailed explanations →](./examples/)**
|
|
392
557
|
|
|
393
558
|
---
|
|
394
559
|
|
|
395
560
|
## 🏗️ How It Works
|
|
396
561
|
|
|
397
|
-
`@falai/agent` uses a **schema-first,
|
|
562
|
+
`@falai/agent` uses a **schema-first, pipeline-driven architecture** with sophisticated data extraction and lifecycle management:
|
|
398
563
|
|
|
399
564
|
```
|
|
400
|
-
User Message
|
|
565
|
+
User Message + Session State
|
|
401
566
|
↓
|
|
402
567
|
┌─────────────────────────────────────────┐
|
|
403
|
-
│ 1.
|
|
404
|
-
│ •
|
|
405
|
-
│ •
|
|
406
|
-
│ •
|
|
568
|
+
│ 1. RESPONSE PIPELINE │
|
|
569
|
+
│ • Prepare context & session │
|
|
570
|
+
│ • Handle pending transitions │
|
|
571
|
+
│ • Execute step prepare() functions │
|
|
407
572
|
└─────────────────────────────────────────┘
|
|
408
573
|
↓
|
|
409
574
|
┌─────────────────────────────────────────┐
|
|
410
|
-
│ 2. ROUTING
|
|
411
|
-
│ • Evaluate
|
|
412
|
-
│ •
|
|
413
|
-
│ • Select best route
|
|
575
|
+
│ 2. ROUTING + STEP SELECTION │
|
|
576
|
+
│ • Evaluate routes (AI scoring) │
|
|
577
|
+
│ • Filter steps (skipIf, requires) │
|
|
578
|
+
│ • Select best route & step │
|
|
414
579
|
└─────────────────────────────────────────┘
|
|
415
580
|
↓
|
|
416
581
|
┌─────────────────────────────────────────┐
|
|
417
|
-
│ 3.
|
|
418
|
-
│ •
|
|
419
|
-
│ •
|
|
420
|
-
│ •
|
|
582
|
+
│ 3. RESPONSE GENERATION │
|
|
583
|
+
│ • Build prompt with context/schema │
|
|
584
|
+
│ • Stream or generate AI response │
|
|
585
|
+
│ • Extract data via JSON Schema │
|
|
586
|
+
│ • Execute dynamic tools (streaming) │
|
|
421
587
|
└─────────────────────────────────────────┘
|
|
422
588
|
↓
|
|
423
589
|
┌─────────────────────────────────────────┐
|
|
424
|
-
│ 4.
|
|
425
|
-
│ •
|
|
426
|
-
│ •
|
|
427
|
-
│ •
|
|
590
|
+
│ 4. POST-PROCESSING │
|
|
591
|
+
│ • Run finalize() functions │
|
|
592
|
+
│ • Update context/data (lifecycle) │
|
|
593
|
+
│ • Auto-save session │
|
|
594
|
+
│ • Handle route completion/transitions│
|
|
428
595
|
└─────────────────────────────────────────┘
|
|
429
596
|
↓
|
|
430
|
-
Response
|
|
597
|
+
Response + Updated Session State
|
|
431
598
|
```
|
|
432
599
|
|
|
433
600
|
### Key Principles:
|
|
434
601
|
|
|
435
|
-
✅ **AI decides:** Route selection,
|
|
436
|
-
✅ **Code decides:**
|
|
602
|
+
✅ **AI decides:** Route selection, message generation, data extraction, tool calling
|
|
603
|
+
✅ **Code decides:** Step flow control (`skipIf`/`requires`), tool execution, lifecycle hooks, data validation
|
|
437
604
|
✅ **Result:** Predictable, testable agents with natural conversations
|
|
438
605
|
|
|
439
|
-
|
|
606
|
+
### New Features:
|
|
607
|
+
|
|
608
|
+
🚀 **Streaming Support**: Real-time response generation with tool execution
|
|
609
|
+
🔄 **Lifecycle Hooks**: `prepare`/`finalize` functions or tools, context/data update hooks
|
|
610
|
+
📊 **Data-Driven Flows**: Smart step skipping, prerequisite checking, schema validation
|
|
611
|
+
🛠️ **Advanced Tools**: Context-aware tools with data access and lifecycle integration
|
|
612
|
+
💾 **Session Management**: Automatic persistence, state restoration, route transitions
|
|
440
613
|
|
|
441
|
-
📖 **[Read the
|
|
614
|
+
📖 **[Read the architecture docs →](./docs/core/agent/README.md)**
|
|
442
615
|
|
|
443
616
|
---
|
|
444
617
|
|
|
@@ -469,8 +642,8 @@ MIT © 2025
|
|
|
469
642
|
|
|
470
643
|
**Choose your path:**
|
|
471
644
|
|
|
472
|
-
👶 **New to AI agents?** → [
|
|
473
|
-
🏗️ **Building production app?** → [Architecture
|
|
645
|
+
👶 **New to AI agents?** → [Quick Start Guide](./docs/guides/getting-started/README.md)
|
|
646
|
+
🏗️ **Building production app?** → [Agent Architecture](./docs/core/agent/README.md)
|
|
474
647
|
💡 **Have questions?** → [Open a discussion](https://github.com/falai-dev/agent/discussions)
|
|
475
648
|
|
|
476
649
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Memory adapter for persistence
|
|
3
3
|
* In-memory storage for testing and development (no database required)
|
|
4
4
|
*/
|
|
5
|
-
import type {
|
|
5
|
+
import type { MessageData, MessageRepository, PersistenceAdapter, SessionData, SessionRepository } from "../types";
|
|
6
6
|
/**
|
|
7
7
|
* Memory Adapter - Provider-style API for in-memory persistence
|
|
8
8
|
*
|
|
@@ -26,8 +26,8 @@ import type { SessionRepository, MessageRepository, SessionData, MessageData, Pe
|
|
|
26
26
|
* });
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
export declare class MemoryAdapter implements PersistenceAdapter {
|
|
30
|
-
readonly sessionRepository: SessionRepository
|
|
29
|
+
export declare class MemoryAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
|
|
30
|
+
readonly sessionRepository: SessionRepository<TData>;
|
|
31
31
|
readonly messageRepository: MessageRepository;
|
|
32
32
|
private sessions;
|
|
33
33
|
private messages;
|
|
@@ -40,7 +40,7 @@ export declare class MemoryAdapter implements PersistenceAdapter {
|
|
|
40
40
|
* Get data snapshot (useful for debugging)
|
|
41
41
|
*/
|
|
42
42
|
getSnapshot(): {
|
|
43
|
-
sessions: SessionData[];
|
|
43
|
+
sessions: SessionData<TData>[];
|
|
44
44
|
messages: MessageData[];
|
|
45
45
|
};
|
|
46
46
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAGlB,MAAM,UAAU,CAAC;AAGlB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxD,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAEpC,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAA2B;;IAU3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI;QACb,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;CAMF"}
|