@falai/agent 0.8.0 → 0.9.0-alpha-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -133
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/{core → cjs/src/core}/Agent.d.ts +67 -69
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1433 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +446 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +126 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/Route.js +116 -20
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +76 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +197 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +54 -35
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/{types → src/types}/route.d.ts +85 -31
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +70 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +36 -13
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/{cjs → src}/core/Agent.d.ts +67 -69
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1429 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/src/core/PersistenceManager.d.ts +98 -0
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +56 -26
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +31 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +442 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +126 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/{core → src/core}/Route.js +116 -20
- package/dist/src/core/Route.js.map +1 -0
- package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +98 -104
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +76 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +193 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +43 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +70 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +54 -35
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +39 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/{types → src/types}/route.d.ts +85 -31
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +70 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{types → src/types}/tool.d.ts +6 -8
- package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +34 -13
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +902 -263
- package/docs/api/overview.md +798 -0
- package/docs/core/agent/README.md +642 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
- package/docs/core/ai-integration/prompt-composition.md +196 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +165 -0
- package/docs/core/conversation-flows/data-collection.md +545 -0
- package/docs/core/conversation-flows/route-dsl.md +479 -0
- package/docs/core/conversation-flows/routes.md +61 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +130 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +339 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +384 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
- package/examples/ai-providers/anthropic-integration.ts +377 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
- package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
- package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
- package/examples/core-concepts/schema-driven-extraction.ts +301 -0
- package/examples/core-concepts/session-management.ts +394 -0
- package/examples/integrations/database-integration.ts +615 -0
- package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
- package/examples/integrations/server-session-management.ts +299 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
- package/examples/persistence/memory-sessions.ts +506 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
- package/examples/tools/basic-tools.ts +550 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1102 -487
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +87 -57
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +118 -38
- package/src/core/ResponsePipeline.ts +715 -0
- package/src/core/Route.ts +168 -51
- package/src/core/RoutingEngine.ts +178 -209
- package/src/core/SessionManager.ts +241 -0
- package/src/core/Step.ts +149 -67
- package/src/core/ToolExecutor.ts +37 -42
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +50 -38
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +43 -7
- package/src/types/persistence.ts +46 -28
- package/src/types/route.ts +104 -45
- package/src/types/session.ts +19 -213
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +9 -11
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +229 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts +0 -96
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts +0 -96
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/domain-scoping.ts +0 -366
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Event,
|
|
3
|
+
AgentOptions,
|
|
4
|
+
StructuredSchema,
|
|
5
|
+
RoutingDecision,
|
|
6
|
+
SessionState,
|
|
7
|
+
AiProvider,
|
|
8
|
+
} from "../types";
|
|
9
|
+
import { enterRoute, mergeCollected } from "../utils";
|
|
2
10
|
import type { Route } from "./Route";
|
|
3
11
|
import type { Step } from "./Step";
|
|
4
|
-
import type { StructuredSchema } from "../types/schema";
|
|
5
|
-
import type { RoutingDecision } from "../types/routing";
|
|
6
|
-
import type { SessionStep } from "../types/session";
|
|
7
|
-
import type { AiProvider } from "../types/ai";
|
|
8
|
-
import { enterRoute, mergeCollected } from "../types/session";
|
|
9
12
|
import { PromptComposer } from "./PromptComposer";
|
|
10
13
|
import { getLastMessageFromHistory } from "../utils/event";
|
|
11
14
|
import { logger } from "../utils/logger";
|
|
15
|
+
import { render } from "../utils/template";
|
|
16
|
+
import { END_ROUTE_ID } from "../constants";
|
|
17
|
+
|
|
18
|
+
export interface CandidateStep<TContext = unknown, TData = unknown> {
|
|
19
|
+
step: Step<TContext, TData>;
|
|
20
|
+
isRouteComplete?: boolean;
|
|
21
|
+
}
|
|
12
22
|
|
|
13
23
|
export interface RoutingDecisionOutput {
|
|
14
24
|
context: string;
|
|
@@ -32,7 +42,32 @@ export interface RoutingEngineOptions {
|
|
|
32
42
|
maxCandidates?: number;
|
|
33
43
|
}
|
|
34
44
|
|
|
35
|
-
export
|
|
45
|
+
export interface BuildStepSelectionPromptParams<
|
|
46
|
+
TContext = unknown,
|
|
47
|
+
TData = unknown
|
|
48
|
+
> {
|
|
49
|
+
route: Route<TContext, TData>;
|
|
50
|
+
currentStep: Step<TContext, TData> | undefined;
|
|
51
|
+
candidates: CandidateStep<TContext, TData>[];
|
|
52
|
+
data: Partial<TData>;
|
|
53
|
+
history: Event[];
|
|
54
|
+
lastMessage: string;
|
|
55
|
+
agentOptions?: AgentOptions<TContext>;
|
|
56
|
+
context?: TContext;
|
|
57
|
+
session?: SessionState<TData>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface BuildRoutingPromptParams<TContext = unknown, TData = unknown> {
|
|
61
|
+
history: Event[];
|
|
62
|
+
routes: Route<TContext, TData>[];
|
|
63
|
+
lastMessage: string;
|
|
64
|
+
agentOptions?: AgentOptions<TContext>;
|
|
65
|
+
session?: SessionState<TData>;
|
|
66
|
+
activeRouteSteps?: Step<TContext, TData>[];
|
|
67
|
+
context?: TContext;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export class RoutingEngine<TContext = unknown, TData = unknown> {
|
|
36
71
|
constructor(private readonly options?: RoutingEngineOptions) {}
|
|
37
72
|
|
|
38
73
|
/**
|
|
@@ -41,15 +76,10 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
41
76
|
* @private
|
|
42
77
|
*/
|
|
43
78
|
private async decideSingleRouteStep(params: {
|
|
44
|
-
route: Route<TContext,
|
|
45
|
-
session:
|
|
79
|
+
route: Route<TContext, TData>;
|
|
80
|
+
session: SessionState<TData>;
|
|
46
81
|
history: Event[];
|
|
47
|
-
|
|
48
|
-
name?: string;
|
|
49
|
-
goal?: string;
|
|
50
|
-
description?: string;
|
|
51
|
-
personality?: string;
|
|
52
|
-
};
|
|
82
|
+
agentOptions?: AgentOptions<TContext>;
|
|
53
83
|
provider: AiProvider;
|
|
54
84
|
context: TContext;
|
|
55
85
|
signal?: AbortSignal;
|
|
@@ -57,10 +87,10 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
57
87
|
selectedRoute?: Route<TContext>;
|
|
58
88
|
selectedStep?: Step<TContext>;
|
|
59
89
|
responseDirectives?: string[];
|
|
60
|
-
session:
|
|
90
|
+
session: SessionState<TData>;
|
|
61
91
|
isRouteComplete?: boolean;
|
|
62
92
|
}> {
|
|
63
|
-
const { route, session, history,
|
|
93
|
+
const { route, session, history, agentOptions, provider, context, signal } =
|
|
64
94
|
params;
|
|
65
95
|
|
|
66
96
|
let updatedSession = session;
|
|
@@ -125,18 +155,20 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
125
155
|
|
|
126
156
|
// Multiple candidates - use AI to select best step
|
|
127
157
|
const lastUserMessage = getLastMessageFromHistory(history);
|
|
128
|
-
const stepPrompt = this.buildStepSelectionPrompt(
|
|
158
|
+
const stepPrompt = await this.buildStepSelectionPrompt({
|
|
129
159
|
route,
|
|
130
160
|
currentStep,
|
|
131
161
|
candidates,
|
|
132
|
-
updatedSession.data || {},
|
|
162
|
+
data: updatedSession.data || {},
|
|
133
163
|
history,
|
|
134
|
-
lastUserMessage,
|
|
135
|
-
|
|
136
|
-
|
|
164
|
+
lastMessage: lastUserMessage,
|
|
165
|
+
agentOptions,
|
|
166
|
+
context,
|
|
167
|
+
session: updatedSession,
|
|
168
|
+
});
|
|
137
169
|
|
|
138
170
|
const stepSchema = this.buildStepSelectionSchema(
|
|
139
|
-
candidates.map((c) => c.step
|
|
171
|
+
candidates.map((c) => c.step)
|
|
140
172
|
);
|
|
141
173
|
|
|
142
174
|
const stepResult = await provider.generateMessage<
|
|
@@ -158,13 +190,11 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
158
190
|
});
|
|
159
191
|
|
|
160
192
|
const selectedStepId = stepResult.structured?.selectedStepId;
|
|
161
|
-
const selectedStep = candidates.find(
|
|
162
|
-
(c) => c.step.id === selectedStepId
|
|
163
|
-
)?.step;
|
|
193
|
+
const selectedStep = candidates.find((c) => c.step.id === selectedStepId);
|
|
164
194
|
|
|
165
195
|
if (selectedStep) {
|
|
166
196
|
logger.debug(
|
|
167
|
-
`[RoutingEngine] Single-route: AI selected step: ${selectedStep.id}`
|
|
197
|
+
`[RoutingEngine] Single-route: AI selected step: ${selectedStep.step.id}`
|
|
168
198
|
);
|
|
169
199
|
logger.debug(
|
|
170
200
|
`[RoutingEngine] Single-route: Reasoning: ${stepResult.structured?.reasoning}`
|
|
@@ -177,7 +207,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
177
207
|
|
|
178
208
|
return {
|
|
179
209
|
selectedRoute,
|
|
180
|
-
selectedStep: selectedStep || candidates[0].step,
|
|
210
|
+
selectedStep: selectedStep?.step || candidates[0].step,
|
|
181
211
|
responseDirectives: stepResult.structured?.responseDirectives,
|
|
182
212
|
session: updatedSession,
|
|
183
213
|
};
|
|
@@ -193,7 +223,6 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
193
223
|
visited: Set<string>
|
|
194
224
|
): {
|
|
195
225
|
step?: Step<TContext, TData>;
|
|
196
|
-
condition?: string;
|
|
197
226
|
isRouteComplete?: boolean;
|
|
198
227
|
} {
|
|
199
228
|
// Prevent infinite loops
|
|
@@ -205,14 +234,10 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
205
234
|
const transitions = currentStep.getTransitions();
|
|
206
235
|
|
|
207
236
|
for (const transition of transitions) {
|
|
208
|
-
const target = transition
|
|
237
|
+
const target = transition;
|
|
209
238
|
|
|
210
239
|
// Check for END_ROUTE transition
|
|
211
|
-
if (
|
|
212
|
-
!target &&
|
|
213
|
-
transition.spec.step &&
|
|
214
|
-
typeof transition.spec.step === "symbol"
|
|
215
|
-
) {
|
|
240
|
+
if (target && target.id === END_ROUTE_ID) {
|
|
216
241
|
// Found END_ROUTE - route is complete
|
|
217
242
|
return {
|
|
218
243
|
isRouteComplete: true,
|
|
@@ -228,7 +253,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
228
253
|
);
|
|
229
254
|
return {
|
|
230
255
|
step: target,
|
|
231
|
-
|
|
256
|
+
isRouteComplete: false,
|
|
232
257
|
};
|
|
233
258
|
}
|
|
234
259
|
|
|
@@ -256,20 +281,8 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
256
281
|
route: Route<TContext, TData>,
|
|
257
282
|
currentStep: Step<TContext, TData> | undefined,
|
|
258
283
|
data: Partial<TData>
|
|
259
|
-
):
|
|
260
|
-
|
|
261
|
-
condition?: string;
|
|
262
|
-
requires?: string[];
|
|
263
|
-
collectFields?: string[];
|
|
264
|
-
isRouteComplete?: boolean;
|
|
265
|
-
}> {
|
|
266
|
-
const candidates: Array<{
|
|
267
|
-
step: Step<TContext, TData>;
|
|
268
|
-
condition?: string;
|
|
269
|
-
requires?: string[];
|
|
270
|
-
collectFields?: string[];
|
|
271
|
-
isRouteComplete?: boolean;
|
|
272
|
-
}> = [];
|
|
284
|
+
): CandidateStep<TContext, TData>[] {
|
|
285
|
+
const candidates: CandidateStep<TContext, TData>[] = [];
|
|
273
286
|
|
|
274
287
|
if (!currentStep) {
|
|
275
288
|
const initialStep = route.initialStep;
|
|
@@ -286,28 +299,22 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
286
299
|
logger.debug(
|
|
287
300
|
`[RoutingEngine] Route complete on entry: all steps skipped, END_ROUTE reached`
|
|
288
301
|
);
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
isRouteComplete: true,
|
|
294
|
-
},
|
|
295
|
-
];
|
|
302
|
+
candidates.push({
|
|
303
|
+
step: initialStep,
|
|
304
|
+
isRouteComplete: true,
|
|
305
|
+
});
|
|
296
306
|
} else if (result.step) {
|
|
297
307
|
// Found a non-skipped step
|
|
298
308
|
candidates.push({
|
|
299
309
|
step: result.step,
|
|
300
|
-
|
|
301
|
-
requires: result.step.requires,
|
|
302
|
-
collectFields: result.step.collectFields,
|
|
310
|
+
isRouteComplete: result.isRouteComplete || false,
|
|
303
311
|
});
|
|
304
312
|
}
|
|
305
313
|
// If no step found and not complete, fall through to return empty candidates
|
|
306
314
|
} else {
|
|
307
315
|
candidates.push({
|
|
308
316
|
step: initialStep,
|
|
309
|
-
|
|
310
|
-
collectFields: initialStep.collectFields,
|
|
317
|
+
isRouteComplete: false,
|
|
311
318
|
});
|
|
312
319
|
}
|
|
313
320
|
return candidates;
|
|
@@ -317,14 +324,10 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
317
324
|
let hasEndRoute = false;
|
|
318
325
|
|
|
319
326
|
for (const transition of transitions) {
|
|
320
|
-
const target = transition
|
|
327
|
+
const target = transition;
|
|
321
328
|
|
|
322
329
|
// Check for END_ROUTE transition (no target step)
|
|
323
|
-
if (
|
|
324
|
-
!target &&
|
|
325
|
-
transition.spec.step &&
|
|
326
|
-
typeof transition.spec.step === "symbol"
|
|
327
|
-
) {
|
|
330
|
+
if (target && target.id === END_ROUTE_ID) {
|
|
328
331
|
hasEndRoute = true;
|
|
329
332
|
continue;
|
|
330
333
|
}
|
|
@@ -349,9 +352,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
349
352
|
// Found a non-skipped step deeper in the chain
|
|
350
353
|
candidates.push({
|
|
351
354
|
step: result.step,
|
|
352
|
-
|
|
353
|
-
requires: result.step.requires,
|
|
354
|
-
collectFields: result.step.collectFields,
|
|
355
|
+
isRouteComplete: result.isRouteComplete || false,
|
|
355
356
|
});
|
|
356
357
|
}
|
|
357
358
|
continue;
|
|
@@ -359,9 +360,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
359
360
|
|
|
360
361
|
candidates.push({
|
|
361
362
|
step: target,
|
|
362
|
-
|
|
363
|
-
requires: target.requires,
|
|
364
|
-
collectFields: target.collectFields,
|
|
363
|
+
isRouteComplete: hasEndRoute || false,
|
|
365
364
|
});
|
|
366
365
|
}
|
|
367
366
|
|
|
@@ -376,7 +375,6 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
376
375
|
return [
|
|
377
376
|
{
|
|
378
377
|
step: currentStep,
|
|
379
|
-
condition: "Route complete - all data collected",
|
|
380
378
|
isRouteComplete: true,
|
|
381
379
|
},
|
|
382
380
|
];
|
|
@@ -386,9 +384,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
386
384
|
if (!currentStep.shouldSkip(data)) {
|
|
387
385
|
candidates.push({
|
|
388
386
|
step: currentStep,
|
|
389
|
-
|
|
390
|
-
requires: currentStep.requires,
|
|
391
|
-
collectFields: currentStep.collectFields,
|
|
387
|
+
isRouteComplete: hasEndRoute || false,
|
|
392
388
|
});
|
|
393
389
|
}
|
|
394
390
|
}
|
|
@@ -403,15 +399,10 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
403
399
|
* OPTIMIZATION: If there's only 1 route, skips route scoring and only does step selection.
|
|
404
400
|
*/
|
|
405
401
|
async decideRouteAndStep(params: {
|
|
406
|
-
routes: Route<TContext,
|
|
407
|
-
session:
|
|
402
|
+
routes: Route<TContext, TData>[];
|
|
403
|
+
session: SessionState<TData>;
|
|
408
404
|
history: Event[];
|
|
409
|
-
|
|
410
|
-
name?: string;
|
|
411
|
-
goal?: string;
|
|
412
|
-
description?: string;
|
|
413
|
-
personality?: string;
|
|
414
|
-
};
|
|
405
|
+
agentOptions?: AgentOptions<TContext>;
|
|
415
406
|
provider: AiProvider;
|
|
416
407
|
context: TContext;
|
|
417
408
|
signal?: AbortSignal;
|
|
@@ -419,11 +410,18 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
419
410
|
selectedRoute?: Route<TContext>;
|
|
420
411
|
selectedStep?: Step<TContext>;
|
|
421
412
|
responseDirectives?: string[];
|
|
422
|
-
session:
|
|
413
|
+
session: SessionState<TData>;
|
|
423
414
|
isRouteComplete?: boolean;
|
|
424
415
|
}> {
|
|
425
|
-
const {
|
|
426
|
-
|
|
416
|
+
const {
|
|
417
|
+
routes,
|
|
418
|
+
session,
|
|
419
|
+
history,
|
|
420
|
+
agentOptions,
|
|
421
|
+
provider,
|
|
422
|
+
context,
|
|
423
|
+
signal,
|
|
424
|
+
} = params;
|
|
427
425
|
|
|
428
426
|
if (routes.length === 0) {
|
|
429
427
|
return { session };
|
|
@@ -435,7 +433,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
435
433
|
route: routes[0],
|
|
436
434
|
session,
|
|
437
435
|
history,
|
|
438
|
-
|
|
436
|
+
agentOptions,
|
|
439
437
|
provider,
|
|
440
438
|
context,
|
|
441
439
|
signal,
|
|
@@ -444,16 +442,8 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
444
442
|
|
|
445
443
|
const lastUserMessage = getLastMessageFromHistory(history);
|
|
446
444
|
|
|
447
|
-
let activeRouteSteps:
|
|
448
|
-
|
|
449
|
-
stepId: string;
|
|
450
|
-
description: string;
|
|
451
|
-
condition?: string;
|
|
452
|
-
requires?: string[];
|
|
453
|
-
collectFields?: string[];
|
|
454
|
-
}>
|
|
455
|
-
| undefined;
|
|
456
|
-
let activeRoute: Route<TContext> | undefined;
|
|
445
|
+
let activeRouteSteps: Step<TContext, TData>[] | undefined;
|
|
446
|
+
let activeRoute: Route<TContext, TData> | undefined;
|
|
457
447
|
let isRouteComplete = false;
|
|
458
448
|
|
|
459
449
|
if (session.currentRoute) {
|
|
@@ -477,13 +467,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
477
467
|
// Don't include steps in routing if route is complete
|
|
478
468
|
activeRouteSteps = undefined;
|
|
479
469
|
} else {
|
|
480
|
-
activeRouteSteps = candidates.map((c) =>
|
|
481
|
-
stepId: c.step.id,
|
|
482
|
-
description: c.step.description || "",
|
|
483
|
-
condition: c.condition,
|
|
484
|
-
requires: c.requires,
|
|
485
|
-
collectFields: c.collectFields,
|
|
486
|
-
}));
|
|
470
|
+
activeRouteSteps = candidates.map((c) => c.step);
|
|
487
471
|
logger.debug(
|
|
488
472
|
`[RoutingEngine] Found ${activeRouteSteps.length} candidate steps for active route`
|
|
489
473
|
);
|
|
@@ -497,14 +481,15 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
497
481
|
activeRouteSteps
|
|
498
482
|
);
|
|
499
483
|
|
|
500
|
-
const routingPrompt = this.buildRoutingPrompt(
|
|
484
|
+
const routingPrompt = await this.buildRoutingPrompt({
|
|
501
485
|
history,
|
|
502
486
|
routes,
|
|
503
|
-
lastUserMessage,
|
|
504
|
-
|
|
487
|
+
lastMessage: lastUserMessage,
|
|
488
|
+
agentOptions,
|
|
505
489
|
session,
|
|
506
|
-
activeRouteSteps
|
|
507
|
-
|
|
490
|
+
activeRouteSteps,
|
|
491
|
+
context,
|
|
492
|
+
});
|
|
508
493
|
|
|
509
494
|
const routingResult = await provider.generateMessage<
|
|
510
495
|
TContext,
|
|
@@ -591,97 +576,88 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
591
576
|
* Build prompt for step selection within a single route
|
|
592
577
|
* @private
|
|
593
578
|
*/
|
|
594
|
-
private buildStepSelectionPrompt(
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
personality?: string;
|
|
611
|
-
}
|
|
612
|
-
): string {
|
|
613
|
-
const pc = new PromptComposer();
|
|
579
|
+
private async buildStepSelectionPrompt<TData>(
|
|
580
|
+
params: BuildStepSelectionPromptParams<TContext, TData>
|
|
581
|
+
): Promise<string> {
|
|
582
|
+
const {
|
|
583
|
+
route,
|
|
584
|
+
currentStep,
|
|
585
|
+
candidates,
|
|
586
|
+
data,
|
|
587
|
+
history,
|
|
588
|
+
lastMessage,
|
|
589
|
+
agentOptions,
|
|
590
|
+
context,
|
|
591
|
+
session,
|
|
592
|
+
} = params;
|
|
593
|
+
const templateContext = { context, session, history };
|
|
594
|
+
const pc = new PromptComposer(templateContext);
|
|
614
595
|
|
|
615
596
|
// Add agent metadata
|
|
616
|
-
if (
|
|
617
|
-
pc.addAgentMeta(
|
|
618
|
-
name: agentMeta?.name || "Agent",
|
|
619
|
-
description: agentMeta?.description,
|
|
620
|
-
goal: agentMeta?.goal,
|
|
621
|
-
});
|
|
597
|
+
if (agentOptions) {
|
|
598
|
+
await pc.addAgentMeta(agentOptions);
|
|
622
599
|
}
|
|
623
600
|
|
|
624
|
-
const personality =
|
|
625
|
-
agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
|
|
626
|
-
pc.addPersonality(personality);
|
|
627
|
-
|
|
628
601
|
// Add route context
|
|
629
|
-
pc.addInstruction(
|
|
602
|
+
await pc.addInstruction(
|
|
630
603
|
`Active Route: ${route.title}\nDescription: ${route.description || "N/A"}`
|
|
631
604
|
);
|
|
632
605
|
|
|
633
606
|
// Add current step context
|
|
634
607
|
if (currentStep) {
|
|
635
|
-
pc.addInstruction(
|
|
608
|
+
await pc.addInstruction(
|
|
636
609
|
`Current Step: ${currentStep.id}\nDescription: ${
|
|
637
610
|
currentStep.description || "N/A"
|
|
638
611
|
}`
|
|
639
612
|
);
|
|
640
613
|
} else {
|
|
641
|
-
pc.addInstruction("Current Step: None (entering route)");
|
|
614
|
+
await pc.addInstruction("Current Step: None (entering route)");
|
|
642
615
|
}
|
|
643
616
|
|
|
644
617
|
// Add collected data context
|
|
645
618
|
if (Object.keys(data).length > 0) {
|
|
646
|
-
pc.addInstruction(
|
|
619
|
+
await pc.addInstruction(
|
|
647
620
|
`Collected Data So Far:\n${JSON.stringify(data, null, 2)}`
|
|
648
621
|
);
|
|
649
622
|
} else {
|
|
650
|
-
pc.addInstruction("Collected Data: None yet");
|
|
623
|
+
await pc.addInstruction("Collected Data: None yet");
|
|
651
624
|
}
|
|
652
625
|
|
|
653
626
|
// Add conversation history
|
|
654
|
-
pc.addInteractionHistory(history);
|
|
655
|
-
pc.addLastMessage(lastMessage);
|
|
627
|
+
await pc.addInteractionHistory(history);
|
|
628
|
+
await pc.addLastMessage(lastMessage);
|
|
656
629
|
|
|
657
630
|
// Add candidate steps
|
|
658
|
-
const stepDescriptions =
|
|
631
|
+
const stepDescriptions = [];
|
|
632
|
+
for (const candidate of candidates) {
|
|
633
|
+
const idx = candidates.indexOf(candidate);
|
|
659
634
|
const parts = [
|
|
660
635
|
`${idx + 1}. Step ID: ${candidate.step.id}`,
|
|
661
636
|
` Description: ${candidate.step.description || "N/A"}`,
|
|
662
637
|
];
|
|
663
638
|
|
|
664
|
-
if (candidate.
|
|
665
|
-
|
|
639
|
+
if (candidate.step.when) {
|
|
640
|
+
const renderedWhen = await render(candidate.step.when, templateContext);
|
|
641
|
+
parts.push(` When this step should be completed: ${renderedWhen}`);
|
|
666
642
|
}
|
|
667
643
|
|
|
668
|
-
if (candidate.requires && candidate.requires.length > 0) {
|
|
669
|
-
parts.push(` Required Data: ${candidate.requires.join(", ")}`);
|
|
644
|
+
if (candidate.step.requires && candidate.step.requires.length > 0) {
|
|
645
|
+
parts.push(` Required Data: ${candidate.step.requires.join(", ")}`);
|
|
670
646
|
}
|
|
671
647
|
|
|
672
|
-
if (candidate.
|
|
673
|
-
parts.push(` Collects: ${candidate.
|
|
648
|
+
if (candidate.step.collect && candidate.step.collect.length > 0) {
|
|
649
|
+
parts.push(` Collects: ${candidate.step.collect.join(", ")}`);
|
|
674
650
|
}
|
|
675
651
|
|
|
676
|
-
|
|
677
|
-
}
|
|
652
|
+
stepDescriptions.push(parts.join("\n"));
|
|
653
|
+
}
|
|
678
654
|
|
|
679
|
-
pc.addInstruction(
|
|
655
|
+
await pc.addInstruction(
|
|
680
656
|
`Available Steps to Transition To:\n${stepDescriptions.join("\n\n")}`
|
|
681
657
|
);
|
|
682
658
|
|
|
683
|
-
// Add decision
|
|
684
|
-
pc.addInstruction(
|
|
659
|
+
// Add decision prompt
|
|
660
|
+
await pc.addInstruction(
|
|
685
661
|
[
|
|
686
662
|
"Task: Decide which step to transition to based on:",
|
|
687
663
|
"1. The user's current message and intent",
|
|
@@ -707,7 +683,9 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
707
683
|
* Build schema for step selection
|
|
708
684
|
* @private
|
|
709
685
|
*/
|
|
710
|
-
private buildStepSelectionSchema(
|
|
686
|
+
private buildStepSelectionSchema(
|
|
687
|
+
validSteps: Step<TContext, TData>[]
|
|
688
|
+
): StructuredSchema {
|
|
711
689
|
return {
|
|
712
690
|
description:
|
|
713
691
|
"Step transition decision based on conversation context and collected data",
|
|
@@ -722,7 +700,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
722
700
|
type: "string",
|
|
723
701
|
nullable: false,
|
|
724
702
|
description: "The ID of the selected step to transition to",
|
|
725
|
-
enum:
|
|
703
|
+
enum: validSteps.map((s) => s.id),
|
|
726
704
|
},
|
|
727
705
|
responseDirectives: {
|
|
728
706
|
type: "array",
|
|
@@ -737,9 +715,9 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
737
715
|
}
|
|
738
716
|
|
|
739
717
|
buildDynamicRoutingSchema(
|
|
740
|
-
routes: Route<TContext>[],
|
|
718
|
+
routes: Route<TContext, TData>[],
|
|
741
719
|
extrasSchema?: StructuredSchema,
|
|
742
|
-
activeRouteSteps?:
|
|
720
|
+
activeRouteSteps?: Step<TContext, TData>[]
|
|
743
721
|
): StructuredSchema {
|
|
744
722
|
const routeIds = routes.map((r) => r.id);
|
|
745
723
|
const routeProperties: Record<string, StructuredSchema> = {};
|
|
@@ -789,7 +767,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
789
767
|
nullable: false,
|
|
790
768
|
description:
|
|
791
769
|
"The step ID to transition to within the active route (required if continuing in current route)",
|
|
792
|
-
enum: activeRouteSteps.map((s) => s.
|
|
770
|
+
enum: activeRouteSteps.map((s) => s.id),
|
|
793
771
|
};
|
|
794
772
|
base.properties.stepReasoning = {
|
|
795
773
|
type: "string",
|
|
@@ -811,37 +789,24 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
811
789
|
return base;
|
|
812
790
|
}
|
|
813
791
|
|
|
814
|
-
buildRoutingPrompt(
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
collectFields?: string[];
|
|
831
|
-
}>
|
|
832
|
-
): string {
|
|
833
|
-
const pc = new PromptComposer();
|
|
834
|
-
if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
|
|
835
|
-
pc.addAgentMeta({
|
|
836
|
-
name: agentMeta?.name || "Agent",
|
|
837
|
-
description: agentMeta?.description,
|
|
838
|
-
goal: agentMeta?.goal,
|
|
839
|
-
});
|
|
792
|
+
async buildRoutingPrompt(
|
|
793
|
+
params: BuildRoutingPromptParams<TContext, TData>
|
|
794
|
+
): Promise<string> {
|
|
795
|
+
const {
|
|
796
|
+
history,
|
|
797
|
+
routes,
|
|
798
|
+
lastMessage,
|
|
799
|
+
agentOptions,
|
|
800
|
+
session,
|
|
801
|
+
activeRouteSteps,
|
|
802
|
+
context,
|
|
803
|
+
} = params;
|
|
804
|
+
const templateContext = { context, session, history };
|
|
805
|
+
const pc = new PromptComposer(templateContext);
|
|
806
|
+
if (agentOptions) {
|
|
807
|
+
await pc.addAgentMeta(agentOptions);
|
|
840
808
|
}
|
|
841
|
-
|
|
842
|
-
agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
|
|
843
|
-
pc.addPersonality(personality);
|
|
844
|
-
pc.addInstruction(
|
|
809
|
+
await pc.addInstruction(
|
|
845
810
|
"Task: Intent analysis and route scoring (0-100). Score ALL listed routes."
|
|
846
811
|
);
|
|
847
812
|
|
|
@@ -863,7 +828,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
863
828
|
sessionInfo.push(
|
|
864
829
|
"Note: User is mid-conversation. They may want to continue current route or switch to a new one based on their intent."
|
|
865
830
|
);
|
|
866
|
-
pc.addInstruction(sessionInfo.join("\n"));
|
|
831
|
+
await pc.addInstruction(sessionInfo.join("\n"));
|
|
867
832
|
|
|
868
833
|
// Add available steps for the active route
|
|
869
834
|
if (activeRouteSteps && activeRouteSteps.length > 0) {
|
|
@@ -871,21 +836,25 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
871
836
|
"",
|
|
872
837
|
"Available steps in active route (choose one to transition to):",
|
|
873
838
|
];
|
|
874
|
-
|
|
875
|
-
|
|
839
|
+
for (const step of activeRouteSteps) {
|
|
840
|
+
const idx = activeRouteSteps.indexOf(step);
|
|
841
|
+
stepInfo.push(`${idx + 1}. Step: ${step.id}`);
|
|
876
842
|
if (step.description) {
|
|
877
843
|
stepInfo.push(` Description: ${step.description}`);
|
|
878
844
|
}
|
|
879
|
-
|
|
880
|
-
|
|
845
|
+
const renderedWhen = await render(step.when, templateContext);
|
|
846
|
+
if (step.when) {
|
|
847
|
+
stepInfo.push(
|
|
848
|
+
` When this step should be completed: ${renderedWhen}`
|
|
849
|
+
);
|
|
881
850
|
}
|
|
882
851
|
if (step.requires && step.requires.length > 0) {
|
|
883
852
|
stepInfo.push(` Required data: ${step.requires.join(", ")}`);
|
|
884
853
|
}
|
|
885
|
-
if (step.
|
|
886
|
-
stepInfo.push(` Will collect: ${step.
|
|
854
|
+
if (step.collect && step.collect.length > 0) {
|
|
855
|
+
stepInfo.push(` Will collect: ${step.collect.join(", ")}`);
|
|
887
856
|
}
|
|
888
|
-
}
|
|
857
|
+
}
|
|
889
858
|
stepInfo.push("");
|
|
890
859
|
stepInfo.push(
|
|
891
860
|
"IMPORTANT: You MUST select a step to transition to. Evaluate which step makes the most sense based on:"
|
|
@@ -894,16 +863,16 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
894
863
|
stepInfo.push("- What data is still needed vs already present");
|
|
895
864
|
stepInfo.push("- The logical next step in the conversation");
|
|
896
865
|
stepInfo.push("- Whether conditions for steps are met");
|
|
897
|
-
pc.addInstruction(stepInfo.join("\n"));
|
|
866
|
+
await pc.addInstruction(stepInfo.join("\n"));
|
|
898
867
|
}
|
|
899
868
|
}
|
|
900
869
|
|
|
901
|
-
pc.addInteractionHistory(history);
|
|
902
|
-
pc.addLastMessage(lastMessage);
|
|
870
|
+
await pc.addInteractionHistory(history);
|
|
871
|
+
await pc.addLastMessage(lastMessage);
|
|
903
872
|
// Cast to unknown to satisfy generic constraints in composer
|
|
904
873
|
// This is safe because PromptComposer only reads route metadata (id, title, description)
|
|
905
|
-
pc.addRoutingOverview(routes
|
|
906
|
-
pc.addInstruction(
|
|
874
|
+
await pc.addRoutingOverview(routes);
|
|
875
|
+
await pc.addInstruction(
|
|
907
876
|
[
|
|
908
877
|
"Scoring rules:",
|
|
909
878
|
"- 90-100: explicit keywords + clear intent",
|