@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
package/src/core/Step.ts
ADDED
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step in the route DSL
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
StepRef,
|
|
7
|
+
StepOptions,
|
|
8
|
+
StepResult,
|
|
9
|
+
BranchSpec,
|
|
10
|
+
BranchResult,
|
|
11
|
+
Guideline,
|
|
12
|
+
GuidelineMatch,
|
|
13
|
+
Tool,
|
|
14
|
+
SessionState,
|
|
15
|
+
Event,
|
|
16
|
+
} from "../types";
|
|
17
|
+
import { ToolScope, Template, ConditionTemplate, TemplateContext } from "../types";
|
|
18
|
+
import { createConditionEvaluator, generateStepId, logger } from "../utils";
|
|
19
|
+
import { Agent } from './Agent'
|
|
20
|
+
import { END_ROUTE, END_ROUTE_ID } from "../constants";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Represents a step within a route
|
|
24
|
+
*/
|
|
25
|
+
export class Step<TContext = unknown, TData = unknown> {
|
|
26
|
+
public readonly id: string;
|
|
27
|
+
private nextSteps: Step<TContext, TData>[] = [];
|
|
28
|
+
private guidelines: Guideline<TContext, TData>[] = [];
|
|
29
|
+
public readonly routeId: string;
|
|
30
|
+
public collect?: (keyof TData)[];
|
|
31
|
+
public description?: string;
|
|
32
|
+
public when?: ConditionTemplate<TContext, TData>;
|
|
33
|
+
public skipIf?: ConditionTemplate<TContext, TData>;
|
|
34
|
+
public requires?: (keyof TData)[];
|
|
35
|
+
public prompt?: Template<TContext, TData>;
|
|
36
|
+
public prepare?:
|
|
37
|
+
| string
|
|
38
|
+
| Tool<TContext, TData>
|
|
39
|
+
| ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
40
|
+
public finalize?:
|
|
41
|
+
| string
|
|
42
|
+
| Tool<TContext, TData>
|
|
43
|
+
| ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
44
|
+
public tools?: (string | Tool<TContext, TData>)[];
|
|
45
|
+
|
|
46
|
+
// Reference to parent agent for ToolManager access
|
|
47
|
+
private parentAgent?: Agent<TContext, TData>;
|
|
48
|
+
|
|
49
|
+
constructor(
|
|
50
|
+
routeId: string,
|
|
51
|
+
options: StepOptions<TContext, TData> = {},
|
|
52
|
+
parentAgent?: Agent<TContext, TData>
|
|
53
|
+
) {
|
|
54
|
+
// Use provided ID or generate a deterministic one
|
|
55
|
+
this.id = options.id || generateStepId(routeId, options.description);
|
|
56
|
+
this.routeId = routeId;
|
|
57
|
+
this.description = options.description;
|
|
58
|
+
|
|
59
|
+
this.collect = options.collect;
|
|
60
|
+
this.skipIf = options.skipIf;
|
|
61
|
+
this.requires = options.requires;
|
|
62
|
+
this.prompt = options.prompt;
|
|
63
|
+
this.when = options.when;
|
|
64
|
+
this.prepare = options.prepare;
|
|
65
|
+
this.finalize = options.finalize;
|
|
66
|
+
this.tools = options.tools;
|
|
67
|
+
|
|
68
|
+
// Initialize guidelines from options
|
|
69
|
+
if (options.guidelines) {
|
|
70
|
+
options.guidelines.forEach((guideline) => {
|
|
71
|
+
this.addGuideline(guideline);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Store reference to parent agent for ToolManager access
|
|
76
|
+
this.parentAgent = parentAgent;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Configure the step properties after creation
|
|
81
|
+
* Useful for overriding initial step configuration
|
|
82
|
+
*/
|
|
83
|
+
configure(config: {
|
|
84
|
+
description?: string;
|
|
85
|
+
collect?: (keyof TData)[];
|
|
86
|
+
skipIf?: ConditionTemplate<TContext, TData>;
|
|
87
|
+
requires?: (keyof TData)[];
|
|
88
|
+
prompt?: Template<TContext, TData>;
|
|
89
|
+
prepare?:
|
|
90
|
+
| string
|
|
91
|
+
| Tool<TContext, TData>
|
|
92
|
+
| ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
93
|
+
finalize?:
|
|
94
|
+
| string
|
|
95
|
+
| Tool<TContext, TData>
|
|
96
|
+
| ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
97
|
+
tools?: (string | Tool<TContext, TData>)[];
|
|
98
|
+
}): this {
|
|
99
|
+
if (config.description !== undefined) {
|
|
100
|
+
this.description = config.description;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (config.collect !== undefined) {
|
|
104
|
+
this.collect = config.collect;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (config.skipIf !== undefined) {
|
|
108
|
+
this.skipIf = config.skipIf;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (config.requires !== undefined) {
|
|
112
|
+
this.requires = config.requires;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (config.prompt !== undefined) {
|
|
116
|
+
this.prompt = config.prompt;
|
|
117
|
+
}
|
|
118
|
+
if (config.prepare !== undefined) {
|
|
119
|
+
this.prepare = config.prepare;
|
|
120
|
+
}
|
|
121
|
+
if (config.finalize !== undefined) {
|
|
122
|
+
this.finalize = config.finalize;
|
|
123
|
+
}
|
|
124
|
+
if (config.tools !== undefined) {
|
|
125
|
+
this.tools = config.tools;
|
|
126
|
+
}
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Shortcut to end the current route
|
|
132
|
+
*
|
|
133
|
+
* @param options - Optional step options for the end step
|
|
134
|
+
* @returns Terminal step result
|
|
135
|
+
*/
|
|
136
|
+
endRoute(
|
|
137
|
+
options: Omit<StepOptions<TContext, TData>, "step"> = {}
|
|
138
|
+
): StepResult<TContext, TData> {
|
|
139
|
+
return this.nextStep({
|
|
140
|
+
...options,
|
|
141
|
+
step: END_ROUTE,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Create a transition from this step to another
|
|
147
|
+
*
|
|
148
|
+
* @param spec - Transition specification (prompt, tool, or direct step)
|
|
149
|
+
* @returns StepResult that supports chaining
|
|
150
|
+
*/
|
|
151
|
+
nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData> {
|
|
152
|
+
// Handle END_ROUTE
|
|
153
|
+
if (spec.step && typeof spec.step === "symbol" && spec.step === END_ROUTE) {
|
|
154
|
+
const endStep = new Step<TContext, TData>(this.routeId, {
|
|
155
|
+
...spec,
|
|
156
|
+
id: END_ROUTE_ID,
|
|
157
|
+
}, this.parentAgent);
|
|
158
|
+
this.nextSteps.push(endStep);
|
|
159
|
+
return this.createTerminalRef();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Handle direct step reference
|
|
163
|
+
if (spec.step && typeof spec.step !== "symbol") {
|
|
164
|
+
// This is a bit tricky. We need to find the actual Step instance.
|
|
165
|
+
// For now, let's assume the user will provide a Step instance directly.
|
|
166
|
+
// This part might need to be revisited.
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Create new target step for prompt or tool
|
|
170
|
+
const targetStep = new Step<TContext, TData>(this.routeId, spec, this.parentAgent);
|
|
171
|
+
this.nextSteps.push(targetStep);
|
|
172
|
+
|
|
173
|
+
return this.createStepRefWithTransition(targetStep.getRef(), targetStep);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Create multiple branches from this step
|
|
178
|
+
*
|
|
179
|
+
* @param branches - Array of branch specifications
|
|
180
|
+
* @returns BranchResult mapping branch names to their step results
|
|
181
|
+
*/
|
|
182
|
+
branch(
|
|
183
|
+
branches: BranchSpec<TContext, TData>[]
|
|
184
|
+
): BranchResult<TContext, TData> {
|
|
185
|
+
const result = {} as BranchResult<TContext, TData>;
|
|
186
|
+
|
|
187
|
+
for (const branchSpec of branches) {
|
|
188
|
+
// Create step options with optional ID
|
|
189
|
+
const stepOptions: StepOptions<TContext, TData> = branchSpec.id
|
|
190
|
+
? { ...branchSpec.step, id: branchSpec.id }
|
|
191
|
+
: branchSpec.step;
|
|
192
|
+
|
|
193
|
+
// Create a new step for this branch
|
|
194
|
+
const branchStep = new Step<TContext, TData>(this.routeId, stepOptions, this.parentAgent);
|
|
195
|
+
// Add it to our transitions
|
|
196
|
+
this.nextSteps.push(branchStep);
|
|
197
|
+
// Create a step result for chaining
|
|
198
|
+
const branchName: string = branchSpec.name;
|
|
199
|
+
result[branchName] = this.createStepRefWithTransition(
|
|
200
|
+
branchStep.getRef(),
|
|
201
|
+
branchStep
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Add a guideline specific to this step
|
|
210
|
+
*/
|
|
211
|
+
addGuideline(guideline: Guideline<TContext, TData>): void {
|
|
212
|
+
this.guidelines.push(guideline);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Get guidelines for this step
|
|
217
|
+
*/
|
|
218
|
+
getGuidelines(): Guideline<TContext, TData>[] {
|
|
219
|
+
return [...this.guidelines];
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Evaluate and match active guidelines based on their conditions
|
|
224
|
+
* Returns guidelines that should be active given the current context
|
|
225
|
+
*/
|
|
226
|
+
async evaluateGuidelines(
|
|
227
|
+
context?: TContext,
|
|
228
|
+
session?: SessionState<TData>,
|
|
229
|
+
history?: Event[]
|
|
230
|
+
): Promise<GuidelineMatch<TContext, TData>[]> {
|
|
231
|
+
const templateContext = { context, session, history, data: session?.data || {} };
|
|
232
|
+
const evaluator = createConditionEvaluator(templateContext);
|
|
233
|
+
const matches: GuidelineMatch<TContext, TData>[] = [];
|
|
234
|
+
|
|
235
|
+
for (const guideline of this.guidelines) {
|
|
236
|
+
// Skip disabled guidelines
|
|
237
|
+
if (guideline.enabled === false) {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (guideline.condition) {
|
|
242
|
+
const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
|
|
243
|
+
|
|
244
|
+
// Include guideline if:
|
|
245
|
+
// 1. No programmatic conditions (only strings) - always active
|
|
246
|
+
// 2. Programmatic conditions evaluate to true
|
|
247
|
+
if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
|
|
248
|
+
const rationale = evaluation.aiContextStrings.length > 0
|
|
249
|
+
? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
|
|
250
|
+
: evaluation.hasProgrammaticConditions
|
|
251
|
+
? "Programmatic condition evaluated to true"
|
|
252
|
+
: "Always active (no conditions)";
|
|
253
|
+
|
|
254
|
+
matches.push({
|
|
255
|
+
guideline,
|
|
256
|
+
rationale
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
// No condition means always active
|
|
261
|
+
matches.push({
|
|
262
|
+
guideline,
|
|
263
|
+
rationale: "Always active (no conditions)"
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return matches;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Add a tool to this step using the unified Tool interface
|
|
273
|
+
* Creates and adds the tool to step scope in one operation
|
|
274
|
+
*/
|
|
275
|
+
addTool(
|
|
276
|
+
tool: Tool<TContext, TData>
|
|
277
|
+
): this {
|
|
278
|
+
// Validate tool before adding
|
|
279
|
+
if (!tool || !tool.id || !tool.handler) {
|
|
280
|
+
throw new Error('Invalid tool: must have id and handler properties');
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Add to step's tools array
|
|
284
|
+
if (!this.tools) {
|
|
285
|
+
this.tools = [];
|
|
286
|
+
}
|
|
287
|
+
this.tools.push(tool);
|
|
288
|
+
|
|
289
|
+
return this;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Resolve tool references in the tools array
|
|
294
|
+
* Supports both string IDs (resolved from registry) and inline tool objects
|
|
295
|
+
*/
|
|
296
|
+
resolveTools(): Tool<TContext, TData>[] {
|
|
297
|
+
if (!this.tools) {
|
|
298
|
+
return [];
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const resolvedTools: Tool<TContext, TData>[] = [];
|
|
302
|
+
|
|
303
|
+
for (const toolRef of this.tools) {
|
|
304
|
+
if (typeof toolRef === 'string') {
|
|
305
|
+
// Tool ID - try to resolve from ToolManager using proper scope resolution
|
|
306
|
+
if (this.parentAgent?.tool) {
|
|
307
|
+
const registeredTool = this.parentAgent.tool.find(toolRef);
|
|
308
|
+
if (registeredTool) {
|
|
309
|
+
resolvedTools.push(registeredTool);
|
|
310
|
+
} else {
|
|
311
|
+
// Tool not found - log warning but don't fail
|
|
312
|
+
logger.warn(`[Step] Tool ID '${toolRef}' not found in any scope for step ${this.id}`);
|
|
313
|
+
}
|
|
314
|
+
} else {
|
|
315
|
+
logger.warn(`[Step] No parent agent available to resolve tool ID '${toolRef}' for step ${this.id}`);
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
// Inline tool object - validate and use directly
|
|
319
|
+
if (toolRef && toolRef.id && typeof toolRef.handler === 'function') {
|
|
320
|
+
resolvedTools.push(toolRef);
|
|
321
|
+
} else {
|
|
322
|
+
logger.warn(`[Step] Invalid inline tool object in step ${this.id}:`, toolRef);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return resolvedTools;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Get all tools available to this step (both inline and resolved from registry)
|
|
332
|
+
*/
|
|
333
|
+
getAvailableTools(): (string | Tool<TContext, TData>)[] {
|
|
334
|
+
return this.tools ? [...this.tools] : [];
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Get all resolved tools available to this step using ToolManager
|
|
339
|
+
* This method provides the complete set of tools accessible from this step
|
|
340
|
+
*/
|
|
341
|
+
getAllAvailableTools(): Tool<TContext, TData>[] {
|
|
342
|
+
if (!this.parentAgent?.tool) {
|
|
343
|
+
// Fallback to local resolution if no ToolManager available
|
|
344
|
+
return this.resolveTools();
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Use ToolManager to get all available tools for this step context
|
|
348
|
+
return this.parentAgent.tool.getAvailable(ToolScope.ALL, this, undefined);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Find a specific tool by ID using ToolManager resolution
|
|
353
|
+
* This method respects the tool resolution hierarchy: step → route → agent → registry
|
|
354
|
+
*/
|
|
355
|
+
findTool(toolId: string, scope?: ToolScope): Tool<TContext, TData> | undefined {
|
|
356
|
+
if (!this.parentAgent?.tool) {
|
|
357
|
+
// Fallback to local resolution if no ToolManager available
|
|
358
|
+
const resolved = this.resolveTools();
|
|
359
|
+
return resolved.find(tool => tool.id === toolId || tool.name === toolId);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Use ToolManager to find the tool with proper scope resolution
|
|
363
|
+
return this.parentAgent.tool.find(toolId, scope || ToolScope.ALL, this, undefined);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Get tools from a specific scope
|
|
368
|
+
*/
|
|
369
|
+
getToolsFromScope(scope: ToolScope): Tool<TContext, TData>[] {
|
|
370
|
+
if (!this.parentAgent?.tool) {
|
|
371
|
+
// Fallback to local resolution if no ToolManager available
|
|
372
|
+
return scope === ToolScope.STEP ? this.resolveTools() : [];
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return this.parentAgent.tool.getAvailable(scope, this, undefined);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Get only step-level tools (inline tools in this step)
|
|
380
|
+
*/
|
|
381
|
+
getStepTools(): Tool<TContext, TData>[] {
|
|
382
|
+
return this.getToolsFromScope(ToolScope.STEP);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Get only registered tools accessible from this step
|
|
387
|
+
*/
|
|
388
|
+
getRegisteredTools(): Tool<TContext, TData>[] {
|
|
389
|
+
return this.getToolsFromScope(ToolScope.REGISTERED);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Validate that all tool references in this step can be resolved
|
|
394
|
+
* Returns validation result with details about missing tools
|
|
395
|
+
*/
|
|
396
|
+
validateToolReferences(): {
|
|
397
|
+
valid: boolean;
|
|
398
|
+
missing: string[];
|
|
399
|
+
found: string[];
|
|
400
|
+
details: Array<{ id: string; found: boolean; scope?: string; }>;
|
|
401
|
+
} {
|
|
402
|
+
if (!this.tools || this.tools.length === 0) {
|
|
403
|
+
return { valid: true, missing: [], found: [], details: [] };
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Extract tool IDs from the tools array
|
|
407
|
+
const toolIds: string[] = [];
|
|
408
|
+
for (const toolRef of this.tools) {
|
|
409
|
+
if (typeof toolRef === 'string') {
|
|
410
|
+
toolIds.push(toolRef);
|
|
411
|
+
} else if (toolRef && toolRef.id) {
|
|
412
|
+
toolIds.push(toolRef.id);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if (!this.parentAgent?.tool) {
|
|
417
|
+
// Fallback validation without ToolManager
|
|
418
|
+
const resolved = this.resolveTools();
|
|
419
|
+
const resolvedIds = resolved.map(tool => tool.id);
|
|
420
|
+
const missing = toolIds.filter(id => !resolvedIds.includes(id));
|
|
421
|
+
const found = toolIds.filter(id => resolvedIds.includes(id));
|
|
422
|
+
|
|
423
|
+
return {
|
|
424
|
+
valid: missing.length === 0,
|
|
425
|
+
missing,
|
|
426
|
+
found,
|
|
427
|
+
details: toolIds.map(id => ({ id, found: resolvedIds.includes(id) }))
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Use ToolManager validation
|
|
432
|
+
return this.parentAgent.tool.validateToolReferences(toolIds, this);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Get all transitions from this step
|
|
437
|
+
*/
|
|
438
|
+
getTransitions(): Step<TContext, TData>[] {
|
|
439
|
+
return [...this.nextSteps];
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Evaluate when condition using ConditionEvaluator
|
|
444
|
+
*/
|
|
445
|
+
async evaluateWhen(
|
|
446
|
+
templateContext: TemplateContext<TContext, TData>
|
|
447
|
+
): Promise<{
|
|
448
|
+
shouldActivate: boolean;
|
|
449
|
+
aiContextStrings: string[];
|
|
450
|
+
hasProgrammaticConditions: boolean;
|
|
451
|
+
}> {
|
|
452
|
+
if (!this.when) {
|
|
453
|
+
return {
|
|
454
|
+
shouldActivate: true,
|
|
455
|
+
aiContextStrings: [],
|
|
456
|
+
hasProgrammaticConditions: false
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
const evaluator = createConditionEvaluator(templateContext);
|
|
461
|
+
const result = await evaluator.evaluateCondition(this.when, 'AND');
|
|
462
|
+
|
|
463
|
+
return {
|
|
464
|
+
shouldActivate: result.programmaticResult,
|
|
465
|
+
aiContextStrings: result.aiContextStrings,
|
|
466
|
+
hasProgrammaticConditions: result.hasProgrammaticConditions
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Evaluate skipIf condition using ConditionEvaluator
|
|
472
|
+
*/
|
|
473
|
+
async evaluateSkipIf(
|
|
474
|
+
templateContext: TemplateContext<TContext, TData>
|
|
475
|
+
): Promise<{
|
|
476
|
+
shouldSkip: boolean;
|
|
477
|
+
aiContextStrings: string[];
|
|
478
|
+
hasProgrammaticConditions: boolean;
|
|
479
|
+
}> {
|
|
480
|
+
if (!this.skipIf) {
|
|
481
|
+
return {
|
|
482
|
+
shouldSkip: false,
|
|
483
|
+
aiContextStrings: [],
|
|
484
|
+
hasProgrammaticConditions: false
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const evaluator = createConditionEvaluator(templateContext);
|
|
489
|
+
const result = await evaluator.evaluateCondition(this.skipIf, 'OR');
|
|
490
|
+
|
|
491
|
+
return {
|
|
492
|
+
shouldSkip: result.programmaticResult,
|
|
493
|
+
aiContextStrings: result.aiContextStrings,
|
|
494
|
+
hasProgrammaticConditions: result.hasProgrammaticConditions
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Check if this step has all required data to proceed
|
|
502
|
+
*/
|
|
503
|
+
hasRequires(data: Partial<TData>): boolean {
|
|
504
|
+
if (!this.requires || this.requires.length === 0) return true;
|
|
505
|
+
return this.requires.every((key) => data[key] !== undefined);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Get step reference
|
|
510
|
+
*/
|
|
511
|
+
getRef(): StepRef {
|
|
512
|
+
return {
|
|
513
|
+
id: this.id,
|
|
514
|
+
routeId: this.routeId,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Create a step reference with nextStep capability for chaining
|
|
520
|
+
*/
|
|
521
|
+
private createStepRefWithTransition(
|
|
522
|
+
ref: StepRef,
|
|
523
|
+
step?: Step<TContext, TData>
|
|
524
|
+
): StepResult<TContext, TData> {
|
|
525
|
+
const stepInstance = step || this;
|
|
526
|
+
|
|
527
|
+
return {
|
|
528
|
+
...ref,
|
|
529
|
+
nextStep: (spec: StepOptions<TContext, TData>) =>
|
|
530
|
+
stepInstance.nextStep(spec),
|
|
531
|
+
branch: (branches: BranchSpec<TContext, TData>[]) =>
|
|
532
|
+
stepInstance.branch(branches),
|
|
533
|
+
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) =>
|
|
534
|
+
stepInstance.endRoute(options),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Create a terminal step reference (for END_ROUTE)
|
|
540
|
+
*/
|
|
541
|
+
private createTerminalRef(): StepResult<TContext, TData> {
|
|
542
|
+
const terminalRef: StepRef = {
|
|
543
|
+
id: END_ROUTE_ID,
|
|
544
|
+
routeId: this.routeId,
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
return {
|
|
548
|
+
...terminalRef,
|
|
549
|
+
nextStep: () => {
|
|
550
|
+
throw new Error("Cannot transition from END_ROUTE step");
|
|
551
|
+
},
|
|
552
|
+
branch: () => {
|
|
553
|
+
throw new Error("Cannot branch from END_ROUTE step");
|
|
554
|
+
},
|
|
555
|
+
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) =>
|
|
556
|
+
this.endRoute(options),
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Create a transition result for this step
|
|
562
|
+
*/
|
|
563
|
+
asStepResult(): StepResult<TContext, TData> {
|
|
564
|
+
return {
|
|
565
|
+
...this.getRef(),
|
|
566
|
+
nextStep: (spec: StepOptions<TContext, TData>) => this.nextStep(spec),
|
|
567
|
+
branch: (branches: BranchSpec<TContext, TData>[]) =>
|
|
568
|
+
this.branch(branches),
|
|
569
|
+
endRoute: (options?: Omit<StepOptions<TContext, TData>, "step">) =>
|
|
570
|
+
this.endRoute(options),
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* Export step configuration as StepOptions for copying/cloning
|
|
576
|
+
* @returns StepOptions that can be used to create a new step with identical configuration
|
|
577
|
+
*/
|
|
578
|
+
toOptions(): StepOptions<TContext, TData> {
|
|
579
|
+
return {
|
|
580
|
+
id: this.id,
|
|
581
|
+
description: this.description,
|
|
582
|
+
prompt: this.prompt,
|
|
583
|
+
tools: this.tools,
|
|
584
|
+
prepare: this.prepare,
|
|
585
|
+
finalize: this.finalize,
|
|
586
|
+
collect: this.collect,
|
|
587
|
+
skipIf: this.skipIf,
|
|
588
|
+
requires: this.requires,
|
|
589
|
+
when: this.when,
|
|
590
|
+
guidelines: this.getGuidelines(),
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
}
|