@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
|
@@ -4,19 +4,25 @@
|
|
|
4
4
|
* This example demonstrates how to configure an entire agent
|
|
5
5
|
* using declarative syntax in the constructor, including:
|
|
6
6
|
* - Terms (domain glossary)
|
|
7
|
-
* - Guidelines (behavior rules)
|
|
7
|
+
* - Guidelines (behavior rules) with flexible ConditionTemplate patterns
|
|
8
8
|
* - Tools (capabilities)
|
|
9
9
|
* - Routes with data extraction schemas and sequential steps
|
|
10
10
|
* - Session management for multi-turn conversations
|
|
11
|
+
* - NEW: Flexible routing conditions with ConditionTemplate patterns:
|
|
12
|
+
* - String-only conditions: "user wants to book" (AI context only)
|
|
13
|
+
* - Function-only conditions: (ctx) => ctx.data?.hasPayment (programmatic only)
|
|
14
|
+
* - Mixed arrays: ["user wants to book", (ctx) => !ctx.data?.complete] (hybrid)
|
|
15
|
+
* - Route skipIf: Dynamic route exclusion based on conditions
|
|
16
|
+
* - Step skipIf: Enhanced conditional step skipping
|
|
11
17
|
*/
|
|
12
18
|
|
|
13
19
|
import {
|
|
14
20
|
Agent,
|
|
15
21
|
GeminiProvider,
|
|
22
|
+
Tool,
|
|
23
|
+
ValidationError,
|
|
16
24
|
type Term,
|
|
17
25
|
type Guideline,
|
|
18
|
-
type Tool,
|
|
19
|
-
type RouteOptions,
|
|
20
26
|
} from "../../src/index";
|
|
21
27
|
|
|
22
28
|
// Context type
|
|
@@ -40,98 +46,71 @@ interface LabData {
|
|
|
40
46
|
resultsNeeded: boolean;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
|
-
// Define tools using
|
|
44
|
-
const
|
|
49
|
+
// Define tools using unified Tool interface
|
|
50
|
+
const getInsuranceProvidersTool: Tool<HealthcareContext, HealthcareData> = {
|
|
45
51
|
id: "healthcare_insurance_providers",
|
|
46
52
|
description: "Retrieves list of accepted insurance providers",
|
|
47
53
|
parameters: {
|
|
48
54
|
type: "object",
|
|
49
55
|
properties: {},
|
|
50
56
|
},
|
|
51
|
-
handler: () => {
|
|
57
|
+
handler: async (context, args) => {
|
|
52
58
|
return {
|
|
53
|
-
data:
|
|
59
|
+
data: "Available insurance providers: MegaCare Insurance, HealthFirst, WellnessPlus",
|
|
54
60
|
};
|
|
55
61
|
},
|
|
56
62
|
};
|
|
57
63
|
|
|
58
|
-
const
|
|
59
|
-
HealthcareContext,
|
|
60
|
-
HealthcareData,
|
|
61
|
-
[],
|
|
62
|
-
{ date: string; time: string }[]
|
|
63
|
-
> = {
|
|
64
|
+
const getAvailableSlotsTool: Tool<HealthcareContext, HealthcareData> = {
|
|
64
65
|
id: "healthcare_available_slots",
|
|
65
66
|
description: "Gets available appointment slots",
|
|
66
67
|
parameters: {
|
|
67
68
|
type: "object",
|
|
68
69
|
properties: {},
|
|
69
70
|
},
|
|
70
|
-
handler: () => {
|
|
71
|
+
handler: async (context, args) => {
|
|
71
72
|
return {
|
|
72
|
-
data:
|
|
73
|
-
{ date: "2025-10-20", time: "10:00 AM" },
|
|
74
|
-
{ date: "2025-10-20", time: "2:00 PM" },
|
|
75
|
-
{ date: "2025-10-21", time: "1:00 PM" },
|
|
76
|
-
],
|
|
73
|
+
data: "Available slots: Oct 20 at 10:00 AM, Oct 20 at 2:00 PM, Oct 21 at 1:00 PM",
|
|
77
74
|
};
|
|
78
75
|
},
|
|
79
76
|
};
|
|
80
77
|
|
|
81
|
-
const
|
|
82
|
-
HealthcareContext,
|
|
83
|
-
HealthcareData,
|
|
84
|
-
[],
|
|
85
|
-
{ report: string; status: string }
|
|
86
|
-
> = {
|
|
78
|
+
const getLabResultsTool: Tool<HealthcareContext, HealthcareData> = {
|
|
87
79
|
id: "healthcare_lab_results",
|
|
88
80
|
description: "Retrieves patient lab results",
|
|
89
81
|
parameters: {
|
|
90
82
|
type: "object",
|
|
91
83
|
properties: {},
|
|
92
84
|
},
|
|
93
|
-
handler: (
|
|
85
|
+
handler: async (toolContext, args) => {
|
|
94
86
|
// Tools can access collected data and context
|
|
95
|
-
if (data?.testType) {
|
|
87
|
+
if (toolContext.data?.testType) {
|
|
96
88
|
return {
|
|
97
|
-
data: {
|
|
98
|
-
report: `${data.testType} results for ${context.patientName}`,
|
|
99
|
-
status: "All values within normal range",
|
|
100
|
-
},
|
|
89
|
+
data: `${toolContext.data.testType} results for ${toolContext.context.patientName}: All values within normal range`,
|
|
101
90
|
};
|
|
102
91
|
}
|
|
103
92
|
|
|
104
93
|
return {
|
|
105
|
-
data: {
|
|
106
|
-
report: `Lab results for ${context.patientName}`,
|
|
107
|
-
status: "All values within normal range",
|
|
108
|
-
},
|
|
94
|
+
data: `Lab results for ${toolContext.context.patientName}: All values within normal range`,
|
|
109
95
|
};
|
|
110
96
|
},
|
|
111
97
|
};
|
|
112
98
|
|
|
113
|
-
const
|
|
114
|
-
HealthcareContext,
|
|
115
|
-
HealthcareData,
|
|
116
|
-
[],
|
|
117
|
-
{ confirmation: string }
|
|
118
|
-
> = {
|
|
99
|
+
const scheduleAppointmentTool: Tool<HealthcareContext, HealthcareData> = {
|
|
119
100
|
id: "healthcare_schedule_appointment",
|
|
120
101
|
description: "Schedules patient appointments",
|
|
121
102
|
parameters: {
|
|
122
103
|
type: "object",
|
|
123
104
|
properties: {},
|
|
124
105
|
},
|
|
125
|
-
handler: (
|
|
106
|
+
handler: async (context, args) => {
|
|
126
107
|
// Tools access collected appointment data
|
|
127
|
-
if (!data?.preferredDate || !data?.preferredTime) {
|
|
128
|
-
return { data:
|
|
108
|
+
if (!context.data?.preferredDate || !context.data?.preferredTime) {
|
|
109
|
+
return { data: "Please provide appointment details" };
|
|
129
110
|
}
|
|
130
111
|
|
|
131
112
|
return {
|
|
132
|
-
data: {
|
|
133
|
-
confirmation: `Appointment scheduled for ${data.preferredDate} at ${data.preferredTime}`,
|
|
134
|
-
},
|
|
113
|
+
data: `Appointment scheduled for ${context.data.preferredDate} at ${context.data.preferredTime}`,
|
|
135
114
|
};
|
|
136
115
|
},
|
|
137
116
|
};
|
|
@@ -156,31 +135,53 @@ const terms: Term<HealthcareContext>[] = [
|
|
|
156
135
|
|
|
157
136
|
const guidelines: Guideline<HealthcareContext>[] = [
|
|
158
137
|
{
|
|
138
|
+
// String-only condition for AI context
|
|
159
139
|
condition: "The patient asks about insurance",
|
|
160
140
|
action:
|
|
161
141
|
"List the insurance providers we accept and tell them to call the office for more details",
|
|
162
142
|
tags: ["insurance", "billing"],
|
|
163
143
|
},
|
|
164
144
|
{
|
|
165
|
-
condition:
|
|
145
|
+
// Mixed condition: AI context + programmatic check
|
|
146
|
+
condition: [
|
|
147
|
+
"The patient asks to talk to a human agent",
|
|
148
|
+
(ctx) => ctx.context?.patientName !== undefined // Only if we have patient info
|
|
149
|
+
],
|
|
166
150
|
action: ({ context }: { context?: HealthcareContext }) =>
|
|
167
151
|
`Of course. You can reach our office at +1-234-567-8900 during office hours (Monday to Friday, 9 AM to 5 PM). I've noted that you'd like to speak with someone, and I can have a representative call you back if you'd like, ${context?.patientName}.`,
|
|
168
152
|
tags: ["escalation"],
|
|
169
153
|
},
|
|
170
154
|
{
|
|
171
|
-
|
|
155
|
+
// Function-only condition for programmatic logic
|
|
156
|
+
condition: (ctx) => {
|
|
157
|
+
const event = ctx.history?.[ctx.history.length - 1]
|
|
158
|
+
if(event && "content" in event){
|
|
159
|
+
const message = (event.content as string).toLocaleLowerCase() || '';
|
|
160
|
+
return !message.includes('health') && !message.includes('medical') && !message.includes('appointment');
|
|
161
|
+
}
|
|
162
|
+
return false
|
|
163
|
+
},
|
|
172
164
|
action:
|
|
173
165
|
"Kindly tell them you cannot assist with off-topic inquiries - do not engage",
|
|
174
166
|
tags: ["off-topic"],
|
|
175
167
|
},
|
|
176
168
|
];
|
|
177
169
|
|
|
178
|
-
const routes
|
|
170
|
+
const routes = [
|
|
179
171
|
{
|
|
180
172
|
id: "route_schedule_appointment",
|
|
181
173
|
title: "Schedule Appointment",
|
|
182
174
|
description: "Helps the patient schedule an appointment",
|
|
183
|
-
|
|
175
|
+
// Mixed condition: AI context + programmatic check
|
|
176
|
+
when: [
|
|
177
|
+
"The patient wants to schedule an appointment",
|
|
178
|
+
(ctx) => !ctx.data?.orderId // Only if no existing order
|
|
179
|
+
],
|
|
180
|
+
// Skip if patient already has urgent medical needs
|
|
181
|
+
skipIf: [
|
|
182
|
+
"patient has urgent medical emergency",
|
|
183
|
+
(ctx) => ctx.data?.urgency === "high"
|
|
184
|
+
],
|
|
184
185
|
// NEW: Required fields for route completion (instead of schema)
|
|
185
186
|
requiredFields: ["appointmentType", "preferredDate", "preferredTime"],
|
|
186
187
|
// NEW: Optional fields that enhance the experience
|
|
@@ -214,40 +215,35 @@ const routes: RouteOptions<HealthcareContext, HealthcareData>[] = [
|
|
|
214
215
|
description: "Ask about symptoms",
|
|
215
216
|
prompt: "Are you experiencing any symptoms?",
|
|
216
217
|
collect: ["symptoms"],
|
|
217
|
-
skipIf:
|
|
218
|
-
|
|
218
|
+
// Mixed skipIf: AI context + programmatic logic
|
|
219
|
+
skipIf: [
|
|
220
|
+
"routine checkup doesn't need symptom details",
|
|
221
|
+
(data: Partial<HealthcareData>) => data.appointmentType === "checkup"
|
|
222
|
+
],
|
|
219
223
|
},
|
|
220
224
|
{
|
|
221
225
|
id: "schedule_appointment",
|
|
222
226
|
description: "Schedule the appointment",
|
|
223
227
|
prompt: "I'll schedule your appointment now.",
|
|
224
|
-
tools: [
|
|
228
|
+
tools: [scheduleAppointmentTool], // Inline tool - only available on this step
|
|
225
229
|
requires: ["preferredDate", "preferredTime"],
|
|
226
|
-
prepare:
|
|
227
|
-
finalize:
|
|
228
|
-
// Inline tool to handle appointment finalization
|
|
229
|
-
id: "finalize_appointment",
|
|
230
|
-
description: "Complete the appointment booking process",
|
|
231
|
-
parameters: { type: "object", properties: {} },
|
|
232
|
-
handler: ({ context, data }) => {
|
|
233
|
-
console.log(`✅ Appointment finalized for ${context.patientName}`);
|
|
234
|
-
console.log(`📅 Details: ${JSON.stringify(data, null, 2)}`);
|
|
235
|
-
|
|
236
|
-
// Could send confirmation email, update calendar, etc.
|
|
237
|
-
return {
|
|
238
|
-
data: `Appointment confirmed for ${context.patientName}`,
|
|
239
|
-
};
|
|
240
|
-
},
|
|
241
|
-
},
|
|
230
|
+
prepare: "healthcare_insurance_providers", // Reference by ID
|
|
231
|
+
finalize: "finalize_appointment", // Reference by ID - will be registered later
|
|
242
232
|
},
|
|
243
233
|
],
|
|
244
|
-
tools: [
|
|
234
|
+
tools: ["healthcare_available_slots"], // Reference by ID
|
|
245
235
|
},
|
|
246
236
|
{
|
|
247
237
|
id: "route_check_lab_results",
|
|
248
238
|
title: "Check Lab Results",
|
|
249
239
|
description: "Retrieves and explains patient lab results",
|
|
250
|
-
|
|
240
|
+
// Function-only condition for programmatic logic
|
|
241
|
+
when: (ctx) => {
|
|
242
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
243
|
+
return message.includes('lab') || message.includes('test') || message.includes('results');
|
|
244
|
+
},
|
|
245
|
+
// Skip if no patient ID available
|
|
246
|
+
skipIf: (ctx) => !ctx.context?.patientId,
|
|
251
247
|
// NEW: Required fields for route completion
|
|
252
248
|
requiredFields: ["testType"],
|
|
253
249
|
// NEW: Optional fields
|
|
@@ -260,12 +256,13 @@ const routes: RouteOptions<HealthcareContext, HealthcareData>[] = [
|
|
|
260
256
|
tags: ["escalation"],
|
|
261
257
|
},
|
|
262
258
|
],
|
|
263
|
-
tools: [
|
|
259
|
+
tools: ["healthcare_lab_results"], // Reference by ID
|
|
264
260
|
},
|
|
265
261
|
{
|
|
266
262
|
title: "General Healthcare Questions",
|
|
267
263
|
description: "Answer general healthcare questions",
|
|
268
|
-
|
|
264
|
+
// String-only condition for AI context
|
|
265
|
+
when: "Patient asks general healthcare questions",
|
|
269
266
|
// No required fields - conversational Q&A
|
|
270
267
|
},
|
|
271
268
|
];
|
|
@@ -334,8 +331,90 @@ const agent = new Agent<HealthcareContext, HealthcareData>({
|
|
|
334
331
|
// Declarative initialization
|
|
335
332
|
terms,
|
|
336
333
|
guidelines,
|
|
337
|
-
|
|
338
|
-
|
|
334
|
+
// Enable debug logging
|
|
335
|
+
debug: true,
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
// Demonstrate different tool registration approaches
|
|
339
|
+
|
|
340
|
+
// Method 1: Register tools for ID-based reference in routes
|
|
341
|
+
// Note: scheduleAppointmentTool is NOT registered globally - it's only available on the specific step
|
|
342
|
+
agent.tool.registerMany([
|
|
343
|
+
getInsuranceProvidersTool,
|
|
344
|
+
getAvailableSlotsTool,
|
|
345
|
+
getLabResultsTool,
|
|
346
|
+
// scheduleAppointmentTool, // Commented out - will be added to specific step only
|
|
347
|
+
]);
|
|
348
|
+
|
|
349
|
+
// Method 2: Create and register specialized tools
|
|
350
|
+
const appointmentValidator = agent.tool.createValidation({
|
|
351
|
+
id: "validate_appointment",
|
|
352
|
+
fields: ["appointmentType", "preferredDate", "preferredTime"] as const,
|
|
353
|
+
validator: async (context, data) => {
|
|
354
|
+
const errors: ValidationError[] = [];
|
|
355
|
+
if (!data.appointmentType) errors.push({
|
|
356
|
+
field: "appointmentType",
|
|
357
|
+
value: data.appointmentType,
|
|
358
|
+
message: "Appointment type is required",
|
|
359
|
+
schemaPath: "appointmentType"
|
|
360
|
+
});
|
|
361
|
+
if (!data.preferredDate) errors.push({
|
|
362
|
+
field: "preferredDate",
|
|
363
|
+
value: data.preferredDate,
|
|
364
|
+
message: "Preferred date is required",
|
|
365
|
+
schemaPath: "preferredDate"
|
|
366
|
+
});
|
|
367
|
+
if (!data.preferredTime) errors.push({
|
|
368
|
+
field: "preferredTime",
|
|
369
|
+
value: data.preferredTime,
|
|
370
|
+
message: "Preferred time is required",
|
|
371
|
+
schemaPath: "preferredTime"
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
return {
|
|
375
|
+
valid: errors.length === 0,
|
|
376
|
+
errors,
|
|
377
|
+
warnings: [],
|
|
378
|
+
};
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
// Method 3: Create data enrichment tool
|
|
383
|
+
const patientDataEnricher = agent.tool.createDataEnrichment({
|
|
384
|
+
id: "enrich_patient_data",
|
|
385
|
+
fields: ["appointmentType", "symptoms"] as const,
|
|
386
|
+
enricher: async (context, data) => {
|
|
387
|
+
// Add urgency classification based on symptoms - return fields that exist in HealthcareData
|
|
388
|
+
const urgentKeywords = ["chest pain", "difficulty breathing", "severe", "emergency"];
|
|
389
|
+
const hasUrgentSymptoms = data.symptoms && urgentKeywords.some(keyword =>
|
|
390
|
+
data.symptoms!.toLowerCase().includes(keyword)
|
|
391
|
+
);
|
|
392
|
+
|
|
393
|
+
return {
|
|
394
|
+
urgency: hasUrgentSymptoms ? "high" : "medium", // This matches the urgency field in HealthcareData
|
|
395
|
+
};
|
|
396
|
+
},
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
// Method 4: Create tool using tool.create()
|
|
400
|
+
const finalizeAppointmentTool = agent.tool.create({
|
|
401
|
+
id: "finalize_appointment",
|
|
402
|
+
description: "Complete the appointment booking process",
|
|
403
|
+
parameters: { type: "object", properties: {} },
|
|
404
|
+
handler: async (context, args) => {
|
|
405
|
+
console.log(`✅ Appointment finalized for ${context.context.patientName}`);
|
|
406
|
+
console.log(`📅 Details: ${JSON.stringify(context.data, null, 2)}`);
|
|
407
|
+
|
|
408
|
+
// Could send confirmation email, update calendar, etc.
|
|
409
|
+
return {
|
|
410
|
+
data: `Appointment confirmed for ${context.context.patientName}`,
|
|
411
|
+
};
|
|
412
|
+
},
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
// Add routes after tools are registered
|
|
416
|
+
routes.forEach((route: any) => {
|
|
417
|
+
agent.createRoute(route);
|
|
339
418
|
});
|
|
340
419
|
|
|
341
420
|
// You can still add more dynamically after construction
|
|
@@ -359,45 +438,26 @@ async function main() {
|
|
|
359
438
|
|
|
360
439
|
// Turn 1 - Agent responds and routes to appropriate flow
|
|
361
440
|
console.log("🔄 Turn 1: Initial inquiry");
|
|
362
|
-
await agent.
|
|
363
|
-
|
|
364
|
-
const response1 = await agent.respond({
|
|
365
|
-
history: agent.session.getHistory()
|
|
366
|
-
});
|
|
441
|
+
const response1 = await agent.chat("Hi, I need to follow up on my recent visit");
|
|
367
442
|
|
|
368
443
|
console.log("🤖 Agent:", response1.message);
|
|
369
444
|
console.log("🛤️ Route chosen:", response1.session?.currentRoute?.title);
|
|
370
445
|
|
|
371
|
-
await agent.session.addMessage("assistant", response1.message);
|
|
372
|
-
|
|
373
446
|
// Turn 2 - User provides more details
|
|
374
447
|
console.log("\n🔄 Turn 2: Providing appointment details");
|
|
375
|
-
await agent.
|
|
376
|
-
|
|
377
|
-
const response2 = await agent.respond({
|
|
378
|
-
history: agent.session.getHistory()
|
|
379
|
-
});
|
|
448
|
+
const response2 = await agent.chat("I need a checkup next Tuesday at 2 PM");
|
|
380
449
|
|
|
381
450
|
console.log("🤖 Agent:", response2.message);
|
|
382
451
|
console.log("📊 Collected data:", agent.session.getData());
|
|
383
452
|
console.log("📍 Current step:", response2.session?.currentStep?.id);
|
|
384
453
|
|
|
385
|
-
await agent.session.addMessage("assistant", response2.message);
|
|
386
|
-
|
|
387
454
|
// Turn 3 - Continue the conversation flow
|
|
388
455
|
console.log("\n🔄 Turn 3: Continuing appointment booking");
|
|
389
|
-
|
|
390
|
-
await agent.session.addMessage("user", "I'm feeling a bit anxious about the visit", "Alice");
|
|
391
|
-
|
|
392
|
-
const response3 = await agent.respond({
|
|
393
|
-
history: agent.session.getHistory()
|
|
394
|
-
});
|
|
456
|
+
const response3 = await agent.chat("I'm feeling a bit anxious about the visit");
|
|
395
457
|
|
|
396
458
|
console.log("🤖 Agent:", response3.message);
|
|
397
459
|
console.log("📊 Updated data:", agent.session.getData());
|
|
398
460
|
console.log("📍 Current step:", response3.session?.currentStep?.id);
|
|
399
|
-
|
|
400
|
-
await agent.session.addMessage("assistant", response3.message);
|
|
401
461
|
|
|
402
462
|
// Check for route completion
|
|
403
463
|
if (response3.isRouteComplete && response3.session) {
|
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
* - Schema-first data definition
|
|
9
9
|
* - Type-safe data extraction
|
|
10
10
|
* - Automatic validation
|
|
11
|
-
* -
|
|
11
|
+
* - NEW: Flexible ConditionTemplate patterns for routing and step control:
|
|
12
|
+
* - String-only conditions: "user wants to register" (AI context only)
|
|
13
|
+
* - Function-only conditions: (ctx) => ctx.data?.complete (programmatic only)
|
|
14
|
+
* - Mixed arrays: ["user provided info", (ctx) => !!ctx.data?.name] (hybrid)
|
|
15
|
+
* - Enhanced skipIf conditions for smart flow control
|
|
12
16
|
*/
|
|
13
17
|
|
|
14
18
|
import { Agent, GeminiProvider, type Tool } from "../../src/index";
|
|
@@ -23,22 +27,22 @@ interface UserProfileData {
|
|
|
23
27
|
newsletterOptIn: boolean;
|
|
24
28
|
}
|
|
25
29
|
|
|
26
|
-
// Define a tool that uses the collected data
|
|
27
|
-
const
|
|
30
|
+
// Define a tool that uses the collected data - using unified Tool interface
|
|
31
|
+
const saveUserProfileTool: Tool<unknown, UserProfileData> = {
|
|
28
32
|
id: "save_user_profile",
|
|
29
33
|
description: "Save the collected user profile information",
|
|
30
34
|
parameters: {
|
|
31
35
|
type: "object",
|
|
32
36
|
properties: {},
|
|
33
37
|
},
|
|
34
|
-
handler: (
|
|
35
|
-
console.log("Saving user profile:", data);
|
|
38
|
+
handler: async (context, args) => {
|
|
39
|
+
console.log("Saving user profile:", context.data);
|
|
36
40
|
|
|
37
41
|
// Simulate saving to database
|
|
38
|
-
console.log("Profile data:", data);
|
|
42
|
+
console.log("Profile data:", context.data);
|
|
39
43
|
|
|
40
44
|
return {
|
|
41
|
-
data: `Profile saved successfully! Welcome ${data?.name}!`,
|
|
45
|
+
data: `Profile saved successfully! Welcome ${context.data?.name}!`,
|
|
42
46
|
};
|
|
43
47
|
},
|
|
44
48
|
};
|
|
@@ -99,10 +103,23 @@ const agent = new Agent<unknown, UserProfileData>({
|
|
|
99
103
|
schema: userProfileSchema,
|
|
100
104
|
});
|
|
101
105
|
|
|
106
|
+
// Add tool using unified interface
|
|
107
|
+
agent.addTool(saveUserProfileTool);
|
|
108
|
+
|
|
102
109
|
// Create a route that collects profile information step by step
|
|
103
110
|
agent.createRoute({
|
|
104
111
|
title: "User Profile Collection",
|
|
105
112
|
description: "Collect comprehensive user profile information",
|
|
113
|
+
// Mixed condition: AI context + programmatic validation
|
|
114
|
+
when: [
|
|
115
|
+
"user wants to create a profile or register",
|
|
116
|
+
(ctx) => {
|
|
117
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
118
|
+
return message.includes('profile') || message.includes('register') || message.includes('sign up');
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
// Skip if user already has a complete profile
|
|
122
|
+
skipIf: (ctx) => Boolean(ctx.data?.name && ctx.data?.email && ctx.data?.age),
|
|
106
123
|
// NEW: Required fields for route completion (instead of schema)
|
|
107
124
|
requiredFields: ["name", "email"],
|
|
108
125
|
// NEW: Optional fields that enhance the experience
|
|
@@ -114,7 +131,8 @@ agent.createRoute({
|
|
|
114
131
|
description: "Ask for user's name",
|
|
115
132
|
prompt: "Hi! I'd like to create a profile for you. What's your name?",
|
|
116
133
|
collect: ["name"],
|
|
117
|
-
skipIf
|
|
134
|
+
// String-only skipIf for AI context
|
|
135
|
+
skipIf: "user already provided their name",
|
|
118
136
|
},
|
|
119
137
|
{
|
|
120
138
|
id: "ask_email",
|
|
@@ -122,7 +140,8 @@ agent.createRoute({
|
|
|
122
140
|
prompt: "What's your email address?",
|
|
123
141
|
collect: ["email"],
|
|
124
142
|
requires: ["name"],
|
|
125
|
-
skipIf
|
|
143
|
+
// Function-only skipIf for programmatic logic
|
|
144
|
+
skipIf: (ctx) => !!ctx.data?.email,
|
|
126
145
|
},
|
|
127
146
|
{
|
|
128
147
|
id: "ask_age",
|
|
@@ -130,7 +149,11 @@ agent.createRoute({
|
|
|
130
149
|
prompt: "How old are you? (optional)",
|
|
131
150
|
collect: ["age"],
|
|
132
151
|
requires: ["name", "email"],
|
|
133
|
-
skipIf:
|
|
152
|
+
// Mixed skipIf: AI context + programmatic check
|
|
153
|
+
skipIf: [
|
|
154
|
+
"age already collected",
|
|
155
|
+
(ctx) => ctx.data?.age !== undefined
|
|
156
|
+
],
|
|
134
157
|
},
|
|
135
158
|
{
|
|
136
159
|
id: "ask_interests",
|
|
@@ -138,8 +161,11 @@ agent.createRoute({
|
|
|
138
161
|
prompt: "What are your interests or hobbies? (optional)",
|
|
139
162
|
collect: ["interests"],
|
|
140
163
|
requires: ["name", "email"],
|
|
141
|
-
skipIf
|
|
142
|
-
|
|
164
|
+
// Mixed skipIf with complex logic
|
|
165
|
+
skipIf: [
|
|
166
|
+
"interests already provided",
|
|
167
|
+
(ctx) => !!(ctx.data?.interests && ctx.data.interests.length > 0)
|
|
168
|
+
],
|
|
143
169
|
},
|
|
144
170
|
{
|
|
145
171
|
id: "ask_contact_preference",
|
|
@@ -147,7 +173,8 @@ agent.createRoute({
|
|
|
147
173
|
prompt: "What's your preferred contact method?",
|
|
148
174
|
collect: ["preferredContact"],
|
|
149
175
|
requires: ["name", "email"],
|
|
150
|
-
|
|
176
|
+
// Function-only skipIf
|
|
177
|
+
skipIf: (ctx) => !!ctx.data?.preferredContact,
|
|
151
178
|
},
|
|
152
179
|
{
|
|
153
180
|
id: "ask_newsletter",
|
|
@@ -155,15 +182,15 @@ agent.createRoute({
|
|
|
155
182
|
prompt: "Would you like to subscribe to our newsletter?",
|
|
156
183
|
collect: ["newsletterOptIn"],
|
|
157
184
|
requires: ["name", "email"],
|
|
158
|
-
skipIf
|
|
159
|
-
|
|
185
|
+
// String-only skipIf for simple cases
|
|
186
|
+
skipIf: "newsletter preference already collected",
|
|
160
187
|
},
|
|
161
188
|
{
|
|
162
189
|
id: "save_profile",
|
|
163
190
|
description: "Save the collected profile",
|
|
164
191
|
prompt:
|
|
165
192
|
"Thanks for providing your information! Let me save your profile.",
|
|
166
|
-
tools: [
|
|
193
|
+
tools: ["save_user_profile"], // Reference by ID
|
|
167
194
|
requires: ["name", "email"],
|
|
168
195
|
},
|
|
169
196
|
],
|