@multiplayer-app/ai-agent-node 0.1.0-beta.8 → 0.1.0-beta.80
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 +2 -2
- package/dist/cjs/config.cjs +88 -37
- package/dist/cjs/config.cjs.map +1 -1
- package/dist/cjs/config.d.ts +62 -23
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/helpers/AIHelper.cjs +134 -68
- package/dist/cjs/helpers/AIHelper.cjs.map +1 -1
- package/dist/cjs/helpers/AIHelper.d.ts +24 -16
- package/dist/cjs/helpers/AIHelper.d.ts.map +1 -1
- package/dist/cjs/helpers/AIHelper.test.cjs +22 -15
- package/dist/cjs/helpers/AIHelper.test.cjs.map +1 -1
- package/dist/cjs/helpers/ConfigHelper.cjs +15 -6
- package/dist/cjs/helpers/ConfigHelper.cjs.map +1 -1
- package/dist/cjs/helpers/ConfigHelper.d.ts.map +1 -1
- package/dist/cjs/helpers/FileHelper.cjs +131 -151
- package/dist/cjs/helpers/FileHelper.cjs.map +1 -1
- package/dist/cjs/helpers/FileHelper.d.ts +19 -25
- package/dist/cjs/helpers/FileHelper.d.ts.map +1 -1
- package/dist/cjs/helpers/index.cjs +0 -1
- package/dist/cjs/helpers/index.cjs.map +1 -1
- package/dist/cjs/helpers/index.d.ts +0 -1
- package/dist/cjs/helpers/index.d.ts.map +1 -1
- package/dist/cjs/index.cjs +125 -28
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +47 -11
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/libs/index.cjs +0 -1
- package/dist/cjs/libs/index.cjs.map +1 -1
- package/dist/cjs/libs/index.d.ts +0 -1
- package/dist/cjs/libs/index.d.ts.map +1 -1
- package/dist/cjs/libs/s3/index.cjs +3 -39
- package/dist/cjs/libs/s3/index.cjs.map +1 -1
- package/dist/cjs/libs/s3/index.d.ts +1 -2
- package/dist/cjs/libs/s3/index.d.ts.map +1 -1
- package/dist/cjs/libs/s3/s3.lib.cjs +173 -186
- package/dist/cjs/libs/s3/s3.lib.cjs.map +1 -1
- package/dist/cjs/libs/s3/s3.lib.d.ts +29 -22
- package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -1
- package/dist/cjs/processors/ActivityProcessor.cjs +53 -0
- package/dist/cjs/processors/ActivityProcessor.cjs.map +1 -0
- package/dist/cjs/processors/ActivityProcessor.d.ts +34 -0
- package/dist/cjs/processors/ActivityProcessor.d.ts.map +1 -0
- package/dist/cjs/processors/ActivityProcessor.test.cjs +139 -0
- package/dist/cjs/processors/ActivityProcessor.test.cjs.map +1 -0
- package/dist/cjs/processors/ActivityProcessor.test.d.ts +2 -0
- package/dist/cjs/processors/ActivityProcessor.test.d.ts.map +1 -0
- package/dist/cjs/processors/AgentProcessor.cjs +47 -0
- package/dist/cjs/processors/AgentProcessor.cjs.map +1 -0
- package/dist/cjs/processors/AgentProcessor.d.ts +25 -0
- package/dist/cjs/processors/AgentProcessor.d.ts.map +1 -0
- package/dist/cjs/processors/AgentProcessor.test.cjs +103 -0
- package/dist/cjs/processors/AgentProcessor.test.cjs.map +1 -0
- package/dist/cjs/processors/AgentProcessor.test.d.ts +2 -0
- package/dist/cjs/processors/AgentProcessor.test.d.ts.map +1 -0
- package/dist/cjs/processors/ChatProcessor.cjs +1029 -148
- package/dist/cjs/processors/ChatProcessor.cjs.map +1 -1
- package/dist/cjs/processors/ChatProcessor.d.ts +108 -12
- package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -1
- package/dist/cjs/processors/ChatProcessor.test.cjs +803 -0
- package/dist/cjs/processors/ChatProcessor.test.cjs.map +1 -0
- package/dist/cjs/processors/ChatProcessor.test.d.ts +2 -0
- package/dist/cjs/processors/ChatProcessor.test.d.ts.map +1 -0
- package/dist/cjs/processors/index.cjs +2 -0
- package/dist/cjs/processors/index.cjs.map +1 -1
- package/dist/cjs/processors/index.d.ts +2 -0
- package/dist/cjs/processors/index.d.ts.map +1 -1
- package/dist/cjs/services/AIService.cjs +114 -68
- package/dist/cjs/services/AIService.cjs.map +1 -1
- package/dist/cjs/services/AIService.d.ts +34 -13
- package/dist/cjs/services/AIService.d.ts.map +1 -1
- package/dist/cjs/services/CredentialProvider.cjs +62 -0
- package/dist/cjs/services/CredentialProvider.cjs.map +1 -0
- package/dist/cjs/services/CredentialProvider.d.ts +20 -0
- package/dist/cjs/services/CredentialProvider.d.ts.map +1 -0
- package/dist/cjs/services/CredentialProvider.test.cjs +71 -0
- package/dist/cjs/services/CredentialProvider.test.cjs.map +1 -0
- package/dist/cjs/services/CredentialProvider.test.d.ts +2 -0
- package/dist/cjs/services/CredentialProvider.test.d.ts.map +1 -0
- package/dist/cjs/services/ExecutionContext.cjs +3 -0
- package/dist/cjs/services/ExecutionContext.cjs.map +1 -0
- package/dist/cjs/services/ExecutionContext.d.ts +4 -0
- package/dist/cjs/services/ExecutionContext.d.ts.map +1 -0
- package/dist/cjs/services/InternalEventsHandler.cjs +3 -3
- package/dist/cjs/services/InternalEventsHandler.cjs.map +1 -1
- package/dist/cjs/services/InternalEventsHandler.d.ts +3 -1
- package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -1
- package/dist/cjs/services/ModelAccessPolicy.cjs +24 -0
- package/dist/cjs/services/ModelAccessPolicy.cjs.map +1 -0
- package/dist/cjs/services/ModelAccessPolicy.d.ts +7 -0
- package/dist/cjs/services/ModelAccessPolicy.d.ts.map +1 -0
- package/dist/cjs/services/ModelFetcher.cjs +2 -8
- package/dist/cjs/services/ModelFetcher.cjs.map +1 -1
- package/dist/cjs/services/ModelFetcher.d.ts +2 -7
- package/dist/cjs/services/ModelFetcher.d.ts.map +1 -1
- package/dist/cjs/services/ProviderClientFactory.cjs +29 -0
- package/dist/cjs/services/ProviderClientFactory.cjs.map +1 -0
- package/dist/cjs/services/ProviderClientFactory.d.ts +9 -0
- package/dist/cjs/services/ProviderClientFactory.d.ts.map +1 -0
- package/dist/cjs/services/RedisService.cjs +20 -16
- package/dist/cjs/services/RedisService.cjs.map +1 -1
- package/dist/cjs/services/RedisService.d.ts +5 -2
- package/dist/cjs/services/RedisService.d.ts.map +1 -1
- package/dist/cjs/services/SocketService.cjs +8 -8
- package/dist/cjs/services/SocketService.cjs.map +1 -1
- package/dist/cjs/services/SocketService.d.ts +9 -6
- package/dist/cjs/services/SocketService.d.ts.map +1 -1
- package/dist/cjs/services/TenantCredentialResolver.cjs +136 -0
- package/dist/cjs/services/TenantCredentialResolver.cjs.map +1 -0
- package/dist/cjs/services/TenantCredentialResolver.d.ts +32 -0
- package/dist/cjs/services/TenantCredentialResolver.d.ts.map +1 -0
- package/dist/cjs/services/TenantCredentialResolver.test.cjs +113 -0
- package/dist/cjs/services/TenantCredentialResolver.test.cjs.map +1 -0
- package/dist/cjs/services/TenantCredentialResolver.test.d.ts +2 -0
- package/dist/cjs/services/TenantCredentialResolver.test.d.ts.map +1 -0
- package/dist/cjs/services/index.cjs +5 -1
- package/dist/cjs/services/index.cjs.map +1 -1
- package/dist/cjs/services/index.d.ts +5 -1
- package/dist/cjs/services/index.d.ts.map +1 -1
- package/dist/cjs/store/AgentStore.cjs +14 -4
- package/dist/cjs/store/AgentStore.cjs.map +1 -1
- package/dist/cjs/store/AgentStore.d.ts +3 -1
- package/dist/cjs/store/AgentStore.d.ts.map +1 -1
- package/dist/cjs/store/ConfigStore.cjs +14 -3
- package/dist/cjs/store/ConfigStore.cjs.map +1 -1
- package/dist/cjs/store/ConfigStore.d.ts +2 -0
- package/dist/cjs/store/ConfigStore.d.ts.map +1 -1
- package/dist/cjs/tools/generateChartTool.d.ts +2 -2
- package/dist/cjs/tools/proposeFormValuesTool.d.ts +2 -2
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/utils/utils.cjs +31 -0
- package/dist/cjs/utils/utils.cjs.map +1 -0
- package/dist/cjs/utils/utils.d.ts +5 -0
- package/dist/cjs/utils/utils.d.ts.map +1 -0
- package/dist/esm/config.d.ts +62 -23
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +88 -35
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/helpers/AIHelper.d.ts +24 -16
- package/dist/esm/helpers/AIHelper.d.ts.map +1 -1
- package/dist/esm/helpers/AIHelper.js +141 -73
- package/dist/esm/helpers/AIHelper.js.map +1 -1
- package/dist/esm/helpers/AIHelper.test.js +22 -15
- package/dist/esm/helpers/AIHelper.test.js.map +1 -1
- package/dist/esm/helpers/ConfigHelper.d.ts.map +1 -1
- package/dist/esm/helpers/ConfigHelper.js +15 -6
- package/dist/esm/helpers/ConfigHelper.js.map +1 -1
- package/dist/esm/helpers/FileHelper.d.ts +19 -25
- package/dist/esm/helpers/FileHelper.d.ts.map +1 -1
- package/dist/esm/helpers/FileHelper.js +131 -146
- package/dist/esm/helpers/FileHelper.js.map +1 -1
- package/dist/esm/helpers/index.d.ts +0 -1
- package/dist/esm/helpers/index.d.ts.map +1 -1
- package/dist/esm/helpers/index.js +0 -1
- package/dist/esm/helpers/index.js.map +1 -1
- package/dist/esm/index.d.ts +47 -11
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +98 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/libs/index.d.ts +0 -1
- package/dist/esm/libs/index.d.ts.map +1 -1
- package/dist/esm/libs/index.js +0 -1
- package/dist/esm/libs/index.js.map +1 -1
- package/dist/esm/libs/s3/index.d.ts +1 -2
- package/dist/esm/libs/s3/index.d.ts.map +1 -1
- package/dist/esm/libs/s3/index.js +1 -2
- package/dist/esm/libs/s3/index.js.map +1 -1
- package/dist/esm/libs/s3/s3.lib.d.ts +29 -22
- package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -1
- package/dist/esm/libs/s3/s3.lib.js +177 -172
- package/dist/esm/libs/s3/s3.lib.js.map +1 -1
- package/dist/esm/processors/ActivityProcessor.d.ts +34 -0
- package/dist/esm/processors/ActivityProcessor.d.ts.map +1 -0
- package/dist/esm/processors/ActivityProcessor.js +50 -0
- package/dist/esm/processors/ActivityProcessor.js.map +1 -0
- package/dist/esm/processors/ActivityProcessor.test.d.ts +2 -0
- package/dist/esm/processors/ActivityProcessor.test.d.ts.map +1 -0
- package/dist/esm/processors/ActivityProcessor.test.js +137 -0
- package/dist/esm/processors/ActivityProcessor.test.js.map +1 -0
- package/dist/esm/processors/AgentProcessor.d.ts +25 -0
- package/dist/esm/processors/AgentProcessor.d.ts.map +1 -0
- package/dist/esm/processors/AgentProcessor.js +44 -0
- package/dist/esm/processors/AgentProcessor.js.map +1 -0
- package/dist/esm/processors/AgentProcessor.test.d.ts +2 -0
- package/dist/esm/processors/AgentProcessor.test.d.ts.map +1 -0
- package/dist/esm/processors/AgentProcessor.test.js +101 -0
- package/dist/esm/processors/AgentProcessor.test.js.map +1 -0
- package/dist/esm/processors/ChatProcessor.d.ts +108 -12
- package/dist/esm/processors/ChatProcessor.d.ts.map +1 -1
- package/dist/esm/processors/ChatProcessor.js +1038 -150
- package/dist/esm/processors/ChatProcessor.js.map +1 -1
- package/dist/esm/processors/ChatProcessor.test.d.ts +2 -0
- package/dist/esm/processors/ChatProcessor.test.d.ts.map +1 -0
- package/dist/esm/processors/ChatProcessor.test.js +801 -0
- package/dist/esm/processors/ChatProcessor.test.js.map +1 -0
- package/dist/esm/processors/index.d.ts +2 -0
- package/dist/esm/processors/index.d.ts.map +1 -1
- package/dist/esm/processors/index.js +2 -0
- package/dist/esm/processors/index.js.map +1 -1
- package/dist/esm/services/AIService.d.ts +34 -13
- package/dist/esm/services/AIService.d.ts.map +1 -1
- package/dist/esm/services/AIService.js +118 -68
- package/dist/esm/services/AIService.js.map +1 -1
- package/dist/esm/services/CredentialProvider.d.ts +20 -0
- package/dist/esm/services/CredentialProvider.d.ts.map +1 -0
- package/dist/esm/services/CredentialProvider.js +60 -0
- package/dist/esm/services/CredentialProvider.js.map +1 -0
- package/dist/esm/services/CredentialProvider.test.d.ts +2 -0
- package/dist/esm/services/CredentialProvider.test.d.ts.map +1 -0
- package/dist/esm/services/CredentialProvider.test.js +69 -0
- package/dist/esm/services/CredentialProvider.test.js.map +1 -0
- package/dist/esm/services/ExecutionContext.d.ts +4 -0
- package/dist/esm/services/ExecutionContext.d.ts.map +1 -0
- package/dist/esm/services/ExecutionContext.js +2 -0
- package/dist/esm/services/ExecutionContext.js.map +1 -0
- package/dist/esm/services/InternalEventsHandler.d.ts +3 -1
- package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -1
- package/dist/esm/services/InternalEventsHandler.js +4 -3
- package/dist/esm/services/InternalEventsHandler.js.map +1 -1
- package/dist/esm/services/ModelAccessPolicy.d.ts +7 -0
- package/dist/esm/services/ModelAccessPolicy.d.ts.map +1 -0
- package/dist/esm/services/ModelAccessPolicy.js +20 -0
- package/dist/esm/services/ModelAccessPolicy.js.map +1 -0
- package/dist/esm/services/ModelFetcher.d.ts +2 -7
- package/dist/esm/services/ModelFetcher.d.ts.map +1 -1
- package/dist/esm/services/ModelFetcher.js +2 -8
- package/dist/esm/services/ModelFetcher.js.map +1 -1
- package/dist/esm/services/ProviderClientFactory.d.ts +9 -0
- package/dist/esm/services/ProviderClientFactory.d.ts.map +1 -0
- package/dist/esm/services/ProviderClientFactory.js +25 -0
- package/dist/esm/services/ProviderClientFactory.js.map +1 -0
- package/dist/esm/services/RedisService.d.ts +5 -2
- package/dist/esm/services/RedisService.d.ts.map +1 -1
- package/dist/esm/services/RedisService.js +21 -14
- package/dist/esm/services/RedisService.js.map +1 -1
- package/dist/esm/services/SocketService.d.ts +9 -6
- package/dist/esm/services/SocketService.d.ts.map +1 -1
- package/dist/esm/services/SocketService.js +10 -6
- package/dist/esm/services/SocketService.js.map +1 -1
- package/dist/esm/services/TenantCredentialResolver.d.ts +32 -0
- package/dist/esm/services/TenantCredentialResolver.d.ts.map +1 -0
- package/dist/esm/services/TenantCredentialResolver.js +133 -0
- package/dist/esm/services/TenantCredentialResolver.js.map +1 -0
- package/dist/esm/services/TenantCredentialResolver.test.d.ts +2 -0
- package/dist/esm/services/TenantCredentialResolver.test.d.ts.map +1 -0
- package/dist/esm/services/TenantCredentialResolver.test.js +111 -0
- package/dist/esm/services/TenantCredentialResolver.test.js.map +1 -0
- package/dist/esm/services/index.d.ts +5 -1
- package/dist/esm/services/index.d.ts.map +1 -1
- package/dist/esm/services/index.js +5 -1
- package/dist/esm/services/index.js.map +1 -1
- package/dist/esm/store/AgentStore.d.ts +3 -1
- package/dist/esm/store/AgentStore.d.ts.map +1 -1
- package/dist/esm/store/AgentStore.js +15 -2
- package/dist/esm/store/AgentStore.js.map +1 -1
- package/dist/esm/store/ConfigStore.d.ts +2 -0
- package/dist/esm/store/ConfigStore.d.ts.map +1 -1
- package/dist/esm/store/ConfigStore.js +14 -3
- package/dist/esm/store/ConfigStore.js.map +1 -1
- package/dist/esm/tools/generateChartTool.d.ts +2 -2
- package/dist/esm/tools/proposeFormValuesTool.d.ts +2 -2
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/utils/utils.d.ts +5 -0
- package/dist/esm/utils/utils.d.ts.map +1 -0
- package/dist/esm/utils/utils.js +26 -0
- package/dist/esm/utils/utils.js.map +1 -0
- package/package.json +7 -8
- package/dist/cjs/helpers/SetupHelper.cjs +0 -37
- package/dist/cjs/helpers/SetupHelper.cjs.map +0 -1
- package/dist/cjs/helpers/SetupHelper.d.ts +0 -5
- package/dist/cjs/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/config.cjs +0 -8
- package/dist/cjs/libs/kafka/config.cjs.map +0 -1
- package/dist/cjs/libs/kafka/config.d.ts +0 -5
- package/dist/cjs/libs/kafka/config.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/consumer.cjs +0 -131
- package/dist/cjs/libs/kafka/consumer.cjs.map +0 -1
- package/dist/cjs/libs/kafka/consumer.d.ts +0 -16
- package/dist/cjs/libs/kafka/consumer.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/index.cjs +0 -19
- package/dist/cjs/libs/kafka/index.cjs.map +0 -1
- package/dist/cjs/libs/kafka/index.d.ts +0 -3
- package/dist/cjs/libs/kafka/index.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/kafka.cjs +0 -27
- package/dist/cjs/libs/kafka/kafka.cjs.map +0 -1
- package/dist/cjs/libs/kafka/kafka.d.ts +0 -3
- package/dist/cjs/libs/kafka/kafka.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/producer.cjs +0 -48
- package/dist/cjs/libs/kafka/producer.cjs.map +0 -1
- package/dist/cjs/libs/kafka/producer.d.ts +0 -11
- package/dist/cjs/libs/kafka/producer.d.ts.map +0 -1
- package/dist/cjs/libs/logger/config.cjs +0 -8
- package/dist/cjs/libs/logger/config.cjs.map +0 -1
- package/dist/cjs/libs/logger/config.d.ts +0 -5
- package/dist/cjs/libs/logger/config.d.ts.map +0 -1
- package/dist/cjs/libs/s3/config.cjs +0 -10
- package/dist/cjs/libs/s3/config.cjs.map +0 -1
- package/dist/cjs/libs/s3/config.d.ts +0 -7
- package/dist/cjs/libs/s3/config.d.ts.map +0 -1
- package/dist/cjs/services/KafkaService.cjs +0 -122
- package/dist/cjs/services/KafkaService.cjs.map +0 -1
- package/dist/cjs/services/KafkaService.d.ts +0 -35
- package/dist/cjs/services/KafkaService.d.ts.map +0 -1
- package/dist/esm/helpers/SetupHelper.d.ts +0 -5
- package/dist/esm/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/esm/helpers/SetupHelper.js +0 -32
- package/dist/esm/helpers/SetupHelper.js.map +0 -1
- package/dist/esm/libs/kafka/config.d.ts +0 -5
- package/dist/esm/libs/kafka/config.d.ts.map +0 -1
- package/dist/esm/libs/kafka/config.js +0 -5
- package/dist/esm/libs/kafka/config.js.map +0 -1
- package/dist/esm/libs/kafka/consumer.d.ts +0 -16
- package/dist/esm/libs/kafka/consumer.d.ts.map +0 -1
- package/dist/esm/libs/kafka/consumer.js +0 -125
- package/dist/esm/libs/kafka/consumer.js.map +0 -1
- package/dist/esm/libs/kafka/index.d.ts +0 -3
- package/dist/esm/libs/kafka/index.d.ts.map +0 -1
- package/dist/esm/libs/kafka/index.js +0 -3
- package/dist/esm/libs/kafka/index.js.map +0 -1
- package/dist/esm/libs/kafka/kafka.d.ts +0 -3
- package/dist/esm/libs/kafka/kafka.d.ts.map +0 -1
- package/dist/esm/libs/kafka/kafka.js +0 -24
- package/dist/esm/libs/kafka/kafka.js.map +0 -1
- package/dist/esm/libs/kafka/producer.d.ts +0 -11
- package/dist/esm/libs/kafka/producer.d.ts.map +0 -1
- package/dist/esm/libs/kafka/producer.js +0 -45
- package/dist/esm/libs/kafka/producer.js.map +0 -1
- package/dist/esm/libs/logger/config.d.ts +0 -5
- package/dist/esm/libs/logger/config.d.ts.map +0 -1
- package/dist/esm/libs/logger/config.js +0 -5
- package/dist/esm/libs/logger/config.js.map +0 -1
- package/dist/esm/libs/s3/config.d.ts +0 -7
- package/dist/esm/libs/s3/config.d.ts.map +0 -1
- package/dist/esm/libs/s3/config.js +0 -7
- package/dist/esm/libs/s3/config.js.map +0 -1
- package/dist/esm/services/KafkaService.d.ts +0 -35
- package/dist/esm/services/KafkaService.d.ts.map +0 -1
- package/dist/esm/services/KafkaService.js +0 -123
- package/dist/esm/services/KafkaService.js.map +0 -1
package/README.md
CHANGED
|
@@ -419,7 +419,7 @@ const stream = await chatProcessor.createMessageStream({
|
|
|
419
419
|
messageId: 'message-id',
|
|
420
420
|
approvalId: 'approval-id',
|
|
421
421
|
approved: true,
|
|
422
|
-
|
|
422
|
+
userResponse: 'User approved'
|
|
423
423
|
});
|
|
424
424
|
|
|
425
425
|
// Or use streamMessage directly if you already have the chat object
|
|
@@ -429,7 +429,7 @@ await chatProcessor.streamMessage(chat, {
|
|
|
429
429
|
messageId: 'message-id',
|
|
430
430
|
approvalId: 'approval-id',
|
|
431
431
|
approved: true,
|
|
432
|
-
|
|
432
|
+
userResponse: 'User approved'
|
|
433
433
|
});
|
|
434
434
|
```
|
|
435
435
|
|
package/dist/cjs/config.cjs
CHANGED
|
@@ -1,47 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.getRedisUrl = getRedisUrl;
|
|
3
|
+
exports.ConfigProvider = void 0;
|
|
5
4
|
require("dotenv/config");
|
|
5
|
+
function createDefaultConfig() {
|
|
6
|
+
return {
|
|
7
|
+
debug: false,
|
|
8
|
+
redis: {
|
|
9
|
+
host: 'localhost',
|
|
10
|
+
port: 6379,
|
|
11
|
+
},
|
|
12
|
+
ai: {
|
|
13
|
+
maxContextMessages: 10,
|
|
14
|
+
},
|
|
15
|
+
s3: {
|
|
16
|
+
bucket: 'ai-agent-attachments',
|
|
17
|
+
presignedUrlExpires: 120,
|
|
18
|
+
region: process.env.AWS_REGION || 'us-east-1',
|
|
19
|
+
},
|
|
20
|
+
fileProcessing: {
|
|
21
|
+
maxExtractedTextSize: 51200,
|
|
22
|
+
enableTextExtraction: true,
|
|
23
|
+
},
|
|
24
|
+
logger: {
|
|
25
|
+
nodeEnv: 'development',
|
|
26
|
+
appName: 'ai-agent-node',
|
|
27
|
+
logLevel: 'debug',
|
|
28
|
+
},
|
|
29
|
+
socket: {
|
|
30
|
+
path: undefined
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
6
34
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
35
|
+
* Deep merge utility function
|
|
36
|
+
* Merges source into target, with source values taking precedence
|
|
9
37
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// Kafka configuration
|
|
32
|
-
kafka: {
|
|
33
|
-
groupId: process.env.KAFKA_GROUP_ID ?? 'ai-agent-node',
|
|
34
|
-
chatTitleGenerationTopic: process.env.KAFKA_CHAT_TITLE_GENERATION_TOPIC ?? 'chat-title-generation',
|
|
35
|
-
backgroundChatProcessingTopic: process.env.KAFKA_BACKGROUND_CHAT_PROCESSING_TOPIC ?? 'background-chat-processing',
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
+
function deepMerge(target, source) {
|
|
39
|
+
const result = { ...target };
|
|
40
|
+
for (const key in source) {
|
|
41
|
+
if (source[key] !== undefined) {
|
|
42
|
+
if (typeof source[key] === 'object' &&
|
|
43
|
+
source[key] !== null &&
|
|
44
|
+
!Array.isArray(source[key]) &&
|
|
45
|
+
typeof target[key] === 'object' &&
|
|
46
|
+
target[key] !== null &&
|
|
47
|
+
!Array.isArray(target[key])) {
|
|
48
|
+
// Recursively merge nested objects
|
|
49
|
+
result[key] = deepMerge(target[key], source[key]);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Override with source value
|
|
53
|
+
result[key] = source[key];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
38
59
|
/**
|
|
39
|
-
*
|
|
60
|
+
* ConfigProvider manages runtime configuration
|
|
61
|
+
* Allows setting config overrides through AIAgentService
|
|
40
62
|
*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
63
|
+
class ConfigProvider {
|
|
64
|
+
constructor() {
|
|
65
|
+
this.runtimeConfig = createDefaultConfig();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the singleton instance of ConfigProvider
|
|
69
|
+
*/
|
|
70
|
+
static getInstance() {
|
|
71
|
+
if (!ConfigProvider.instance) {
|
|
72
|
+
ConfigProvider.instance = new ConfigProvider();
|
|
73
|
+
}
|
|
74
|
+
return ConfigProvider.instance;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the current runtime configuration
|
|
78
|
+
*/
|
|
79
|
+
getConfig() {
|
|
80
|
+
return this.runtimeConfig;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Set configuration overrides
|
|
84
|
+
* Merges the provided overrides with existing config (deep merge)
|
|
85
|
+
* @param overrides - Partial config to override existing values
|
|
86
|
+
*/
|
|
87
|
+
setConfig(overrides) {
|
|
88
|
+
this.runtimeConfig = deepMerge(this.runtimeConfig, overrides);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Reset configuration to defaults (from environment variables)
|
|
92
|
+
*/
|
|
93
|
+
reset() {
|
|
94
|
+
this.runtimeConfig = createDefaultConfig();
|
|
44
95
|
}
|
|
45
|
-
return `redis://${exports.config.redis.host}:${exports.config.redis.port}`;
|
|
46
96
|
}
|
|
97
|
+
exports.ConfigProvider = ConfigProvider;
|
|
47
98
|
//# sourceMappingURL=config.js.map
|
package/dist/cjs/config.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,yBAAuB;AAgDvB,SAAS,mBAAmB;IAC1B,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAG,IAAI;SACZ;QACD,EAAE,EAAE;YACF,kBAAkB,EAAE,EAAE;SACvB;QACD,EAAE,EAAE;YACF,MAAM,EAAE,sBAAsB;YAC9B,mBAAmB,EAAE,GAAG;YACxB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;SAC9C;QACD,cAAc,EAAE;YACd,oBAAoB,EAAE,KAAK;YAC3B,oBAAoB,EAAE,IAAI;SAC3B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;SAChB;KACF,CAAC;AACJ,CAAC;AAGD;;;GAGG;AACH,SAAS,SAAS,CAAgC,MAAS,EAAE,MAAkB;IAC7E,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,IACI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;gBACpB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;gBACpB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC7B,CAAC;gBACD,mCAAmC;gBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAQ,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAQ,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAa,cAAc;IAIzB;QACE,IAAI,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,SAA0B;QAClC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC;CACF;AAxCD,wCAwCC"}
|
package/dist/cjs/config.d.ts
CHANGED
|
@@ -3,33 +3,72 @@ import 'dotenv/config';
|
|
|
3
3
|
* Centralized configuration for the AI Agent Service
|
|
4
4
|
* All environment variables are accessed through this file
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
export interface Config {
|
|
7
|
+
debug: boolean;
|
|
8
|
+
redis: {
|
|
9
|
+
url?: string;
|
|
10
|
+
host?: string;
|
|
11
|
+
port?: number;
|
|
12
|
+
password?: string;
|
|
13
|
+
database?: number;
|
|
13
14
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
ai: {
|
|
16
|
+
openaiApiKey?: string;
|
|
17
|
+
openaiBaseUrl?: string;
|
|
18
|
+
anthropicApiKey?: string;
|
|
19
|
+
anthropicBaseUrl?: string;
|
|
20
|
+
googleApiKey?: string;
|
|
21
|
+
googleBaseUrl?: string;
|
|
22
|
+
openrouterApiKey?: string;
|
|
23
|
+
openrouterBaseUrl?: string;
|
|
24
|
+
credentialsEncryptionKey?: string;
|
|
25
|
+
maxContextMessages?: number;
|
|
26
|
+
defaultModel?: string;
|
|
21
27
|
};
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
s3: {
|
|
29
|
+
bucket?: string;
|
|
30
|
+
host?: string;
|
|
31
|
+
presignedUrlExpires?: number;
|
|
32
|
+
region?: string;
|
|
24
33
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
readonly backgroundChatProcessingTopic: string;
|
|
34
|
+
fileProcessing: {
|
|
35
|
+
maxExtractedTextSize?: number;
|
|
36
|
+
enableTextExtraction?: boolean;
|
|
29
37
|
};
|
|
30
|
-
|
|
38
|
+
logger: {
|
|
39
|
+
nodeEnv?: string;
|
|
40
|
+
appName?: string;
|
|
41
|
+
logLevel?: string;
|
|
42
|
+
};
|
|
43
|
+
socket: {
|
|
44
|
+
path?: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
31
47
|
/**
|
|
32
|
-
*
|
|
48
|
+
* ConfigProvider manages runtime configuration
|
|
49
|
+
* Allows setting config overrides through AIAgentService
|
|
33
50
|
*/
|
|
34
|
-
export declare
|
|
51
|
+
export declare class ConfigProvider {
|
|
52
|
+
private static instance;
|
|
53
|
+
private runtimeConfig;
|
|
54
|
+
private constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Get the singleton instance of ConfigProvider
|
|
57
|
+
*/
|
|
58
|
+
static getInstance(): ConfigProvider;
|
|
59
|
+
/**
|
|
60
|
+
* Get the current runtime configuration
|
|
61
|
+
*/
|
|
62
|
+
getConfig(): Config;
|
|
63
|
+
/**
|
|
64
|
+
* Set configuration overrides
|
|
65
|
+
* Merges the provided overrides with existing config (deep merge)
|
|
66
|
+
* @param overrides - Partial config to override existing values
|
|
67
|
+
*/
|
|
68
|
+
setConfig(overrides: Partial<Config>): void;
|
|
69
|
+
/**
|
|
70
|
+
* Reset configuration to defaults (from environment variables)
|
|
71
|
+
*/
|
|
72
|
+
reset(): void;
|
|
73
|
+
}
|
|
35
74
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/cjs/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;;GAGG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,EAAE,EAAE;QACF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,EAAE,EAAE;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE;QACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AA8DD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI3C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -6,13 +6,43 @@ const services_1 = require("../services/index.cjs");
|
|
|
6
6
|
const store_1 = require("../store/index.cjs");
|
|
7
7
|
const logger_1 = require("../libs/logger/index.cjs");
|
|
8
8
|
const store_2 = require("../store/index.cjs");
|
|
9
|
-
const
|
|
9
|
+
const utils_1 = require("../utils/utils.cjs");
|
|
10
10
|
class AIHelper {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
constructor(fileHelper, config, tenantCredentialResolver) {
|
|
12
|
+
this.fileHelper = fileHelper;
|
|
13
|
+
this.aiService = new services_1.AIService(store_1.ModelStore.getInstance(), config.ai, tenantCredentialResolver);
|
|
14
|
+
}
|
|
15
|
+
getLanguageModelId(modelId) {
|
|
16
|
+
const model = this.aiService.getLanguageModelId(modelId);
|
|
17
|
+
return model.id;
|
|
18
|
+
}
|
|
19
|
+
clip(value, max) {
|
|
20
|
+
if (value.length <= max)
|
|
21
|
+
return value;
|
|
22
|
+
return `${value.slice(0, max)}…`;
|
|
23
|
+
}
|
|
24
|
+
renderContextValue(value, limits) {
|
|
25
|
+
if (value === null || value === undefined)
|
|
26
|
+
return '';
|
|
27
|
+
if (typeof value === 'string')
|
|
28
|
+
return this.clip(value, limits.maxString);
|
|
29
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
30
|
+
return String(value);
|
|
31
|
+
try {
|
|
32
|
+
const json = JSON.stringify(value);
|
|
33
|
+
return this.clip(json, limits.maxJson);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async convertUserMessage(msg, ignoreFileAttachments) {
|
|
40
|
+
const userContent = [
|
|
41
|
+
{
|
|
42
|
+
type: 'text',
|
|
14
43
|
text: msg.content
|
|
15
|
-
}
|
|
44
|
+
}
|
|
45
|
+
];
|
|
16
46
|
const atts = msg.attachments ?? [];
|
|
17
47
|
if (!atts.length) {
|
|
18
48
|
return userContent;
|
|
@@ -23,21 +53,21 @@ class AIHelper {
|
|
|
23
53
|
if (ignoreFileAttachments) {
|
|
24
54
|
continue;
|
|
25
55
|
}
|
|
26
|
-
if (
|
|
27
|
-
const image = await
|
|
56
|
+
if (this.fileHelper.isImage(att)) {
|
|
57
|
+
const image = await this.fileHelper.prepareImageForVisionAPI(att);
|
|
28
58
|
if (image) {
|
|
29
59
|
userContent.push({
|
|
30
|
-
type:
|
|
60
|
+
type: 'image',
|
|
31
61
|
image: image.image_url.url,
|
|
32
|
-
mediaType: att.mimeType
|
|
62
|
+
mediaType: att.mimeType
|
|
33
63
|
});
|
|
34
64
|
}
|
|
35
65
|
}
|
|
36
66
|
else {
|
|
37
|
-
const fileText = await
|
|
67
|
+
const fileText = await this.fileHelper.extractTextFromDocument(att);
|
|
38
68
|
if (fileText) {
|
|
39
69
|
userContent.push({
|
|
40
|
-
type:
|
|
70
|
+
type: 'text',
|
|
41
71
|
text: `${att.type}: ${att.name}(${att.mimeType})\n ${fileText}`
|
|
42
72
|
});
|
|
43
73
|
}
|
|
@@ -56,9 +86,8 @@ class AIHelper {
|
|
|
56
86
|
if (title)
|
|
57
87
|
lines.push(` title: ${title}`);
|
|
58
88
|
if (selectedText) {
|
|
59
|
-
const clipped = selectedText.length > 4000 ? `${selectedText.slice(0, 4000)}…` : selectedText;
|
|
60
89
|
lines.push(' BEGIN_UNTRUSTED_WEB_SNIPPET');
|
|
61
|
-
lines.push(
|
|
90
|
+
lines.push(this.clip(selectedText, 4000));
|
|
62
91
|
lines.push(' END_UNTRUSTED_WEB_SNIPPET');
|
|
63
92
|
}
|
|
64
93
|
continue;
|
|
@@ -67,7 +96,7 @@ class AIHelper {
|
|
|
67
96
|
const formId = typeof md?.formId === 'string' ? md.formId : undefined;
|
|
68
97
|
const fieldName = typeof md?.fieldName === 'string' ? md.fieldName : undefined;
|
|
69
98
|
const fieldLabel = typeof md?.fieldLabel === 'string' ? md.fieldLabel : undefined;
|
|
70
|
-
const value =
|
|
99
|
+
const value = md?.value;
|
|
71
100
|
const inputType = typeof md?.inputType === 'string' ? md.inputType : undefined;
|
|
72
101
|
const options = Array.isArray(md?.options) ? md.options : [];
|
|
73
102
|
if (formId)
|
|
@@ -84,15 +113,18 @@ class AIHelper {
|
|
|
84
113
|
const l = typeof o?.label === 'string' ? o.label : '';
|
|
85
114
|
if (!v && !l)
|
|
86
115
|
return '';
|
|
87
|
-
return l && v ? `${l} (${v})` :
|
|
116
|
+
return l && v ? `${l} (${v})` : l || v;
|
|
88
117
|
})
|
|
89
118
|
.filter(Boolean)
|
|
90
119
|
.join(', ');
|
|
91
120
|
if (rendered)
|
|
92
121
|
lines.push(` options: ${rendered}${options.length > 30 ? '…' : ''}`);
|
|
93
122
|
}
|
|
94
|
-
if (value)
|
|
95
|
-
|
|
123
|
+
if (value !== undefined) {
|
|
124
|
+
const rendered = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
|
|
125
|
+
if (rendered)
|
|
126
|
+
lines.push(` value: ${rendered}`);
|
|
127
|
+
}
|
|
96
128
|
continue;
|
|
97
129
|
}
|
|
98
130
|
if (kind === 'formSnapshot') {
|
|
@@ -107,17 +139,17 @@ class AIHelper {
|
|
|
107
139
|
for (const f of fields.slice(0, 50)) {
|
|
108
140
|
const name = typeof f?.name === 'string' ? f.name : 'unknown';
|
|
109
141
|
const label = typeof f?.label === 'string' ? f.label : undefined;
|
|
110
|
-
const value =
|
|
142
|
+
const value = f?.value;
|
|
111
143
|
const inputType = typeof f?.inputType === 'string' ? f.inputType : undefined;
|
|
112
144
|
const options = Array.isArray(f?.options) ? f.options : [];
|
|
113
|
-
const clipped = value
|
|
145
|
+
const clipped = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
|
|
114
146
|
const meta = [];
|
|
115
147
|
if (inputType)
|
|
116
148
|
meta.push(`type=${inputType}`);
|
|
117
149
|
if ((inputType === 'select' || inputType === 'radio') && options.length) {
|
|
118
150
|
const opts = options
|
|
119
151
|
.slice(0, 20)
|
|
120
|
-
.map((o) => typeof o?.value === 'string' ? o.value : '')
|
|
152
|
+
.map((o) => (typeof o?.value === 'string' ? o.value : ''))
|
|
121
153
|
.filter(Boolean)
|
|
122
154
|
.join('|');
|
|
123
155
|
if (opts)
|
|
@@ -127,84 +159,122 @@ class AIHelper {
|
|
|
127
159
|
}
|
|
128
160
|
continue;
|
|
129
161
|
}
|
|
162
|
+
if (kind === 'pageContext') {
|
|
163
|
+
const url = typeof md?.source?.url === 'string' ? md.source.url : att.url;
|
|
164
|
+
const title = typeof md?.title === 'string' ? md.title : undefined;
|
|
165
|
+
const route = typeof md?.source?.route === 'string' ? md.source.route : undefined;
|
|
166
|
+
const data = md?.data;
|
|
167
|
+
if (url)
|
|
168
|
+
lines.push(` url: ${url}`);
|
|
169
|
+
if (title)
|
|
170
|
+
lines.push(` title: ${title}`);
|
|
171
|
+
if (route)
|
|
172
|
+
lines.push(` route: ${route}`);
|
|
173
|
+
if (data && typeof data === 'object') {
|
|
174
|
+
const entries = Object.entries(data)
|
|
175
|
+
.filter(([k]) => typeof k === 'string' && k.length > 0)
|
|
176
|
+
.sort(([a], [b]) => a.localeCompare(b));
|
|
177
|
+
if (entries.length) {
|
|
178
|
+
lines.push(' data:');
|
|
179
|
+
const limits = { maxString: 1000, maxJson: 1500 };
|
|
180
|
+
for (const [k, v] of entries.slice(0, 40)) {
|
|
181
|
+
const rendered = this.renderContextValue(v, limits);
|
|
182
|
+
if (!rendered)
|
|
183
|
+
continue;
|
|
184
|
+
lines.push(` - ${k}: ${rendered}`);
|
|
185
|
+
}
|
|
186
|
+
if (entries.length > 40) {
|
|
187
|
+
lines.push(` - … (${entries.length - 40} more keys)`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (data !== undefined) {
|
|
192
|
+
const rendered = this.renderContextValue(data, { maxString: 1000, maxJson: 2000 });
|
|
193
|
+
if (rendered)
|
|
194
|
+
lines.push(` data: ${rendered}`);
|
|
195
|
+
}
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
130
198
|
// Custom kind: prefer summary, fall back to minimal JSON.
|
|
131
199
|
const title = typeof md?.title === 'string' ? md.title : undefined;
|
|
132
200
|
const summary = typeof md?.summary === 'string' ? md.summary : undefined;
|
|
133
201
|
if (title)
|
|
134
202
|
lines.push(` title: ${title}`);
|
|
135
203
|
if (summary) {
|
|
136
|
-
lines.push(` summary: ${
|
|
204
|
+
lines.push(` summary: ${this.clip(summary, 4000)}`);
|
|
137
205
|
continue;
|
|
138
206
|
}
|
|
139
207
|
if (md?.data !== undefined) {
|
|
140
|
-
const
|
|
141
|
-
|
|
208
|
+
const rendered = this.renderContextValue(md.data, { maxString: 2000, maxJson: 5000 });
|
|
209
|
+
if (rendered)
|
|
210
|
+
lines.push(` data: ${rendered}`);
|
|
142
211
|
}
|
|
143
212
|
}
|
|
144
213
|
if (lines.length) {
|
|
145
214
|
userContent.push({
|
|
146
|
-
type:
|
|
215
|
+
type: 'text',
|
|
147
216
|
text: `Context attachments (non-authoritative; user message is primary):\n ${lines.join('\n')}`
|
|
148
217
|
});
|
|
149
218
|
}
|
|
150
219
|
return userContent;
|
|
151
220
|
}
|
|
152
|
-
|
|
221
|
+
getAgentConfigs(contextKey) {
|
|
153
222
|
const agents = store_2.ConfigStore.getInstance().getAgentsForContext(contextKey);
|
|
154
223
|
if (!agents.length) {
|
|
155
224
|
throw new Error(`Agent configs not found for context key: ${contextKey}`);
|
|
156
225
|
}
|
|
157
226
|
return agents;
|
|
158
227
|
}
|
|
159
|
-
|
|
160
|
-
const { contextKey, messages, modelId, context, agentName } = params;
|
|
228
|
+
async getAgentOptions(params, options = {}) {
|
|
229
|
+
const { contextKey, messages, modelId, context, agentName, executionContext } = params;
|
|
161
230
|
let agentConfig = store_2.ConfigStore.getInstance().getAgentConfigByName(agentName);
|
|
162
231
|
if (contextKey && messages) {
|
|
163
|
-
agentConfig = await
|
|
232
|
+
agentConfig = await this.selectAgentConfig(contextKey, messages, options.onStepFinish, executionContext);
|
|
164
233
|
}
|
|
165
|
-
const
|
|
166
|
-
const agentOptions = aiService.getAgentOptions(agentConfig, modelId, context);
|
|
234
|
+
const agentOptions = this.aiService.getAgentOptions(agentConfig, modelId, context);
|
|
167
235
|
return {
|
|
168
236
|
...agentOptions,
|
|
169
|
-
...options
|
|
237
|
+
...options
|
|
170
238
|
};
|
|
171
239
|
}
|
|
172
|
-
|
|
173
|
-
|
|
240
|
+
getAgentOptionsFromConfig(agentConfig, context) {
|
|
241
|
+
return this.aiService.getAgentOptions(agentConfig, undefined, context);
|
|
242
|
+
}
|
|
243
|
+
async selectAgentConfig(contextKey, messages, onStepFinish, executionContext) {
|
|
244
|
+
const configs = this.getAgentConfigs(contextKey);
|
|
174
245
|
if (configs.length === 1) {
|
|
175
246
|
return configs[0];
|
|
176
247
|
}
|
|
177
|
-
const
|
|
178
|
-
const systemPrompt = `Select the most appropriate agent for the given user
|
|
179
|
-
Return only the agent name, no quotes or extra text.
|
|
180
|
-
Available agents: ${JSON.stringify(configs.map(config => ({
|
|
248
|
+
const lastUsedAgent = messages.find((message) => message.agentName);
|
|
249
|
+
const systemPrompt = `Select the most appropriate agent for the given user message.
|
|
250
|
+
Return only the agent name, no quotes or extra text. ${lastUsedAgent ? `Latest Used agent: ${lastUsedAgent}` : ''}
|
|
251
|
+
Available agents: ${JSON.stringify(configs.map((config) => ({
|
|
181
252
|
name: config.name,
|
|
182
253
|
description: config.description,
|
|
183
|
-
tools: config.tools
|
|
254
|
+
tools: config.tools?.map(utils_1.getAgentToolName)
|
|
184
255
|
})))}`;
|
|
185
|
-
const
|
|
186
|
-
|
|
256
|
+
const promptMessages = messages.length > 2 ? messages.slice(messages.length - 2) : messages;
|
|
257
|
+
const agentName = await this.aiService.generateText({
|
|
258
|
+
messages: await this.convertMessages(promptMessages, true),
|
|
187
259
|
system: systemPrompt,
|
|
188
|
-
temperature: 0.
|
|
189
|
-
maxOutputTokens: 2000
|
|
260
|
+
temperature: 0.1,
|
|
261
|
+
maxOutputTokens: 2000,
|
|
262
|
+
onStepFinish,
|
|
263
|
+
executionContext
|
|
190
264
|
});
|
|
191
|
-
const agent = configs.find(config => config.name === agentName);
|
|
265
|
+
const agent = configs.find((config) => config.name === agentName);
|
|
192
266
|
if (!agent) {
|
|
193
267
|
// fallback, agent not found, grabbing first from the list
|
|
194
268
|
return configs[0];
|
|
195
269
|
}
|
|
196
270
|
return agent;
|
|
197
271
|
}
|
|
198
|
-
|
|
272
|
+
async getAssistantResponse(messages, options = {}) {
|
|
199
273
|
try {
|
|
200
|
-
const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
|
|
201
274
|
const processedOptions = this.processToolChoice(options, messages);
|
|
202
|
-
return aiService.generateText({
|
|
203
|
-
temperature: 0.7,
|
|
204
|
-
maxOutputTokens: 2000,
|
|
275
|
+
return this.aiService.generateText({
|
|
205
276
|
...processedOptions,
|
|
206
|
-
messages: await
|
|
207
|
-
signal,
|
|
277
|
+
messages: await this.convertMessages(messages),
|
|
208
278
|
});
|
|
209
279
|
}
|
|
210
280
|
catch (error) {
|
|
@@ -212,14 +282,12 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
212
282
|
throw error;
|
|
213
283
|
}
|
|
214
284
|
}
|
|
215
|
-
|
|
285
|
+
processToolChoice(options, agentMessages) {
|
|
216
286
|
if (!options?.toolChoice) {
|
|
217
287
|
return options || {};
|
|
218
288
|
}
|
|
219
289
|
// Find the latest assistant message
|
|
220
|
-
const latestAssistantMessage = [...agentMessages]
|
|
221
|
-
.reverse()
|
|
222
|
-
.find(msg => msg.role === ai_agent_types_1.MessageRole.Assistant);
|
|
290
|
+
const latestAssistantMessage = [...agentMessages].reverse().find((msg) => msg.role === ai_agent_types_1.MessageRole.Assistant);
|
|
223
291
|
// Handle 'required' toolChoice: if any tool was called, set to 'auto'
|
|
224
292
|
if (options.toolChoice === 'required') {
|
|
225
293
|
const anyToolWasCalled = (latestAssistantMessage?.toolCalls?.length ?? 0) > 0;
|
|
@@ -234,7 +302,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
234
302
|
// Handle specific tool toolChoice: if that specific tool was called, set to 'auto'
|
|
235
303
|
if (typeof options.toolChoice === 'object' && options.toolChoice.type === 'tool') {
|
|
236
304
|
const toolName = options.toolChoice.toolName;
|
|
237
|
-
const toolWasCalled = latestAssistantMessage?.toolCalls?.some(toolCall => toolCall.name === toolName) ?? false;
|
|
305
|
+
const toolWasCalled = latestAssistantMessage?.toolCalls?.some((toolCall) => toolCall.name === toolName) ?? false;
|
|
238
306
|
if (toolWasCalled) {
|
|
239
307
|
return {
|
|
240
308
|
...options,
|
|
@@ -244,19 +312,16 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
244
312
|
}
|
|
245
313
|
return options;
|
|
246
314
|
}
|
|
247
|
-
|
|
248
|
-
const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
|
|
315
|
+
async streamAssistantResponse(agentMessages, signal, options) {
|
|
249
316
|
const messages = await this.convertMessages(agentMessages);
|
|
250
317
|
const processedOptions = this.processToolChoice(options, agentMessages);
|
|
251
|
-
return aiService.streamText({
|
|
318
|
+
return this.aiService.streamText({
|
|
252
319
|
messages,
|
|
253
|
-
temperature: 0.7,
|
|
254
|
-
maxOutputTokens: 2000,
|
|
255
320
|
signal,
|
|
256
321
|
...processedOptions
|
|
257
322
|
});
|
|
258
323
|
}
|
|
259
|
-
|
|
324
|
+
async convertMessages(agentMessages, ignoreToolsAndAttachments = false) {
|
|
260
325
|
const result = [];
|
|
261
326
|
for (const msg of agentMessages) {
|
|
262
327
|
if (msg.role === ai_agent_types_1.MessageRole.User) {
|
|
@@ -279,12 +344,12 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
279
344
|
};
|
|
280
345
|
if (!ignoreToolsAndAttachments) {
|
|
281
346
|
msg.toolCalls?.forEach((toolCall) => {
|
|
282
|
-
if (toolCall.output) {
|
|
347
|
+
if (toolCall.output || toolCall.error) {
|
|
283
348
|
assistantMessage.content.push({
|
|
284
349
|
type: 'tool-call',
|
|
285
350
|
toolCallId: toolCall.id,
|
|
286
351
|
toolName: toolCall.name,
|
|
287
|
-
input: toolCall.input
|
|
352
|
+
input: Object.keys(toolCall.input).length ? toolCall.input : { stub: 'stub' }, // todo: remove this workaround when openrouter will have new stable version(last tested: 2.2.3 has reasoning issues)
|
|
288
353
|
});
|
|
289
354
|
toolMessage.content.push({
|
|
290
355
|
type: 'tool-result',
|
|
@@ -292,7 +357,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
292
357
|
toolName: toolCall.name,
|
|
293
358
|
output: {
|
|
294
359
|
type: 'text',
|
|
295
|
-
value: JSON.stringify(toolCall.output)
|
|
360
|
+
value: JSON.stringify(toolCall.output || { error: toolCall.error })
|
|
296
361
|
}
|
|
297
362
|
});
|
|
298
363
|
}
|
|
@@ -308,13 +373,14 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
308
373
|
}
|
|
309
374
|
return result;
|
|
310
375
|
}
|
|
311
|
-
|
|
376
|
+
async generateTitleForMessage(contextKey, messages, onStepFinish, executionContext) {
|
|
312
377
|
try {
|
|
313
|
-
const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
|
|
314
378
|
const systemPrompt = `Generate descriptive title 5 words maximum for a chat conversation. Return only the title, no quotes or extra text. If user question is opaque, assume it is related to ${contextKey} topic.`;
|
|
315
|
-
return aiService.generateText({
|
|
316
|
-
messages: await
|
|
379
|
+
return this.aiService.generateText({
|
|
380
|
+
messages: await this.convertMessages(messages, true),
|
|
317
381
|
system: systemPrompt,
|
|
382
|
+
onStepFinish,
|
|
383
|
+
executionContext
|
|
318
384
|
});
|
|
319
385
|
}
|
|
320
386
|
catch (error) {
|