@falai/agent 0.1.0-alpha2
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 +797 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts +17 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js +21 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts +10 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js +13 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +232 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +741 -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/src/core/PersistenceManager.js +261 -0
- 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 +194 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +202 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
- package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseModal.js +1588 -0
- package/dist/cjs/src/core/ResponseModal.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +549 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +181 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +541 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.js +961 -0
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +94 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +239 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +170 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +448 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolManager.d.ts +234 -0
- package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/src/core/ToolManager.js +1117 -0
- package/dist/cjs/src/core/ToolManager.js.map +1 -0
- package/dist/cjs/src/index.d.ts +44 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +88 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/GeminiProvider.js +489 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts +13 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js +16 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/src/types/agent.d.ts +181 -0
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js +21 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/src/types/ai.d.ts +143 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js +6 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/cjs/src/types/history.d.ts +178 -0
- 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 +22 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +37 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/cjs/src/types/persistence.d.ts +209 -0
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js +7 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +238 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/src/types/route.js +6 -0
- package/dist/cjs/src/types/route.js.map +1 -0
- package/dist/cjs/src/types/routing.d.ts +16 -0
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/cjs/src/types/routing.js +3 -0
- package/dist/cjs/src/types/routing.js.map +1 -0
- package/dist/cjs/src/types/schema.d.ts +22 -0
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/cjs/src/types/schema.js +3 -0
- package/dist/cjs/src/types/schema.js.map +1 -0
- package/dist/cjs/src/types/session.d.ts +65 -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 +88 -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/src/types/tool.d.ts +130 -0
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/src/types/tool.js +19 -0
- package/dist/cjs/src/types/tool.js.map +1 -0
- 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 +32 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/cjs/src/utils/condition.d.ts +38 -0
- package/dist/cjs/src/utils/condition.d.ts.map +1 -0
- package/dist/cjs/src/utils/condition.js +168 -0
- package/dist/cjs/src/utils/condition.js.map +1 -0
- package/dist/cjs/src/utils/event.d.ts +6 -0
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/src/utils/event.js +20 -0
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +60 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +274 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts +25 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js +70 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +15 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +64 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/json.d.ts +16 -0
- package/dist/cjs/src/utils/json.d.ts.map +1 -0
- package/dist/cjs/src/utils/json.js +47 -0
- package/dist/cjs/src/utils/json.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts +10 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js +23 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts +10 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js +76 -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/src/utils/session.js +170 -0
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +155 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +383 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/src/adapters/MemoryAdapter.js +198 -0
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/src/adapters/MongoAdapter.d.ts +97 -0
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/src/adapters/MongoAdapter.js +164 -0
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/src/adapters/OpenSearchAdapter.js +454 -0
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/src/adapters/PrismaAdapter.js +362 -0
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/src/adapters/RedisAdapter.d.ts +71 -0
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/src/adapters/RedisAdapter.js +227 -0
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/src/adapters/SQLiteAdapter.js +308 -0
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.d.ts +17 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +11 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.d.ts +10 -0
- package/dist/src/constants/index.d.ts.map +1 -0
- package/dist/src/constants/index.js +10 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +232 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +737 -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/src/core/PersistenceManager.js +257 -0
- 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 +190 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +32 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +198 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponseModal.d.ts +222 -0
- package/dist/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/src/core/ResponseModal.js +1583 -0
- package/dist/src/core/ResponseModal.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +175 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +545 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +181 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +537 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +159 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/src/core/RoutingEngine.js +957 -0
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +94 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +235 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +170 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +444 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolManager.d.ts +234 -0
- package/dist/src/core/ToolManager.d.ts.map +1 -0
- package/dist/src/core/ToolManager.js +1111 -0
- package/dist/src/core/ToolManager.js.map +1 -0
- package/dist/src/index.d.ts +44 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +37 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/providers/AnthropicProvider.d.ts +43 -0
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/src/providers/AnthropicProvider.js +370 -0
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/src/providers/GeminiProvider.d.ts +58 -0
- package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/src/providers/GeminiProvider.js +485 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/src/providers/OpenAIProvider.d.ts +52 -0
- package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/src/providers/OpenAIProvider.js +388 -0
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/src/providers/OpenRouterProvider.js +402 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.d.ts +13 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +9 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/types/agent.d.ts +181 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +18 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/ai.d.ts +143 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/src/types/ai.js +5 -0
- package/dist/src/types/ai.js.map +1 -0
- package/dist/src/types/history.d.ts +178 -0
- 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 +22 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +12 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/persistence.d.ts +209 -0
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js +6 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +238 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/src/types/route.js +5 -0
- package/dist/src/types/route.js.map +1 -0
- package/dist/src/types/routing.d.ts +16 -0
- package/dist/src/types/routing.d.ts.map +1 -0
- package/dist/src/types/routing.js +2 -0
- package/dist/src/types/routing.js.map +1 -0
- package/dist/src/types/schema.d.ts +22 -0
- package/dist/src/types/schema.d.ts.map +1 -0
- package/dist/src/types/schema.js +2 -0
- package/dist/src/types/schema.js.map +1 -0
- package/dist/src/types/session.d.ts +65 -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 +88 -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/src/types/tool.d.ts +130 -0
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/src/types/tool.js +16 -0
- package/dist/src/types/tool.js.map +1 -0
- 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 +29 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/src/utils/condition.d.ts +38 -0
- package/dist/src/utils/condition.d.ts.map +1 -0
- package/dist/src/utils/condition.js +161 -0
- package/dist/src/utils/condition.js.map +1 -0
- package/dist/src/utils/event.d.ts +6 -0
- package/dist/src/utils/event.d.ts.map +1 -0
- package/dist/src/utils/event.js +17 -0
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +60 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +263 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.d.ts +25 -0
- package/dist/src/utils/id.d.ts.map +1 -0
- package/dist/src/utils/id.js +64 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +15 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +23 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/json.d.ts +16 -0
- package/dist/src/utils/json.d.ts.map +1 -0
- package/dist/src/utils/json.js +43 -0
- package/dist/src/utils/json.js.map +1 -0
- package/dist/src/utils/logger.d.ts +10 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +17 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.d.ts +10 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +71 -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/src/utils/session.js +160 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +155 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +374 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/CONTRIBUTING.md +521 -0
- package/docs/README.md +228 -0
- package/docs/api/README.md +3258 -0
- package/docs/api/overview.md +1134 -0
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/core/agent/README.md +902 -0
- package/docs/core/agent/context-management.md +796 -0
- package/docs/core/agent/session-management.md +641 -0
- package/docs/core/ai-integration/prompt-composition.md +220 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +287 -0
- package/docs/core/conversation-flows/data-collection.md +623 -0
- package/docs/core/conversation-flows/route-dsl.md +502 -0
- package/docs/core/conversation-flows/routes.md +247 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/core/error-handling.md +638 -0
- package/docs/core/persistence/adapters.md +255 -0
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +466 -0
- package/docs/core/tools/tool-definition.md +970 -0
- package/docs/core/tools/tool-scoping.md +819 -0
- package/docs/guides/advanced-patterns/publishing.md +186 -0
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +696 -0
- package/docs/guides/migration/README.md +72 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/response-modal-refactor.md +518 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
- package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
- package/examples/advanced-patterns/streaming-responses.ts +578 -0
- package/examples/ai-providers/anthropic-integration.ts +388 -0
- package/examples/ai-providers/openai-integration.ts +228 -0
- 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 +318 -0
- package/examples/core-concepts/basic-agent.ts +503 -0
- package/examples/core-concepts/modern-streaming-api.ts +309 -0
- package/examples/core-concepts/schema-driven-extraction.ts +332 -0
- package/examples/core-concepts/session-management.ts +494 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +595 -0
- package/examples/integrations/search-integration.ts +530 -0
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/persistence/database-persistence.ts +583 -0
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/persistence/prisma-schema.example.prisma +74 -0
- package/examples/persistence/redis-persistence.ts +488 -0
- package/examples/tools/basic-tools.ts +765 -0
- package/examples/tools/data-enrichment-tools.ts +593 -0
- package/package.json +125 -0
- package/src/adapters/MemoryAdapter.ts +273 -0
- package/src/adapters/MongoAdapter.ts +304 -0
- package/src/adapters/OpenSearchAdapter.ts +670 -0
- package/src/adapters/PostgreSQLAdapter.ts +428 -0
- package/src/adapters/PrismaAdapter.ts +553 -0
- package/src/adapters/RedisAdapter.ts +377 -0
- package/src/adapters/SQLiteAdapter.ts +459 -0
- package/src/adapters/index.ts +43 -0
- package/src/constants/index.ts +10 -0
- package/src/core/Agent.ts +970 -0
- package/src/core/Events.ts +164 -0
- package/src/core/PersistenceManager.ts +353 -0
- package/src/core/PromptComposer.ts +253 -0
- package/src/core/ResponseEngine.ts +306 -0
- package/src/core/ResponseModal.ts +2050 -0
- package/src/core/ResponsePipeline.ts +864 -0
- package/src/core/Route.ts +677 -0
- package/src/core/RoutingEngine.ts +1396 -0
- package/src/core/SessionManager.ts +297 -0
- package/src/core/Step.ts +593 -0
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +155 -0
- package/src/providers/AnthropicProvider.ts +560 -0
- package/src/providers/GeminiProvider.ts +683 -0
- package/src/providers/OpenAIProvider.ts +602 -0
- package/src/providers/OpenRouterProvider.ts +613 -0
- package/src/providers/index.ts +16 -0
- package/src/types/agent.ts +196 -0
- package/src/types/ai.ts +158 -0
- package/src/types/history.ts +206 -0
- package/src/types/index.ts +119 -0
- package/src/types/persistence.ts +251 -0
- package/src/types/route.ts +272 -0
- package/src/types/routing.ts +18 -0
- package/src/types/schema.ts +23 -0
- package/src/types/session.ts +74 -0
- package/src/types/template.ts +104 -0
- package/src/types/tool.ts +174 -0
- package/src/utils/clone.ts +34 -0
- package/src/utils/condition.ts +190 -0
- package/src/utils/event.ts +16 -0
- package/src/utils/history.ts +306 -0
- package/src/utils/id.ts +73 -0
- package/src/utils/index.ts +69 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/logger.ts +19 -0
- package/src/utils/retry.ts +97 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +444 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import type { Event, Term, Guideline, AgentOptions } from "../types";
|
|
2
|
+
import type { Route } from "./Route";
|
|
3
|
+
import { render, renderMany, formatKnowledgeBase, createTemplateContext } from "../utils/template";
|
|
4
|
+
import { TemplateContext } from "../types/template";
|
|
5
|
+
import { extractAIContextStrings, ConditionEvaluator } from "../utils/condition";
|
|
6
|
+
|
|
7
|
+
export class PromptComposer<TContext = unknown, TData = unknown> {
|
|
8
|
+
private parts: string[] = [];
|
|
9
|
+
private renderContext: TemplateContext<TContext, TData>;
|
|
10
|
+
|
|
11
|
+
constructor(context: TemplateContext<TContext, TData> = createTemplateContext({})) {
|
|
12
|
+
this.renderContext = context;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Specific, typed sections tailored to the framework
|
|
16
|
+
|
|
17
|
+
async addAgentMeta(agent: AgentOptions<TContext, TData>): Promise<this> {
|
|
18
|
+
const lines: string[] = [];
|
|
19
|
+
lines.push("## Agent");
|
|
20
|
+
lines.push(`**Name:** ${agent.name}`);
|
|
21
|
+
if (agent.goal) {
|
|
22
|
+
lines.push(`**Goal:** ${agent.goal}`);
|
|
23
|
+
}
|
|
24
|
+
if (agent.description) {
|
|
25
|
+
lines.push(`**Description:** ${agent.description}`);
|
|
26
|
+
}
|
|
27
|
+
if (agent.identity) {
|
|
28
|
+
lines.push(
|
|
29
|
+
`**Identity:** ${await render(agent.identity, this.renderContext)}`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
if (agent.personality) {
|
|
33
|
+
lines.push(
|
|
34
|
+
`**Personality:** ${await render(
|
|
35
|
+
agent.personality,
|
|
36
|
+
this.renderContext
|
|
37
|
+
)}`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
this.parts.push(lines.join("\n"));
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async addRoutingOverview(routes: Route<TContext, TData>[]): Promise<this> {
|
|
45
|
+
return this.addActiveRoutes(routes);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async addScoringRules(): Promise<this> {
|
|
49
|
+
this.parts.push(
|
|
50
|
+
`## Scoring Rules\n\n${[
|
|
51
|
+
"- 90-100: explicit keywords + clear intent",
|
|
52
|
+
"- 70-89: strong contextual evidence + relevant keywords",
|
|
53
|
+
"- 50-69: moderate relevance",
|
|
54
|
+
"- 30-49: weak connection or ambiguous",
|
|
55
|
+
"- 0-29: minimal/none",
|
|
56
|
+
"Return ONLY JSON matching the provided schema. Include scores for ALL routes.",
|
|
57
|
+
].join("\n")}`
|
|
58
|
+
);
|
|
59
|
+
return Promise.resolve(this);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async addInstruction(text: string): Promise<this> {
|
|
63
|
+
if (text) this.parts.push(`## Instruction\n\n${text}`);
|
|
64
|
+
return Promise.resolve(this);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async addInteractionHistory(history: Event[], note?: string): Promise<this> {
|
|
68
|
+
const recent = history
|
|
69
|
+
.slice(-10)
|
|
70
|
+
.map((e) => `- ${JSON.stringify(e)}`)
|
|
71
|
+
.join("\n");
|
|
72
|
+
const header = note ? `${note}\n\n` : "";
|
|
73
|
+
this.parts.push(
|
|
74
|
+
`## Interaction History\n\n${header}Recent conversation events:\n\n${recent}`
|
|
75
|
+
);
|
|
76
|
+
return Promise.resolve(this);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async addLastMessage(message: string): Promise<this> {
|
|
80
|
+
this.parts.push(`## Last Message\n\n${message}`);
|
|
81
|
+
return Promise.resolve(this);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async addGlossary(terms: Term<TContext>[]): Promise<this> {
|
|
85
|
+
if (!terms.length) return this;
|
|
86
|
+
|
|
87
|
+
const renderedTerms = await Promise.all(
|
|
88
|
+
terms.map(async (t) => {
|
|
89
|
+
const name = await render(t.name, this.renderContext);
|
|
90
|
+
const description = await render(t.description, this.renderContext);
|
|
91
|
+
const synonyms = t.synonyms
|
|
92
|
+
? await renderMany(t.synonyms, this.renderContext)
|
|
93
|
+
: [];
|
|
94
|
+
const synonymText =
|
|
95
|
+
synonyms.length > 0 ? ` (synonyms: ${synonyms.join(", ")})` : "";
|
|
96
|
+
return `- **${name}**${synonymText}: ${description}`;
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
this.parts.push(`## Glossary\n\n${renderedTerms.join("\n")}`);
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async addGuidelines(guidelines: Guideline<TContext, TData>[]): Promise<this> {
|
|
105
|
+
const enabled = guidelines.filter((g) => g.enabled !== false);
|
|
106
|
+
if (!enabled.length) return this;
|
|
107
|
+
|
|
108
|
+
const evaluator = new ConditionEvaluator(this.renderContext);
|
|
109
|
+
const activeGuidelines: Guideline<TContext, TData>[] = [];
|
|
110
|
+
const allAIContextStrings: string[] = [];
|
|
111
|
+
|
|
112
|
+
// Evaluate guideline conditions to determine which are active
|
|
113
|
+
for (const guideline of enabled) {
|
|
114
|
+
if (guideline.condition) {
|
|
115
|
+
const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
|
|
116
|
+
|
|
117
|
+
// Collect AI context strings for prompt
|
|
118
|
+
allAIContextStrings.push(...evaluation.aiContextStrings);
|
|
119
|
+
|
|
120
|
+
// Include guideline if:
|
|
121
|
+
// 1. No programmatic conditions (only strings) - always active
|
|
122
|
+
// 2. Programmatic conditions evaluate to true
|
|
123
|
+
if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
|
|
124
|
+
activeGuidelines.push(guideline);
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
// No condition means always active
|
|
128
|
+
activeGuidelines.push(guideline);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (!activeGuidelines.length && !allAIContextStrings.length) return this;
|
|
133
|
+
|
|
134
|
+
const renderedGuidelines = await Promise.all(
|
|
135
|
+
activeGuidelines.map(async (g, i) => {
|
|
136
|
+
const action = await render(g.action, this.renderContext);
|
|
137
|
+
if (g.condition) {
|
|
138
|
+
// Use AI context strings if available, otherwise render the condition
|
|
139
|
+
const conditionStrings = extractAIContextStrings(g.condition);
|
|
140
|
+
if (conditionStrings.length > 0) {
|
|
141
|
+
const conditionText = conditionStrings.join(" AND ");
|
|
142
|
+
return `- Guideline #${i + 1}: When ${conditionText}, then ${action}`;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return `- Guideline #${i + 1}: ${action}`;
|
|
146
|
+
})
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
// Add any additional AI context from inactive guidelines
|
|
150
|
+
if (allAIContextStrings.length > 0) {
|
|
151
|
+
const uniqueContextStrings = Array.from(new Set(allAIContextStrings));
|
|
152
|
+
const contextSection = `\n\n**Additional Context:** ${uniqueContextStrings.join(", ")}`;
|
|
153
|
+
this.parts.push(`## Guidelines\n\n${renderedGuidelines.join("\n")}${contextSection}`);
|
|
154
|
+
} else {
|
|
155
|
+
this.parts.push(`## Guidelines\n\n${renderedGuidelines.join("\n")}`);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return this;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async addKnowledgeBase(
|
|
162
|
+
agentKnowledgeBase?: Record<string, unknown>,
|
|
163
|
+
routeKnowledgeBase?: Record<string, unknown>
|
|
164
|
+
): Promise<this> {
|
|
165
|
+
// Merge agent and route knowledge bases (route takes precedence for conflicts)
|
|
166
|
+
const mergedKnowledge = {
|
|
167
|
+
...(agentKnowledgeBase || {}),
|
|
168
|
+
...(routeKnowledgeBase || {}),
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
// Only add section if there's knowledge data
|
|
172
|
+
if (Object.keys(mergedKnowledge).length > 0) {
|
|
173
|
+
const formatted = formatKnowledgeBase(mergedKnowledge, "Knowledge Base");
|
|
174
|
+
this.parts.push(formatted);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return Promise.resolve(this);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async addActiveRoutes(routes: Route<TContext, TData>[]): Promise<this> {
|
|
181
|
+
if (!routes.length) return this;
|
|
182
|
+
|
|
183
|
+
const renderedRoutes = await Promise.all(
|
|
184
|
+
routes.map(async (r, i) => {
|
|
185
|
+
const whenContextStrings = r.when ? extractAIContextStrings(r.when) : [];
|
|
186
|
+
const conditions =
|
|
187
|
+
whenContextStrings.length > 0
|
|
188
|
+
? `\n\n **Triggered when:** ${whenContextStrings.join(" OR ")}`
|
|
189
|
+
: "";
|
|
190
|
+
const desc = r.description
|
|
191
|
+
? `\n\n **Description:** ${r.description}`
|
|
192
|
+
: "";
|
|
193
|
+
const rules = await renderMany(r.getRules(), this.renderContext);
|
|
194
|
+
const prohibitions = await renderMany(
|
|
195
|
+
r.getProhibitions(),
|
|
196
|
+
this.renderContext
|
|
197
|
+
);
|
|
198
|
+
const rulesInfo =
|
|
199
|
+
rules.length > 0
|
|
200
|
+
? `\n\n **Rules:**\n ${rules.map((x) => ` - ${x}`).join("\n ")}`
|
|
201
|
+
: "";
|
|
202
|
+
const prohibitionsInfo =
|
|
203
|
+
prohibitions.length > 0
|
|
204
|
+
? `\n\n **Prohibitions:**\n ${prohibitions
|
|
205
|
+
.map((x) => ` - ${x}`)
|
|
206
|
+
.join("\n ")}`
|
|
207
|
+
: "";
|
|
208
|
+
return `### Route ${i + 1}: ${r.title
|
|
209
|
+
}${desc}${conditions}${rulesInfo}${prohibitionsInfo}`;
|
|
210
|
+
})
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
this.parts.push(`## Available Routes\n\n${renderedRoutes.join("\n\n")}`);
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
async addDirectives(directives?: string[]): Promise<this> {
|
|
218
|
+
if (!directives?.length) return this;
|
|
219
|
+
this.parts.push(
|
|
220
|
+
`## Directives\n\nAddress concisely:\n\n${directives
|
|
221
|
+
.map((d) => `- ${d}`)
|
|
222
|
+
.join("\n")}`
|
|
223
|
+
);
|
|
224
|
+
return Promise.resolve(this);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
async addAvailableTools(
|
|
228
|
+
tools?: Array<{
|
|
229
|
+
id: string;
|
|
230
|
+
name?: string;
|
|
231
|
+
description?: string;
|
|
232
|
+
parameters?: unknown;
|
|
233
|
+
}>
|
|
234
|
+
): Promise<this> {
|
|
235
|
+
if (!tools?.length) return this;
|
|
236
|
+
|
|
237
|
+
const renderedTools = tools.map((tool, i) => {
|
|
238
|
+
const toolName = tool.name || tool.id;
|
|
239
|
+
const desc = tool.description
|
|
240
|
+
? `\n Description: ${tool.description}`
|
|
241
|
+
: "";
|
|
242
|
+
return `### Tool ${i + 1}: ${toolName}${desc}`;
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
this.parts.push(`## Available Tools\n\n${renderedTools.join("\n\n")}`);
|
|
246
|
+
return Promise.resolve(this);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
async build(): Promise<string> {
|
|
250
|
+
const prompt = this.parts.filter(Boolean).join("\n\n").trim();
|
|
251
|
+
return Promise.resolve(prompt);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Event,
|
|
3
|
+
StructuredSchema,
|
|
4
|
+
SessionState,
|
|
5
|
+
AgentOptions,
|
|
6
|
+
Guideline,
|
|
7
|
+
Term,
|
|
8
|
+
Template,
|
|
9
|
+
} from "../types";
|
|
10
|
+
import type { Route } from "./Route";
|
|
11
|
+
import type { Step } from "./Step";
|
|
12
|
+
import { PromptComposer } from "./PromptComposer";
|
|
13
|
+
import { createTemplateContext, render } from "../utils/template";
|
|
14
|
+
|
|
15
|
+
export interface BuildResponsePromptParams<
|
|
16
|
+
TContext = unknown,
|
|
17
|
+
TData = unknown
|
|
18
|
+
> {
|
|
19
|
+
route: Route<TContext, TData>;
|
|
20
|
+
currentStep: Step<TContext, TData>;
|
|
21
|
+
rules: Template<TContext, TData>[];
|
|
22
|
+
prohibitions: Template<TContext, TData>[];
|
|
23
|
+
directives: string[] | undefined;
|
|
24
|
+
history: Event[];
|
|
25
|
+
lastMessage: string;
|
|
26
|
+
agentOptions?: AgentOptions<TContext, TData>;
|
|
27
|
+
// Combined properties from agent and route
|
|
28
|
+
combinedGuidelines?: Guideline<TContext, TData>[];
|
|
29
|
+
combinedTerms?: Term<TContext, TData>[];
|
|
30
|
+
context?: TContext;
|
|
31
|
+
session?: SessionState<TData>;
|
|
32
|
+
// NEW: Agent-level schema for data validation
|
|
33
|
+
agentSchema?: StructuredSchema;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface BuildFallbackPromptParams<TContext = unknown, TData = unknown> {
|
|
37
|
+
history: Event[];
|
|
38
|
+
agentOptions: AgentOptions<TContext, TData>;
|
|
39
|
+
terms: Term<TContext, TData>[];
|
|
40
|
+
guidelines: Guideline<TContext, TData>[];
|
|
41
|
+
context?: TContext;
|
|
42
|
+
session?: SessionState<TData>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class ResponseEngine<TContext = unknown, TData = unknown> {
|
|
46
|
+
responseSchemaForRoute(
|
|
47
|
+
route: Route<TContext, TData>,
|
|
48
|
+
currentStep?: Step<TContext, TData>,
|
|
49
|
+
agentSchema?: StructuredSchema
|
|
50
|
+
): StructuredSchema {
|
|
51
|
+
const base: StructuredSchema = {
|
|
52
|
+
type: "object",
|
|
53
|
+
properties: {
|
|
54
|
+
message: { type: "string", description: "Final user-facing message" },
|
|
55
|
+
},
|
|
56
|
+
required: ["message"],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// Add data field only if route has responseOutputSchema
|
|
61
|
+
if (route.responseOutputSchema) {
|
|
62
|
+
base.properties!.data = route.responseOutputSchema;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Add collect fields from current step using agent-level schema
|
|
66
|
+
if (currentStep?.collect && agentSchema?.properties) {
|
|
67
|
+
for (const field of currentStep.collect) {
|
|
68
|
+
const fieldSchema = agentSchema.properties[field as string];
|
|
69
|
+
if (fieldSchema) {
|
|
70
|
+
base.properties![field as string] = fieldSchema;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return base;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async buildResponsePrompt(
|
|
79
|
+
params: BuildResponsePromptParams<TContext, TData>
|
|
80
|
+
): Promise<string> {
|
|
81
|
+
const {
|
|
82
|
+
route,
|
|
83
|
+
currentStep,
|
|
84
|
+
rules,
|
|
85
|
+
prohibitions,
|
|
86
|
+
directives,
|
|
87
|
+
history,
|
|
88
|
+
lastMessage,
|
|
89
|
+
agentOptions,
|
|
90
|
+
combinedGuidelines,
|
|
91
|
+
combinedTerms,
|
|
92
|
+
context,
|
|
93
|
+
session,
|
|
94
|
+
agentSchema,
|
|
95
|
+
} = params;
|
|
96
|
+
const templateContext = createTemplateContext({ context, session, history });
|
|
97
|
+
const pc = new PromptComposer(templateContext);
|
|
98
|
+
|
|
99
|
+
// Create combined agent options with route overrides
|
|
100
|
+
let effectiveAgentOptions = agentOptions;
|
|
101
|
+
if (agentOptions && (route.identity || route.personality)) {
|
|
102
|
+
// Route identity and personality override agent versions
|
|
103
|
+
effectiveAgentOptions = {
|
|
104
|
+
...agentOptions,
|
|
105
|
+
...(route.identity && { identity: route.identity }),
|
|
106
|
+
...(route.personality && { personality: route.personality }),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (effectiveAgentOptions) {
|
|
111
|
+
await pc.addAgentMeta(effectiveAgentOptions);
|
|
112
|
+
}
|
|
113
|
+
await pc.addInstruction(
|
|
114
|
+
`Route: ${route.title}${route.description ? ` — ${route.description}` : ""
|
|
115
|
+
}`
|
|
116
|
+
);
|
|
117
|
+
if (currentStep.prompt) {
|
|
118
|
+
await pc.addInstruction(
|
|
119
|
+
`Guideline for your response (adapt to the conversation):\n${await render(
|
|
120
|
+
currentStep.prompt,
|
|
121
|
+
templateContext
|
|
122
|
+
)}`
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
if (rules.length)
|
|
126
|
+
await pc.addInstruction(`Rules:\n- ${rules.join("\n- ")}`);
|
|
127
|
+
if (prohibitions.length)
|
|
128
|
+
await pc.addInstruction(`Prohibitions:\n- ${prohibitions.join("\n- ")}`);
|
|
129
|
+
await pc.addDirectives(directives);
|
|
130
|
+
await pc.addKnowledgeBase(
|
|
131
|
+
agentOptions?.knowledgeBase,
|
|
132
|
+
route.getKnowledgeBase()
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
// Add combined guidelines (agent + route)
|
|
136
|
+
if (combinedGuidelines && combinedGuidelines.length > 0) {
|
|
137
|
+
await pc.addGuidelines(combinedGuidelines);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Add combined terms (agent + route)
|
|
141
|
+
if (combinedTerms && combinedTerms.length > 0) {
|
|
142
|
+
await pc.addGlossary(combinedTerms);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
await pc.addInteractionHistory(history);
|
|
146
|
+
await pc.addLastMessage(lastMessage);
|
|
147
|
+
|
|
148
|
+
// Add data collection instructions - include ALL route fields, not just current step
|
|
149
|
+
if (agentSchema?.properties) {
|
|
150
|
+
// Collect all fields from route's required and optional fields
|
|
151
|
+
const allRouteFields = new Set<string>();
|
|
152
|
+
|
|
153
|
+
// Add route required fields
|
|
154
|
+
if (route.requiredFields) {
|
|
155
|
+
route.requiredFields.forEach(field => allRouteFields.add(String(field)));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Add route optional fields
|
|
159
|
+
if (route.optionalFields) {
|
|
160
|
+
route.optionalFields.forEach(field => allRouteFields.add(String(field)));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Add current step's collect fields (in case they're not in route fields)
|
|
164
|
+
if (currentStep?.collect) {
|
|
165
|
+
currentStep.collect.forEach(field => allRouteFields.add(String(field)));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (allRouteFields.size > 0) {
|
|
169
|
+
const stepCollectFields = new Set(currentStep?.collect?.map(f => String(f)) || []);
|
|
170
|
+
const fieldDescriptions: string[] = [];
|
|
171
|
+
|
|
172
|
+
for (const field of allRouteFields) {
|
|
173
|
+
const fieldSchema = agentSchema.properties[field];
|
|
174
|
+
if (fieldSchema) {
|
|
175
|
+
const fieldName = field;
|
|
176
|
+
const fieldDesc = fieldSchema.description || fieldName;
|
|
177
|
+
const fieldType = Array.isArray(fieldSchema.type) ? fieldSchema.type[0] : fieldSchema.type;
|
|
178
|
+
|
|
179
|
+
let fieldInfo = ` • ${fieldName} (${fieldType})`;
|
|
180
|
+
|
|
181
|
+
// Add enum values if present
|
|
182
|
+
if (fieldSchema.enum && Array.isArray(fieldSchema.enum)) {
|
|
183
|
+
fieldInfo += ` [${fieldSchema.enum.join(' | ')}]`;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Add description
|
|
187
|
+
fieldInfo += `: ${fieldDesc}`;
|
|
188
|
+
|
|
189
|
+
// Mark if this is the current step's focus
|
|
190
|
+
if (stepCollectFields.has(field)) {
|
|
191
|
+
fieldInfo += ` ← FOCUS FOR THIS STEP`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
fieldDescriptions.push(fieldInfo);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (fieldDescriptions.length > 0) {
|
|
199
|
+
const instruction = [
|
|
200
|
+
`## Data Collection Rules`,
|
|
201
|
+
``,
|
|
202
|
+
`CRITICAL: You MUST extract ALL relevant information from the user's message, not just what this step asks for.`,
|
|
203
|
+
``,
|
|
204
|
+
`Available fields to extract:`,
|
|
205
|
+
...fieldDescriptions,
|
|
206
|
+
``,
|
|
207
|
+
`**How to collect data:**`,
|
|
208
|
+
`1. Read the user's message carefully`,
|
|
209
|
+
`2. Extract EVERY piece of information that matches ANY field above`,
|
|
210
|
+
`3. Users often provide multiple details at once (e.g., "I need a checkup next Tuesday at 2 PM")`,
|
|
211
|
+
`4. Include ALL extracted fields in your JSON response as top-level properties`,
|
|
212
|
+
`5. Field names must match EXACTLY as shown above`,
|
|
213
|
+
`6. Only include fields that the user actually mentioned`,
|
|
214
|
+
``,
|
|
215
|
+
`**Example:** If user says "I need a checkup next Tuesday at 2 PM", extract:`,
|
|
216
|
+
`- appointmentType: "checkup"`,
|
|
217
|
+
`- preferredDate: "next Tuesday"`,
|
|
218
|
+
`- preferredTime: "2 PM"`,
|
|
219
|
+
].join('\n');
|
|
220
|
+
|
|
221
|
+
await pc.addInstruction(instruction);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Add response format instructions with explicit JSON structure
|
|
227
|
+
// Generate example JSON based on actual schema fields
|
|
228
|
+
const exampleFields: string[] = [' "message": "your response to the user"'];
|
|
229
|
+
|
|
230
|
+
if (agentSchema?.properties) {
|
|
231
|
+
// Collect all fields from route's required and optional fields
|
|
232
|
+
const allRouteFields = new Set<string>();
|
|
233
|
+
|
|
234
|
+
if (route.requiredFields) {
|
|
235
|
+
route.requiredFields.forEach(field => allRouteFields.add(String(field)));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (route.optionalFields) {
|
|
239
|
+
route.optionalFields.forEach(field => allRouteFields.add(String(field)));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (currentStep?.collect) {
|
|
243
|
+
currentStep.collect.forEach(field => allRouteFields.add(String(field)));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Generate example values for each field
|
|
247
|
+
for (const field of allRouteFields) {
|
|
248
|
+
const fieldSchema = agentSchema.properties[field];
|
|
249
|
+
if (fieldSchema) {
|
|
250
|
+
const fieldType = Array.isArray(fieldSchema.type) ? fieldSchema.type[0] : fieldSchema.type;
|
|
251
|
+
let exampleValue = '"value if extracted"';
|
|
252
|
+
|
|
253
|
+
// Generate type-appropriate example
|
|
254
|
+
if (fieldSchema.enum && Array.isArray(fieldSchema.enum) && fieldSchema.enum.length > 0) {
|
|
255
|
+
exampleValue = `"${fieldSchema.enum[0]}"`;
|
|
256
|
+
} else if (fieldType === 'string') {
|
|
257
|
+
exampleValue = '"extracted value"';
|
|
258
|
+
} else if (fieldType === 'number' || fieldType === 'integer') {
|
|
259
|
+
exampleValue = '0';
|
|
260
|
+
} else if (fieldType === 'boolean') {
|
|
261
|
+
exampleValue = 'true';
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
exampleFields.push(` "${field}": ${exampleValue}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
await pc.addInstruction(
|
|
270
|
+
[
|
|
271
|
+
`## Response Format`,
|
|
272
|
+
``,
|
|
273
|
+
`You MUST return ONLY valid JSON in this exact format:`,
|
|
274
|
+
`{`,
|
|
275
|
+
...exampleFields.map((f, i) => i < exampleFields.length - 1 ? `${f},` : f),
|
|
276
|
+
`}`,
|
|
277
|
+
``,
|
|
278
|
+
`CRITICAL RULES:`,
|
|
279
|
+
`- Return ONLY the JSON object, no other text`,
|
|
280
|
+
`- The "message" field is REQUIRED and must contain your response to the user`,
|
|
281
|
+
`- Include ALL extracted data fields as top-level properties`,
|
|
282
|
+
`- Only include data fields that were actually mentioned by the user`,
|
|
283
|
+
`- Do not wrap the JSON in markdown code blocks`,
|
|
284
|
+
`- Do not add any explanatory text before or after the JSON`,
|
|
285
|
+
].join('\n')
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
return pc.build();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
async buildFallbackPrompt(
|
|
292
|
+
params: BuildFallbackPromptParams<TContext, TData>
|
|
293
|
+
): Promise<string> {
|
|
294
|
+
const { history, agentOptions, terms, guidelines, context, session } =
|
|
295
|
+
params;
|
|
296
|
+
const templateContext = createTemplateContext({ context, session, history });
|
|
297
|
+
const pc = new PromptComposer(templateContext);
|
|
298
|
+
|
|
299
|
+
await pc.addAgentMeta(agentOptions);
|
|
300
|
+
await pc.addInteractionHistory(history);
|
|
301
|
+
await pc.addGlossary(terms);
|
|
302
|
+
await pc.addGuidelines(guidelines);
|
|
303
|
+
await pc.addKnowledgeBase(agentOptions.knowledgeBase);
|
|
304
|
+
return pc.build();
|
|
305
|
+
}
|
|
306
|
+
}
|