@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,550 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Basic Tools Example
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates the fundamentals of creating and using tools
|
|
5
|
+
* in conversational agents. Shows tool definition, execution, error handling,
|
|
6
|
+
* and integration with conversation flows.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - Tool definition with Tool<TContext, TArgs, TResult, TData> interface
|
|
10
|
+
* - Tool context and parameters
|
|
11
|
+
* - Tool execution in conversation flows
|
|
12
|
+
* - Error handling in tools
|
|
13
|
+
* - Tool results and data flow
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { Agent, GeminiProvider, type Tool } from "../../src/index";
|
|
17
|
+
|
|
18
|
+
// Define data types for our examples
|
|
19
|
+
interface CalculatorData {
|
|
20
|
+
expression: string;
|
|
21
|
+
result?: number;
|
|
22
|
+
operation?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface WeatherData {
|
|
26
|
+
location: string;
|
|
27
|
+
temperature?: number;
|
|
28
|
+
condition?: string;
|
|
29
|
+
forecast?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface SearchData {
|
|
33
|
+
query: string;
|
|
34
|
+
results?: string[];
|
|
35
|
+
source?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Example 1: Simple Calculator Tool
|
|
39
|
+
const calculatorTool: Tool<unknown, [], string, CalculatorData> = {
|
|
40
|
+
id: "calculator",
|
|
41
|
+
name: "Math Calculator",
|
|
42
|
+
description: "Evaluate mathematical expressions and return results",
|
|
43
|
+
parameters: {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {
|
|
46
|
+
expression: {
|
|
47
|
+
type: "string",
|
|
48
|
+
description: "Mathematical expression to evaluate",
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
required: ["expression"],
|
|
52
|
+
},
|
|
53
|
+
handler: ({ data }) => {
|
|
54
|
+
const calcData = data as Partial<CalculatorData>;
|
|
55
|
+
if (!calcData?.expression) {
|
|
56
|
+
throw new Error("No expression provided");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
// Simple expression evaluation (in production, use a safe math library)
|
|
61
|
+
// WARNING: eval is unsafe - use a proper math evaluation library in production
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
63
|
+
const result = eval(calcData.expression);
|
|
64
|
+
|
|
65
|
+
if (typeof result !== "number" || isNaN(result)) {
|
|
66
|
+
throw new Error("Invalid calculation result");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
data: `The result of ${calcData.expression} is ${result}`,
|
|
71
|
+
dataUpdate: {
|
|
72
|
+
result,
|
|
73
|
+
operation: calcData.expression,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
} catch (error) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
`Error calculating ${calcData.expression}: ${
|
|
79
|
+
error instanceof Error ? error.message : "Unknown error"
|
|
80
|
+
}`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// Example 2: Weather Tool with External API Simulation
|
|
87
|
+
const weatherTool: Tool<unknown, [], string, WeatherData> = {
|
|
88
|
+
id: "get_weather",
|
|
89
|
+
name: "Weather Lookup",
|
|
90
|
+
description: "Get current weather and forecast for a location",
|
|
91
|
+
parameters: {
|
|
92
|
+
type: "object",
|
|
93
|
+
properties: {
|
|
94
|
+
location: { type: "string", description: "City name for weather lookup" },
|
|
95
|
+
},
|
|
96
|
+
required: ["location"],
|
|
97
|
+
},
|
|
98
|
+
handler: async ({ data }) => {
|
|
99
|
+
const weatherData = data as Partial<WeatherData>;
|
|
100
|
+
if (!weatherData?.location) {
|
|
101
|
+
throw new Error("No location provided");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Simulate API call delay
|
|
105
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
106
|
+
|
|
107
|
+
// Mock weather data based on location
|
|
108
|
+
const mockWeather: Record<
|
|
109
|
+
string,
|
|
110
|
+
{ temp: number; condition: string; forecast: string }
|
|
111
|
+
> = {
|
|
112
|
+
"New York": {
|
|
113
|
+
temp: 72,
|
|
114
|
+
condition: "Sunny",
|
|
115
|
+
forecast: "Clear skies all week",
|
|
116
|
+
},
|
|
117
|
+
London: { temp: 55, condition: "Rainy", forecast: "Showers expected" },
|
|
118
|
+
Tokyo: {
|
|
119
|
+
temp: 78,
|
|
120
|
+
condition: "Cloudy",
|
|
121
|
+
forecast: "Partly cloudy with showers",
|
|
122
|
+
},
|
|
123
|
+
Sydney: {
|
|
124
|
+
temp: 68,
|
|
125
|
+
condition: "Clear",
|
|
126
|
+
forecast: "Beautiful weather ahead",
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const weather = mockWeather[weatherData.location] || {
|
|
131
|
+
temp: 70,
|
|
132
|
+
condition: "Unknown",
|
|
133
|
+
forecast: "Weather data unavailable",
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
data: `Weather in ${weatherData.location}: ${weather.temp}°F and ${weather.condition}. ${weather.forecast}`,
|
|
138
|
+
dataUpdate: {
|
|
139
|
+
temperature: weather.temp,
|
|
140
|
+
condition: weather.condition,
|
|
141
|
+
forecast: weather.forecast,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// Example 3: Search Tool with Multiple Results
|
|
148
|
+
const searchTool: Tool<unknown, [], string, SearchData> = {
|
|
149
|
+
id: "web_search",
|
|
150
|
+
name: "Web Search",
|
|
151
|
+
description: "Search the web for information on a given query",
|
|
152
|
+
parameters: {
|
|
153
|
+
type: "object",
|
|
154
|
+
properties: {
|
|
155
|
+
query: { type: "string", description: "Search query to look up" },
|
|
156
|
+
},
|
|
157
|
+
required: ["query"],
|
|
158
|
+
},
|
|
159
|
+
handler: async ({ data }) => {
|
|
160
|
+
const searchData = data as Partial<SearchData>;
|
|
161
|
+
if (!searchData?.query) {
|
|
162
|
+
throw new Error("No search query provided");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Simulate search API call
|
|
166
|
+
await new Promise((resolve) => setTimeout(resolve, 800));
|
|
167
|
+
|
|
168
|
+
// Mock search results
|
|
169
|
+
const mockResults: Record<string, string[]> = {
|
|
170
|
+
"artificial intelligence": [
|
|
171
|
+
"AI is transforming industries worldwide",
|
|
172
|
+
"Machine learning algorithms power modern AI",
|
|
173
|
+
"Neural networks are the foundation of deep learning",
|
|
174
|
+
"AI ethics and responsible development are crucial",
|
|
175
|
+
],
|
|
176
|
+
"climate change": [
|
|
177
|
+
"Global temperatures are rising at an unprecedented rate",
|
|
178
|
+
"Renewable energy adoption is accelerating",
|
|
179
|
+
"Biodiversity loss is a major concern",
|
|
180
|
+
"International cooperation is essential for climate action",
|
|
181
|
+
],
|
|
182
|
+
"space exploration": [
|
|
183
|
+
"Mars missions are advancing rapidly",
|
|
184
|
+
"Private companies are leading space innovation",
|
|
185
|
+
"International Space Station continues operations",
|
|
186
|
+
"Lunar exploration plans are being developed",
|
|
187
|
+
],
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
const results = mockResults[searchData.query.toLowerCase()] || [
|
|
191
|
+
`Search results for "${searchData.query}"`,
|
|
192
|
+
"This is a simulated search result",
|
|
193
|
+
"In a real implementation, this would connect to a search API",
|
|
194
|
+
"Such as Google Custom Search, Bing Web Search, or Elasticsearch",
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
data: `Search results for "${searchData.query}":\n${results
|
|
199
|
+
.map((r, i) => `${i + 1}. ${r}`)
|
|
200
|
+
.join("\n")}`,
|
|
201
|
+
dataUpdate: {
|
|
202
|
+
results,
|
|
203
|
+
source: "Mock Search API",
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
// Example 4: Tool that Modifies Context (Advanced)
|
|
210
|
+
const updatePreferencesTool: Tool<
|
|
211
|
+
{ preferences?: { theme: string; language: string } },
|
|
212
|
+
[],
|
|
213
|
+
string,
|
|
214
|
+
{ theme?: string; language?: string }
|
|
215
|
+
> = {
|
|
216
|
+
id: "update_preferences",
|
|
217
|
+
name: "Update Preferences",
|
|
218
|
+
description: "Update user preferences and settings",
|
|
219
|
+
parameters: {
|
|
220
|
+
type: "object",
|
|
221
|
+
properties: {
|
|
222
|
+
theme: { type: "string", enum: ["light", "dark"] },
|
|
223
|
+
language: { type: "string", enum: ["en", "es", "fr"] },
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
handler: ({ context, data }) => {
|
|
227
|
+
if (!context) {
|
|
228
|
+
throw new Error("No context available");
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const newPreferences = {
|
|
232
|
+
theme: data?.theme || context.preferences?.theme || "light",
|
|
233
|
+
language: data?.language || context.preferences?.language || "en",
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
return {
|
|
237
|
+
data: `Preferences updated: Theme is now ${newPreferences.theme}, Language is ${newPreferences.language}`,
|
|
238
|
+
contextUpdate: {
|
|
239
|
+
preferences: newPreferences,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
// Create agent with tools
|
|
246
|
+
const agent = new Agent<{ preferences?: { theme: string; language: string } }>({
|
|
247
|
+
name: "ToolBot",
|
|
248
|
+
description: "An agent demonstrating various tool capabilities",
|
|
249
|
+
provider: new GeminiProvider({
|
|
250
|
+
apiKey: process.env.GEMINI_API_KEY!,
|
|
251
|
+
model: "models/gemini-2.5-flash",
|
|
252
|
+
}),
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
// Create routes that use different tools
|
|
256
|
+
agent.createRoute<CalculatorData>({
|
|
257
|
+
title: "Calculator",
|
|
258
|
+
description: "Mathematical calculations",
|
|
259
|
+
schema: {
|
|
260
|
+
type: "object",
|
|
261
|
+
properties: {
|
|
262
|
+
expression: { type: "string" },
|
|
263
|
+
result: { type: "number" },
|
|
264
|
+
operation: { type: "string" },
|
|
265
|
+
},
|
|
266
|
+
required: ["expression"],
|
|
267
|
+
},
|
|
268
|
+
steps: [
|
|
269
|
+
{
|
|
270
|
+
id: "get_expression",
|
|
271
|
+
description: "Ask for mathematical expression",
|
|
272
|
+
prompt:
|
|
273
|
+
"I can help you with calculations. What would you like to calculate?",
|
|
274
|
+
collect: ["expression"],
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
id: "calculate",
|
|
278
|
+
description: "Perform the calculation",
|
|
279
|
+
prompt: "Let me calculate that for you.",
|
|
280
|
+
tools: [calculatorTool],
|
|
281
|
+
requires: ["expression"],
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
agent.createRoute<WeatherData>({
|
|
287
|
+
title: "Weather",
|
|
288
|
+
description: "Weather information",
|
|
289
|
+
schema: {
|
|
290
|
+
type: "object",
|
|
291
|
+
properties: {
|
|
292
|
+
location: { type: "string" },
|
|
293
|
+
temperature: { type: "number" },
|
|
294
|
+
condition: { type: "string" },
|
|
295
|
+
forecast: { type: "string" },
|
|
296
|
+
},
|
|
297
|
+
required: ["location"],
|
|
298
|
+
},
|
|
299
|
+
steps: [
|
|
300
|
+
{
|
|
301
|
+
id: "get_location",
|
|
302
|
+
description: "Ask for location",
|
|
303
|
+
prompt:
|
|
304
|
+
"I can check the weather for you. Which city are you interested in?",
|
|
305
|
+
collect: ["location"],
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
id: "get_weather",
|
|
309
|
+
description: "Fetch weather data",
|
|
310
|
+
prompt: "Let me check the weather for you.",
|
|
311
|
+
tools: [weatherTool],
|
|
312
|
+
requires: ["location"],
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
agent.createRoute<SearchData>({
|
|
318
|
+
title: "Web Search",
|
|
319
|
+
description: "Information search",
|
|
320
|
+
schema: {
|
|
321
|
+
type: "object",
|
|
322
|
+
properties: {
|
|
323
|
+
query: { type: "string" },
|
|
324
|
+
results: { type: "array", items: { type: "string" } },
|
|
325
|
+
source: { type: "string" },
|
|
326
|
+
},
|
|
327
|
+
required: ["query"],
|
|
328
|
+
},
|
|
329
|
+
steps: [
|
|
330
|
+
{
|
|
331
|
+
id: "get_query",
|
|
332
|
+
description: "Ask for search query",
|
|
333
|
+
prompt:
|
|
334
|
+
"I can search for information on the web. What would you like to search for?",
|
|
335
|
+
collect: ["query"],
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
id: "perform_search",
|
|
339
|
+
description: "Execute the search",
|
|
340
|
+
prompt: "Let me search for that information.",
|
|
341
|
+
tools: [searchTool],
|
|
342
|
+
requires: ["query"],
|
|
343
|
+
},
|
|
344
|
+
],
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// Create a route for preferences management
|
|
348
|
+
agent.createRoute({
|
|
349
|
+
title: "Preferences",
|
|
350
|
+
description: "Update user preferences",
|
|
351
|
+
steps: [
|
|
352
|
+
{
|
|
353
|
+
id: "update_prefs",
|
|
354
|
+
description: "Update user preferences",
|
|
355
|
+
prompt: "I can help you update your preferences.",
|
|
356
|
+
tools: [updatePreferencesTool],
|
|
357
|
+
},
|
|
358
|
+
],
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
// Demonstrate basic tool usage
|
|
362
|
+
async function demonstrateBasicTools() {
|
|
363
|
+
console.log("=== Basic Tools Demo ===\n");
|
|
364
|
+
|
|
365
|
+
// Calculator tool
|
|
366
|
+
console.log("1. Calculator Tool:");
|
|
367
|
+
console.log("User: Calculate 15 * 23 + 7");
|
|
368
|
+
const calcResponse = await agent.respond({
|
|
369
|
+
history: [],
|
|
370
|
+
});
|
|
371
|
+
console.log("Bot:", calcResponse.message);
|
|
372
|
+
console.log(
|
|
373
|
+
"Calculated result:",
|
|
374
|
+
(calcResponse.session?.data as Partial<CalculatorData>)?.result
|
|
375
|
+
);
|
|
376
|
+
console.log();
|
|
377
|
+
|
|
378
|
+
// Weather tool
|
|
379
|
+
console.log("2. Weather Tool:");
|
|
380
|
+
console.log("User: What's the weather like in Tokyo?");
|
|
381
|
+
const weatherResponse = await agent.respond({
|
|
382
|
+
history: [{ role: "user", content: "What's the weather like in Tokyo?" }],
|
|
383
|
+
});
|
|
384
|
+
console.log("Bot:", weatherResponse.message);
|
|
385
|
+
console.log("Weather data:", {
|
|
386
|
+
temperature: (weatherResponse.session?.data as Partial<WeatherData>)
|
|
387
|
+
?.temperature,
|
|
388
|
+
condition: (weatherResponse.session?.data as Partial<WeatherData>)
|
|
389
|
+
?.condition,
|
|
390
|
+
});
|
|
391
|
+
console.log();
|
|
392
|
+
|
|
393
|
+
// Search tool
|
|
394
|
+
console.log("3. Search Tool:");
|
|
395
|
+
console.log("User: Search for information about artificial intelligence");
|
|
396
|
+
const searchResponse = await agent.respond({
|
|
397
|
+
history: [
|
|
398
|
+
{
|
|
399
|
+
role: "user",
|
|
400
|
+
content: "Search for information about artificial intelligence",
|
|
401
|
+
},
|
|
402
|
+
],
|
|
403
|
+
});
|
|
404
|
+
console.log("Bot:", searchResponse.message);
|
|
405
|
+
console.log(
|
|
406
|
+
"Search results count:",
|
|
407
|
+
(searchResponse.session?.data as Partial<SearchData>)?.results?.length
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// Demonstrate tool error handling
|
|
412
|
+
async function demonstrateToolErrors() {
|
|
413
|
+
console.log("\n=== Tool Error Handling Demo ===\n");
|
|
414
|
+
|
|
415
|
+
// Invalid calculation
|
|
416
|
+
console.log("1. Invalid Calculation:");
|
|
417
|
+
console.log("User: Calculate xyz + 123");
|
|
418
|
+
const errorResponse1 = await agent.respond({
|
|
419
|
+
history: [],
|
|
420
|
+
});
|
|
421
|
+
console.log("Bot:", errorResponse1.message);
|
|
422
|
+
console.log();
|
|
423
|
+
|
|
424
|
+
// Missing location for weather
|
|
425
|
+
console.log("2. Missing Parameters:");
|
|
426
|
+
console.log("User: What's the weather?"); // No location specified
|
|
427
|
+
const errorResponse2 = await agent.respond({
|
|
428
|
+
history: [],
|
|
429
|
+
});
|
|
430
|
+
console.log("Bot:", errorResponse2.message);
|
|
431
|
+
console.log();
|
|
432
|
+
|
|
433
|
+
// Empty search query
|
|
434
|
+
console.log("3. Empty Search Query:");
|
|
435
|
+
console.log("User: Search for"); // Empty query
|
|
436
|
+
const errorResponse3 = await agent.respond({
|
|
437
|
+
history: [{ role: "user", content: "Search for" }],
|
|
438
|
+
});
|
|
439
|
+
console.log("Bot:", errorResponse3.message);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Demonstrate tool data flow
|
|
443
|
+
async function demonstrateToolDataFlow() {
|
|
444
|
+
console.log("\n=== Tool Data Flow Demo ===\n");
|
|
445
|
+
|
|
446
|
+
console.log("Showing how tool results flow through the conversation...");
|
|
447
|
+
|
|
448
|
+
// Start with calculation
|
|
449
|
+
const response1 = await agent.respond({
|
|
450
|
+
history: [],
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
console.log("1. Initial calculation:");
|
|
454
|
+
console.log(
|
|
455
|
+
" User input collected:",
|
|
456
|
+
(response1.session?.data as Partial<CalculatorData>)?.expression
|
|
457
|
+
);
|
|
458
|
+
console.log(
|
|
459
|
+
" Tool result:",
|
|
460
|
+
(response1.session?.data as Partial<CalculatorData>)?.result
|
|
461
|
+
);
|
|
462
|
+
console.log(
|
|
463
|
+
" Operation stored:",
|
|
464
|
+
(response1.session?.data as Partial<CalculatorData>)?.operation
|
|
465
|
+
);
|
|
466
|
+
|
|
467
|
+
// Follow up question using previous result
|
|
468
|
+
const response2 = await agent.respond({
|
|
469
|
+
history: [
|
|
470
|
+
{ role: "user", content: "Now add 100 to that result", name: "Alice" },
|
|
471
|
+
],
|
|
472
|
+
session: response1.session,
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
console.log("\n2. Follow-up calculation:");
|
|
476
|
+
console.log(
|
|
477
|
+
" Previous result available:",
|
|
478
|
+
(response2.session?.data as Partial<CalculatorData>)?.result
|
|
479
|
+
);
|
|
480
|
+
console.log(" Bot response:", response2.message);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Show tool definition patterns
|
|
484
|
+
function demonstrateToolPatterns() {
|
|
485
|
+
console.log("\n=== Tool Definition Patterns ===\n");
|
|
486
|
+
|
|
487
|
+
console.log("1. Basic Tool Pattern:");
|
|
488
|
+
console.log(`
|
|
489
|
+
const myTool: Tool<ContextType, [], ResultType, DataType> = {
|
|
490
|
+
id: "tool_name", // Unique identifier
|
|
491
|
+
description: "What this tool does", // AI uses this to decide when to call
|
|
492
|
+
parameters: { // JSON Schema for tool parameters
|
|
493
|
+
type: "object",
|
|
494
|
+
properties: { /* parameter definitions */ }
|
|
495
|
+
},
|
|
496
|
+
handler: ({ data, context, updateContext }) => {
|
|
497
|
+
// Tool logic here - throw errors for failures
|
|
498
|
+
return {
|
|
499
|
+
data: "Result message", // User-facing result
|
|
500
|
+
dataUpdate: { /* session data updates */ },
|
|
501
|
+
contextUpdate: { /* context updates */ },
|
|
502
|
+
};
|
|
503
|
+
},
|
|
504
|
+
};
|
|
505
|
+
`);
|
|
506
|
+
|
|
507
|
+
console.log("2. Tool Context Parameters:");
|
|
508
|
+
console.log(`
|
|
509
|
+
interface ToolContext<TContext, TData> {
|
|
510
|
+
context: TContext; // Agent context
|
|
511
|
+
updateContext: Function; // Update context function
|
|
512
|
+
history; // Conversation history
|
|
513
|
+
data: Partial<TData>; // Currently collected data
|
|
514
|
+
}
|
|
515
|
+
`);
|
|
516
|
+
|
|
517
|
+
console.log("3. Tool Result Structure:");
|
|
518
|
+
console.log(`
|
|
519
|
+
interface ToolResult {
|
|
520
|
+
data: unknown; // Primary result (string for AI)
|
|
521
|
+
dataUpdate?: Record<string, unknown>; // Update collected data
|
|
522
|
+
contextUpdate?: Record<string, unknown>; // Update agent context
|
|
523
|
+
success: boolean; // Whether tool succeeded
|
|
524
|
+
error?: string; // Error message if failed
|
|
525
|
+
}
|
|
526
|
+
`);
|
|
527
|
+
|
|
528
|
+
console.log("4. Common Tool Patterns:");
|
|
529
|
+
console.log(" • Data Fetching: API calls to external services");
|
|
530
|
+
console.log(" • Calculations: Mathematical or logical operations");
|
|
531
|
+
console.log(" • Data Processing: Transform or analyze collected data");
|
|
532
|
+
console.log(" • State Updates: Modify conversation state");
|
|
533
|
+
console.log(" • External Actions: Send emails, create records, etc.");
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Run demonstrations
|
|
537
|
+
async function main() {
|
|
538
|
+
try {
|
|
539
|
+
demonstrateToolPatterns();
|
|
540
|
+
await demonstrateBasicTools();
|
|
541
|
+
await demonstrateToolErrors();
|
|
542
|
+
await demonstrateToolDataFlow();
|
|
543
|
+
} catch (error) {
|
|
544
|
+
console.error("Error:", error);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
549
|
+
main().catch(console.error);
|
|
550
|
+
}
|