@falai/agent 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +304 -72
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/{src → cjs}/core/Agent.d.ts +25 -6
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +121 -37
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +842 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +201 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +202 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +54 -3
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +46 -10
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/core/Route.js +541 -0
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
- package/dist/cjs/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +170 -0
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/core/Step.js +448 -0
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.d.ts +234 -0
- package/dist/cjs/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/core/ToolManager.js +1117 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +5 -3
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +16 -3
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +12 -4
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +5 -3
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +8 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +116 -15
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.d.ts +130 -0
- package/dist/cjs/types/tool.d.ts.map +1 -0
- package/dist/cjs/types/tool.js +19 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{cjs/src/core → core}/Agent.d.ts +25 -6
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +122 -38
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +837 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +197 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +198 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +54 -3
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +807 -121
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/core/Route.js +537 -0
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +343 -81
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/{src/core → core}/SessionManager.js +27 -5
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/Step.d.ts +170 -0
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/core/Step.js +444 -0
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts +234 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js +1111 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +4 -1
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +12 -4
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +5 -3
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +116 -15
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts +130 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +16 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/CONTRIBUTING.md +40 -0
- package/docs/README.md +12 -5
- package/docs/api/README.md +295 -56
- package/docs/api/overview.md +272 -31
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +120 -5
- package/docs/core/agent/session-management.md +153 -6
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +261 -4
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +132 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +831 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/core/tools/tool-definition.md +684 -60
- package/docs/core/tools/tool-scoping.md +244 -53
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +423 -31
- package/docs/guides/migration/README.md +23 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +303 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +107 -30
- package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +13 -9
- package/examples/ai-providers/openai-integration.ts +12 -8
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +158 -98
- package/examples/core-concepts/schema-driven-extraction.ts +43 -16
- package/examples/core-concepts/session-management.ts +117 -29
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +25 -39
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +11 -11
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +6 -6
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/basic-tools.ts +293 -89
- package/examples/tools/data-enrichment-tools.ts +189 -79
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +152 -46
- package/src/core/BatchExecutor.ts +1156 -0
- package/src/core/BatchPromptBuilder.ts +275 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +143 -4
- package/src/core/ResponseModal.ts +1035 -137
- package/src/core/ResponsePipeline.ts +99 -65
- package/src/core/Route.ts +262 -34
- package/src/core/RoutingEngine.ts +467 -120
- package/src/core/SessionManager.ts +39 -7
- package/src/core/Step.ts +338 -32
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +27 -3
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +12 -4
- package/src/types/index.ts +25 -3
- package/src/types/route.ts +136 -15
- package/src/types/template.ts +70 -2
- package/src/types/tool.ts +116 -25
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js +0 -343
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts +0 -96
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js +0 -206
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.js +0 -84
- package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts +0 -60
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js +0 -6
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js +0 -339
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.d.ts.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts +0 -96
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js +0 -202
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolExecutor.d.ts +0 -45
- package/dist/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/src/core/ToolExecutor.js +0 -80
- package/dist/src/core/ToolExecutor.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.d.ts +0 -60
- package/dist/src/types/tool.d.ts.map +0 -1
- package/dist/src/types/tool.js +0 -5
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- package/docs/core/tools/tool-execution.md +0 -815
- package/src/core/ToolExecutor.ts +0 -126
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
package/src/types/template.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SessionState } from "./session";
|
|
2
|
-
import type { Event } from "./history";
|
|
2
|
+
import type { Event, MessageRole } from "./history";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Context object passed to template functions for dynamic rendering.
|
|
@@ -24,7 +24,46 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
|
|
|
24
24
|
* The data collected in the current route.
|
|
25
25
|
* A convenience alias for `session.data`.
|
|
26
26
|
*/
|
|
27
|
-
data
|
|
27
|
+
data: Partial<TData>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Helper methods for working with history and context.
|
|
31
|
+
*/
|
|
32
|
+
helpers: {
|
|
33
|
+
/**
|
|
34
|
+
* Get the last message from history, optionally filtered by role.
|
|
35
|
+
* @param role - Optional role to filter by (user, assistant, etc.)
|
|
36
|
+
* @returns The message content or undefined if not found
|
|
37
|
+
*/
|
|
38
|
+
getLastMessage(role?: MessageRole): string | undefined;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get the last user message from history.
|
|
42
|
+
* @returns The user message content or undefined if not found
|
|
43
|
+
*/
|
|
44
|
+
getLastUserMessage(): string | undefined;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get the last assistant message from history.
|
|
48
|
+
* @returns The assistant message content or undefined if not found
|
|
49
|
+
*/
|
|
50
|
+
getLastAssistantMessage(): string | undefined;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get all messages from history, optionally filtered by role.
|
|
54
|
+
* @param role - Optional role to filter by
|
|
55
|
+
* @returns Array of message contents
|
|
56
|
+
*/
|
|
57
|
+
getMessages(role?: MessageRole): string[];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Check if the last message contains any of the given keywords.
|
|
61
|
+
* @param keywords - Keywords to search for
|
|
62
|
+
* @param caseSensitive - Whether to perform case-sensitive search (default: false)
|
|
63
|
+
* @returns True if any keyword is found
|
|
64
|
+
*/
|
|
65
|
+
lastMessageContains(keywords: string | string[], caseSensitive?: boolean): boolean;
|
|
66
|
+
};
|
|
28
67
|
}
|
|
29
68
|
|
|
30
69
|
/**
|
|
@@ -34,3 +73,32 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
|
|
|
34
73
|
export type Template<TContext = unknown, TData = unknown> =
|
|
35
74
|
| string
|
|
36
75
|
| ((params: TemplateContext<TContext, TData>) => string | Promise<string>);
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Represents a condition that can be used for routing decisions.
|
|
79
|
+
* Supports strings (AI context only), boolean functions (programmatic evaluation),
|
|
80
|
+
* and arrays of either for complex condition logic.
|
|
81
|
+
*/
|
|
82
|
+
export type ConditionTemplate<TContext = unknown, TData = unknown> =
|
|
83
|
+
| string // AI context only - not evaluated programmatically
|
|
84
|
+
| ((params: TemplateContext<TContext, TData>) => boolean | Promise<boolean>) // Programmatic evaluation
|
|
85
|
+
| ConditionTemplate<TContext, TData>[]; // Array of either
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Result of condition evaluation containing both programmatic results
|
|
89
|
+
* and AI context strings.
|
|
90
|
+
*/
|
|
91
|
+
export interface ConditionEvaluationResult {
|
|
92
|
+
/** Result of function evaluations only */
|
|
93
|
+
programmaticResult: boolean;
|
|
94
|
+
/** String values for AI context */
|
|
95
|
+
aiContextStrings: string[];
|
|
96
|
+
/** Whether any functions were evaluated */
|
|
97
|
+
hasProgrammaticConditions: boolean;
|
|
98
|
+
/** Detailed evaluation information for debugging */
|
|
99
|
+
evaluationDetails?: {
|
|
100
|
+
condition: string;
|
|
101
|
+
result?: boolean; // Only present for functions
|
|
102
|
+
type: 'string' | 'function' | 'array';
|
|
103
|
+
}[];
|
|
104
|
+
}
|
package/src/types/tool.ts
CHANGED
|
@@ -1,36 +1,44 @@
|
|
|
1
|
+
/* eslint @typescript-eslint/no-explicit-any: "off"*/
|
|
1
2
|
/**
|
|
2
3
|
* Tool system type definitions
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
|
-
import type { Event, StepRef } from "./index";
|
|
6
|
+
import type { Event, StepRef, ValidationResult } from "./index";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Context provided to tool handlers
|
|
9
10
|
*/
|
|
10
|
-
export interface ToolContext<TContext =
|
|
11
|
+
export interface ToolContext<TContext = any, TData = any> {
|
|
11
12
|
/** The agent's context data */
|
|
12
13
|
context: TContext;
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
/** Update the agent's collected data (triggers lifecycle hooks if configured) */
|
|
16
|
-
updateData: (updates: Partial<TData>) => Promise<void>;
|
|
17
|
-
/** Current step reference (if in a route) */
|
|
18
|
-
step?: StepRef;
|
|
14
|
+
/** Complete agent-level data collected so far */
|
|
15
|
+
data: Partial<TData>;
|
|
19
16
|
/** Interaction history */
|
|
20
17
|
history: Event[];
|
|
21
|
-
/**
|
|
22
|
-
|
|
18
|
+
/** Current step reference (if in a route) */
|
|
19
|
+
step?: StepRef;
|
|
23
20
|
/** Additional metadata */
|
|
24
21
|
metadata?: Record<string, unknown>;
|
|
22
|
+
|
|
23
|
+
/** Update the agent's context (triggers lifecycle hooks if configured) */
|
|
24
|
+
updateContext: (updates: Partial<TContext>) => Promise<void>;
|
|
25
|
+
/** Update the agent's collected data (triggers lifecycle hooks if configured) */
|
|
26
|
+
updateData: (updates: Partial<TData>) => Promise<void>;
|
|
27
|
+
/** Get a specific field from collected data */
|
|
28
|
+
getField<K extends keyof TData>(key: K): TData[K] | undefined;
|
|
29
|
+
/** Set a specific field in collected data */
|
|
30
|
+
setField<K extends keyof TData>(key: K, value: TData[K]): Promise<void>;
|
|
31
|
+
/** Check if a field exists in collected data */
|
|
32
|
+
hasField<K extends keyof TData>(key: K): boolean;
|
|
25
33
|
}
|
|
26
34
|
|
|
27
35
|
/**
|
|
28
36
|
* Result returned by a tool
|
|
29
37
|
*/
|
|
30
38
|
export interface ToolResult<
|
|
31
|
-
TResultData =
|
|
32
|
-
TContext =
|
|
33
|
-
TData =
|
|
39
|
+
TResultData = any,
|
|
40
|
+
TContext = any,
|
|
41
|
+
TData = any
|
|
34
42
|
> {
|
|
35
43
|
/** The result data */
|
|
36
44
|
data?: TResultData;
|
|
@@ -50,34 +58,117 @@ export interface ToolResult<
|
|
|
50
58
|
* Handler function for a tool
|
|
51
59
|
*/
|
|
52
60
|
export type ToolHandler<
|
|
53
|
-
TContext,
|
|
54
|
-
TData =
|
|
55
|
-
|
|
56
|
-
TResult = unknown
|
|
61
|
+
TContext = any,
|
|
62
|
+
TData = any,
|
|
63
|
+
TResult = any
|
|
57
64
|
> = (
|
|
58
65
|
context: ToolContext<TContext, TData>,
|
|
59
|
-
|
|
66
|
+
args?: Record<string, unknown>
|
|
60
67
|
) =>
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
| Promise<TResult | ToolResult<TResult, TContext, TData>>
|
|
69
|
+
| TResult
|
|
70
|
+
| ToolResult<TResult, TContext, TData>;
|
|
63
71
|
|
|
64
72
|
/**
|
|
65
73
|
* Tool definition - plain object interface
|
|
66
74
|
*/
|
|
67
75
|
export interface Tool<
|
|
68
|
-
TContext =
|
|
69
|
-
TData =
|
|
70
|
-
|
|
71
|
-
TResult = unknown
|
|
76
|
+
TContext = any,
|
|
77
|
+
TData = any,
|
|
78
|
+
TResult = any
|
|
72
79
|
> {
|
|
73
80
|
/** Tool identifier */
|
|
74
81
|
id: string;
|
|
75
82
|
/** Tool display name (shown to AI models) */
|
|
76
83
|
name?: string;
|
|
77
84
|
/** Tool handler function */
|
|
78
|
-
handler: ToolHandler<TContext, TData,
|
|
85
|
+
handler: ToolHandler<TContext, TData, TResult>;
|
|
79
86
|
/** Description of what the tool does (for AI discovery) */
|
|
80
87
|
description?: string;
|
|
81
88
|
/** Parameter schema or description */
|
|
82
89
|
parameters?: unknown;
|
|
83
90
|
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Tool execution result
|
|
96
|
+
*/
|
|
97
|
+
export interface ToolExecutionResult {
|
|
98
|
+
success: boolean;
|
|
99
|
+
data?: unknown;
|
|
100
|
+
error?: string;
|
|
101
|
+
contextUpdate?: Record<string, unknown>;
|
|
102
|
+
dataUpdate?: Record<string, unknown>;
|
|
103
|
+
metadata?: Record<string, unknown>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Tool scope enumeration
|
|
108
|
+
*/
|
|
109
|
+
export enum ToolScope {
|
|
110
|
+
AGENT = 'agent',
|
|
111
|
+
ROUTE = 'route',
|
|
112
|
+
STEP = 'step',
|
|
113
|
+
REGISTERED = 'registered',
|
|
114
|
+
ALL = 'all'
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Configuration for data enrichment tools
|
|
121
|
+
*/
|
|
122
|
+
export interface DataEnrichmentConfig<TContext, TData, TFields extends keyof TData> {
|
|
123
|
+
id: string;
|
|
124
|
+
name?: string;
|
|
125
|
+
description?: string;
|
|
126
|
+
fields: TFields[];
|
|
127
|
+
enricher: (
|
|
128
|
+
context: TContext,
|
|
129
|
+
data: Pick<TData, TFields>
|
|
130
|
+
) => Promise<Partial<TData>> | Partial<TData>;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Configuration for validation tools
|
|
135
|
+
*/
|
|
136
|
+
export interface ValidationConfig<TContext, TData, TFields extends keyof TData> {
|
|
137
|
+
id: string;
|
|
138
|
+
name?: string;
|
|
139
|
+
description?: string;
|
|
140
|
+
fields: TFields[];
|
|
141
|
+
validator: (
|
|
142
|
+
context: TContext,
|
|
143
|
+
data: Pick<TData, TFields>
|
|
144
|
+
) => Promise<ValidationResult> | ValidationResult;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Configuration for API call tools
|
|
149
|
+
*/
|
|
150
|
+
export interface ApiCallConfig<TContext, TData, TResult> {
|
|
151
|
+
id: string;
|
|
152
|
+
name?: string;
|
|
153
|
+
description?: string;
|
|
154
|
+
endpoint: string | ((context: TContext, data: Partial<TData>) => string);
|
|
155
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
156
|
+
headers?: Record<string, string> | ((context: TContext) => Record<string, string>);
|
|
157
|
+
body?: (context: TContext, data: Partial<TData>, args?: Record<string, unknown>) => unknown;
|
|
158
|
+
transform?: (response: unknown) => TResult;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Configuration for computation tools
|
|
163
|
+
*/
|
|
164
|
+
export interface ComputationConfig<TContext, TData, TResult> {
|
|
165
|
+
id: string;
|
|
166
|
+
name?: string;
|
|
167
|
+
description?: string;
|
|
168
|
+
inputs: (keyof TData)[];
|
|
169
|
+
compute: (
|
|
170
|
+
context: TContext,
|
|
171
|
+
inputs: Partial<TData>,
|
|
172
|
+
args?: Record<string, unknown>
|
|
173
|
+
) => Promise<TResult> | TResult;
|
|
174
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type { TemplateContext, ConditionTemplate, ConditionEvaluationResult } from "../types/template";
|
|
2
|
+
import { createTemplateContext } from "./template";
|
|
3
|
+
import { logger } from './logger'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Utility class for evaluating ConditionTemplate instances.
|
|
7
|
+
* Handles mixed string/function conditions and separates programmatic
|
|
8
|
+
* evaluation from AI context collection.
|
|
9
|
+
*/
|
|
10
|
+
export class ConditionEvaluator<TContext = unknown, TData = unknown> {
|
|
11
|
+
constructor(private templateContext: TemplateContext<TContext, TData>) {}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Evaluates a condition template and returns both programmatic results
|
|
15
|
+
* and AI context strings.
|
|
16
|
+
*
|
|
17
|
+
* @param condition The condition to evaluate
|
|
18
|
+
* @param logic Logic to apply for arrays ('AND' for when conditions, 'OR' for skipIf)
|
|
19
|
+
* @returns Evaluation result with programmatic result and AI context
|
|
20
|
+
*/
|
|
21
|
+
async evaluateCondition(
|
|
22
|
+
condition: ConditionTemplate<TContext, TData>,
|
|
23
|
+
logic: 'AND' | 'OR' = 'AND'
|
|
24
|
+
): Promise<ConditionEvaluationResult> {
|
|
25
|
+
const result: ConditionEvaluationResult = {
|
|
26
|
+
programmaticResult: logic === 'AND' ? true : false,
|
|
27
|
+
aiContextStrings: [],
|
|
28
|
+
hasProgrammaticConditions: false,
|
|
29
|
+
evaluationDetails: []
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
if (!condition) {
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Handle array conditions
|
|
37
|
+
if (Array.isArray(condition)) {
|
|
38
|
+
return this.evaluateArrayCondition(condition, logic);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Handle string conditions (AI context only)
|
|
42
|
+
if (typeof condition === 'string') {
|
|
43
|
+
result.aiContextStrings.push(condition);
|
|
44
|
+
result.evaluationDetails?.push({
|
|
45
|
+
condition: condition,
|
|
46
|
+
type: 'string'
|
|
47
|
+
});
|
|
48
|
+
// For string conditions, programmatic result depends on logic:
|
|
49
|
+
// AND logic: true (doesn't affect result)
|
|
50
|
+
// OR logic: false (doesn't trigger skip)
|
|
51
|
+
result.programmaticResult = logic === 'AND' ? true : false;
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Handle function conditions (programmatic evaluation)
|
|
56
|
+
if (typeof condition === 'function') {
|
|
57
|
+
result.hasProgrammaticConditions = true;
|
|
58
|
+
try {
|
|
59
|
+
const functionResult = await condition(this.templateContext);
|
|
60
|
+
result.programmaticResult = Boolean(functionResult);
|
|
61
|
+
result.evaluationDetails?.push({
|
|
62
|
+
condition: condition.toString(),
|
|
63
|
+
result: result.programmaticResult,
|
|
64
|
+
type: 'function'
|
|
65
|
+
});
|
|
66
|
+
} catch (error) {
|
|
67
|
+
// Log error and default to false for safety
|
|
68
|
+
logger.warn('Condition function evaluation failed:', error);
|
|
69
|
+
result.programmaticResult = false;
|
|
70
|
+
result.evaluationDetails?.push({
|
|
71
|
+
condition: condition.toString(),
|
|
72
|
+
result: false,
|
|
73
|
+
type: 'function'
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Fallback for unexpected types
|
|
80
|
+
logger.warn('Unexpected condition type:', typeof condition);
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Evaluates an array of conditions with the specified logic.
|
|
86
|
+
*/
|
|
87
|
+
private async evaluateArrayCondition(
|
|
88
|
+
conditions: ConditionTemplate<TContext, TData>[],
|
|
89
|
+
logic: 'AND' | 'OR'
|
|
90
|
+
): Promise<ConditionEvaluationResult> {
|
|
91
|
+
const result: ConditionEvaluationResult = {
|
|
92
|
+
programmaticResult: logic === 'AND' ? true : false,
|
|
93
|
+
aiContextStrings: [],
|
|
94
|
+
hasProgrammaticConditions: false,
|
|
95
|
+
evaluationDetails: [{
|
|
96
|
+
condition: `Array[${conditions.length}]`,
|
|
97
|
+
type: 'array'
|
|
98
|
+
}]
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const functionResults: boolean[] = [];
|
|
102
|
+
|
|
103
|
+
for (const condition of conditions) {
|
|
104
|
+
const conditionResult = await this.evaluateCondition(condition, logic);
|
|
105
|
+
|
|
106
|
+
// Collect AI context strings
|
|
107
|
+
result.aiContextStrings.push(...conditionResult.aiContextStrings);
|
|
108
|
+
|
|
109
|
+
// Track if we have programmatic conditions
|
|
110
|
+
if (conditionResult.hasProgrammaticConditions) {
|
|
111
|
+
result.hasProgrammaticConditions = true;
|
|
112
|
+
functionResults.push(conditionResult.programmaticResult);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Merge evaluation details
|
|
116
|
+
if (conditionResult.evaluationDetails) {
|
|
117
|
+
result.evaluationDetails?.push(...conditionResult.evaluationDetails);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Apply logic to function results only
|
|
122
|
+
if (functionResults.length > 0) {
|
|
123
|
+
if (logic === 'AND') {
|
|
124
|
+
result.programmaticResult = functionResults.every(r => r);
|
|
125
|
+
} else { // OR
|
|
126
|
+
result.programmaticResult = functionResults.some(r => r);
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
// No programmatic conditions, result depends on logic:
|
|
130
|
+
// AND: true (no functions to fail)
|
|
131
|
+
// OR: false (no functions to succeed)
|
|
132
|
+
result.programmaticResult = logic === 'AND' ? true : false;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Utility function to create a ConditionEvaluator instance.
|
|
141
|
+
* Ensures the template context has helpers included.
|
|
142
|
+
*/
|
|
143
|
+
export function createConditionEvaluator<TContext = unknown, TData = unknown>(
|
|
144
|
+
templateContext: Omit<Partial<TemplateContext<TContext, TData>>, 'helpers'>
|
|
145
|
+
): ConditionEvaluator<TContext, TData> {
|
|
146
|
+
const contextWithHelpers = createTemplateContext(templateContext);
|
|
147
|
+
return new ConditionEvaluator(contextWithHelpers);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Utility function to extract AI context strings from a condition without evaluation.
|
|
152
|
+
* Useful for collecting context strings for prompt generation.
|
|
153
|
+
*/
|
|
154
|
+
export function extractAIContextStrings<TContext = unknown, TData = unknown>(
|
|
155
|
+
condition: ConditionTemplate<TContext, TData>
|
|
156
|
+
): string[] {
|
|
157
|
+
const contextStrings: string[] = [];
|
|
158
|
+
|
|
159
|
+
if (!condition) {
|
|
160
|
+
return contextStrings;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (Array.isArray(condition)) {
|
|
164
|
+
for (const subCondition of condition) {
|
|
165
|
+
contextStrings.push(...extractAIContextStrings(subCondition));
|
|
166
|
+
}
|
|
167
|
+
} else if (typeof condition === 'string') {
|
|
168
|
+
contextStrings.push(condition);
|
|
169
|
+
}
|
|
170
|
+
// Functions don't contribute to AI context
|
|
171
|
+
|
|
172
|
+
return contextStrings;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Utility function to check if a condition has any programmatic components.
|
|
177
|
+
*/
|
|
178
|
+
export function hasProgrammaticConditions<TContext = unknown, TData = unknown>(
|
|
179
|
+
condition: ConditionTemplate<TContext, TData>
|
|
180
|
+
): boolean {
|
|
181
|
+
if (!condition) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (Array.isArray(condition)) {
|
|
186
|
+
return condition.some(subCondition => hasProgrammaticConditions(subCondition));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return typeof condition === 'function';
|
|
190
|
+
}
|
package/src/utils/index.ts
CHANGED
|
@@ -28,6 +28,7 @@ export {
|
|
|
28
28
|
renderTemplate,
|
|
29
29
|
renderTemplateObject,
|
|
30
30
|
formatKnowledgeBase,
|
|
31
|
+
createTemplateContext,
|
|
31
32
|
} from "./template";
|
|
32
33
|
|
|
33
34
|
// Cloning utilities
|
|
@@ -55,3 +56,14 @@ export { LoggerLevel, logger } from "./logger";
|
|
|
55
56
|
// Retry utilities
|
|
56
57
|
export type { RetryOptions } from "./retry";
|
|
57
58
|
export { retry, withTimeoutAndRetry } from "./retry";
|
|
59
|
+
|
|
60
|
+
// Condition utilities
|
|
61
|
+
export {
|
|
62
|
+
ConditionEvaluator,
|
|
63
|
+
createConditionEvaluator,
|
|
64
|
+
extractAIContextStrings,
|
|
65
|
+
hasProgrammaticConditions,
|
|
66
|
+
} from "./condition";
|
|
67
|
+
|
|
68
|
+
// JSON utilities
|
|
69
|
+
export { parseJSONResponse, tryParseJSONResponse } from "./json";
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON parsing utilities
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Clean and parse JSON response that might be wrapped in markdown code blocks
|
|
7
|
+
* Handles cases like:
|
|
8
|
+
* - ```json\n{...}\n```
|
|
9
|
+
* - ```\n{...}\n```
|
|
10
|
+
* - Plain JSON: {...}
|
|
11
|
+
*/
|
|
12
|
+
export function parseJSONResponse(text: string): unknown {
|
|
13
|
+
if (!text || typeof text !== 'string') {
|
|
14
|
+
throw new Error('Invalid JSON response: empty or non-string input');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Trim whitespace
|
|
18
|
+
let cleaned = text.trim();
|
|
19
|
+
|
|
20
|
+
// Remove markdown code block markers
|
|
21
|
+
// Match: ```json or ``` at start, and ``` at end
|
|
22
|
+
const codeBlockRegex = /^```(?:json)?\s*\n?([\s\S]*?)\n?```$/;
|
|
23
|
+
const match = cleaned.match(codeBlockRegex);
|
|
24
|
+
|
|
25
|
+
if (match) {
|
|
26
|
+
cleaned = match[1].trim();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Try to parse the cleaned JSON
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(cleaned);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
throw new Error(`Failed to parse JSON response: ${error instanceof Error ? error.message : String(error)}\nContent: ${cleaned.substring(0, 200)}...`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Safely parse JSON response, returning undefined on failure
|
|
39
|
+
*/
|
|
40
|
+
export function tryParseJSONResponse(text: string): unknown {
|
|
41
|
+
try {
|
|
42
|
+
return parseJSONResponse(text);
|
|
43
|
+
} catch {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
}
|
package/src/utils/retry.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Retry utility with exponential backoff
|
|
3
3
|
*/
|
|
4
|
+
import {logger} from './logger'
|
|
4
5
|
|
|
5
6
|
export interface RetryOptions<T> {
|
|
6
7
|
operation: () => Promise<T>;
|
|
@@ -78,18 +79,18 @@ export const withTimeoutAndRetry = async <T>(
|
|
|
78
79
|
delay: (attempt: number) => Math.min(1000 * Math.pow(2, attempt), 5000),
|
|
79
80
|
onRetry: (attempt: number, error: unknown) => {
|
|
80
81
|
const message = error instanceof Error ? error.message : String(error);
|
|
81
|
-
|
|
82
|
+
logger.error(
|
|
82
83
|
`[${operationName}] Failed attempt ${attempt + 1}:`,
|
|
83
84
|
message
|
|
84
85
|
);
|
|
85
86
|
const delay = Math.min(1000 * Math.pow(2, attempt), 5000);
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
logger.debug(`[${operationName}] Retrying in ${delay}ms...`);
|
|
88
|
+
logger.debug(
|
|
88
89
|
`[${operationName}] Attempt ${attempt + 2}/${maxRetries + 1}`
|
|
89
90
|
);
|
|
90
91
|
},
|
|
91
92
|
onFailure: (_error: unknown) => {
|
|
92
|
-
|
|
93
|
+
logger.error(`[${operationName}] All ${maxRetries + 1} attempts failed`);
|
|
93
94
|
return true;
|
|
94
95
|
},
|
|
95
96
|
});
|
package/src/utils/template.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Template, TemplateContext } from "../types";
|
|
2
|
+
import type { Event, MessageEventData } from "../types/history";
|
|
3
|
+
import { MessageRole, EventKind } from "../types/history";
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Renders a template, which can be a string or a function, using the provided context.
|
|
@@ -204,6 +206,113 @@ export function renderTemplateObject(
|
|
|
204
206
|
return obj;
|
|
205
207
|
}
|
|
206
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
|
+
|
|
207
316
|
/**
|
|
208
317
|
* Formats a JSON structure into readable markdown format.
|
|
209
318
|
* Handles nested objects, arrays, and primitive values.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAGlB,MAAM,UAAU,CAAC;AAGlB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxD,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAEpC,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAA2B;;IAU3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI;QACb,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;CAMF"}
|