@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,204 @@
|
|
|
1
|
+
import { cloneDeep } from "./clone";
|
|
2
|
+
import type { SessionState } from "../types/session";
|
|
3
|
+
import type { CollectedStateData } from "../types/persistence";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Helper to create a new session
|
|
7
|
+
* @param sessionId - Optional session ID (e.g., from database)
|
|
8
|
+
* @param metadata - Optional metadata to attach
|
|
9
|
+
*/
|
|
10
|
+
export function createSession<TData = Record<string, unknown>>(
|
|
11
|
+
sessionId?: string,
|
|
12
|
+
metadata?: SessionState<TData>["metadata"]
|
|
13
|
+
): SessionState<TData> {
|
|
14
|
+
const id =
|
|
15
|
+
sessionId || `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
id,
|
|
19
|
+
data: {} as Partial<TData>, // Agent-level data structure
|
|
20
|
+
routeHistory: [],
|
|
21
|
+
metadata: {
|
|
22
|
+
...metadata,
|
|
23
|
+
createdAt: new Date(),
|
|
24
|
+
lastUpdatedAt: new Date(),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Helper to create a new session ID
|
|
31
|
+
*/
|
|
32
|
+
export function createSessionId(): string {
|
|
33
|
+
return `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Clones a session to prevent mutation
|
|
37
|
+
*/
|
|
38
|
+
export function cloneSession<TData>(
|
|
39
|
+
session: SessionState<TData>
|
|
40
|
+
): SessionState<TData> {
|
|
41
|
+
return cloneDeep(session);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Helper to update session with new route
|
|
46
|
+
* With agent-level data, routes share the same data structure
|
|
47
|
+
*/
|
|
48
|
+
export function enterRoute<TData = Record<string, unknown>>(
|
|
49
|
+
session: SessionState<TData>,
|
|
50
|
+
routeId: string,
|
|
51
|
+
routeTitle: string
|
|
52
|
+
): SessionState<TData> {
|
|
53
|
+
// Exit current route if exists
|
|
54
|
+
const routeHistory = [...(session.routeHistory || [])];
|
|
55
|
+
if (session.currentRoute) {
|
|
56
|
+
const lastRouteIndex = routeHistory.findIndex(
|
|
57
|
+
(r) => r.routeId === session.currentRoute?.id && !r.exitedAt
|
|
58
|
+
);
|
|
59
|
+
if (lastRouteIndex >= 0) {
|
|
60
|
+
routeHistory[lastRouteIndex].exitedAt = new Date();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Enter new route - data persists across routes at agent level
|
|
65
|
+
const now = new Date();
|
|
66
|
+
return {
|
|
67
|
+
...session,
|
|
68
|
+
currentRoute: {
|
|
69
|
+
id: routeId,
|
|
70
|
+
title: routeTitle,
|
|
71
|
+
enteredAt: now,
|
|
72
|
+
},
|
|
73
|
+
currentStep: undefined,
|
|
74
|
+
// data remains the same - shared across all routes
|
|
75
|
+
routeHistory: [
|
|
76
|
+
...routeHistory,
|
|
77
|
+
{
|
|
78
|
+
routeId,
|
|
79
|
+
enteredAt: now,
|
|
80
|
+
completed: false,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
metadata: {
|
|
84
|
+
...session.metadata,
|
|
85
|
+
lastUpdatedAt: now,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Helper to update session with new step
|
|
92
|
+
*/
|
|
93
|
+
export function enterStep<TData = Record<string, unknown>>(
|
|
94
|
+
session: SessionState<TData>,
|
|
95
|
+
stepId: string,
|
|
96
|
+
stepDescription?: string
|
|
97
|
+
): SessionState<TData> {
|
|
98
|
+
return {
|
|
99
|
+
...session,
|
|
100
|
+
currentStep: {
|
|
101
|
+
id: stepId,
|
|
102
|
+
description: stepDescription,
|
|
103
|
+
enteredAt: new Date(),
|
|
104
|
+
},
|
|
105
|
+
metadata: {
|
|
106
|
+
...session.metadata,
|
|
107
|
+
lastUpdatedAt: new Date(),
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Helper to merge collected data into session
|
|
114
|
+
* Updates agent-level data structure
|
|
115
|
+
*/
|
|
116
|
+
export function mergeCollected<TData = Record<string, unknown>>(
|
|
117
|
+
session: SessionState<TData>,
|
|
118
|
+
data: Partial<unknown>
|
|
119
|
+
): SessionState<TData> {
|
|
120
|
+
const newCollected = {
|
|
121
|
+
...session.data,
|
|
122
|
+
...data,
|
|
123
|
+
} as Partial<TData>;
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
...session,
|
|
127
|
+
data: newCollected, // Agent-level data update
|
|
128
|
+
metadata: {
|
|
129
|
+
...session.metadata,
|
|
130
|
+
lastUpdatedAt: new Date(),
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Helper to convert SessionState to persistence-friendly format
|
|
137
|
+
* Used when saving to database
|
|
138
|
+
*/
|
|
139
|
+
export function sessionStepToData<TData = Record<string, unknown>>(
|
|
140
|
+
session: SessionState<TData>
|
|
141
|
+
): {
|
|
142
|
+
currentRoute?: string;
|
|
143
|
+
currentStep?: string;
|
|
144
|
+
collectedData: CollectedStateData<TData>;
|
|
145
|
+
} {
|
|
146
|
+
return {
|
|
147
|
+
currentRoute: session.currentRoute?.id,
|
|
148
|
+
currentStep: session.currentStep?.id,
|
|
149
|
+
collectedData: {
|
|
150
|
+
data: session.data || {},
|
|
151
|
+
routeHistory: session.routeHistory,
|
|
152
|
+
history: session.history, // Include conversation history
|
|
153
|
+
currentRouteTitle: session.currentRoute?.title,
|
|
154
|
+
currentStepDescription: session.currentStep?.description,
|
|
155
|
+
metadata: session.metadata,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Helper to convert database SessionData back to SessionState
|
|
162
|
+
* Used when loading from database
|
|
163
|
+
* @param sessionId - The database session ID
|
|
164
|
+
* @param data - The database session data
|
|
165
|
+
*/
|
|
166
|
+
export function sessionDataToStep<TData = Record<string, unknown>>(
|
|
167
|
+
sessionId: string,
|
|
168
|
+
data: {
|
|
169
|
+
currentRoute?: string;
|
|
170
|
+
currentStep?: string;
|
|
171
|
+
collectedData?: CollectedStateData<TData>;
|
|
172
|
+
}
|
|
173
|
+
): SessionState<TData> {
|
|
174
|
+
const collectedData: CollectedStateData<TData> = data.collectedData || {
|
|
175
|
+
data: {},
|
|
176
|
+
routeHistory: [],
|
|
177
|
+
history: [],
|
|
178
|
+
metadata: {},
|
|
179
|
+
currentRouteTitle: undefined,
|
|
180
|
+
currentStepDescription: undefined,
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
return {
|
|
184
|
+
id: sessionId,
|
|
185
|
+
currentRoute: data.currentRoute
|
|
186
|
+
? {
|
|
187
|
+
id: data.currentRoute,
|
|
188
|
+
title: collectedData.currentRouteTitle || data.currentRoute,
|
|
189
|
+
enteredAt: new Date(),
|
|
190
|
+
}
|
|
191
|
+
: undefined,
|
|
192
|
+
currentStep: data.currentStep
|
|
193
|
+
? {
|
|
194
|
+
id: data.currentStep,
|
|
195
|
+
description: collectedData.currentStepDescription || undefined,
|
|
196
|
+
enteredAt: new Date(),
|
|
197
|
+
}
|
|
198
|
+
: undefined,
|
|
199
|
+
data: collectedData.data || {},
|
|
200
|
+
routeHistory: collectedData.routeHistory || [],
|
|
201
|
+
history: collectedData.history || [],
|
|
202
|
+
metadata: collectedData.metadata || {},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import type { Template, TemplateContext } from "../types";
|
|
2
|
+
import type { Event, MessageEventData } from "../types/history";
|
|
3
|
+
import { MessageRole, EventKind } from "../types/history";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Renders a template, which can be a string or a function, using the provided context.
|
|
7
|
+
* This function is asynchronous to support template functions that perform async operations.
|
|
8
|
+
*
|
|
9
|
+
* @param template - The template to render (string or function).
|
|
10
|
+
* @param params - The context object to pass to the template function.
|
|
11
|
+
* @returns A promise that resolves to the rendered string.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // With a string template
|
|
16
|
+
* const result1 = await render("Hello {{name}}", { context: { name: "Alice" } });
|
|
17
|
+
* // Result: "Hello Alice"
|
|
18
|
+
*
|
|
19
|
+
* // With a function template
|
|
20
|
+
* const fnTemplate = ({ context }) => `Hello ${context.name}`;
|
|
21
|
+
* const result2 = await render(fnTemplate, { context: { name: "Bob" } });
|
|
22
|
+
* // Result: "Hello Bob"
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export async function render<TContext = unknown, TData = unknown>(
|
|
26
|
+
template: Template<TContext, TData> | undefined,
|
|
27
|
+
params: TemplateContext<TContext, TData>
|
|
28
|
+
): Promise<string> {
|
|
29
|
+
if (typeof template === "function") {
|
|
30
|
+
// Execute the function and await the result if it's a promise
|
|
31
|
+
const result = await Promise.resolve(template(params));
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (typeof template === "string") {
|
|
36
|
+
// Fallback to the old renderTemplate logic for string-based templates
|
|
37
|
+
return renderTemplate(template, params.context as Record<string, unknown>);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Return empty string if template is undefined or not a supported type
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Renders an array of templates.
|
|
46
|
+
*
|
|
47
|
+
* @param templates - An array of templates to render.
|
|
48
|
+
* @param params - The context object.
|
|
49
|
+
* @returns A promise that resolves to an array of rendered strings.
|
|
50
|
+
*/
|
|
51
|
+
export async function renderMany<TContext = unknown, TData = unknown>(
|
|
52
|
+
templates: Template<TContext, TData>[] | undefined,
|
|
53
|
+
params: TemplateContext<TContext, TData>
|
|
54
|
+
): Promise<string[]> {
|
|
55
|
+
if (!templates) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
return Promise.all(templates.map((t) => render(t, params)));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated Use the asynchronous `render` function instead.
|
|
63
|
+
* Renders template variables in a string using the provided context.
|
|
64
|
+
* Supports {{variable}} and {{object.property}} syntax for property access.
|
|
65
|
+
*
|
|
66
|
+
* @param template - The template string containing {{variable}} placeholders
|
|
67
|
+
* @param context - The context object to pull values from
|
|
68
|
+
* @returns The rendered string with variables replaced
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const template = "Hello {{user.name}}, welcome to {{company.name}}!";
|
|
73
|
+
* const context = {
|
|
74
|
+
* user: { name: "Alice", age: 30 },
|
|
75
|
+
* company: { name: "Acme Corp", location: "NYC" }
|
|
76
|
+
* };
|
|
77
|
+
* const result = renderTemplate(template, context);
|
|
78
|
+
* // Result: "Hello Alice, welcome to Acme Corp!"
|
|
79
|
+
*
|
|
80
|
+
* // Array handling
|
|
81
|
+
* const template2 = "Items: {{items}}";
|
|
82
|
+
* const context2 = { items: ["apple", "banana", "cherry"] };
|
|
83
|
+
* const result2 = renderTemplate(template2, context2);
|
|
84
|
+
* // Result: "Items: apple, banana, cherry"
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export function renderTemplate(
|
|
88
|
+
template: string,
|
|
89
|
+
context: Record<string, unknown> | undefined
|
|
90
|
+
): string {
|
|
91
|
+
if (!template || !context) {
|
|
92
|
+
return template;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return template.replace(
|
|
96
|
+
/\{\{([^}]+)\}\}/g,
|
|
97
|
+
(match: string, path: string): string => {
|
|
98
|
+
const value = getValueByPath(context, path.trim());
|
|
99
|
+
if (value === undefined || value === null) {
|
|
100
|
+
return match; // Keep the original placeholder if value not found
|
|
101
|
+
}
|
|
102
|
+
return valueToString(value);
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Gets a value from an object using dot notation path.
|
|
109
|
+
* Supports nested property access like "user.name" or "user.address.city".
|
|
110
|
+
*
|
|
111
|
+
* @param obj - The object to search in
|
|
112
|
+
* @param path - The dot-separated path to the property
|
|
113
|
+
* @returns The value at the path, or undefined if not found
|
|
114
|
+
*/
|
|
115
|
+
function getValueByPath(obj: Record<string, unknown>, path: string): unknown {
|
|
116
|
+
const keys = path.split(".");
|
|
117
|
+
let current: unknown = obj;
|
|
118
|
+
|
|
119
|
+
for (const key of keys) {
|
|
120
|
+
if (
|
|
121
|
+
current === null ||
|
|
122
|
+
current === undefined ||
|
|
123
|
+
typeof current !== "object"
|
|
124
|
+
) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
current = (current as Record<string, unknown>)[key];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return current;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Converts a value to its string representation for template rendering.
|
|
135
|
+
* Handles different types appropriately.
|
|
136
|
+
*
|
|
137
|
+
* @param value - The value to convert to string
|
|
138
|
+
* @returns String representation of the value
|
|
139
|
+
*/
|
|
140
|
+
function valueToString(value: unknown): string {
|
|
141
|
+
if (value === null || value === undefined) {
|
|
142
|
+
return "";
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (typeof value === "string") {
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
150
|
+
return String(value);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (Array.isArray(value)) {
|
|
154
|
+
// For arrays, join with commas by default
|
|
155
|
+
// Users can override this by using JSON.stringify in their templates if needed
|
|
156
|
+
return value.map((item) => valueToString(item)).join(", ");
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (typeof value === "object") {
|
|
160
|
+
// For objects, convert to JSON string
|
|
161
|
+
// This provides a readable representation while being safe
|
|
162
|
+
try {
|
|
163
|
+
return JSON.stringify(value);
|
|
164
|
+
} catch {
|
|
165
|
+
return "[object Object]";
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Fallback for any other type
|
|
170
|
+
return JSON.stringify(value);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* @deprecated This function does not support async template functions.
|
|
175
|
+
* Renders template variables in an object recursively.
|
|
176
|
+
* Handles nested objects and arrays.
|
|
177
|
+
*
|
|
178
|
+
* @param obj - The object to render templates in
|
|
179
|
+
* @param context - The context object to pull values from
|
|
180
|
+
* @returns The object with all string templates rendered
|
|
181
|
+
*/
|
|
182
|
+
export function renderTemplateObject(
|
|
183
|
+
obj: unknown,
|
|
184
|
+
context: Record<string, unknown> | undefined
|
|
185
|
+
): unknown {
|
|
186
|
+
if (obj === null || obj === undefined) {
|
|
187
|
+
return obj;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (typeof obj === "string") {
|
|
191
|
+
return renderTemplate(obj, context);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (Array.isArray(obj)) {
|
|
195
|
+
return obj.map((item) => renderTemplateObject(item, context));
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (typeof obj === "object") {
|
|
199
|
+
const result: Record<string, unknown> = {};
|
|
200
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
201
|
+
result[key] = renderTemplateObject(value, context);
|
|
202
|
+
}
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return obj;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Creates helper functions for working with history and context in templates.
|
|
211
|
+
* These helpers make it easier to access message content and perform common operations.
|
|
212
|
+
*
|
|
213
|
+
* @param history - The event history array
|
|
214
|
+
* @returns Object containing helper functions
|
|
215
|
+
*/
|
|
216
|
+
export function createTemplateHelpers(history?: Event[]) {
|
|
217
|
+
const helpers = {
|
|
218
|
+
/**
|
|
219
|
+
* Get the last message from history, optionally filtered by role.
|
|
220
|
+
* @param role - Optional role to filter by (user, assistant, etc.)
|
|
221
|
+
* @returns The message content or undefined if not found
|
|
222
|
+
*/
|
|
223
|
+
getLastMessage(role?: MessageRole): string | undefined {
|
|
224
|
+
if (!history || history.length === 0) return undefined;
|
|
225
|
+
|
|
226
|
+
// Search backwards through history for the most recent message
|
|
227
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
228
|
+
const event = history[i];
|
|
229
|
+
if (event.kind === EventKind.MESSAGE) {
|
|
230
|
+
// If no role specified, return the first message found
|
|
231
|
+
if (!role || event.source === role) {
|
|
232
|
+
const messageData = event.data as MessageEventData;
|
|
233
|
+
return messageData.message;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return undefined;
|
|
238
|
+
},
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Get the last user message from history.
|
|
242
|
+
* @returns The user message content or undefined if not found
|
|
243
|
+
*/
|
|
244
|
+
getLastUserMessage(): string | undefined {
|
|
245
|
+
return helpers.getLastMessage(MessageRole.USER);
|
|
246
|
+
},
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Get the last assistant message from history.
|
|
250
|
+
* @returns The assistant message content or undefined if not found
|
|
251
|
+
*/
|
|
252
|
+
getLastAssistantMessage(): string | undefined {
|
|
253
|
+
return helpers.getLastMessage(MessageRole.ASSISTANT);
|
|
254
|
+
},
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Get all messages from history, optionally filtered by role.
|
|
258
|
+
* @param role - Optional role to filter by
|
|
259
|
+
* @returns Array of message contents
|
|
260
|
+
*/
|
|
261
|
+
getMessages(role?: MessageRole): string[] {
|
|
262
|
+
if (!history || history.length === 0) return [];
|
|
263
|
+
|
|
264
|
+
const messages: string[] = [];
|
|
265
|
+
for (const event of history) {
|
|
266
|
+
if (event.kind === EventKind.MESSAGE) {
|
|
267
|
+
if (!role || event.source === role) {
|
|
268
|
+
const messageData = event.data as MessageEventData;
|
|
269
|
+
messages.push(messageData.message);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return messages;
|
|
274
|
+
},
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Check if the last message contains any of the given keywords.
|
|
278
|
+
* @param keywords - Keywords to search for
|
|
279
|
+
* @param caseSensitive - Whether to perform case-sensitive search (default: false)
|
|
280
|
+
* @returns True if any keyword is found
|
|
281
|
+
*/
|
|
282
|
+
lastMessageContains(keywords: string | string[], caseSensitive: boolean = false): boolean {
|
|
283
|
+
const lastMessage = helpers.getLastMessage();
|
|
284
|
+
if (!lastMessage) return false;
|
|
285
|
+
|
|
286
|
+
const searchText = caseSensitive ? lastMessage : lastMessage.toLowerCase();
|
|
287
|
+
const keywordArray = Array.isArray(keywords) ? keywords : [keywords];
|
|
288
|
+
|
|
289
|
+
return keywordArray.some(keyword => {
|
|
290
|
+
const searchKeyword = caseSensitive ? keyword : keyword.toLowerCase();
|
|
291
|
+
return searchText.includes(searchKeyword);
|
|
292
|
+
});
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
return helpers;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Creates a complete TemplateContext with helpers included.
|
|
301
|
+
* This is a convenience function for creating template contexts with all the helper methods.
|
|
302
|
+
*
|
|
303
|
+
* @param params - The base template context parameters
|
|
304
|
+
* @returns Complete TemplateContext with helpers
|
|
305
|
+
*/
|
|
306
|
+
export function createTemplateContext<TContext = unknown, TData = unknown>(
|
|
307
|
+
params: Omit<Partial<TemplateContext<TContext, TData>>, 'helpers'>
|
|
308
|
+
): TemplateContext<TContext, TData> {
|
|
309
|
+
return {
|
|
310
|
+
...params,
|
|
311
|
+
data: params.data || {},
|
|
312
|
+
helpers: createTemplateHelpers(params.history),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Formats a JSON structure into readable markdown format.
|
|
318
|
+
* Handles nested objects, arrays, and primitive values.
|
|
319
|
+
*
|
|
320
|
+
* @param data - The JSON data to format
|
|
321
|
+
* @param title - Optional title for the knowledge base section
|
|
322
|
+
* @param maxDepth - Maximum nesting depth (default: 3)
|
|
323
|
+
* @returns Formatted markdown string
|
|
324
|
+
*
|
|
325
|
+
* @example
|
|
326
|
+
* ```typescript
|
|
327
|
+
* const knowledge = {
|
|
328
|
+
* company: {
|
|
329
|
+
* name: "Acme Corp",
|
|
330
|
+
* products: ["Widget A", "Widget B"],
|
|
331
|
+
* locations: {
|
|
332
|
+
* headquarters: "NYC",
|
|
333
|
+
* branches: ["LA", "Chicago"]
|
|
334
|
+
* }
|
|
335
|
+
* }
|
|
336
|
+
* };
|
|
337
|
+
*
|
|
338
|
+
* const markdown = formatKnowledgeBase(knowledge, "Company Information");
|
|
339
|
+
* // Output:
|
|
340
|
+
* // ## Company Information
|
|
341
|
+
* //
|
|
342
|
+
* // ### company
|
|
343
|
+
* // - **name**: Acme Corp
|
|
344
|
+
* // - **products**:
|
|
345
|
+
* // - Widget A
|
|
346
|
+
* // - Widget B
|
|
347
|
+
* // - **locations**:
|
|
348
|
+
* // - **headquarters**: NYC
|
|
349
|
+
* // - **branches**:
|
|
350
|
+
* // - LA
|
|
351
|
+
* // - Chicago
|
|
352
|
+
* ```
|
|
353
|
+
*/
|
|
354
|
+
export function formatKnowledgeBase(
|
|
355
|
+
data: Record<string, unknown>,
|
|
356
|
+
title?: string,
|
|
357
|
+
maxDepth: number = 3
|
|
358
|
+
): string {
|
|
359
|
+
const lines: string[] = [];
|
|
360
|
+
|
|
361
|
+
if (title) {
|
|
362
|
+
lines.push(`## ${title}`);
|
|
363
|
+
lines.push("");
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (!data || typeof data !== "object") {
|
|
367
|
+
lines.push("*No knowledge base data available*");
|
|
368
|
+
return lines.join("\n");
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
formatObject(data, lines, 0, maxDepth);
|
|
372
|
+
|
|
373
|
+
return lines.join("\n");
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Recursively formats an object into markdown format
|
|
378
|
+
*/
|
|
379
|
+
function formatObject(
|
|
380
|
+
obj: Record<string, unknown>,
|
|
381
|
+
lines: string[],
|
|
382
|
+
depth: number,
|
|
383
|
+
maxDepth: number,
|
|
384
|
+
prefix: string = ""
|
|
385
|
+
): void {
|
|
386
|
+
const entries = Object.entries(obj);
|
|
387
|
+
|
|
388
|
+
if (entries.length === 0) {
|
|
389
|
+
lines.push(`${prefix}*Empty*`);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
for (const [key, value] of entries) {
|
|
394
|
+
const currentPrefix = prefix ? `${prefix} ` : "";
|
|
395
|
+
|
|
396
|
+
if (value === null || value === undefined) {
|
|
397
|
+
lines.push(`${currentPrefix}- **${key}**: *Not specified*`);
|
|
398
|
+
} else if (
|
|
399
|
+
typeof value === "string" ||
|
|
400
|
+
typeof value === "number" ||
|
|
401
|
+
typeof value === "boolean"
|
|
402
|
+
) {
|
|
403
|
+
lines.push(`${currentPrefix}- **${key}**: ${value}`);
|
|
404
|
+
} else if (Array.isArray(value)) {
|
|
405
|
+
if (value.length === 0) {
|
|
406
|
+
lines.push(`${currentPrefix}- **${key}**: *Empty list*`);
|
|
407
|
+
} else {
|
|
408
|
+
lines.push(`${currentPrefix}- **${key}**:`);
|
|
409
|
+
for (const item of value) {
|
|
410
|
+
if (
|
|
411
|
+
typeof item === "string" ||
|
|
412
|
+
typeof item === "number" ||
|
|
413
|
+
typeof item === "boolean"
|
|
414
|
+
) {
|
|
415
|
+
lines.push(`${currentPrefix} - ${item}`);
|
|
416
|
+
} else if (
|
|
417
|
+
depth < maxDepth &&
|
|
418
|
+
typeof item === "object" &&
|
|
419
|
+
item !== null
|
|
420
|
+
) {
|
|
421
|
+
lines.push(`${currentPrefix} - ${JSON.stringify(item)}`);
|
|
422
|
+
} else {
|
|
423
|
+
lines.push(`${currentPrefix} - ${JSON.stringify(item)}`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
} else if (typeof value === "object") {
|
|
428
|
+
if (depth < maxDepth) {
|
|
429
|
+
lines.push(`${currentPrefix}- **${key}**:`);
|
|
430
|
+
formatObject(
|
|
431
|
+
value as Record<string, unknown>,
|
|
432
|
+
lines,
|
|
433
|
+
depth + 1,
|
|
434
|
+
maxDepth,
|
|
435
|
+
currentPrefix
|
|
436
|
+
);
|
|
437
|
+
} else {
|
|
438
|
+
lines.push(`${currentPrefix}- **${key}**: ${JSON.stringify(value)}`);
|
|
439
|
+
}
|
|
440
|
+
} else {
|
|
441
|
+
lines.push(`${currentPrefix}- **${key}**: ${JSON.stringify(value)}`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|