@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
|
@@ -0,0 +1,642 @@
|
|
|
1
|
+
# Agent Architecture
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `Agent<TContext>` class is the central orchestrator of @falai/agent, providing a strongly-typed, context-aware AI agent framework with intelligent routing and schema-driven data collection.
|
|
6
|
+
|
|
7
|
+
## Core Responsibilities
|
|
8
|
+
|
|
9
|
+
- **AI Provider Management**: Unified interface to multiple AI providers (OpenAI, Gemini, Anthropic, etc.)
|
|
10
|
+
- **Intelligent Routing**: AI-powered route and step selection based on conversation context
|
|
11
|
+
- **Context Lifecycle**: Dynamic context management with provider functions and lifecycle hooks
|
|
12
|
+
- **Session Management**: Conversation state persistence and multi-turn dialogue support
|
|
13
|
+
- **Tool Orchestration**: Hierarchical tool execution (agent → route → step level)
|
|
14
|
+
- **Data Collection**: Schema-driven information extraction from natural conversations
|
|
15
|
+
|
|
16
|
+
## Agent Configuration
|
|
17
|
+
|
|
18
|
+
### Basic Agent Setup
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { Agent, OpenAIProvider } from "@falai/agent";
|
|
22
|
+
|
|
23
|
+
const agent = new Agent({
|
|
24
|
+
name: "Customer Support Bot",
|
|
25
|
+
description: "AI assistant for customer inquiries",
|
|
26
|
+
provider: new OpenAIProvider({
|
|
27
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
28
|
+
model: "gpt-4",
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Advanced Configuration
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
interface CustomerContext {
|
|
37
|
+
userId: string;
|
|
38
|
+
accountTier: "free" | "premium" | "enterprise";
|
|
39
|
+
lastLogin: Date;
|
|
40
|
+
preferences: {
|
|
41
|
+
language: string;
|
|
42
|
+
notifications: boolean;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const agent = new Agent<CustomerContext>({
|
|
47
|
+
// Identity
|
|
48
|
+
name: "Premium Support Assistant",
|
|
49
|
+
description: "24/7 AI support for premium customers",
|
|
50
|
+
goal: "Resolve customer issues efficiently while maintaining satisfaction",
|
|
51
|
+
|
|
52
|
+
// AI Provider with backup models
|
|
53
|
+
provider: new OpenAIProvider({
|
|
54
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
55
|
+
model: "gpt-5",
|
|
56
|
+
backupModels: ["gpt-4"],
|
|
57
|
+
}),
|
|
58
|
+
|
|
59
|
+
// Static context (can be overridden by contextProvider)
|
|
60
|
+
context: {
|
|
61
|
+
userId: "anonymous",
|
|
62
|
+
accountTier: "free",
|
|
63
|
+
lastLogin: new Date(),
|
|
64
|
+
preferences: {
|
|
65
|
+
language: "en",
|
|
66
|
+
notifications: true,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
// Dynamic context provider (takes precedence over static context)
|
|
71
|
+
contextProvider: async () => {
|
|
72
|
+
const user = await authenticateUser(request);
|
|
73
|
+
return {
|
|
74
|
+
userId: user.id,
|
|
75
|
+
accountTier: user.tier,
|
|
76
|
+
lastLogin: user.lastLogin,
|
|
77
|
+
preferences: user.preferences,
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
// Lifecycle hooks for context and data management
|
|
82
|
+
hooks: {
|
|
83
|
+
// Refresh context before each response
|
|
84
|
+
beforeRespond: async (currentContext) => {
|
|
85
|
+
const freshUser = await db.getUser(currentContext.userId);
|
|
86
|
+
return {
|
|
87
|
+
...currentContext,
|
|
88
|
+
accountTier: freshUser.tier,
|
|
89
|
+
lastLogin: freshUser.lastLogin,
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
// Handle context updates from tools or responses
|
|
94
|
+
onContextUpdate: async (newContext, previousContext) => {
|
|
95
|
+
if (newContext.accountTier !== previousContext.accountTier) {
|
|
96
|
+
await auditLog.log({
|
|
97
|
+
type: "tier_change",
|
|
98
|
+
userId: newContext.userId,
|
|
99
|
+
from: previousContext.accountTier,
|
|
100
|
+
to: newContext.accountTier,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
// Validate and enrich collected data
|
|
106
|
+
onDataUpdate: async (data, previousData) => {
|
|
107
|
+
// Data validation
|
|
108
|
+
if (data.email && !isValidEmail(data.email)) {
|
|
109
|
+
throw new Error("Invalid email format");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Data enrichment
|
|
113
|
+
if (data.userId && !data.userProfile) {
|
|
114
|
+
data.userProfile = await db.getUserProfile(data.userId);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return data;
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// Optional sessionId for automatic session loading/creation
|
|
122
|
+
sessionId: "user-123", // Agent will automatically load or create this session
|
|
123
|
+
|
|
124
|
+
// Optional persistence configuration
|
|
125
|
+
persistence: {
|
|
126
|
+
adapter: new RedisAdapter(redisClient),
|
|
127
|
+
autoSave: true, // Auto-save after each response
|
|
128
|
+
userId: "global", // Or dynamic based on context
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
// Domain knowledge
|
|
132
|
+
terms: [
|
|
133
|
+
{
|
|
134
|
+
name: "Premium Support",
|
|
135
|
+
description: "24/7 priority assistance with 1-hour response guarantee",
|
|
136
|
+
synonyms: ["priority support", "vip assistance"],
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
|
|
140
|
+
// Behavioral guidelines
|
|
141
|
+
guidelines: [
|
|
142
|
+
{
|
|
143
|
+
condition: "Customer seems frustrated",
|
|
144
|
+
action: "Apologize sincerely and offer to escalate to human agent",
|
|
145
|
+
enabled: true,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
condition: "Premium customer requests",
|
|
149
|
+
action: "Provide expedited service and additional options",
|
|
150
|
+
enabled: true,
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
|
|
154
|
+
// Global tools available to all routes
|
|
155
|
+
tools: [searchTool, userLookupTool],
|
|
156
|
+
|
|
157
|
+
// Knowledge base for AI context
|
|
158
|
+
knowledgeBase: {
|
|
159
|
+
company: {
|
|
160
|
+
name: "Acme Corp",
|
|
161
|
+
supportHours: "24/7 for premium, 9-5 for free",
|
|
162
|
+
refundPolicy: "30 days for all purchases",
|
|
163
|
+
},
|
|
164
|
+
products: {
|
|
165
|
+
basic: {
|
|
166
|
+
price: "$9.99/month",
|
|
167
|
+
features: ["Email support", "5GB storage"],
|
|
168
|
+
},
|
|
169
|
+
premium: {
|
|
170
|
+
price: "$29.99/month",
|
|
171
|
+
features: ["24/7 support", "100GB storage", "Priority queue"],
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Context Management
|
|
179
|
+
|
|
180
|
+
### Static Context
|
|
181
|
+
|
|
182
|
+
Fixed context available throughout the conversation:
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
const agent = new Agent({
|
|
186
|
+
context: {
|
|
187
|
+
companyName: "Acme Corp",
|
|
188
|
+
supportEmail: "support@acme.com",
|
|
189
|
+
currentDate: new Date().toISOString(),
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Dynamic Context Provider
|
|
195
|
+
|
|
196
|
+
Fresh context fetched before each response:
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
const agent = new Agent({
|
|
200
|
+
contextProvider: async () => {
|
|
201
|
+
// Fetch real-time data
|
|
202
|
+
const weather = await weatherAPI.getCurrentWeather();
|
|
203
|
+
const user = await auth.getCurrentUser();
|
|
204
|
+
|
|
205
|
+
return {
|
|
206
|
+
currentWeather: weather,
|
|
207
|
+
userProfile: user,
|
|
208
|
+
serverTime: new Date(),
|
|
209
|
+
};
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Context Updates
|
|
215
|
+
|
|
216
|
+
Context can be modified during conversation:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// From tool execution
|
|
220
|
+
const updateLocationTool: Tool<
|
|
221
|
+
{ currentLocation?: string; lastLocationUpdate?: Date },
|
|
222
|
+
[],
|
|
223
|
+
string,
|
|
224
|
+
{ location: string }
|
|
225
|
+
> = {
|
|
226
|
+
id: "update_location",
|
|
227
|
+
description: "Update user's current location",
|
|
228
|
+
parameters: {
|
|
229
|
+
type: "object",
|
|
230
|
+
properties: {
|
|
231
|
+
location: { type: "string", description: "New location to set" },
|
|
232
|
+
},
|
|
233
|
+
required: ["location"],
|
|
234
|
+
},
|
|
235
|
+
handler: async ({ context }, { location }) => {
|
|
236
|
+
return {
|
|
237
|
+
data: `Location updated to ${location}`,
|
|
238
|
+
contextUpdate: {
|
|
239
|
+
currentLocation: location,
|
|
240
|
+
lastLocationUpdate: new Date(),
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Programmatically
|
|
247
|
+
await agent.updateContext({
|
|
248
|
+
userStatus: "premium",
|
|
249
|
+
lastActivity: new Date(),
|
|
250
|
+
});
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Session Management
|
|
254
|
+
|
|
255
|
+
### Automatic Session Management
|
|
256
|
+
|
|
257
|
+
Sessions are automatically managed through the integrated `SessionManager`:
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
// Agent with automatic session management
|
|
261
|
+
const agent = new Agent({
|
|
262
|
+
name: "Assistant",
|
|
263
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
264
|
+
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
265
|
+
sessionId: "user-123" // Automatically loads or creates this session
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
// Access session manager
|
|
269
|
+
const sessionManager = agent.session;
|
|
270
|
+
|
|
271
|
+
// Get or create session (handles existing, new, or auto-generated IDs)
|
|
272
|
+
await sessionManager.getOrCreate("user-456");
|
|
273
|
+
await sessionManager.getOrCreate(); // Auto-generates ID
|
|
274
|
+
|
|
275
|
+
// Session data access
|
|
276
|
+
const data = sessionManager.getData<MyDataType>();
|
|
277
|
+
await sessionManager.setData({ field: "value" });
|
|
278
|
+
|
|
279
|
+
// History management
|
|
280
|
+
await sessionManager.addMessage("user", "Hello");
|
|
281
|
+
const history = sessionManager.getHistory();
|
|
282
|
+
sessionManager.clearHistory();
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Session Persistence
|
|
286
|
+
|
|
287
|
+
Sessions are automatically persisted when using persistence adapters:
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
const agent = new Agent({
|
|
291
|
+
persistence: {
|
|
292
|
+
adapter: new RedisAdapter(redisClient),
|
|
293
|
+
autoSave: true, // Auto-save after each response (default)
|
|
294
|
+
},
|
|
295
|
+
sessionId: "user-123" // Automatically loads from persistence
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
// Sessions are automatically saved after each message
|
|
299
|
+
const response = await agent.respond("Hello");
|
|
300
|
+
// Session state automatically persisted
|
|
301
|
+
|
|
302
|
+
// Manual session operations (if needed)
|
|
303
|
+
await agent.session.save(); // Manual save
|
|
304
|
+
await agent.session.delete(); // Delete session
|
|
305
|
+
const newSession = await agent.session.reset(true); // Reset with history preserved
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Session Access Methods
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
// Access current session data
|
|
312
|
+
const data = agent.session.getData<MyDataType>();
|
|
313
|
+
await agent.session.setData({ field: "value" });
|
|
314
|
+
|
|
315
|
+
// Session information
|
|
316
|
+
console.log(agent.session.id); // Current session ID
|
|
317
|
+
console.log(agent.session.current); // Full session state
|
|
318
|
+
|
|
319
|
+
// History management
|
|
320
|
+
const history = agent.session.getHistory();
|
|
321
|
+
await agent.session.addMessage("user", "New message");
|
|
322
|
+
agent.session.clearHistory();
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## Route Management
|
|
326
|
+
|
|
327
|
+
### Declarative Route Creation
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
const agent = new Agent({
|
|
331
|
+
routes: [
|
|
332
|
+
{
|
|
333
|
+
title: "Technical Support",
|
|
334
|
+
description: "Help with technical issues",
|
|
335
|
+
conditions: ["user reports technical problem"],
|
|
336
|
+
initialStep: {
|
|
337
|
+
prompt:
|
|
338
|
+
"I understand you're having a technical issue. Can you describe what's happening?",
|
|
339
|
+
collect: ["problem", "severity"],
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
title: "Billing Inquiry",
|
|
344
|
+
description: "Handle billing and payment questions",
|
|
345
|
+
conditions: ["user asks about billing or payment"],
|
|
346
|
+
initialStep: {
|
|
347
|
+
prompt:
|
|
348
|
+
"I'd be happy to help with your billing question. What can I assist with?",
|
|
349
|
+
collect: ["billingIssue"],
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
],
|
|
353
|
+
});
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Programmatic Route Creation
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
// Create routes dynamically
|
|
360
|
+
const supportRoute = agent
|
|
361
|
+
.createRoute({
|
|
362
|
+
title: "Customer Support",
|
|
363
|
+
initialStep: {
|
|
364
|
+
prompt: "How can I help you today?",
|
|
365
|
+
collect: ["intent"],
|
|
366
|
+
},
|
|
367
|
+
})
|
|
368
|
+
.nextStep({
|
|
369
|
+
prompt: "I understand you need help with {{intent}}",
|
|
370
|
+
requires: ["intent"],
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
// Access created routes
|
|
374
|
+
const routes = agent.getRoutes();
|
|
375
|
+
console.log(routes.map((r) => r.title)); // ["Customer Support", ...]
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## Tool Integration
|
|
379
|
+
|
|
380
|
+
### Agent-Level Tools
|
|
381
|
+
|
|
382
|
+
Available to all routes and steps:
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
const agent = new Agent({
|
|
386
|
+
tools: [searchTool, calculatorTool, translationTool],
|
|
387
|
+
});
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Route-Level Tools
|
|
391
|
+
|
|
392
|
+
Specific to a route:
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
const route = agent.createRoute({
|
|
396
|
+
title: "Order Management",
|
|
397
|
+
tools: [orderLookupTool, orderUpdateTool, refundTool],
|
|
398
|
+
});
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Tool Resolution Priority
|
|
402
|
+
|
|
403
|
+
1. **Step-level tools** (highest priority)
|
|
404
|
+
2. **Route-level tools**
|
|
405
|
+
3. **Agent-level tools** (lowest priority)
|
|
406
|
+
|
|
407
|
+
## Response Generation
|
|
408
|
+
|
|
409
|
+
### Simple Response API
|
|
410
|
+
|
|
411
|
+
```typescript
|
|
412
|
+
// Simple message-based API (recommended)
|
|
413
|
+
const response = await agent.respond("How do I reset my password?");
|
|
414
|
+
console.log(response.message);
|
|
415
|
+
console.log(agent.session.getData()); // Any collected data
|
|
416
|
+
console.log(response.toolCalls); // Any tool calls made
|
|
417
|
+
console.log(response.isRouteComplete); // Whether route finished
|
|
418
|
+
|
|
419
|
+
// Advanced usage with history override
|
|
420
|
+
const response = await agent.respond("Hello", {
|
|
421
|
+
history: [
|
|
422
|
+
{ role: "user", content: "Previous context" },
|
|
423
|
+
{ role: "assistant", content: "I understand" }
|
|
424
|
+
]
|
|
425
|
+
});
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### Streaming Response
|
|
429
|
+
|
|
430
|
+
```typescript
|
|
431
|
+
const stream = agent.respondStream("Tell me about your services");
|
|
432
|
+
|
|
433
|
+
for await (const chunk of stream) {
|
|
434
|
+
if (chunk.delta) {
|
|
435
|
+
process.stdout.write(chunk.delta); // Real-time output
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (chunk.done) {
|
|
439
|
+
console.log("\nSession ID:", agent.session.id);
|
|
440
|
+
console.log("Tool calls:", chunk.toolCalls);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Response with Custom Context
|
|
446
|
+
|
|
447
|
+
```typescript
|
|
448
|
+
const response = await agent.respond("Hola", {
|
|
449
|
+
contextOverride: {
|
|
450
|
+
language: "es", // Override context for this response
|
|
451
|
+
debug: true,
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
## Advanced Features
|
|
457
|
+
|
|
458
|
+
### Route Transitions
|
|
459
|
+
|
|
460
|
+
```typescript
|
|
461
|
+
// Manual route transition
|
|
462
|
+
await agent.nextStepRoute("premium-support", session);
|
|
463
|
+
|
|
464
|
+
// Route completion transitions
|
|
465
|
+
const supportRoute = agent.createRoute({
|
|
466
|
+
title: "Basic Support",
|
|
467
|
+
onComplete: "feedback-survey", // Auto-transition when complete
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
// Dynamic transitions
|
|
471
|
+
const dynamicRoute = agent.createRoute({
|
|
472
|
+
title: "Workflow",
|
|
473
|
+
onComplete: async (session, context) => {
|
|
474
|
+
if (session.data.success) {
|
|
475
|
+
return "success-route";
|
|
476
|
+
}
|
|
477
|
+
return "retry-route";
|
|
478
|
+
},
|
|
479
|
+
});
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### Debugging
|
|
483
|
+
|
|
484
|
+
```typescript
|
|
485
|
+
const debugAgent = new Agent({
|
|
486
|
+
name: "Debug Agent",
|
|
487
|
+
debug: true, // Enables detailed logging
|
|
488
|
+
provider: openaiProvider,
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
// Logs will show:
|
|
492
|
+
// [Agent] Selected route: Technical Support
|
|
493
|
+
// [Agent] Entered step: initial_step
|
|
494
|
+
// [Agent] Tool executed: search_kb (success: true)
|
|
495
|
+
// [RoutingEngine] AI selected step: detailed_help
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
## Agent and Route Option Merging
|
|
499
|
+
|
|
500
|
+
@fai/agent supports hierarchical configuration where route-level options can override or merge with agent-level options. Understanding this behavior is crucial for effective agent design.
|
|
501
|
+
|
|
502
|
+
### Guidelines and Terms
|
|
503
|
+
|
|
504
|
+
**Guidelines** are combined from both agent and route levels:
|
|
505
|
+
|
|
506
|
+
- Agent-level guidelines are applied first
|
|
507
|
+
- Route-level guidelines are added after agent guidelines
|
|
508
|
+
- All guidelines are evaluated together during response generation
|
|
509
|
+
|
|
510
|
+
```typescript
|
|
511
|
+
const agent = new Agent({
|
|
512
|
+
guidelines: [
|
|
513
|
+
{ id: "polite", action: "Always be polite and professional" },
|
|
514
|
+
{ id: "accurate", action: "Provide accurate information" },
|
|
515
|
+
],
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
const route = agent.createRoute({
|
|
519
|
+
guidelines: [
|
|
520
|
+
{
|
|
521
|
+
id: "domain_specific",
|
|
522
|
+
action: "Use technical terminology appropriately",
|
|
523
|
+
},
|
|
524
|
+
],
|
|
525
|
+
});
|
|
526
|
+
// Result: All 3 guidelines (polite, accurate, domain_specific) are used
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
**Terms** use route-level precedence:
|
|
530
|
+
|
|
531
|
+
- Agent-level terms are loaded first
|
|
532
|
+
- Route-level terms with the same name override agent-level terms
|
|
533
|
+
- This allows routes to provide domain-specific definitions
|
|
534
|
+
|
|
535
|
+
```typescript
|
|
536
|
+
const agent = new Agent({
|
|
537
|
+
terms: [{ name: "API", description: "Application Programming Interface" }],
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
const route = agent.createRoute({
|
|
541
|
+
terms: [
|
|
542
|
+
{
|
|
543
|
+
name: "API",
|
|
544
|
+
description: "In this context, API refers to our REST API endpoints",
|
|
545
|
+
},
|
|
546
|
+
],
|
|
547
|
+
});
|
|
548
|
+
// Result: Route's definition of "API" takes precedence
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
### Tools
|
|
552
|
+
|
|
553
|
+
**Tools** follow a hierarchical priority system:
|
|
554
|
+
|
|
555
|
+
1. Step-level tools (highest priority)
|
|
556
|
+
2. Route-level tools
|
|
557
|
+
3. Agent-level tools (lowest priority)
|
|
558
|
+
|
|
559
|
+
Tools with the same ID at different levels will be resolved by priority, with higher-level tools taking precedence.
|
|
560
|
+
|
|
561
|
+
### Lifecycle Hooks
|
|
562
|
+
|
|
563
|
+
**Lifecycle hooks** are called at both agent and route levels:
|
|
564
|
+
|
|
565
|
+
- Agent-level hooks are called for all routes
|
|
566
|
+
- Route-level hooks are called only for that specific route
|
|
567
|
+
- Both types of hooks can modify context and data
|
|
568
|
+
|
|
569
|
+
## Best Practices
|
|
570
|
+
|
|
571
|
+
### Context Design
|
|
572
|
+
|
|
573
|
+
- **Keep context focused**: Only include data needed across conversations
|
|
574
|
+
- **Use providers for freshness**: Prefer `contextProvider` over static context for dynamic data
|
|
575
|
+
- **Handle updates gracefully**: Use lifecycle hooks for validation and side effects
|
|
576
|
+
|
|
577
|
+
### Session Management
|
|
578
|
+
|
|
579
|
+
- **Set up persistence early**: Configure persistence for production use
|
|
580
|
+
- **Use meaningful session IDs**: Include user/context identifiers
|
|
581
|
+
- **Clean up old sessions**: Implement retention policies
|
|
582
|
+
|
|
583
|
+
### Route Organization
|
|
584
|
+
|
|
585
|
+
- **Single responsibility**: Each route should serve one clear user intent
|
|
586
|
+
- **Progressive disclosure**: Collect information in logical order
|
|
587
|
+
- **Clear completion criteria**: Define when routes should end
|
|
588
|
+
|
|
589
|
+
### Tool Management
|
|
590
|
+
|
|
591
|
+
- **Hierarchical scoping**: Use appropriate tool levels for security and performance
|
|
592
|
+
- **Error handling**: Implement robust error recovery in tools
|
|
593
|
+
- **Performance monitoring**: Track tool usage and response times
|
|
594
|
+
|
|
595
|
+
### Performance Optimization
|
|
596
|
+
|
|
597
|
+
- **Limit concurrent sessions**: Implement session limits for high-traffic scenarios
|
|
598
|
+
- **Cache context data**: Avoid redundant API calls in context providers
|
|
599
|
+
- **Batch operations**: Group related tool calls when possible
|
|
600
|
+
|
|
601
|
+
## Migration from Legacy Agents
|
|
602
|
+
|
|
603
|
+
### From Domain-Based to Route-Based
|
|
604
|
+
|
|
605
|
+
```typescript
|
|
606
|
+
// Legacy (domain-based)
|
|
607
|
+
const legacyAgent = new Agent({
|
|
608
|
+
domains: ["calendar", "email"],
|
|
609
|
+
});
|
|
610
|
+
|
|
611
|
+
// New (route-based)
|
|
612
|
+
const newAgent = new Agent({
|
|
613
|
+
routes: [
|
|
614
|
+
{
|
|
615
|
+
title: "Calendar Management",
|
|
616
|
+
tools: [calendarTool], // Route-specific tools
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
title: "Email Management",
|
|
620
|
+
tools: [emailTool],
|
|
621
|
+
},
|
|
622
|
+
],
|
|
623
|
+
});
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
### From Static to Dynamic Context
|
|
627
|
+
|
|
628
|
+
```typescript
|
|
629
|
+
// Legacy (static context)
|
|
630
|
+
const staticAgent = new Agent({
|
|
631
|
+
context: { userId: "123" },
|
|
632
|
+
});
|
|
633
|
+
|
|
634
|
+
// New (dynamic context)
|
|
635
|
+
const dynamicAgent = new Agent({
|
|
636
|
+
contextProvider: async () => {
|
|
637
|
+
return { userId: await auth.getCurrentUserId() };
|
|
638
|
+
},
|
|
639
|
+
});
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
The Agent class provides a comprehensive foundation for building intelligent, context-aware AI applications with robust conversation management and data collection capabilities.
|