@falai/agent 0.9.0 → 1.0.0
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 +304 -72
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/{src → cjs}/core/Agent.d.ts +25 -6
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +121 -37
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +842 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +201 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +202 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +54 -3
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +46 -10
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/core/Route.js +541 -0
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
- package/dist/cjs/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +170 -0
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/core/Step.js +448 -0
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.d.ts +234 -0
- package/dist/cjs/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/core/ToolManager.js +1117 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +5 -3
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +16 -3
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +12 -4
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +5 -3
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +8 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +116 -15
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.d.ts +130 -0
- package/dist/cjs/types/tool.d.ts.map +1 -0
- package/dist/cjs/types/tool.js +19 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{cjs/src/core → core}/Agent.d.ts +25 -6
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +122 -38
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +837 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +197 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +198 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +54 -3
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +807 -121
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/core/Route.js +537 -0
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +343 -81
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/{src/core → core}/SessionManager.js +27 -5
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/Step.d.ts +170 -0
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/core/Step.js +444 -0
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts +234 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js +1111 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +4 -1
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +12 -4
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +5 -3
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +116 -15
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts +130 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +16 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/CONTRIBUTING.md +40 -0
- package/docs/README.md +12 -5
- package/docs/api/README.md +295 -56
- package/docs/api/overview.md +272 -31
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +120 -5
- package/docs/core/agent/session-management.md +153 -6
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +261 -4
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +132 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +831 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/core/tools/tool-definition.md +684 -60
- package/docs/core/tools/tool-scoping.md +244 -53
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +423 -31
- package/docs/guides/migration/README.md +23 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +303 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +107 -30
- package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +13 -9
- package/examples/ai-providers/openai-integration.ts +12 -8
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +158 -98
- package/examples/core-concepts/schema-driven-extraction.ts +43 -16
- package/examples/core-concepts/session-management.ts +117 -29
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +25 -39
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +11 -11
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +6 -6
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/basic-tools.ts +293 -89
- package/examples/tools/data-enrichment-tools.ts +189 -79
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +152 -46
- package/src/core/BatchExecutor.ts +1156 -0
- package/src/core/BatchPromptBuilder.ts +275 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +143 -4
- package/src/core/ResponseModal.ts +1035 -137
- package/src/core/ResponsePipeline.ts +99 -65
- package/src/core/Route.ts +262 -34
- package/src/core/RoutingEngine.ts +467 -120
- package/src/core/SessionManager.ts +39 -7
- package/src/core/Step.ts +338 -32
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +27 -3
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +12 -4
- package/src/types/index.ts +25 -3
- package/src/types/route.ts +136 -15
- package/src/types/template.ts +70 -2
- package/src/types/tool.ts +116 -25
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js +0 -343
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts +0 -96
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js +0 -206
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.js +0 -84
- package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts +0 -60
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js +0 -6
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js +0 -339
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.d.ts.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts +0 -96
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js +0 -202
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolExecutor.d.ts +0 -45
- package/dist/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/src/core/ToolExecutor.js +0 -80
- package/dist/src/core/ToolExecutor.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.d.ts +0 -60
- package/dist/src/types/tool.d.ts.map +0 -1
- package/dist/src/types/tool.js +0 -5
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- package/docs/core/tools/tool-execution.md +0 -815
- package/src/core/ToolExecutor.ts +0 -126
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
|
@@ -118,10 +118,121 @@ agentContext.lastResponseTime = Date.now();
|
|
|
118
118
|
|
|
119
119
|
Robust error handling for various failure scenarios:
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
### Schema Validation Failures
|
|
122
|
+
|
|
123
|
+
When AI responses don't match expected schemas, the system gracefully falls back:
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
const processResponse = async (response: string, schema: JSONSchema) => {
|
|
127
|
+
try {
|
|
128
|
+
// Try schema-based extraction first
|
|
129
|
+
const extracted = await extractWithSchema(response, schema);
|
|
130
|
+
return { success: true, data: extracted };
|
|
131
|
+
} catch (schemaError) {
|
|
132
|
+
console.warn("Schema extraction failed, falling back to manual parsing:", schemaError.message);
|
|
133
|
+
|
|
134
|
+
// Fallback to manual extraction
|
|
135
|
+
try {
|
|
136
|
+
const manualData = await manualExtraction(response);
|
|
137
|
+
return { success: true, data: manualData, fallback: true };
|
|
138
|
+
} catch (fallbackError) {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: `Both schema and manual extraction failed: ${fallbackError.message}`
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Tool Execution Errors
|
|
149
|
+
|
|
150
|
+
Tool failures are handled gracefully with proper error propagation:
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
const executeTool = async (tool: Tool, params: any) => {
|
|
154
|
+
try {
|
|
155
|
+
const result = await tool.handler(params);
|
|
156
|
+
return { success: true, result };
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error(`Tool ${tool.id} execution failed:`, error);
|
|
159
|
+
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
error: error.message,
|
|
163
|
+
fallbackMessage: "I encountered an issue while processing your request. Please try again."
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Context Update Failures
|
|
170
|
+
|
|
171
|
+
Context updates include rollback mechanisms:
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
const updateContext = async (newContext: any, previousContext: any) => {
|
|
175
|
+
try {
|
|
176
|
+
await persistContext(newContext);
|
|
177
|
+
return { success: true };
|
|
178
|
+
} catch (error) {
|
|
179
|
+
console.error("Context update failed, rolling back:", error);
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
await persistContext(previousContext);
|
|
183
|
+
return { success: false, rolledBack: true, error: error.message };
|
|
184
|
+
} catch (rollbackError) {
|
|
185
|
+
return {
|
|
186
|
+
success: false,
|
|
187
|
+
rolledBack: false,
|
|
188
|
+
error: `Update and rollback both failed: ${rollbackError.message}`
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Streaming Error Propagation
|
|
196
|
+
|
|
197
|
+
Streaming responses properly propagate provider errors:
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
async function* processStreamingResponse(provider: AIProvider, prompt: string) {
|
|
201
|
+
try {
|
|
202
|
+
for await (const chunk of provider.generateMessageStream(prompt)) {
|
|
203
|
+
yield { success: true, chunk };
|
|
204
|
+
}
|
|
205
|
+
} catch (error) {
|
|
206
|
+
// Ensure streaming errors are properly propagated
|
|
207
|
+
yield { success: false, error: error.message };
|
|
208
|
+
throw error; // Re-throw to stop the stream
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Routing Errors
|
|
214
|
+
|
|
215
|
+
Safe fallback to default behavior when routing fails:
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
const selectRoute = async (routes: Route[], context: any) => {
|
|
219
|
+
try {
|
|
220
|
+
const selectedRoute = await aiRouting.selectBestRoute(routes, context);
|
|
221
|
+
return { success: true, route: selectedRoute };
|
|
222
|
+
} catch (routingError) {
|
|
223
|
+
console.warn("AI routing failed, using default route:", routingError.message);
|
|
224
|
+
|
|
225
|
+
// Fallback to first available route or default
|
|
226
|
+
const fallbackRoute = routes.find(r => r.isDefault) || routes[0];
|
|
227
|
+
return {
|
|
228
|
+
success: true,
|
|
229
|
+
route: fallbackRoute,
|
|
230
|
+
fallback: true,
|
|
231
|
+
error: routingError.message
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
```
|
|
125
236
|
|
|
126
237
|
## Streaming Response Processing
|
|
127
238
|
|
|
@@ -166,6 +277,150 @@ Built-in monitoring capabilities:
|
|
|
166
277
|
- **Debug logging** - Detailed processing traces
|
|
167
278
|
- **Performance profiling** - Identify bottlenecks
|
|
168
279
|
|
|
280
|
+
## Batch Execution Response Fields
|
|
281
|
+
|
|
282
|
+
When using multi-step execution, the `AgentResponse` includes additional fields for batch execution information.
|
|
283
|
+
|
|
284
|
+
### New AgentResponse Fields
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
interface AgentResponse<TData = unknown> {
|
|
288
|
+
/** The generated message */
|
|
289
|
+
message: string;
|
|
290
|
+
/** Updated session state */
|
|
291
|
+
session?: SessionState<TData>;
|
|
292
|
+
/** Tool calls made during response */
|
|
293
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
294
|
+
/** Whether the route is complete */
|
|
295
|
+
isRouteComplete?: boolean;
|
|
296
|
+
|
|
297
|
+
// Multi-step execution fields
|
|
298
|
+
/** Steps executed in this response */
|
|
299
|
+
executedSteps?: StepRef[];
|
|
300
|
+
/** Why execution stopped */
|
|
301
|
+
stoppedReason?: StoppedReason;
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### executedSteps Array
|
|
306
|
+
|
|
307
|
+
Lists all steps that were executed in the batch:
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
const response = await agent.respond("Book Grand Hotel for 2 on Friday");
|
|
311
|
+
|
|
312
|
+
console.log(response.executedSteps);
|
|
313
|
+
// [
|
|
314
|
+
// { id: "ask-hotel", routeId: "booking" },
|
|
315
|
+
// { id: "ask-guests", routeId: "booking" },
|
|
316
|
+
// { id: "ask-date", routeId: "booking" }
|
|
317
|
+
// ]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Each `StepRef` contains:
|
|
321
|
+
- `id` - The step identifier
|
|
322
|
+
- `routeId` - The route this step belongs to
|
|
323
|
+
|
|
324
|
+
### stoppedReason Field
|
|
325
|
+
|
|
326
|
+
Indicates why batch execution stopped:
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
type StoppedReason =
|
|
330
|
+
| 'needs_input' // Step requires uncollected data
|
|
331
|
+
| 'end_route' // Reached END_ROUTE
|
|
332
|
+
| 'route_complete' // All Steps processed
|
|
333
|
+
| 'prepare_error' // Error in prepare hook
|
|
334
|
+
| 'llm_error' // Error during LLM call
|
|
335
|
+
| 'validation_error' // Error validating collected data
|
|
336
|
+
| 'finalize_error'; // Error in finalize hook (non-fatal)
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### BatchExecutionResult Structure
|
|
340
|
+
|
|
341
|
+
The internal batch execution result provides detailed information:
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
interface BatchExecutionResult<TData = unknown> {
|
|
345
|
+
/** The generated message */
|
|
346
|
+
message: string;
|
|
347
|
+
/** Updated session state */
|
|
348
|
+
session: SessionState<TData>;
|
|
349
|
+
/** Steps that were executed */
|
|
350
|
+
executedSteps: StepRef[];
|
|
351
|
+
/** Why execution stopped */
|
|
352
|
+
stoppedReason: StoppedReason;
|
|
353
|
+
/** Collected data from the batch */
|
|
354
|
+
collectedData?: Partial<TData>;
|
|
355
|
+
/** Any errors that occurred */
|
|
356
|
+
error?: BatchExecutionError;
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Error Information
|
|
361
|
+
|
|
362
|
+
When errors occur, detailed information is available:
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
interface BatchExecutionError {
|
|
366
|
+
/** Type of error that occurred */
|
|
367
|
+
type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
|
|
368
|
+
'llm_call' | 'data_validation' | 'finalize_hook';
|
|
369
|
+
/** Error message */
|
|
370
|
+
message: string;
|
|
371
|
+
/** Step where error occurred (if applicable) */
|
|
372
|
+
stepId?: string;
|
|
373
|
+
/** Additional error details */
|
|
374
|
+
details?: unknown;
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Using Response Fields
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
const response = await agent.respond("Complete my booking");
|
|
382
|
+
|
|
383
|
+
// Check what was executed
|
|
384
|
+
console.log(`Executed ${response.executedSteps?.length || 0} steps`);
|
|
385
|
+
|
|
386
|
+
// Check why execution stopped
|
|
387
|
+
switch (response.stoppedReason) {
|
|
388
|
+
case 'needs_input':
|
|
389
|
+
console.log("Waiting for more information from user");
|
|
390
|
+
break;
|
|
391
|
+
case 'route_complete':
|
|
392
|
+
case 'end_route':
|
|
393
|
+
console.log("Route finished successfully");
|
|
394
|
+
break;
|
|
395
|
+
case 'validation_error':
|
|
396
|
+
console.log("Data validation issues:", response.error);
|
|
397
|
+
break;
|
|
398
|
+
default:
|
|
399
|
+
console.log("Stopped due to:", response.stoppedReason);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Check route completion
|
|
403
|
+
if (response.isRouteComplete) {
|
|
404
|
+
console.log("All required data collected");
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Session State After Batch
|
|
409
|
+
|
|
410
|
+
The session state reflects the final step position:
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
const response = await agent.respond("Book for 2 guests");
|
|
414
|
+
|
|
415
|
+
// Session shows current position
|
|
416
|
+
console.log(response.session?.currentStep);
|
|
417
|
+
// { id: "ask-date", routeId: "booking" }
|
|
418
|
+
|
|
419
|
+
// Session data includes all collected values
|
|
420
|
+
console.log(response.session?.data);
|
|
421
|
+
// { hotel: "Grand Hotel", guests: 2 }
|
|
422
|
+
```
|
|
423
|
+
|
|
169
424
|
## Best Practices
|
|
170
425
|
|
|
171
426
|
- Design schemas for reliable AI extraction
|
|
@@ -174,3 +429,5 @@ Built-in monitoring capabilities:
|
|
|
174
429
|
- Use streaming for better user experience
|
|
175
430
|
- Leverage tool results for context enrichment
|
|
176
431
|
- Validate data at multiple levels (schema + business rules)
|
|
432
|
+
- Check `executedSteps` to understand batch behavior
|
|
433
|
+
- Handle different `stoppedReason` values appropriately
|
|
@@ -13,6 +13,149 @@ The agent-level data collection system provides:
|
|
|
13
13
|
- **Natural Conversations**: AI handles information gathering conversationally
|
|
14
14
|
- **Validation & Enrichment**: Agent-level lifecycle hooks for data processing
|
|
15
15
|
- **Session Persistence**: Data survives across conversation turns and route transitions
|
|
16
|
+
- **Batch Data Collection**: Multiple steps can collect data in a single LLM call
|
|
17
|
+
|
|
18
|
+
## Data Collection Across Batched Steps
|
|
19
|
+
|
|
20
|
+
When multiple steps execute in a single batch, data collection works across all steps simultaneously.
|
|
21
|
+
|
|
22
|
+
### How Batch Data Collection Works
|
|
23
|
+
|
|
24
|
+
1. **Gather collect fields** - All `collect` fields from all steps in the batch are combined
|
|
25
|
+
2. **Single LLM call** - The combined prompt instructs the LLM to extract all fields
|
|
26
|
+
3. **Extract from response** - All specified fields are extracted from the LLM response
|
|
27
|
+
4. **Validate against schema** - Collected data is validated against the agent schema
|
|
28
|
+
5. **Update session** - All collected values are merged into session data
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// Batch with 3 steps, each collecting different fields
|
|
32
|
+
const batch = [
|
|
33
|
+
{ collect: ["name"] },
|
|
34
|
+
{ collect: ["email", "phone"] },
|
|
35
|
+
{ collect: ["preferences"] }
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
// Combined collection: ["name", "email", "phone", "preferences"]
|
|
39
|
+
// Single LLM response extracts all fields at once
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Pre-Extraction and Batch Determination
|
|
43
|
+
|
|
44
|
+
Pre-extraction happens **before** batch determination and directly impacts which steps can be batched:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// User message: "I'm John, email john@example.com, I prefer dark mode"
|
|
48
|
+
|
|
49
|
+
// Phase 1: Pre-extraction
|
|
50
|
+
const preExtracted = {
|
|
51
|
+
name: "John",
|
|
52
|
+
email: "john@example.com",
|
|
53
|
+
preferences: { theme: "dark" }
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Phase 2: Batch determination (with pre-extracted data merged)
|
|
57
|
+
// Step 1: collect: ["name"] → name exists → doesn't need input
|
|
58
|
+
// Step 2: collect: ["email"] → email exists → doesn't need input
|
|
59
|
+
// Step 3: collect: ["preferences"] → preferences exists → doesn't need input
|
|
60
|
+
// Result: All 3 steps batched together
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Pre-Extraction Configuration
|
|
64
|
+
|
|
65
|
+
Pre-extraction is automatic when routes define data fields:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
// Option 1: Route-level required fields
|
|
69
|
+
agent.createRoute({
|
|
70
|
+
title: "Booking",
|
|
71
|
+
requiredFields: ["hotel", "date", "guests"],
|
|
72
|
+
// Pre-extraction enabled automatically
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Option 2: Route-level optional fields
|
|
76
|
+
agent.createRoute({
|
|
77
|
+
title: "Booking",
|
|
78
|
+
optionalFields: ["specialRequests"],
|
|
79
|
+
// Pre-extraction enabled automatically
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Option 3: Steps with collect arrays
|
|
83
|
+
agent.createRoute({
|
|
84
|
+
title: "Booking",
|
|
85
|
+
steps: [
|
|
86
|
+
{ collect: ["hotel"] }, // Pre-extraction enabled automatically
|
|
87
|
+
]
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Batch Collection Example
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
const response = await agent.respond(
|
|
95
|
+
"I'm Alice, alice@example.com, and I want to book for 2 guests"
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// Response includes all collected data
|
|
99
|
+
console.log(response.session.data);
|
|
100
|
+
// {
|
|
101
|
+
// name: "Alice",
|
|
102
|
+
// email: "alice@example.com",
|
|
103
|
+
// guests: 2
|
|
104
|
+
// }
|
|
105
|
+
|
|
106
|
+
// Shows which steps executed
|
|
107
|
+
console.log(response.executedSteps);
|
|
108
|
+
// [
|
|
109
|
+
// { id: "ask-name", routeId: "booking" },
|
|
110
|
+
// { id: "ask-email", routeId: "booking" },
|
|
111
|
+
// { id: "ask-guests", routeId: "booking" }
|
|
112
|
+
// ]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Validation Across Batch
|
|
116
|
+
|
|
117
|
+
Data validation happens after collection for all fields:
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// Agent schema defines validation rules
|
|
121
|
+
const agent = new Agent({
|
|
122
|
+
schema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: {
|
|
125
|
+
email: { type: "string", format: "email" },
|
|
126
|
+
guests: { type: "number", minimum: 1, maximum: 10 }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// If validation fails for any field:
|
|
132
|
+
const response = await agent.respond("Book for 100 guests");
|
|
133
|
+
|
|
134
|
+
// Response includes validation errors
|
|
135
|
+
if (response.stoppedReason === 'validation_error') {
|
|
136
|
+
console.log(response.error);
|
|
137
|
+
// {
|
|
138
|
+
// type: 'data_validation',
|
|
139
|
+
// message: 'Validation failed for 1 field(s): guests',
|
|
140
|
+
// details: [{ field: 'guests', message: 'Value exceeds maximum of 10' }]
|
|
141
|
+
// }
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Partial Data Preservation
|
|
146
|
+
|
|
147
|
+
Even when validation fails, valid partial data is preserved:
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// User provides valid name but invalid email
|
|
151
|
+
const response = await agent.respond("I'm John, email: not-an-email");
|
|
152
|
+
|
|
153
|
+
// Valid data is still collected
|
|
154
|
+
console.log(response.session.data.name); // "John"
|
|
155
|
+
|
|
156
|
+
// Invalid data triggers validation error
|
|
157
|
+
console.log(response.stoppedReason); // "validation_error"
|
|
158
|
+
```
|
|
16
159
|
|
|
17
160
|
## Agent-Level Schema Definition
|
|
18
161
|
|
|
@@ -44,7 +44,7 @@ const agent = new Agent<{}, HotelData>({
|
|
|
44
44
|
const bookingRoute = agent.createRoute({
|
|
45
45
|
title: "Hotel Booking",
|
|
46
46
|
description: "Help users book hotel accommodations",
|
|
47
|
-
|
|
47
|
+
when: ["User wants to book a hotel"],
|
|
48
48
|
requiredFields: ["destination", "checkIn", "checkOut", "guests", "customerName", "email"],
|
|
49
49
|
optionalFields: ["roomType", "phone", "specialRequests"]
|
|
50
50
|
});
|
|
@@ -52,7 +52,7 @@ const bookingRoute = agent.createRoute({
|
|
|
52
52
|
const customerServiceRoute = agent.createRoute({
|
|
53
53
|
title: "Customer Service",
|
|
54
54
|
description: "Help with booking issues",
|
|
55
|
-
|
|
55
|
+
when: ["User needs help with existing booking"],
|
|
56
56
|
requiredFields: ["customerName", "email"], // Minimal requirements
|
|
57
57
|
optionalFields: ["phone", "destination"]
|
|
58
58
|
});
|
|
@@ -74,6 +74,8 @@ Routes are selected by the AI routing system based on user intent and conversati
|
|
|
74
74
|
|
|
75
75
|
Routes complete when all their required fields are present in the agent's collected data, regardless of which route collected the data. This enables flexible cross-route completion scenarios.
|
|
76
76
|
|
|
77
|
+
### Basic Route Completion
|
|
78
|
+
|
|
77
79
|
```typescript
|
|
78
80
|
// Route completion evaluation
|
|
79
81
|
const isComplete = bookingRoute.isComplete(agent.getCollectedData());
|
|
@@ -86,6 +88,134 @@ if (missingFields.length > 0) {
|
|
|
86
88
|
}
|
|
87
89
|
```
|
|
88
90
|
|
|
91
|
+
### Route Completion with Error Handling
|
|
92
|
+
|
|
93
|
+
Proper error handling ensures accurate route completion detection:
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
const checkRouteCompletion = async (route: Route, agent: Agent) => {
|
|
97
|
+
try {
|
|
98
|
+
const collectedData = agent.getCollectedData();
|
|
99
|
+
|
|
100
|
+
// Check data-based completion
|
|
101
|
+
if (route.isComplete(collectedData)) {
|
|
102
|
+
return { complete: true, reason: "all_required_data_collected" };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Check step-based completion (for routes with skipIf conditions)
|
|
106
|
+
const allStepsProcessed = route.steps.every(step => {
|
|
107
|
+
if (step.skipIf && step.skipIf(collectedData)) {
|
|
108
|
+
return true; // Step is skipped, counts as processed
|
|
109
|
+
}
|
|
110
|
+
return step.isCompleted;
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (allStepsProcessed) {
|
|
114
|
+
return { complete: true, reason: "all_steps_processed" };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Check for explicit route termination
|
|
118
|
+
if (route.hasExplicitEnd()) {
|
|
119
|
+
return { complete: true, reason: "explicit_end_route" };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
complete: false,
|
|
124
|
+
missingFields: route.getMissingRequiredFields(collectedData),
|
|
125
|
+
progress: route.getCompletionProgress(collectedData)
|
|
126
|
+
};
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.error("Route completion check failed:", error);
|
|
129
|
+
return {
|
|
130
|
+
complete: false,
|
|
131
|
+
error: error.message,
|
|
132
|
+
fallback: true
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// Usage with error handling
|
|
138
|
+
const completionResult = await checkRouteCompletion(bookingRoute, agent);
|
|
139
|
+
|
|
140
|
+
if (completionResult.error) {
|
|
141
|
+
console.warn("Completion check failed, assuming incomplete:", completionResult.error);
|
|
142
|
+
} else if (completionResult.complete) {
|
|
143
|
+
console.log(`Route completed: ${completionResult.reason}`);
|
|
144
|
+
} else {
|
|
145
|
+
console.log(`Route ${Math.round(completionResult.progress * 100)}% complete`);
|
|
146
|
+
console.log(`Missing: ${completionResult.missingFields.join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Handling Routes with Conditional Steps
|
|
151
|
+
|
|
152
|
+
Routes with `skipIf` conditions require special completion logic:
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
const conditionalRoute = agent.createRoute({
|
|
156
|
+
title: "Conditional Booking",
|
|
157
|
+
requiredFields: ["destination", "dates", "passengers"]
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
const askDestination = conditionalRoute.initialStep.nextStep({
|
|
161
|
+
prompt: "Where would you like to go?",
|
|
162
|
+
collect: ["destination"],
|
|
163
|
+
skipIf: (data) => !!data.destination, // Skip if already collected
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const askDates = askDestination.nextStep({
|
|
167
|
+
prompt: "When would you like to travel?",
|
|
168
|
+
collect: ["dates"],
|
|
169
|
+
skipIf: (data) => !!data.dates,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const confirmBooking = askDates.nextStep({
|
|
173
|
+
prompt: "Confirm your booking details",
|
|
174
|
+
requires: ["destination", "dates", "passengers"],
|
|
175
|
+
onComplete: () => ({ endRoute: true }) // Explicit route termination
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Completion detection handles skipped steps
|
|
179
|
+
const response = await agent.respond({
|
|
180
|
+
message: "I want to go to Paris on March 15th for 2 passengers",
|
|
181
|
+
sessionId: "user-123"
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// All steps may be skipped due to complete data extraction
|
|
185
|
+
// Route should still be marked as complete
|
|
186
|
+
console.log("Route complete:", response.isRouteComplete); // Should be true
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Error Recovery in Route Completion
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
const safeRouteCompletion = async (route: Route, agent: Agent) => {
|
|
193
|
+
const maxRetries = 3;
|
|
194
|
+
let attempt = 0;
|
|
195
|
+
|
|
196
|
+
while (attempt < maxRetries) {
|
|
197
|
+
try {
|
|
198
|
+
return await checkRouteCompletion(route, agent);
|
|
199
|
+
} catch (error) {
|
|
200
|
+
attempt++;
|
|
201
|
+
console.warn(`Route completion check attempt ${attempt} failed:`, error.message);
|
|
202
|
+
|
|
203
|
+
if (attempt >= maxRetries) {
|
|
204
|
+
// Final fallback - assume incomplete
|
|
205
|
+
return {
|
|
206
|
+
complete: false,
|
|
207
|
+
error: `Completion check failed after ${maxRetries} attempts: ${error.message}`,
|
|
208
|
+
fallback: true
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Brief delay before retry
|
|
213
|
+
await new Promise(resolve => setTimeout(resolve, 100 * attempt));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
```
|
|
218
|
+
|
|
89
219
|
## Route Transitions
|
|
90
220
|
|
|
91
221
|
Routes can automatically transition to other routes upon completion using the `onComplete` configuration. With agent-level data, the target route may already have some of its required data.
|