@falai/agent 0.8.1 → 0.9.0-alpha-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -133
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/{core → cjs/src/core}/Agent.d.ts +65 -67
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1433 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +50 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +446 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +126 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/Route.js +116 -20
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +76 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +197 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +52 -33
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/{types → src/types}/route.d.ts +85 -31
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +70 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +34 -11
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/{cjs → src}/core/Agent.d.ts +65 -67
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1429 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +47 -17
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +31 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +442 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +126 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/{core → src/core}/Route.js +116 -20
- package/dist/src/core/Route.js.map +1 -0
- package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +98 -104
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +76 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +193 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +43 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +70 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +52 -33
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +39 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/{types → src/types}/route.d.ts +85 -31
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +70 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{types → src/types}/tool.d.ts +6 -8
- package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +32 -11
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +890 -251
- package/docs/api/overview.md +798 -0
- package/docs/core/agent/README.md +642 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +143 -94
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
- package/docs/core/ai-integration/prompt-composition.md +196 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +165 -0
- package/docs/core/conversation-flows/data-collection.md +545 -0
- package/docs/core/conversation-flows/route-dsl.md +479 -0
- package/docs/core/conversation-flows/routes.md +61 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +130 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +339 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +384 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
- package/examples/ai-providers/anthropic-integration.ts +377 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
- package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +112 -105
- package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
- package/examples/core-concepts/schema-driven-extraction.ts +301 -0
- package/examples/core-concepts/session-management.ts +394 -0
- package/examples/integrations/database-integration.ts +615 -0
- package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
- package/examples/integrations/server-session-management.ts +299 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
- package/examples/persistence/memory-sessions.ts +506 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
- package/examples/tools/basic-tools.ts +550 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1093 -478
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +77 -47
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +118 -38
- package/src/core/ResponsePipeline.ts +715 -0
- package/src/core/Route.ts +168 -51
- package/src/core/RoutingEngine.ts +178 -209
- package/src/core/SessionManager.ts +241 -0
- package/src/core/Step.ts +149 -67
- package/src/core/ToolExecutor.ts +37 -42
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +48 -36
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +43 -7
- package/src/types/persistence.ts +46 -28
- package/src/types/route.ts +104 -45
- package/src/types/session.ts +19 -213
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +9 -11
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +229 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/domain-scoping.ts +0 -366
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
package/dist/cjs/core/Agent.js
DELETED
|
@@ -1,966 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Core Agent implementation
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Agent = void 0;
|
|
7
|
-
const session_1 = require("../types/session");
|
|
8
|
-
const PromptComposer_1 = require("./PromptComposer");
|
|
9
|
-
const logger_1 = require("../utils/logger");
|
|
10
|
-
const Route_1 = require("./Route");
|
|
11
|
-
const Step_1 = require("./Step");
|
|
12
|
-
const DomainRegistry_1 = require("./DomainRegistry");
|
|
13
|
-
const PersistenceManager_1 = require("./PersistenceManager");
|
|
14
|
-
const RoutingEngine_1 = require("./RoutingEngine");
|
|
15
|
-
const ResponseEngine_1 = require("./ResponseEngine");
|
|
16
|
-
const ToolExecutor_1 = require("./ToolExecutor");
|
|
17
|
-
const event_1 = require("../utils/event");
|
|
18
|
-
const constants_1 = require("../constants");
|
|
19
|
-
/**
|
|
20
|
-
* Main Agent class with generic context support
|
|
21
|
-
*/
|
|
22
|
-
class Agent {
|
|
23
|
-
constructor(options) {
|
|
24
|
-
this.options = options;
|
|
25
|
-
this.terms = [];
|
|
26
|
-
this.guidelines = [];
|
|
27
|
-
this.capabilities = [];
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
-
this.routes = [];
|
|
30
|
-
this.domainRegistry = new DomainRegistry_1.DomainRegistry();
|
|
31
|
-
/**
|
|
32
|
-
* Dynamic domain property - populated via addDomain
|
|
33
|
-
*/
|
|
34
|
-
this.domain = {};
|
|
35
|
-
// Set log level based on debug option
|
|
36
|
-
if (options.debug) {
|
|
37
|
-
logger_1.logger.setLevel(logger_1.LoggerLevel.DEBUG);
|
|
38
|
-
}
|
|
39
|
-
// Validate context configuration
|
|
40
|
-
if (options.context !== undefined && options.contextProvider) {
|
|
41
|
-
throw new Error("Cannot provide both 'context' and 'contextProvider'. Choose one.");
|
|
42
|
-
}
|
|
43
|
-
// Initialize context if provided
|
|
44
|
-
this.context = options.context;
|
|
45
|
-
// Initialize current session if provided
|
|
46
|
-
this.currentSession = options.session;
|
|
47
|
-
// Initialize routing and response engines
|
|
48
|
-
this.routingEngine = new RoutingEngine_1.RoutingEngine({
|
|
49
|
-
maxCandidates: 5,
|
|
50
|
-
allowRouteSwitch: true,
|
|
51
|
-
switchThreshold: 70,
|
|
52
|
-
});
|
|
53
|
-
this.responseEngine = new ResponseEngine_1.ResponseEngine();
|
|
54
|
-
// Initialize persistence if configured
|
|
55
|
-
if (options.persistence) {
|
|
56
|
-
this.persistenceManager = new PersistenceManager_1.PersistenceManager(options.persistence);
|
|
57
|
-
// Initialize the adapter if it has an initialize method
|
|
58
|
-
if (options.persistence.adapter.initialize) {
|
|
59
|
-
options.persistence.adapter.initialize().catch((error) => {
|
|
60
|
-
logger_1.logger.error("[Agent] Persistence adapter initialization failed:", error);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// Initialize from options
|
|
65
|
-
if (options.terms) {
|
|
66
|
-
this.terms = [...options.terms];
|
|
67
|
-
}
|
|
68
|
-
if (options.guidelines) {
|
|
69
|
-
options.guidelines.forEach((guideline) => {
|
|
70
|
-
this.createGuideline(guideline);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
if (options.capabilities) {
|
|
74
|
-
options.capabilities.forEach((capability) => {
|
|
75
|
-
this.createCapability(capability);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
if (options.routes) {
|
|
79
|
-
options.routes.forEach((routeOptions) => {
|
|
80
|
-
this.createRoute(routeOptions);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Get agent name
|
|
86
|
-
*/
|
|
87
|
-
get name() {
|
|
88
|
-
return this.options.name;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Get agent description
|
|
92
|
-
*/
|
|
93
|
-
get description() {
|
|
94
|
-
return this.options.description;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Get agent goal
|
|
98
|
-
*/
|
|
99
|
-
get goal() {
|
|
100
|
-
return this.options.goal;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Create a new route (journey)
|
|
104
|
-
* @template TData - Type of data collected throughout the route
|
|
105
|
-
*/
|
|
106
|
-
createRoute(options) {
|
|
107
|
-
const route = new Route_1.Route(options);
|
|
108
|
-
this.routes.push(route);
|
|
109
|
-
return route;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Create a domain term for the glossary
|
|
113
|
-
*/
|
|
114
|
-
createTerm(term) {
|
|
115
|
-
this.terms.push(term);
|
|
116
|
-
return this;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Create a behavioral guideline
|
|
120
|
-
*/
|
|
121
|
-
createGuideline(guideline) {
|
|
122
|
-
const guidelineWithId = {
|
|
123
|
-
...guideline,
|
|
124
|
-
id: guideline.id || `guideline_${this.guidelines.length}`,
|
|
125
|
-
enabled: guideline.enabled !== false, // Default to true
|
|
126
|
-
};
|
|
127
|
-
this.guidelines.push(guidelineWithId);
|
|
128
|
-
return this;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Add a capability
|
|
132
|
-
*/
|
|
133
|
-
createCapability(capability) {
|
|
134
|
-
const capabilityWithId = {
|
|
135
|
-
...capability,
|
|
136
|
-
id: capability.id || `capability_${this.capabilities.length}`,
|
|
137
|
-
};
|
|
138
|
-
this.capabilities.push(capabilityWithId);
|
|
139
|
-
return this;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Add a domain with its tools/methods
|
|
143
|
-
* Automatically tags all ToolRef objects with their domain name for security enforcement
|
|
144
|
-
*/
|
|
145
|
-
addDomain(name, domainObject) {
|
|
146
|
-
// Tag all tools in this domain with the domain name for security enforcement
|
|
147
|
-
const taggedDomain = { ...domainObject };
|
|
148
|
-
for (const key in taggedDomain) {
|
|
149
|
-
const value = taggedDomain[key];
|
|
150
|
-
// Check if value is a ToolRef (has handler, id, name properties)
|
|
151
|
-
if (value &&
|
|
152
|
-
typeof value === "object" &&
|
|
153
|
-
"handler" in value &&
|
|
154
|
-
"id" in value &&
|
|
155
|
-
"name" in value) {
|
|
156
|
-
// Tag the tool with its domain name
|
|
157
|
-
value.domainName = name;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
this.domainRegistry.register(name, taggedDomain);
|
|
161
|
-
// Attach to the domain property for easy access
|
|
162
|
-
this.domain[name] = taggedDomain;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Update the agent's context
|
|
166
|
-
* Triggers the onContextUpdate lifecycle hook if configured
|
|
167
|
-
*/
|
|
168
|
-
async updateContext(updates) {
|
|
169
|
-
const previousContext = this.context;
|
|
170
|
-
// Merge updates with current context
|
|
171
|
-
this.context = {
|
|
172
|
-
...this.context,
|
|
173
|
-
...updates,
|
|
174
|
-
};
|
|
175
|
-
// Trigger lifecycle hook if configured
|
|
176
|
-
if (this.options.hooks?.onContextUpdate && previousContext !== undefined) {
|
|
177
|
-
await this.options.hooks.onContextUpdate(this.context, previousContext);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Update collected data in session with lifecycle hook support
|
|
182
|
-
* Triggers the onDataUpdate lifecycle hook if configured
|
|
183
|
-
* @internal
|
|
184
|
-
*/
|
|
185
|
-
async updateData(session, collectedUpdate) {
|
|
186
|
-
const previousCollected = { ...session.data };
|
|
187
|
-
// Merge new collected data
|
|
188
|
-
let newCollected = {
|
|
189
|
-
...session.data,
|
|
190
|
-
...collectedUpdate,
|
|
191
|
-
};
|
|
192
|
-
// Trigger lifecycle hook if configured
|
|
193
|
-
if (this.options.hooks?.onDataUpdate) {
|
|
194
|
-
newCollected = (await this.options.hooks.onDataUpdate(newCollected, previousCollected));
|
|
195
|
-
}
|
|
196
|
-
// Return updated session
|
|
197
|
-
return (0, session_1.mergeCollected)(session, newCollected);
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Get current context (fetches from provider if configured)
|
|
201
|
-
* @internal
|
|
202
|
-
*/
|
|
203
|
-
async getContext() {
|
|
204
|
-
// If context provider is configured, use it to fetch fresh context
|
|
205
|
-
if (this.options.contextProvider) {
|
|
206
|
-
return await this.options.contextProvider();
|
|
207
|
-
}
|
|
208
|
-
// Otherwise return the stored context
|
|
209
|
-
return this.context;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Generate a response based on history and context as a stream
|
|
213
|
-
*/
|
|
214
|
-
async *respondStream(params) {
|
|
215
|
-
const { history, contextOverride, signal } = params;
|
|
216
|
-
// Get current context (may fetch from provider)
|
|
217
|
-
let currentContext = await this.getContext();
|
|
218
|
-
// Call beforeRespond hook if configured
|
|
219
|
-
if (this.options.hooks?.beforeRespond && currentContext !== undefined) {
|
|
220
|
-
currentContext = await this.options.hooks.beforeRespond(currentContext);
|
|
221
|
-
// Update stored context with the result from beforeRespond
|
|
222
|
-
this.context = currentContext;
|
|
223
|
-
}
|
|
224
|
-
// Merge context with override
|
|
225
|
-
const effectiveContext = {
|
|
226
|
-
...currentContext,
|
|
227
|
-
...contextOverride,
|
|
228
|
-
};
|
|
229
|
-
// Initialize or get session (use current session if available)
|
|
230
|
-
let session = params.session || this.currentSession || (0, session_1.createSession)();
|
|
231
|
-
// PHASE 1: TOOL EXECUTION - Execute tools if current step has tool
|
|
232
|
-
if (session.currentRoute && session.currentStep) {
|
|
233
|
-
const currentRoute = this.routes.find((r) => r.id === session.currentRoute?.id);
|
|
234
|
-
if (currentRoute) {
|
|
235
|
-
const currentStep = currentRoute.getStep(session.currentStep.id);
|
|
236
|
-
if (currentStep) {
|
|
237
|
-
const transitions = currentStep.getTransitions();
|
|
238
|
-
const toolTransition = transitions.find((t) => t.spec.tool);
|
|
239
|
-
if (toolTransition?.spec.tool) {
|
|
240
|
-
const toolExecutor = new ToolExecutor_1.ToolExecutor();
|
|
241
|
-
// Get allowed domains from current route for security enforcement
|
|
242
|
-
const allowedDomains = currentRoute.getDomains();
|
|
243
|
-
const result = await toolExecutor.executeTool(toolTransition.spec.tool, effectiveContext, this.updateContext.bind(this), history, session.data, allowedDomains);
|
|
244
|
-
// Update context with tool results
|
|
245
|
-
if (result.contextUpdate) {
|
|
246
|
-
await this.updateContext(result.contextUpdate);
|
|
247
|
-
}
|
|
248
|
-
// Update collected data with tool results
|
|
249
|
-
if (result.collectedUpdate) {
|
|
250
|
-
session = await this.updateData(session, result.collectedUpdate);
|
|
251
|
-
logger_1.logger.debug(`[Agent] Tool updated collected data:`, result.collectedUpdate);
|
|
252
|
-
}
|
|
253
|
-
logger_1.logger.debug(`[Agent] Executed tool: ${result.toolName} (success: ${result.success})`);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
// PHASE 2: ROUTING + STEP SELECTION - Determine which route and step to use (combined)
|
|
259
|
-
let selectedRoute;
|
|
260
|
-
let responseDirectives;
|
|
261
|
-
let selectedStep;
|
|
262
|
-
let isRouteComplete = false;
|
|
263
|
-
// Check for pending transition from previous route completion
|
|
264
|
-
if (session.pendingTransition) {
|
|
265
|
-
const targetRoute = this.routes.find((r) => r.id === session.pendingTransition?.targetRouteId);
|
|
266
|
-
if (targetRoute) {
|
|
267
|
-
logger_1.logger.debug(`[Agent] Auto-transitioning from pending transition to route: ${targetRoute.title}`);
|
|
268
|
-
// Clear pending transition and enter new route
|
|
269
|
-
session = {
|
|
270
|
-
...session,
|
|
271
|
-
pendingTransition: undefined,
|
|
272
|
-
};
|
|
273
|
-
session = (0, session_1.enterRoute)(session, targetRoute.id, targetRoute.title);
|
|
274
|
-
// Merge initial data if available
|
|
275
|
-
if (targetRoute.initialData) {
|
|
276
|
-
session = (0, session_1.mergeCollected)(session, targetRoute.initialData);
|
|
277
|
-
}
|
|
278
|
-
selectedRoute = targetRoute;
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
logger_1.logger.warn(`[Agent] Pending transition target route not found: ${session.pendingTransition.targetRouteId}`);
|
|
282
|
-
// Clear invalid transition
|
|
283
|
-
session = {
|
|
284
|
-
...session,
|
|
285
|
-
pendingTransition: undefined,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// If no pending transition or transition handled, do normal routing
|
|
290
|
-
if (this.routes.length > 0 && !selectedRoute) {
|
|
291
|
-
const orchestration = await this.routingEngine.decideRouteAndStep({
|
|
292
|
-
routes: this.routes,
|
|
293
|
-
session,
|
|
294
|
-
history,
|
|
295
|
-
agentMeta: {
|
|
296
|
-
name: this.options.name,
|
|
297
|
-
goal: this.options.goal,
|
|
298
|
-
description: this.options.description,
|
|
299
|
-
personality: this.options.personality,
|
|
300
|
-
},
|
|
301
|
-
provider: this.options.provider,
|
|
302
|
-
context: effectiveContext,
|
|
303
|
-
signal,
|
|
304
|
-
});
|
|
305
|
-
selectedRoute = orchestration.selectedRoute;
|
|
306
|
-
selectedStep = orchestration.selectedStep;
|
|
307
|
-
responseDirectives = orchestration.responseDirectives;
|
|
308
|
-
session = orchestration.session;
|
|
309
|
-
isRouteComplete = orchestration.isRouteComplete || false;
|
|
310
|
-
// Log if route is complete
|
|
311
|
-
if (isRouteComplete) {
|
|
312
|
-
logger_1.logger.debug(`[Agent] Route complete: all required data collected, END_ROUTE reached`);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
// PHASE 3: DETERMINE NEXT STEP - Use step from combined decision or get initial step
|
|
316
|
-
if (selectedRoute && !isRouteComplete) {
|
|
317
|
-
let nextStep;
|
|
318
|
-
// If we have a selected step from the combined routing decision, use it
|
|
319
|
-
if (selectedStep) {
|
|
320
|
-
nextStep = selectedStep;
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
// New route or no step selected - get initial step or first valid step
|
|
324
|
-
const candidates = this.routingEngine.getCandidateSteps(selectedRoute, undefined, session.data || {});
|
|
325
|
-
if (candidates.length > 0) {
|
|
326
|
-
nextStep = candidates[0].step;
|
|
327
|
-
logger_1.logger.debug(`[Agent] Using first valid step: ${nextStep.id} for new route`);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
// Fallback to initial step even if it should be skipped
|
|
331
|
-
nextStep = selectedRoute.initialStep;
|
|
332
|
-
logger_1.logger.warn(`[Agent] No valid steps found, using initial step: ${nextStep.id}`);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
// Update session with next step
|
|
336
|
-
session = (0, session_1.enterStep)(session, nextStep.id, nextStep.description);
|
|
337
|
-
logger_1.logger.debug(`[Agent] Entered step: ${nextStep.id}`);
|
|
338
|
-
// PHASE 4: RESPONSE GENERATION - Stream message using selected route and step
|
|
339
|
-
// Get last user message
|
|
340
|
-
const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
|
|
341
|
-
// Build response schema for this route (with collect fields from step)
|
|
342
|
-
const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, nextStep);
|
|
343
|
-
// Build response prompt
|
|
344
|
-
const responsePrompt = this.responseEngine.buildResponsePrompt(selectedRoute, nextStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), responseDirectives, history, lastUserMessage, {
|
|
345
|
-
name: this.options.name,
|
|
346
|
-
goal: this.options.goal,
|
|
347
|
-
description: this.options.description,
|
|
348
|
-
personality: this.options.personality,
|
|
349
|
-
});
|
|
350
|
-
// Generate message stream using AI provider
|
|
351
|
-
const stream = this.options.provider.generateMessageStream({
|
|
352
|
-
prompt: responsePrompt,
|
|
353
|
-
history,
|
|
354
|
-
context: effectiveContext,
|
|
355
|
-
signal,
|
|
356
|
-
parameters: {
|
|
357
|
-
jsonSchema: responseSchema,
|
|
358
|
-
schemaName: "response_stream_output",
|
|
359
|
-
},
|
|
360
|
-
});
|
|
361
|
-
// Stream chunks to caller
|
|
362
|
-
for await (const chunk of stream) {
|
|
363
|
-
const toolCalls = undefined;
|
|
364
|
-
// Extract collected data on final chunk
|
|
365
|
-
if (chunk.done && chunk.structured && nextStep.collectFields) {
|
|
366
|
-
const collectedData = {};
|
|
367
|
-
// The structured response includes both base fields and collected extraction fields
|
|
368
|
-
const structuredData = chunk.structured;
|
|
369
|
-
for (const field of nextStep.collectFields) {
|
|
370
|
-
if (field in structuredData) {
|
|
371
|
-
collectedData[field] = structuredData[field];
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
// Merge collected data into session
|
|
375
|
-
if (Object.keys(collectedData).length > 0) {
|
|
376
|
-
session = await this.updateData(session, collectedData);
|
|
377
|
-
logger_1.logger.debug(`[Agent] Collected data:`, collectedData);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
// Extract any additional data from structured response on final chunk
|
|
381
|
-
if (chunk.done &&
|
|
382
|
-
chunk.structured &&
|
|
383
|
-
typeof chunk.structured === "object" &&
|
|
384
|
-
"contextUpdate" in chunk.structured) {
|
|
385
|
-
await this.updateContext(chunk.structured
|
|
386
|
-
.contextUpdate);
|
|
387
|
-
}
|
|
388
|
-
// Auto-save session step on final chunk
|
|
389
|
-
if (chunk.done &&
|
|
390
|
-
this.persistenceManager &&
|
|
391
|
-
session.id &&
|
|
392
|
-
this.options.persistence?.autoSave !== false) {
|
|
393
|
-
await this.persistenceManager.saveSessionState(session.id, session);
|
|
394
|
-
logger_1.logger.debug(`[Agent] Auto-saved session step to persistence: ${session.id}`);
|
|
395
|
-
}
|
|
396
|
-
// Update current session if we have one
|
|
397
|
-
if (chunk.done && this.currentSession) {
|
|
398
|
-
this.currentSession = session;
|
|
399
|
-
}
|
|
400
|
-
yield {
|
|
401
|
-
delta: chunk.delta,
|
|
402
|
-
accumulated: chunk.accumulated,
|
|
403
|
-
done: chunk.done,
|
|
404
|
-
session, // Return updated session
|
|
405
|
-
toolCalls,
|
|
406
|
-
isRouteComplete,
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
else if (isRouteComplete && selectedRoute) {
|
|
411
|
-
// Route is complete - generate completion message then check for onComplete transition
|
|
412
|
-
const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
|
|
413
|
-
// Get endStep spec from route
|
|
414
|
-
const endStepSpec = selectedRoute.endStepSpec;
|
|
415
|
-
// Create a temporary step for completion message generation using endStep configuration
|
|
416
|
-
const completionStep = new Step_1.Step(selectedRoute.id, endStepSpec.instructions ||
|
|
417
|
-
"Summarize what was accomplished and confirm completion", endStepSpec.id || constants_1.END_ROUTE_ID, endStepSpec.collect, undefined, endStepSpec.requires, endStepSpec.instructions ||
|
|
418
|
-
"Summarize what was accomplished and confirm completion based on the conversation history and collected data");
|
|
419
|
-
// Build response schema for completion
|
|
420
|
-
const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, completionStep);
|
|
421
|
-
// Build completion response prompt
|
|
422
|
-
const completionPrompt = this.responseEngine.buildResponsePrompt(selectedRoute, completionStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), undefined, // No directives for completion
|
|
423
|
-
history, lastUserMessage, {
|
|
424
|
-
name: this.options.name,
|
|
425
|
-
goal: this.options.goal,
|
|
426
|
-
description: this.options.description,
|
|
427
|
-
personality: this.options.personality,
|
|
428
|
-
});
|
|
429
|
-
// Stream completion message using AI provider
|
|
430
|
-
const stream = this.options.provider.generateMessageStream({
|
|
431
|
-
prompt: completionPrompt,
|
|
432
|
-
history,
|
|
433
|
-
context: effectiveContext,
|
|
434
|
-
signal,
|
|
435
|
-
parameters: {
|
|
436
|
-
jsonSchema: responseSchema,
|
|
437
|
-
schemaName: "completion_message_stream",
|
|
438
|
-
},
|
|
439
|
-
});
|
|
440
|
-
logger_1.logger.debug(`[Agent] Streaming completion message for route: ${selectedRoute.title}`);
|
|
441
|
-
// Check for onComplete transition
|
|
442
|
-
const transitionConfig = await selectedRoute.evaluateOnComplete({ data: session.data }, effectiveContext);
|
|
443
|
-
if (transitionConfig) {
|
|
444
|
-
// Find target route by ID or title
|
|
445
|
-
const targetRoute = this.routes.find((r) => r.id === transitionConfig.nextStep ||
|
|
446
|
-
r.title === transitionConfig.nextStep);
|
|
447
|
-
if (targetRoute) {
|
|
448
|
-
// Set pending transition in session
|
|
449
|
-
session = {
|
|
450
|
-
...session,
|
|
451
|
-
pendingTransition: {
|
|
452
|
-
targetRouteId: targetRoute.id,
|
|
453
|
-
condition: transitionConfig.condition,
|
|
454
|
-
reason: "route_complete",
|
|
455
|
-
},
|
|
456
|
-
};
|
|
457
|
-
logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed with pending transition to: ${targetRoute.title}`);
|
|
458
|
-
}
|
|
459
|
-
else {
|
|
460
|
-
logger_1.logger.warn(`[Agent] Route ${selectedRoute.title} completed but target route not found: ${transitionConfig.nextStep}`);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
// Set step to END_ROUTE marker
|
|
464
|
-
session = (0, session_1.enterStep)(session, constants_1.END_ROUTE_ID, "Route completed");
|
|
465
|
-
logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed. Entered END_ROUTE step.`);
|
|
466
|
-
// Stream completion chunks
|
|
467
|
-
for await (const chunk of stream) {
|
|
468
|
-
// Update current session if we have one
|
|
469
|
-
if (chunk.done && this.currentSession) {
|
|
470
|
-
this.currentSession = session;
|
|
471
|
-
}
|
|
472
|
-
yield {
|
|
473
|
-
delta: chunk.delta,
|
|
474
|
-
accumulated: chunk.accumulated,
|
|
475
|
-
done: chunk.done,
|
|
476
|
-
session,
|
|
477
|
-
toolCalls: undefined,
|
|
478
|
-
isRouteComplete: true,
|
|
479
|
-
};
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
else {
|
|
483
|
-
// Fallback: No routes defined, stream a simple response
|
|
484
|
-
const fallbackPrompt = new PromptComposer_1.PromptComposer()
|
|
485
|
-
.addAgentMeta({
|
|
486
|
-
name: this.options.name,
|
|
487
|
-
goal: this.options.goal,
|
|
488
|
-
description: this.options.description,
|
|
489
|
-
})
|
|
490
|
-
.addPersonality(this.options.personality)
|
|
491
|
-
.addInteractionHistory(history)
|
|
492
|
-
.addGlossary(this.terms)
|
|
493
|
-
.addGuidelines(this.guidelines)
|
|
494
|
-
.addCapabilities(this.capabilities)
|
|
495
|
-
.build();
|
|
496
|
-
const stream = this.options.provider.generateMessageStream({
|
|
497
|
-
prompt: fallbackPrompt,
|
|
498
|
-
history,
|
|
499
|
-
context: effectiveContext,
|
|
500
|
-
signal,
|
|
501
|
-
parameters: {
|
|
502
|
-
jsonSchema: {
|
|
503
|
-
type: "object",
|
|
504
|
-
properties: {
|
|
505
|
-
message: { type: "string" },
|
|
506
|
-
},
|
|
507
|
-
required: ["message"],
|
|
508
|
-
additionalProperties: false,
|
|
509
|
-
},
|
|
510
|
-
schemaName: "fallback_stream_response",
|
|
511
|
-
},
|
|
512
|
-
});
|
|
513
|
-
for await (const chunk of stream) {
|
|
514
|
-
// Update current session if we have one
|
|
515
|
-
if (chunk.done && this.currentSession) {
|
|
516
|
-
this.currentSession = session;
|
|
517
|
-
}
|
|
518
|
-
yield {
|
|
519
|
-
delta: chunk.delta,
|
|
520
|
-
accumulated: chunk.accumulated,
|
|
521
|
-
done: chunk.done,
|
|
522
|
-
session, // Return updated session
|
|
523
|
-
toolCalls: undefined,
|
|
524
|
-
isRouteComplete: false,
|
|
525
|
-
};
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
/**
|
|
530
|
-
* Generate a response based on history and context
|
|
531
|
-
*/
|
|
532
|
-
async respond(params) {
|
|
533
|
-
const { history, contextOverride, signal } = params;
|
|
534
|
-
// Get current context (may fetch from provider)
|
|
535
|
-
let currentContext = await this.getContext();
|
|
536
|
-
// Call beforeRespond hook if configured
|
|
537
|
-
if (this.options.hooks?.beforeRespond && currentContext !== undefined) {
|
|
538
|
-
currentContext = await this.options.hooks.beforeRespond(currentContext);
|
|
539
|
-
// Update stored context with the result from beforeRespond
|
|
540
|
-
this.context = currentContext;
|
|
541
|
-
}
|
|
542
|
-
// Merge context with override
|
|
543
|
-
const effectiveContext = {
|
|
544
|
-
...currentContext,
|
|
545
|
-
...contextOverride,
|
|
546
|
-
};
|
|
547
|
-
// Initialize or get session (use current session if available)
|
|
548
|
-
let session = params.session || this.currentSession || (0, session_1.createSession)();
|
|
549
|
-
// PHASE 1: TOOL EXECUTION - Execute tools if current step has tool
|
|
550
|
-
if (session.currentRoute && session.currentStep) {
|
|
551
|
-
const currentRoute = this.routes.find((r) => r.id === session.currentRoute?.id);
|
|
552
|
-
if (currentRoute) {
|
|
553
|
-
const currentStep = currentRoute.getStep(session.currentStep.id);
|
|
554
|
-
if (currentStep) {
|
|
555
|
-
const transitions = currentStep.getTransitions();
|
|
556
|
-
const toolTransition = transitions.find((t) => t.spec.tool);
|
|
557
|
-
if (toolTransition?.spec.tool) {
|
|
558
|
-
const toolExecutor = new ToolExecutor_1.ToolExecutor();
|
|
559
|
-
// Get allowed domains from current route for security enforcement
|
|
560
|
-
const allowedDomains = currentRoute.getDomains();
|
|
561
|
-
const result = await toolExecutor.executeTool(toolTransition.spec.tool, effectiveContext, this.updateContext.bind(this), history, session.data, allowedDomains);
|
|
562
|
-
// Update context with tool results
|
|
563
|
-
if (result.contextUpdate) {
|
|
564
|
-
await this.updateContext(result.contextUpdate);
|
|
565
|
-
}
|
|
566
|
-
// Update collected data with tool results
|
|
567
|
-
if (result.collectedUpdate) {
|
|
568
|
-
session = await this.updateData(session, result.collectedUpdate);
|
|
569
|
-
logger_1.logger.debug(`[Agent] Tool updated collected data:`, result.collectedUpdate);
|
|
570
|
-
}
|
|
571
|
-
logger_1.logger.debug(`[Agent] Executed tool: ${result.toolName} (success: ${result.success})`);
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
// PHASE 2: ROUTING + STEP SELECTION - Determine which route and step to use (combined)
|
|
577
|
-
let selectedRoute;
|
|
578
|
-
let responseDirectives;
|
|
579
|
-
let selectedStep;
|
|
580
|
-
let isRouteComplete = false;
|
|
581
|
-
// Check for pending transition from previous route completion
|
|
582
|
-
if (session.pendingTransition) {
|
|
583
|
-
const targetRoute = this.routes.find((r) => r.id === session.pendingTransition?.targetRouteId);
|
|
584
|
-
if (targetRoute) {
|
|
585
|
-
logger_1.logger.debug(`[Agent] Auto-transitioning from pending transition to route: ${targetRoute.title}`);
|
|
586
|
-
// Clear pending transition and enter new route
|
|
587
|
-
session = {
|
|
588
|
-
...session,
|
|
589
|
-
pendingTransition: undefined,
|
|
590
|
-
};
|
|
591
|
-
session = (0, session_1.enterRoute)(session, targetRoute.id, targetRoute.title);
|
|
592
|
-
// Merge initial data if available
|
|
593
|
-
if (targetRoute.initialData) {
|
|
594
|
-
session = (0, session_1.mergeCollected)(session, targetRoute.initialData);
|
|
595
|
-
}
|
|
596
|
-
selectedRoute = targetRoute;
|
|
597
|
-
}
|
|
598
|
-
else {
|
|
599
|
-
logger_1.logger.warn(`[Agent] Pending transition target route not found: ${session.pendingTransition.targetRouteId}`);
|
|
600
|
-
// Clear invalid transition
|
|
601
|
-
session = {
|
|
602
|
-
...session,
|
|
603
|
-
pendingTransition: undefined,
|
|
604
|
-
};
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
// If no pending transition or transition handled, do normal routing
|
|
608
|
-
if (this.routes.length > 0 && !selectedRoute) {
|
|
609
|
-
const orchestration = await this.routingEngine.decideRouteAndStep({
|
|
610
|
-
routes: this.routes,
|
|
611
|
-
session,
|
|
612
|
-
history,
|
|
613
|
-
agentMeta: {
|
|
614
|
-
name: this.options.name,
|
|
615
|
-
goal: this.options.goal,
|
|
616
|
-
description: this.options.description,
|
|
617
|
-
personality: this.options.personality,
|
|
618
|
-
},
|
|
619
|
-
provider: this.options.provider,
|
|
620
|
-
context: effectiveContext,
|
|
621
|
-
signal,
|
|
622
|
-
});
|
|
623
|
-
selectedRoute = orchestration.selectedRoute;
|
|
624
|
-
selectedStep = orchestration.selectedStep;
|
|
625
|
-
responseDirectives = orchestration.responseDirectives;
|
|
626
|
-
session = orchestration.session;
|
|
627
|
-
isRouteComplete = orchestration.isRouteComplete || false;
|
|
628
|
-
// Log if route is complete
|
|
629
|
-
if (isRouteComplete) {
|
|
630
|
-
logger_1.logger.debug(`[Agent] Route complete: all required data collected, END_ROUTE reached`);
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
// PHASE 3: DETERMINE NEXT STEP - Use step from combined decision or get initial step
|
|
634
|
-
let message;
|
|
635
|
-
const toolCalls = undefined;
|
|
636
|
-
if (selectedRoute && !isRouteComplete) {
|
|
637
|
-
let nextStep;
|
|
638
|
-
// If we have a selected step from the combined routing decision, use it
|
|
639
|
-
if (selectedStep) {
|
|
640
|
-
nextStep = selectedStep;
|
|
641
|
-
}
|
|
642
|
-
else {
|
|
643
|
-
// New route or no step selected - get initial step or first valid step
|
|
644
|
-
const candidates = this.routingEngine.getCandidateSteps(selectedRoute, undefined, session.data || {});
|
|
645
|
-
if (candidates.length > 0) {
|
|
646
|
-
nextStep = candidates[0].step;
|
|
647
|
-
logger_1.logger.debug(`[Agent] Using first valid step: ${nextStep.id} for new route`);
|
|
648
|
-
}
|
|
649
|
-
else {
|
|
650
|
-
// Fallback to initial step even if it should be skipped
|
|
651
|
-
nextStep = selectedRoute.initialStep;
|
|
652
|
-
logger_1.logger.warn(`[Agent] No valid steps found, using initial step: ${nextStep.id}`);
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
// Update session with next step
|
|
656
|
-
session = (0, session_1.enterStep)(session, nextStep.id, nextStep.description);
|
|
657
|
-
logger_1.logger.debug(`[Agent] Entered step: ${nextStep.id}`);
|
|
658
|
-
// PHASE 4: RESPONSE GENERATION - Generate message using selected route and step
|
|
659
|
-
// Get last user message
|
|
660
|
-
const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
|
|
661
|
-
// Build response schema for this route (with collect fields from step)
|
|
662
|
-
const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, nextStep);
|
|
663
|
-
// Build response prompt
|
|
664
|
-
const responsePrompt = this.responseEngine.buildResponsePrompt(selectedRoute, nextStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), responseDirectives, history, lastUserMessage, {
|
|
665
|
-
name: this.options.name,
|
|
666
|
-
goal: this.options.goal,
|
|
667
|
-
description: this.options.description,
|
|
668
|
-
personality: this.options.personality,
|
|
669
|
-
});
|
|
670
|
-
// Generate message using AI provider
|
|
671
|
-
const result = await this.options.provider.generateMessage({
|
|
672
|
-
prompt: responsePrompt,
|
|
673
|
-
history,
|
|
674
|
-
context: effectiveContext,
|
|
675
|
-
signal,
|
|
676
|
-
parameters: {
|
|
677
|
-
jsonSchema: responseSchema,
|
|
678
|
-
schemaName: "response_output",
|
|
679
|
-
},
|
|
680
|
-
});
|
|
681
|
-
message = result.structured?.message || result.message;
|
|
682
|
-
// Extract collected data from response
|
|
683
|
-
if (result.structured && nextStep.collectFields) {
|
|
684
|
-
const collectedData = {};
|
|
685
|
-
// The structured response includes both base fields and collected extraction fields
|
|
686
|
-
const structuredData = result.structured;
|
|
687
|
-
for (const field of nextStep.collectFields) {
|
|
688
|
-
if (field in structuredData) {
|
|
689
|
-
collectedData[field] = structuredData[field];
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
// Merge collected data into session
|
|
693
|
-
if (Object.keys(collectedData).length > 0) {
|
|
694
|
-
session = await this.updateData(session, collectedData);
|
|
695
|
-
logger_1.logger.debug(`[Agent] Collected data:`, collectedData);
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
// Extract any additional data from structured response
|
|
699
|
-
if (result.structured &&
|
|
700
|
-
typeof result.structured === "object" &&
|
|
701
|
-
"contextUpdate" in result.structured) {
|
|
702
|
-
await this.updateContext(result.structured
|
|
703
|
-
.contextUpdate);
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
else if (isRouteComplete && selectedRoute) {
|
|
707
|
-
// Route is complete - generate completion message then check for onComplete transition
|
|
708
|
-
const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
|
|
709
|
-
// Get endStep spec from route
|
|
710
|
-
const endStepSpec = selectedRoute.endStepSpec;
|
|
711
|
-
// Create a temporary step for completion message generation using endStep configuration
|
|
712
|
-
const completionStep = new Step_1.Step(selectedRoute.id, endStepSpec.instructions ||
|
|
713
|
-
"Summarize what was accomplished and confirm completion", endStepSpec.id || constants_1.END_ROUTE_ID, endStepSpec.collect, undefined, endStepSpec.requires, endStepSpec.instructions ||
|
|
714
|
-
"Summarize what was accomplished and confirm completion based on the conversation history and collected data");
|
|
715
|
-
// Build response schema for completion
|
|
716
|
-
const responseSchema = this.responseEngine.responseSchemaForRoute(selectedRoute, completionStep);
|
|
717
|
-
// Build completion response prompt
|
|
718
|
-
const completionPrompt = this.responseEngine.buildResponsePrompt(selectedRoute, completionStep, selectedRoute.getRules(), selectedRoute.getProhibitions(), undefined, // No directives for completion
|
|
719
|
-
history, lastUserMessage, {
|
|
720
|
-
name: this.options.name,
|
|
721
|
-
goal: this.options.goal,
|
|
722
|
-
description: this.options.description,
|
|
723
|
-
personality: this.options.personality,
|
|
724
|
-
});
|
|
725
|
-
// Generate completion message using AI provider
|
|
726
|
-
const completionResult = await this.options.provider.generateMessage({
|
|
727
|
-
prompt: completionPrompt,
|
|
728
|
-
history,
|
|
729
|
-
context: effectiveContext,
|
|
730
|
-
signal,
|
|
731
|
-
parameters: {
|
|
732
|
-
jsonSchema: responseSchema,
|
|
733
|
-
schemaName: "completion_message",
|
|
734
|
-
},
|
|
735
|
-
});
|
|
736
|
-
message =
|
|
737
|
-
completionResult.structured?.message || completionResult.message;
|
|
738
|
-
logger_1.logger.debug(`[Agent] Generated completion message for route: ${selectedRoute.title}`);
|
|
739
|
-
// Check for onComplete transition
|
|
740
|
-
const transitionConfig = await selectedRoute.evaluateOnComplete({ data: session.data }, effectiveContext);
|
|
741
|
-
if (transitionConfig) {
|
|
742
|
-
// Find target route by ID or title
|
|
743
|
-
const targetRoute = this.routes.find((r) => r.id === transitionConfig.nextStep ||
|
|
744
|
-
r.title === transitionConfig.nextStep);
|
|
745
|
-
if (targetRoute) {
|
|
746
|
-
// Set pending transition in session
|
|
747
|
-
session = {
|
|
748
|
-
...session,
|
|
749
|
-
pendingTransition: {
|
|
750
|
-
targetRouteId: targetRoute.id,
|
|
751
|
-
condition: transitionConfig.condition,
|
|
752
|
-
reason: "route_complete",
|
|
753
|
-
},
|
|
754
|
-
};
|
|
755
|
-
logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed with pending transition to: ${targetRoute.title}`);
|
|
756
|
-
}
|
|
757
|
-
else {
|
|
758
|
-
logger_1.logger.warn(`[Agent] Route ${selectedRoute.title} completed but target route not found: ${transitionConfig.nextStep}`);
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
// Set step to END_ROUTE marker
|
|
762
|
-
session = (0, session_1.enterStep)(session, constants_1.END_ROUTE_ID, "Route completed");
|
|
763
|
-
logger_1.logger.debug(`[Agent] Route ${selectedRoute.title} completed. Entered END_ROUTE step.`);
|
|
764
|
-
}
|
|
765
|
-
else {
|
|
766
|
-
// Fallback: No routes defined, generate a simple response
|
|
767
|
-
const fallbackPrompt = new PromptComposer_1.PromptComposer()
|
|
768
|
-
.addAgentMeta({
|
|
769
|
-
name: this.options.name,
|
|
770
|
-
goal: this.options.goal,
|
|
771
|
-
description: this.options.description,
|
|
772
|
-
})
|
|
773
|
-
.addPersonality(this.options.personality)
|
|
774
|
-
.addInteractionHistory(history)
|
|
775
|
-
.addGlossary(this.terms)
|
|
776
|
-
.addGuidelines(this.guidelines)
|
|
777
|
-
.addCapabilities(this.capabilities)
|
|
778
|
-
.build();
|
|
779
|
-
const result = await this.options.provider.generateMessage({
|
|
780
|
-
prompt: fallbackPrompt,
|
|
781
|
-
history,
|
|
782
|
-
context: effectiveContext,
|
|
783
|
-
signal,
|
|
784
|
-
parameters: {
|
|
785
|
-
jsonSchema: {
|
|
786
|
-
type: "object",
|
|
787
|
-
properties: {
|
|
788
|
-
message: { type: "string" },
|
|
789
|
-
},
|
|
790
|
-
required: ["message"],
|
|
791
|
-
additionalProperties: false,
|
|
792
|
-
},
|
|
793
|
-
schemaName: "fallback_response",
|
|
794
|
-
},
|
|
795
|
-
});
|
|
796
|
-
message = result.structured?.message || result.message;
|
|
797
|
-
}
|
|
798
|
-
// Auto-save session step to persistence if configured
|
|
799
|
-
if (this.persistenceManager &&
|
|
800
|
-
session.id &&
|
|
801
|
-
this.options.persistence?.autoSave !== false) {
|
|
802
|
-
await this.persistenceManager.saveSessionState(session.id, session);
|
|
803
|
-
logger_1.logger.debug(`[Agent] Auto-saved session step to persistence: ${session.id}`);
|
|
804
|
-
}
|
|
805
|
-
// Update current session if we have one
|
|
806
|
-
if (this.currentSession) {
|
|
807
|
-
this.currentSession = session;
|
|
808
|
-
}
|
|
809
|
-
return {
|
|
810
|
-
message,
|
|
811
|
-
session, // Return updated session with route/step info
|
|
812
|
-
toolCalls,
|
|
813
|
-
isRouteComplete, // Indicates if the route has reached END_ROUTE with all data collected
|
|
814
|
-
};
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* Get all routes
|
|
818
|
-
*/
|
|
819
|
-
getRoutes() {
|
|
820
|
-
return [...this.routes];
|
|
821
|
-
}
|
|
822
|
-
/**
|
|
823
|
-
* Get all terms
|
|
824
|
-
*/
|
|
825
|
-
getTerms() {
|
|
826
|
-
return [...this.terms];
|
|
827
|
-
}
|
|
828
|
-
/**
|
|
829
|
-
* Get all guidelines
|
|
830
|
-
*/
|
|
831
|
-
getGuidelines() {
|
|
832
|
-
return [...this.guidelines];
|
|
833
|
-
}
|
|
834
|
-
/**
|
|
835
|
-
* Get all capabilities
|
|
836
|
-
*/
|
|
837
|
-
getCapabilities() {
|
|
838
|
-
return [...this.capabilities];
|
|
839
|
-
}
|
|
840
|
-
/**
|
|
841
|
-
* Get the domain registry
|
|
842
|
-
*/
|
|
843
|
-
getDomainRegistry() {
|
|
844
|
-
return this.domainRegistry;
|
|
845
|
-
}
|
|
846
|
-
/**
|
|
847
|
-
* Get the persistence manager (if configured)
|
|
848
|
-
*/
|
|
849
|
-
getPersistenceManager() {
|
|
850
|
-
return this.persistenceManager;
|
|
851
|
-
}
|
|
852
|
-
/**
|
|
853
|
-
* Check if persistence is enabled
|
|
854
|
-
*/
|
|
855
|
-
hasPersistence() {
|
|
856
|
-
return this.persistenceManager !== undefined;
|
|
857
|
-
}
|
|
858
|
-
/**
|
|
859
|
-
* Get allowed domains for a specific route
|
|
860
|
-
* @param routeId - Route ID to check
|
|
861
|
-
* @returns Filtered domains object, or all domains if route has no restrictions
|
|
862
|
-
*/
|
|
863
|
-
getDomainsForRoute(routeId) {
|
|
864
|
-
const route = this.routes.find((r) => r.id === routeId);
|
|
865
|
-
if (!route) {
|
|
866
|
-
// Route not found, return all domains
|
|
867
|
-
return this.domainRegistry.all();
|
|
868
|
-
}
|
|
869
|
-
const allowedDomains = route.getDomains();
|
|
870
|
-
return this.domainRegistry.getFiltered(allowedDomains);
|
|
871
|
-
}
|
|
872
|
-
/**
|
|
873
|
-
* Get allowed domains for a specific route by title
|
|
874
|
-
* @param routeTitle - Route title to check
|
|
875
|
-
* @returns Filtered domains object, or all domains if route has no restrictions
|
|
876
|
-
*/
|
|
877
|
-
getDomainsForRouteByTitle(routeTitle) {
|
|
878
|
-
const route = this.routes.find((r) => r.title === routeTitle);
|
|
879
|
-
if (!route) {
|
|
880
|
-
// Route not found, return all domains
|
|
881
|
-
return this.domainRegistry.all();
|
|
882
|
-
}
|
|
883
|
-
const allowedDomains = route.getDomains();
|
|
884
|
-
return this.domainRegistry.getFiltered(allowedDomains);
|
|
885
|
-
}
|
|
886
|
-
/**
|
|
887
|
-
* Set the current session for convenience methods
|
|
888
|
-
* @param session - Session step to use for subsequent calls
|
|
889
|
-
*/
|
|
890
|
-
setCurrentSession(session) {
|
|
891
|
-
this.currentSession = session;
|
|
892
|
-
}
|
|
893
|
-
/**
|
|
894
|
-
* Get the current session (if set)
|
|
895
|
-
*/
|
|
896
|
-
getCurrentSession() {
|
|
897
|
-
return this.currentSession;
|
|
898
|
-
}
|
|
899
|
-
/**
|
|
900
|
-
* Clear the current session
|
|
901
|
-
*/
|
|
902
|
-
clearCurrentSession() {
|
|
903
|
-
this.currentSession = undefined;
|
|
904
|
-
}
|
|
905
|
-
/**
|
|
906
|
-
* Get collected data from current session
|
|
907
|
-
* @param routeId - Optional route ID to get data for (uses current route if not provided)
|
|
908
|
-
* @returns The collected data from the current session
|
|
909
|
-
*/
|
|
910
|
-
getData(routeId) {
|
|
911
|
-
if (!this.currentSession) {
|
|
912
|
-
return {};
|
|
913
|
-
}
|
|
914
|
-
if (routeId) {
|
|
915
|
-
return (this.currentSession.dataByRoute?.[routeId] ||
|
|
916
|
-
{});
|
|
917
|
-
}
|
|
918
|
-
return this.currentSession.data || {};
|
|
919
|
-
}
|
|
920
|
-
/**
|
|
921
|
-
* Manually transition to a different route
|
|
922
|
-
* Sets a pending transition that will be executed on the next respond() call
|
|
923
|
-
*
|
|
924
|
-
* @param routeIdOrTitle - Route ID or title to transition to
|
|
925
|
-
* @param session - Session step to update (uses current session if not provided)
|
|
926
|
-
* @param condition - Optional AI-evaluated condition for the transition
|
|
927
|
-
* @returns Updated session with pending transition
|
|
928
|
-
*
|
|
929
|
-
* @example
|
|
930
|
-
* // After route completes
|
|
931
|
-
* if (response.isRouteComplete && response.session) {
|
|
932
|
-
* const updatedSession = agent.nextStepRoute("feedback-collection", response.session);
|
|
933
|
-
* // Next respond() call will automatically transition to feedback route
|
|
934
|
-
* const nextResponse = await agent.respond({ history, session: updatedSession });
|
|
935
|
-
* }
|
|
936
|
-
*/
|
|
937
|
-
nextStepRoute(routeIdOrTitle, session, condition) {
|
|
938
|
-
const targetSession = session || this.currentSession;
|
|
939
|
-
if (!targetSession) {
|
|
940
|
-
throw new Error("No session provided and no current session available. Please provide a session to transition.");
|
|
941
|
-
}
|
|
942
|
-
// Find target route by ID or title
|
|
943
|
-
const targetRoute = this.routes.find((r) => r.id === routeIdOrTitle || r.title === routeIdOrTitle);
|
|
944
|
-
if (!targetRoute) {
|
|
945
|
-
throw new Error(`Route not found: ${routeIdOrTitle}. Available routes: ${this.routes
|
|
946
|
-
.map((r) => r.title)
|
|
947
|
-
.join(", ")}`);
|
|
948
|
-
}
|
|
949
|
-
const updatedSession = {
|
|
950
|
-
...targetSession,
|
|
951
|
-
pendingTransition: {
|
|
952
|
-
targetRouteId: targetRoute.id,
|
|
953
|
-
condition,
|
|
954
|
-
reason: "manual",
|
|
955
|
-
},
|
|
956
|
-
};
|
|
957
|
-
// Update current session if using it
|
|
958
|
-
if (!session && this.currentSession) {
|
|
959
|
-
this.currentSession = updatedSession;
|
|
960
|
-
}
|
|
961
|
-
logger_1.logger.debug(`[Agent] Set pending manual transition to route: ${targetRoute.title}`);
|
|
962
|
-
return updatedSession;
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
|
-
exports.Agent = Agent;
|
|
966
|
-
//# sourceMappingURL=Agent.js.map
|