@smythos/sre 1.5.46 → 1.5.50
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/CHANGELOG +98 -90
- package/LICENSE +18 -18
- package/README.md +135 -135
- package/dist/bundle-analysis-lazy.html +4949 -0
- package/dist/bundle-analysis.html +4949 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/types/Components/MCPClient.class.d.ts +1 -0
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.d.ts +1 -6
- package/dist/types/utils/package-manager.utils.d.ts +26 -0
- package/package.json +1 -1
- package/src/Components/APICall/APICall.class.ts +156 -156
- package/src/Components/APICall/AccessTokenManager.ts +130 -130
- package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -58
- package/src/Components/APICall/OAuth.helper.ts +294 -294
- package/src/Components/APICall/mimeTypeCategories.ts +46 -46
- package/src/Components/APICall/parseData.ts +167 -167
- package/src/Components/APICall/parseHeaders.ts +41 -41
- package/src/Components/APICall/parseProxy.ts +68 -68
- package/src/Components/APICall/parseUrl.ts +91 -91
- package/src/Components/APIEndpoint.class.ts +234 -234
- package/src/Components/APIOutput.class.ts +58 -58
- package/src/Components/AgentPlugin.class.ts +102 -102
- package/src/Components/Async.class.ts +155 -155
- package/src/Components/Await.class.ts +90 -90
- package/src/Components/Classifier.class.ts +158 -158
- package/src/Components/Component.class.ts +132 -132
- package/src/Components/ComponentHost.class.ts +38 -38
- package/src/Components/DataSourceCleaner.class.ts +92 -92
- package/src/Components/DataSourceIndexer.class.ts +181 -181
- package/src/Components/DataSourceLookup.class.ts +161 -161
- package/src/Components/ECMASandbox.class.ts +71 -71
- package/src/Components/FEncDec.class.ts +29 -29
- package/src/Components/FHash.class.ts +33 -33
- package/src/Components/FSign.class.ts +80 -80
- package/src/Components/FSleep.class.ts +25 -25
- package/src/Components/FTimestamp.class.ts +25 -25
- package/src/Components/FileStore.class.ts +78 -78
- package/src/Components/ForEach.class.ts +97 -97
- package/src/Components/GPTPlugin.class.ts +70 -70
- package/src/Components/GenAILLM.class.ts +586 -586
- package/src/Components/HuggingFace.class.ts +314 -314
- package/src/Components/Image/imageSettings.config.ts +70 -70
- package/src/Components/ImageGenerator.class.ts +502 -502
- package/src/Components/JSONFilter.class.ts +54 -54
- package/src/Components/LLMAssistant.class.ts +213 -213
- package/src/Components/LogicAND.class.ts +28 -28
- package/src/Components/LogicAtLeast.class.ts +85 -85
- package/src/Components/LogicAtMost.class.ts +86 -86
- package/src/Components/LogicOR.class.ts +29 -29
- package/src/Components/LogicXOR.class.ts +34 -34
- package/src/Components/MCPClient.class.ts +138 -112
- package/src/Components/MemoryDeleteKeyVal.class.ts +70 -70
- package/src/Components/MemoryReadKeyVal.class.ts +66 -66
- package/src/Components/MemoryWriteKeyVal.class.ts +62 -62
- package/src/Components/MemoryWriteObject.class.ts +97 -97
- package/src/Components/MultimodalLLM.class.ts +128 -128
- package/src/Components/OpenAPI.class.ts +72 -72
- package/src/Components/PromptGenerator.class.ts +122 -122
- package/src/Components/ScrapflyWebScrape.class.ts +159 -159
- package/src/Components/ServerlessCode.class.ts +123 -123
- package/src/Components/TavilyWebSearch.class.ts +98 -98
- package/src/Components/VisionLLM.class.ts +104 -104
- package/src/Components/ZapierAction.class.ts +127 -127
- package/src/Components/index.ts +97 -97
- package/src/Core/AgentProcess.helper.ts +240 -240
- package/src/Core/Connector.class.ts +123 -123
- package/src/Core/ConnectorsService.ts +197 -197
- package/src/Core/DummyConnector.ts +49 -49
- package/src/Core/HookService.ts +105 -105
- package/src/Core/SmythRuntime.class.ts +235 -235
- package/src/Core/SystemEvents.ts +16 -16
- package/src/Core/boot.ts +56 -56
- package/src/config.ts +15 -15
- package/src/constants.ts +126 -126
- package/src/data/hugging-face.params.json +579 -579
- package/src/helpers/AWSLambdaCode.helper.ts +587 -587
- package/src/helpers/BinaryInput.helper.ts +331 -331
- package/src/helpers/Conversation.helper.ts +1119 -1119
- package/src/helpers/ECMASandbox.helper.ts +54 -54
- package/src/helpers/JsonContent.helper.ts +97 -97
- package/src/helpers/LocalCache.helper.ts +97 -97
- package/src/helpers/Log.helper.ts +274 -274
- package/src/helpers/OpenApiParser.helper.ts +150 -150
- package/src/helpers/S3Cache.helper.ts +147 -147
- package/src/helpers/SmythURI.helper.ts +5 -5
- package/src/helpers/Sysconfig.helper.ts +77 -77
- package/src/helpers/TemplateString.helper.ts +243 -243
- package/src/helpers/TypeChecker.helper.ts +329 -329
- package/src/index.ts +3 -3
- package/src/index.ts.bak +3 -3
- package/src/subsystems/AgentManager/Agent.class.ts +1114 -1114
- package/src/subsystems/AgentManager/Agent.helper.ts +3 -3
- package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +230 -230
- package/src/subsystems/AgentManager/AgentData.service/connectors/CLIAgentDataConnector.class.ts +66 -66
- package/src/subsystems/AgentManager/AgentData.service/connectors/LocalAgentDataConnector.class.ts +142 -142
- package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +39 -39
- package/src/subsystems/AgentManager/AgentData.service/index.ts +18 -18
- package/src/subsystems/AgentManager/AgentLogger.class.ts +297 -297
- package/src/subsystems/AgentManager/AgentRequest.class.ts +51 -51
- package/src/subsystems/AgentManager/AgentRuntime.class.ts +559 -559
- package/src/subsystems/AgentManager/AgentSSE.class.ts +101 -101
- package/src/subsystems/AgentManager/AgentSettings.class.ts +52 -52
- package/src/subsystems/AgentManager/Component.service/ComponentConnector.ts +32 -32
- package/src/subsystems/AgentManager/Component.service/connectors/LocalComponentConnector.class.ts +60 -60
- package/src/subsystems/AgentManager/Component.service/index.ts +11 -11
- package/src/subsystems/AgentManager/EmbodimentSettings.class.ts +47 -47
- package/src/subsystems/AgentManager/ForkedAgent.class.ts +154 -154
- package/src/subsystems/AgentManager/OSResourceMonitor.ts +77 -77
- package/src/subsystems/ComputeManager/Code.service/CodeConnector.ts +98 -98
- package/src/subsystems/ComputeManager/Code.service/connectors/AWSLambdaCode.class.ts +172 -172
- package/src/subsystems/ComputeManager/Code.service/connectors/ECMASandbox.class.ts +131 -131
- package/src/subsystems/ComputeManager/Code.service/index.ts +13 -13
- package/src/subsystems/IO/CLI.service/CLIConnector.ts +47 -47
- package/src/subsystems/IO/CLI.service/index.ts +9 -9
- package/src/subsystems/IO/Log.service/LogConnector.ts +32 -32
- package/src/subsystems/IO/Log.service/connectors/ConsoleLog.class.ts +28 -28
- package/src/subsystems/IO/Log.service/index.ts +13 -13
- package/src/subsystems/IO/NKV.service/NKVConnector.ts +43 -43
- package/src/subsystems/IO/NKV.service/connectors/NKVLocalStorage.class.ts +234 -234
- package/src/subsystems/IO/NKV.service/connectors/NKVRAM.class.ts +204 -204
- package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +182 -182
- package/src/subsystems/IO/NKV.service/index.ts +14 -14
- package/src/subsystems/IO/Router.service/RouterConnector.ts +21 -21
- package/src/subsystems/IO/Router.service/connectors/ExpressRouter.class.ts +48 -48
- package/src/subsystems/IO/Router.service/connectors/NullRouter.class.ts +40 -40
- package/src/subsystems/IO/Router.service/index.ts +11 -11
- package/src/subsystems/IO/Storage.service/SmythFS.class.ts +489 -489
- package/src/subsystems/IO/Storage.service/StorageConnector.ts +66 -66
- package/src/subsystems/IO/Storage.service/connectors/LocalStorage.class.ts +327 -327
- package/src/subsystems/IO/Storage.service/connectors/S3Storage.class.ts +482 -482
- package/src/subsystems/IO/Storage.service/index.ts +13 -13
- package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +108 -108
- package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +454 -454
- package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +384 -384
- package/src/subsystems/IO/VectorDB.service/connectors/RAMVecrtorDB.class.ts +421 -421
- package/src/subsystems/IO/VectorDB.service/embed/BaseEmbedding.ts +107 -107
- package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +109 -109
- package/src/subsystems/IO/VectorDB.service/embed/index.ts +21 -21
- package/src/subsystems/IO/VectorDB.service/index.ts +14 -14
- package/src/subsystems/LLMManager/LLM.helper.ts +251 -251
- package/src/subsystems/LLMManager/LLM.inference.ts +339 -339
- package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +489 -489
- package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +171 -171
- package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +659 -659
- package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +400 -400
- package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +77 -77
- package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +757 -757
- package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +304 -304
- package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +250 -250
- package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +423 -423
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +488 -488
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +524 -524
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterface.ts +100 -100
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterfaceFactory.ts +81 -81
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +1145 -1145
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +13 -13
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/index.ts +4 -4
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +11 -11
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/types.ts +32 -32
- package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +471 -471
- package/src/subsystems/LLMManager/LLM.service/index.ts +44 -44
- package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +300 -300
- package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +252 -252
- package/src/subsystems/LLMManager/ModelsProvider.service/index.ts +11 -11
- package/src/subsystems/LLMManager/custom-models.ts +854 -854
- package/src/subsystems/LLMManager/models.ts +2540 -2540
- package/src/subsystems/LLMManager/paramMappings.ts +69 -69
- package/src/subsystems/MemoryManager/Cache.service/CacheConnector.ts +86 -86
- package/src/subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class.ts +297 -297
- package/src/subsystems/MemoryManager/Cache.service/connectors/RAMCache.class.ts +201 -201
- package/src/subsystems/MemoryManager/Cache.service/connectors/RedisCache.class.ts +252 -252
- package/src/subsystems/MemoryManager/Cache.service/connectors/S3Cache.class.ts +373 -373
- package/src/subsystems/MemoryManager/Cache.service/index.ts +15 -15
- package/src/subsystems/MemoryManager/LLMCache.ts +72 -72
- package/src/subsystems/MemoryManager/LLMContext.ts +124 -124
- package/src/subsystems/MemoryManager/LLMMemory.service/LLMMemoryConnector.ts +26 -26
- package/src/subsystems/MemoryManager/RuntimeContext.ts +266 -266
- package/src/subsystems/Security/AccessControl/ACL.class.ts +208 -208
- package/src/subsystems/Security/AccessControl/AccessCandidate.class.ts +82 -82
- package/src/subsystems/Security/AccessControl/AccessRequest.class.ts +52 -52
- package/src/subsystems/Security/Account.service/AccountConnector.ts +44 -44
- package/src/subsystems/Security/Account.service/connectors/AWSAccount.class.ts +76 -76
- package/src/subsystems/Security/Account.service/connectors/DummyAccount.class.ts +130 -130
- package/src/subsystems/Security/Account.service/connectors/JSONFileAccount.class.ts +159 -159
- package/src/subsystems/Security/Account.service/index.ts +14 -14
- package/src/subsystems/Security/Credentials.helper.ts +62 -62
- package/src/subsystems/Security/ManagedVault.service/ManagedVaultConnector.ts +38 -38
- package/src/subsystems/Security/ManagedVault.service/connectors/NullManagedVault.class.ts +53 -53
- package/src/subsystems/Security/ManagedVault.service/connectors/SecretManagerManagedVault.ts +154 -154
- package/src/subsystems/Security/ManagedVault.service/index.ts +12 -12
- package/src/subsystems/Security/SecureConnector.class.ts +110 -110
- package/src/subsystems/Security/Vault.service/Vault.helper.ts +30 -30
- package/src/subsystems/Security/Vault.service/VaultConnector.ts +29 -29
- package/src/subsystems/Security/Vault.service/connectors/HashicorpVault.class.ts +46 -46
- package/src/subsystems/Security/Vault.service/connectors/JSONFileVault.class.ts +221 -221
- package/src/subsystems/Security/Vault.service/connectors/NullVault.class.ts +54 -54
- package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +140 -140
- package/src/subsystems/Security/Vault.service/index.ts +12 -12
- package/src/types/ACL.types.ts +104 -104
- package/src/types/AWS.types.ts +10 -10
- package/src/types/Agent.types.ts +61 -61
- package/src/types/AgentLogger.types.ts +17 -17
- package/src/types/Cache.types.ts +1 -1
- package/src/types/Common.types.ts +2 -2
- package/src/types/LLM.types.ts +496 -496
- package/src/types/Redis.types.ts +8 -8
- package/src/types/SRE.types.ts +64 -64
- package/src/types/Security.types.ts +14 -14
- package/src/types/Storage.types.ts +5 -5
- package/src/types/VectorDB.types.ts +86 -86
- package/src/utils/base64.utils.ts +275 -275
- package/src/utils/cli.utils.ts +68 -68
- package/src/utils/data.utils.ts +322 -322
- package/src/utils/date-time.utils.ts +22 -22
- package/src/utils/general.utils.ts +238 -238
- package/src/utils/index.ts +12 -12
- package/src/utils/lazy-client.ts +261 -261
- package/src/utils/numbers.utils.ts +13 -13
- package/src/utils/oauth.utils.ts +35 -35
- package/src/utils/string.utils.ts +414 -414
- package/src/utils/url.utils.ts +19 -19
- package/src/utils/validation.utils.ts +74 -74
- package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.d.ts +0 -39
|
@@ -1,297 +1,297 @@
|
|
|
1
|
-
import { Agent } from './Agent.class';
|
|
2
|
-
|
|
3
|
-
import { encode } from 'gpt-tokenizer';
|
|
4
|
-
import { AgentCallLog } from '@sre/types/AgentLogger.types';
|
|
5
|
-
import { debounce, delay, getDayFormattedDate, uid } from '@sre/utils';
|
|
6
|
-
import { Logger } from '@sre/helpers/Log.helper';
|
|
7
|
-
import { ConnectorService } from '@sre/Core/ConnectorsService';
|
|
8
|
-
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
9
|
-
import { StorageConnector } from '@sre/IO/Storage.service/StorageConnector';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
|
|
12
|
-
const console = Logger('AgentLogger.class');
|
|
13
|
-
|
|
14
|
-
//TODO : for performance optimization we should handle a non blocking logs queue
|
|
15
|
-
// in the current implementation, the initial log line write is blocking, log update is non blocking
|
|
16
|
-
|
|
17
|
-
class LogTransaction {
|
|
18
|
-
private _callId: string = '';
|
|
19
|
-
private queue: any[] = [];
|
|
20
|
-
private _isProcessing: boolean = false;
|
|
21
|
-
private _lastPush: number = 0;
|
|
22
|
-
private storage: StorageConnector;
|
|
23
|
-
|
|
24
|
-
constructor(private agent: Agent, private trId: string) {
|
|
25
|
-
this.storage = ConnectorService.getStorageConnector();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public async getCallId() {
|
|
29
|
-
return this._callId;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
public push(logData: AgentCallLog) {
|
|
33
|
-
const logConnector = ConnectorService.getLogConnector();
|
|
34
|
-
|
|
35
|
-
if (!logConnector.valid) return;
|
|
36
|
-
|
|
37
|
-
this.queue.push(logData);
|
|
38
|
-
this._lastPush = Date.now();
|
|
39
|
-
this.processQueue();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
private formatData(data: any, maxLength = 1000) {
|
|
43
|
-
if (!data) return undefined;
|
|
44
|
-
let result = typeof data == 'string' ? data : JSON.stringify(data);
|
|
45
|
-
if (result.length > maxLength) {
|
|
46
|
-
result = result.substr(0, maxLength) + '...';
|
|
47
|
-
}
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
private getDataFilePath(data: any, maxLength = 1000) {
|
|
52
|
-
if (!data) return undefined;
|
|
53
|
-
let str = typeof data == 'string' ? data : JSON.stringify(data);
|
|
54
|
-
if (str.length > maxLength) {
|
|
55
|
-
const dayFolder = getDayFormattedDate();
|
|
56
|
-
const trId = 'L' + uid().toUpperCase();
|
|
57
|
-
return `${dayFolder}/${trId}`;
|
|
58
|
-
}
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
private prepareData(firstData: AgentCallLog) {
|
|
63
|
-
let sourceId = firstData.sourceId;
|
|
64
|
-
let componentId = firstData.componentId;
|
|
65
|
-
|
|
66
|
-
let input = firstData.input
|
|
67
|
-
? {
|
|
68
|
-
preview: this.formatData(firstData.input),
|
|
69
|
-
full: this.getDataFilePath(firstData.input),
|
|
70
|
-
action: firstData.input.__action,
|
|
71
|
-
status: firstData.input.__status,
|
|
72
|
-
}
|
|
73
|
-
: undefined;
|
|
74
|
-
let output = firstData.output ? { preview: this.formatData(firstData.output), full: this.getDataFilePath(firstData.output) } : undefined;
|
|
75
|
-
|
|
76
|
-
let domain = firstData.domain;
|
|
77
|
-
let inputTimestamp = firstData.inputTimestamp;
|
|
78
|
-
let outputTimestamp = firstData.outputTimestamp;
|
|
79
|
-
let result = firstData.result
|
|
80
|
-
? JSON.stringify({ preview: this.formatData(firstData.result), full: this.getDataFilePath(firstData.result) })
|
|
81
|
-
: undefined;
|
|
82
|
-
let sessionID = firstData.sessionID;
|
|
83
|
-
|
|
84
|
-
const sourceData = this.agent.components[sourceId];
|
|
85
|
-
const componentData = this.agent.components[componentId];
|
|
86
|
-
const sourceCptName = sourceData?.name;
|
|
87
|
-
const componentCptName = componentData?.name;
|
|
88
|
-
const sourceName = sourceData?.displayName || sourceData?.name || sourceId;
|
|
89
|
-
const componentName = componentData?.displayName || componentData?.name || componentId;
|
|
90
|
-
|
|
91
|
-
const curStepOrder = firstData.step || this.agent?.agentRuntime?.curStep || '';
|
|
92
|
-
const nextStepOrder = curStepOrder + 1;
|
|
93
|
-
if (sourceCptName) sourceId += `@${sourceCptName}@${curStepOrder}`;
|
|
94
|
-
if (componentCptName) componentId += `@${componentCptName}@${nextStepOrder}`;
|
|
95
|
-
|
|
96
|
-
const inputTokensObj = encode(typeof firstData.input == 'string' ? firstData.input : JSON.stringify(firstData.input) || '');
|
|
97
|
-
const outputTokensObj = encode(typeof firstData.output == 'string' ? firstData.output : JSON.stringify(firstData.output) || '');
|
|
98
|
-
const inputTokens = inputTokensObj.length || undefined;
|
|
99
|
-
const outputTokens = outputTokensObj.length || undefined;
|
|
100
|
-
|
|
101
|
-
const tags = firstData.tags || '';
|
|
102
|
-
let raw_error =
|
|
103
|
-
firstData.error ||
|
|
104
|
-
firstData?.output?.error ||
|
|
105
|
-
firstData?.output?._error ||
|
|
106
|
-
firstData?.result?.error ||
|
|
107
|
-
firstData?.result?.result?.error ||
|
|
108
|
-
firstData?.result?._error ||
|
|
109
|
-
firstData?.result?.result?._error;
|
|
110
|
-
|
|
111
|
-
const error = raw_error ? JSON.stringify({ preview: this.formatData(raw_error), full: this.getDataFilePath(raw_error) }) : undefined;
|
|
112
|
-
|
|
113
|
-
return {
|
|
114
|
-
sourceId,
|
|
115
|
-
componentId,
|
|
116
|
-
domain,
|
|
117
|
-
input,
|
|
118
|
-
output,
|
|
119
|
-
inputTimestamp,
|
|
120
|
-
outputTimestamp,
|
|
121
|
-
result,
|
|
122
|
-
error,
|
|
123
|
-
sourceName,
|
|
124
|
-
componentName,
|
|
125
|
-
sessionID,
|
|
126
|
-
inputTokens,
|
|
127
|
-
outputTokens,
|
|
128
|
-
tags,
|
|
129
|
-
workflowID: firstData.workflowID,
|
|
130
|
-
processID: firstData.processID,
|
|
131
|
-
raw_input: firstData.input,
|
|
132
|
-
raw_output: firstData.output,
|
|
133
|
-
raw_result: firstData.result,
|
|
134
|
-
raw_error,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
private async storeLogData(filePath: string, content: any) {
|
|
139
|
-
const logConnector = ConnectorService.getLogConnector();
|
|
140
|
-
if (!logConnector.valid || logConnector.name == 'ConsoleLog') return;
|
|
141
|
-
|
|
142
|
-
if (!filePath) return;
|
|
143
|
-
try {
|
|
144
|
-
const body = typeof content == 'string' ? content : JSON.stringify(content);
|
|
145
|
-
// setTeamPath(this.agent.teamId, `logs/${this.agent.id}`);
|
|
146
|
-
// path.posix.join('teams', teamId, category ? category : '');
|
|
147
|
-
const storagePath = path.posix.join('teams', this.agent.teamId, `logs/${this.agent.id}/${filePath}`);
|
|
148
|
-
const metadata = { teamid: this.agent.teamId, agentid: this.agent.id, ContentType: 'text/plain' };
|
|
149
|
-
await this.storage.requester(AccessCandidate.agent(this.agent.id)).write(storagePath, body, undefined, metadata);
|
|
150
|
-
} catch (error) {
|
|
151
|
-
console.error('Error storing Log File : ', filePath, error);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
public async processQueue() {
|
|
156
|
-
const logConnector = ConnectorService.getLogConnector();
|
|
157
|
-
if (!logConnector.valid || this.queue.length <= 0 || this._isProcessing) return;
|
|
158
|
-
this._isProcessing = true;
|
|
159
|
-
|
|
160
|
-
try {
|
|
161
|
-
if (!this._callId) {
|
|
162
|
-
const firstData = this.queue.shift();
|
|
163
|
-
const data = this.prepareData(firstData);
|
|
164
|
-
const raw_input = data.raw_input;
|
|
165
|
-
const raw_output = data.raw_output;
|
|
166
|
-
const raw_result = data.raw_result;
|
|
167
|
-
const raw_error = data.raw_error;
|
|
168
|
-
|
|
169
|
-
delete data.raw_input;
|
|
170
|
-
delete data.raw_output;
|
|
171
|
-
delete data.raw_result;
|
|
172
|
-
delete data.raw_error;
|
|
173
|
-
|
|
174
|
-
const resultObj = data.result ? JSON.parse(data.result) : undefined;
|
|
175
|
-
const errorObj = data.error ? JSON.parse(data.error) : undefined;
|
|
176
|
-
await this.storeLogData(data?.input?.full, raw_input);
|
|
177
|
-
await this.storeLogData(data?.output?.full, raw_output);
|
|
178
|
-
await this.storeLogData(resultObj?.full, raw_result);
|
|
179
|
-
await this.storeLogData(errorObj?.full, raw_error);
|
|
180
|
-
|
|
181
|
-
const logResult = await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data);
|
|
182
|
-
|
|
183
|
-
this._callId = logResult?.data?.log?.id;
|
|
184
|
-
} else {
|
|
185
|
-
while (this.queue.length > 0) {
|
|
186
|
-
const logData = this.queue.shift();
|
|
187
|
-
const data = this.prepareData(logData);
|
|
188
|
-
|
|
189
|
-
Object.keys(data).forEach((key) => {
|
|
190
|
-
if (!data[key]) delete data[key];
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
const raw_input = data.raw_input;
|
|
194
|
-
const raw_output = data.raw_output;
|
|
195
|
-
const raw_result = data.raw_result;
|
|
196
|
-
const raw_error = data.raw_error;
|
|
197
|
-
|
|
198
|
-
delete data.raw_input;
|
|
199
|
-
delete data.raw_output;
|
|
200
|
-
delete data.raw_result;
|
|
201
|
-
delete data.raw_error;
|
|
202
|
-
|
|
203
|
-
const resultObj = data.result ? JSON.parse(data.result) : undefined;
|
|
204
|
-
const errorObj = data.error ? JSON.parse(data.error) : undefined;
|
|
205
|
-
await this.storeLogData(data?.input?.full, raw_input);
|
|
206
|
-
await this.storeLogData(data?.output?.full, raw_output);
|
|
207
|
-
await this.storeLogData(resultObj?.full, raw_result);
|
|
208
|
-
await this.storeLogData(errorObj?.full, raw_error);
|
|
209
|
-
|
|
210
|
-
await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data, this._callId);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
} catch (error) {
|
|
214
|
-
console.error('Error processing log queue:', error?.response?.data?.message || error);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
this._isProcessing = false;
|
|
218
|
-
debounce(this.processQueue.bind(this), 1000, { leading: true, trailing: true, maxWait: 10000 });
|
|
219
|
-
|
|
220
|
-
await delay(1000);
|
|
221
|
-
this.processQueue();
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
public canDelete() {
|
|
225
|
-
if (this.queue.length > 0) {
|
|
226
|
-
this.processQueue();
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
return this._lastPush != 0 && this._lastPush + 1000 * 60 * 60 * 1 < Date.now();
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
export class AgentLogger {
|
|
233
|
-
private static transactions: any = {};
|
|
234
|
-
private static cleanupInterval: NodeJS.Timeout;
|
|
235
|
-
constructor(private agent: Agent) {}
|
|
236
|
-
|
|
237
|
-
// private static setupCleanupInterval() {
|
|
238
|
-
// if (this.cleanupInterval) return;
|
|
239
|
-
// this.cleanupInterval = setInterval(
|
|
240
|
-
// () => {
|
|
241
|
-
// this.cleanup();
|
|
242
|
-
// },
|
|
243
|
-
// 1000 * 60 * 1,
|
|
244
|
-
// ); //every 1 minute
|
|
245
|
-
// }
|
|
246
|
-
public static async cleanup() {
|
|
247
|
-
const logConnector = ConnectorService.getLogConnector();
|
|
248
|
-
if (!logConnector.valid) return;
|
|
249
|
-
const trIds = Object.keys(AgentLogger.transactions);
|
|
250
|
-
for (const trId of trIds) {
|
|
251
|
-
const transaction = AgentLogger.transactions[trId];
|
|
252
|
-
if (transaction.canDelete()) {
|
|
253
|
-
delete AgentLogger.transactions[trId];
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
public static log(agent, trId, logData: AgentCallLog) {
|
|
258
|
-
const logConnector = ConnectorService.getLogConnector();
|
|
259
|
-
if (!logConnector.valid) return;
|
|
260
|
-
if (agent.agentRuntime.debug) logData.tags = 'DEBUG ';
|
|
261
|
-
if (!trId) trId = 'log-' + uid();
|
|
262
|
-
if (!this.transactions[trId]) {
|
|
263
|
-
this.transactions[trId] = new LogTransaction(agent, trId);
|
|
264
|
-
}
|
|
265
|
-
this.transactions[trId].push(logData);
|
|
266
|
-
|
|
267
|
-
//ensure that a cleanup interval is running
|
|
268
|
-
//this.setupCleanupInterval();
|
|
269
|
-
debounce(this.cleanup.bind(this), 1000, { leading: true, trailing: true, maxWait: 10000 * 1 });
|
|
270
|
-
return trId;
|
|
271
|
-
}
|
|
272
|
-
public static async logTask(agent: Agent, tasks) {
|
|
273
|
-
// const token = (await getM2MToken('https://api.smyth.ai')) as string;
|
|
274
|
-
// const day = new Date().toISOString().split('T')[0] + 'T00:00:00.000Z';
|
|
275
|
-
// const logData = {
|
|
276
|
-
// number: tasks,
|
|
277
|
-
// day,
|
|
278
|
-
// };
|
|
279
|
-
// if (!agent.usingTestDomain) {
|
|
280
|
-
// //only log tasks if debug session is not enabled
|
|
281
|
-
// mwSysAPI.put(`/quota/agent/${agent.id}/tasks`, logData, includeAuth(token)).catch((error) => {
|
|
282
|
-
// console.error('Error in AgentLogger.logTask() function: ', error?.response?.data?.message);
|
|
283
|
-
// });
|
|
284
|
-
// }
|
|
285
|
-
const logConnector = ConnectorService.getLogConnector();
|
|
286
|
-
if (!logConnector.valid) return;
|
|
287
|
-
|
|
288
|
-
if (!agent.usingTestDomain) {
|
|
289
|
-
// only report if on a non test domain
|
|
290
|
-
await logConnector.requester(AccessCandidate.agent(agent.id)).logTask(tasks, agent.usingTestDomain);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
//ensure that a cleanup interval is running
|
|
294
|
-
//this.setupCleanupInterval();
|
|
295
|
-
debounce(this.cleanup.bind(this), 1000, { leading: true, trailing: true, maxWait: 10000 * 1 });
|
|
296
|
-
}
|
|
297
|
-
}
|
|
1
|
+
import { Agent } from './Agent.class';
|
|
2
|
+
|
|
3
|
+
import { encode } from 'gpt-tokenizer';
|
|
4
|
+
import { AgentCallLog } from '@sre/types/AgentLogger.types';
|
|
5
|
+
import { debounce, delay, getDayFormattedDate, uid } from '@sre/utils';
|
|
6
|
+
import { Logger } from '@sre/helpers/Log.helper';
|
|
7
|
+
import { ConnectorService } from '@sre/Core/ConnectorsService';
|
|
8
|
+
import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
|
|
9
|
+
import { StorageConnector } from '@sre/IO/Storage.service/StorageConnector';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
|
|
12
|
+
const console = Logger('AgentLogger.class');
|
|
13
|
+
|
|
14
|
+
//TODO : for performance optimization we should handle a non blocking logs queue
|
|
15
|
+
// in the current implementation, the initial log line write is blocking, log update is non blocking
|
|
16
|
+
|
|
17
|
+
class LogTransaction {
|
|
18
|
+
private _callId: string = '';
|
|
19
|
+
private queue: any[] = [];
|
|
20
|
+
private _isProcessing: boolean = false;
|
|
21
|
+
private _lastPush: number = 0;
|
|
22
|
+
private storage: StorageConnector;
|
|
23
|
+
|
|
24
|
+
constructor(private agent: Agent, private trId: string) {
|
|
25
|
+
this.storage = ConnectorService.getStorageConnector();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public async getCallId() {
|
|
29
|
+
return this._callId;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public push(logData: AgentCallLog) {
|
|
33
|
+
const logConnector = ConnectorService.getLogConnector();
|
|
34
|
+
|
|
35
|
+
if (!logConnector.valid) return;
|
|
36
|
+
|
|
37
|
+
this.queue.push(logData);
|
|
38
|
+
this._lastPush = Date.now();
|
|
39
|
+
this.processQueue();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private formatData(data: any, maxLength = 1000) {
|
|
43
|
+
if (!data) return undefined;
|
|
44
|
+
let result = typeof data == 'string' ? data : JSON.stringify(data);
|
|
45
|
+
if (result.length > maxLength) {
|
|
46
|
+
result = result.substr(0, maxLength) + '...';
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private getDataFilePath(data: any, maxLength = 1000) {
|
|
52
|
+
if (!data) return undefined;
|
|
53
|
+
let str = typeof data == 'string' ? data : JSON.stringify(data);
|
|
54
|
+
if (str.length > maxLength) {
|
|
55
|
+
const dayFolder = getDayFormattedDate();
|
|
56
|
+
const trId = 'L' + uid().toUpperCase();
|
|
57
|
+
return `${dayFolder}/${trId}`;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private prepareData(firstData: AgentCallLog) {
|
|
63
|
+
let sourceId = firstData.sourceId;
|
|
64
|
+
let componentId = firstData.componentId;
|
|
65
|
+
|
|
66
|
+
let input = firstData.input
|
|
67
|
+
? {
|
|
68
|
+
preview: this.formatData(firstData.input),
|
|
69
|
+
full: this.getDataFilePath(firstData.input),
|
|
70
|
+
action: firstData.input.__action,
|
|
71
|
+
status: firstData.input.__status,
|
|
72
|
+
}
|
|
73
|
+
: undefined;
|
|
74
|
+
let output = firstData.output ? { preview: this.formatData(firstData.output), full: this.getDataFilePath(firstData.output) } : undefined;
|
|
75
|
+
|
|
76
|
+
let domain = firstData.domain;
|
|
77
|
+
let inputTimestamp = firstData.inputTimestamp;
|
|
78
|
+
let outputTimestamp = firstData.outputTimestamp;
|
|
79
|
+
let result = firstData.result
|
|
80
|
+
? JSON.stringify({ preview: this.formatData(firstData.result), full: this.getDataFilePath(firstData.result) })
|
|
81
|
+
: undefined;
|
|
82
|
+
let sessionID = firstData.sessionID;
|
|
83
|
+
|
|
84
|
+
const sourceData = this.agent.components[sourceId];
|
|
85
|
+
const componentData = this.agent.components[componentId];
|
|
86
|
+
const sourceCptName = sourceData?.name;
|
|
87
|
+
const componentCptName = componentData?.name;
|
|
88
|
+
const sourceName = sourceData?.displayName || sourceData?.name || sourceId;
|
|
89
|
+
const componentName = componentData?.displayName || componentData?.name || componentId;
|
|
90
|
+
|
|
91
|
+
const curStepOrder = firstData.step || this.agent?.agentRuntime?.curStep || '';
|
|
92
|
+
const nextStepOrder = curStepOrder + 1;
|
|
93
|
+
if (sourceCptName) sourceId += `@${sourceCptName}@${curStepOrder}`;
|
|
94
|
+
if (componentCptName) componentId += `@${componentCptName}@${nextStepOrder}`;
|
|
95
|
+
|
|
96
|
+
const inputTokensObj = encode(typeof firstData.input == 'string' ? firstData.input : JSON.stringify(firstData.input) || '');
|
|
97
|
+
const outputTokensObj = encode(typeof firstData.output == 'string' ? firstData.output : JSON.stringify(firstData.output) || '');
|
|
98
|
+
const inputTokens = inputTokensObj.length || undefined;
|
|
99
|
+
const outputTokens = outputTokensObj.length || undefined;
|
|
100
|
+
|
|
101
|
+
const tags = firstData.tags || '';
|
|
102
|
+
let raw_error =
|
|
103
|
+
firstData.error ||
|
|
104
|
+
firstData?.output?.error ||
|
|
105
|
+
firstData?.output?._error ||
|
|
106
|
+
firstData?.result?.error ||
|
|
107
|
+
firstData?.result?.result?.error ||
|
|
108
|
+
firstData?.result?._error ||
|
|
109
|
+
firstData?.result?.result?._error;
|
|
110
|
+
|
|
111
|
+
const error = raw_error ? JSON.stringify({ preview: this.formatData(raw_error), full: this.getDataFilePath(raw_error) }) : undefined;
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
sourceId,
|
|
115
|
+
componentId,
|
|
116
|
+
domain,
|
|
117
|
+
input,
|
|
118
|
+
output,
|
|
119
|
+
inputTimestamp,
|
|
120
|
+
outputTimestamp,
|
|
121
|
+
result,
|
|
122
|
+
error,
|
|
123
|
+
sourceName,
|
|
124
|
+
componentName,
|
|
125
|
+
sessionID,
|
|
126
|
+
inputTokens,
|
|
127
|
+
outputTokens,
|
|
128
|
+
tags,
|
|
129
|
+
workflowID: firstData.workflowID,
|
|
130
|
+
processID: firstData.processID,
|
|
131
|
+
raw_input: firstData.input,
|
|
132
|
+
raw_output: firstData.output,
|
|
133
|
+
raw_result: firstData.result,
|
|
134
|
+
raw_error,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
private async storeLogData(filePath: string, content: any) {
|
|
139
|
+
const logConnector = ConnectorService.getLogConnector();
|
|
140
|
+
if (!logConnector.valid || logConnector.name == 'ConsoleLog') return;
|
|
141
|
+
|
|
142
|
+
if (!filePath) return;
|
|
143
|
+
try {
|
|
144
|
+
const body = typeof content == 'string' ? content : JSON.stringify(content);
|
|
145
|
+
// setTeamPath(this.agent.teamId, `logs/${this.agent.id}`);
|
|
146
|
+
// path.posix.join('teams', teamId, category ? category : '');
|
|
147
|
+
const storagePath = path.posix.join('teams', this.agent.teamId, `logs/${this.agent.id}/${filePath}`);
|
|
148
|
+
const metadata = { teamid: this.agent.teamId, agentid: this.agent.id, ContentType: 'text/plain' };
|
|
149
|
+
await this.storage.requester(AccessCandidate.agent(this.agent.id)).write(storagePath, body, undefined, metadata);
|
|
150
|
+
} catch (error) {
|
|
151
|
+
console.error('Error storing Log File : ', filePath, error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
public async processQueue() {
|
|
156
|
+
const logConnector = ConnectorService.getLogConnector();
|
|
157
|
+
if (!logConnector.valid || this.queue.length <= 0 || this._isProcessing) return;
|
|
158
|
+
this._isProcessing = true;
|
|
159
|
+
|
|
160
|
+
try {
|
|
161
|
+
if (!this._callId) {
|
|
162
|
+
const firstData = this.queue.shift();
|
|
163
|
+
const data = this.prepareData(firstData);
|
|
164
|
+
const raw_input = data.raw_input;
|
|
165
|
+
const raw_output = data.raw_output;
|
|
166
|
+
const raw_result = data.raw_result;
|
|
167
|
+
const raw_error = data.raw_error;
|
|
168
|
+
|
|
169
|
+
delete data.raw_input;
|
|
170
|
+
delete data.raw_output;
|
|
171
|
+
delete data.raw_result;
|
|
172
|
+
delete data.raw_error;
|
|
173
|
+
|
|
174
|
+
const resultObj = data.result ? JSON.parse(data.result) : undefined;
|
|
175
|
+
const errorObj = data.error ? JSON.parse(data.error) : undefined;
|
|
176
|
+
await this.storeLogData(data?.input?.full, raw_input);
|
|
177
|
+
await this.storeLogData(data?.output?.full, raw_output);
|
|
178
|
+
await this.storeLogData(resultObj?.full, raw_result);
|
|
179
|
+
await this.storeLogData(errorObj?.full, raw_error);
|
|
180
|
+
|
|
181
|
+
const logResult = await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data);
|
|
182
|
+
|
|
183
|
+
this._callId = logResult?.data?.log?.id;
|
|
184
|
+
} else {
|
|
185
|
+
while (this.queue.length > 0) {
|
|
186
|
+
const logData = this.queue.shift();
|
|
187
|
+
const data = this.prepareData(logData);
|
|
188
|
+
|
|
189
|
+
Object.keys(data).forEach((key) => {
|
|
190
|
+
if (!data[key]) delete data[key];
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
const raw_input = data.raw_input;
|
|
194
|
+
const raw_output = data.raw_output;
|
|
195
|
+
const raw_result = data.raw_result;
|
|
196
|
+
const raw_error = data.raw_error;
|
|
197
|
+
|
|
198
|
+
delete data.raw_input;
|
|
199
|
+
delete data.raw_output;
|
|
200
|
+
delete data.raw_result;
|
|
201
|
+
delete data.raw_error;
|
|
202
|
+
|
|
203
|
+
const resultObj = data.result ? JSON.parse(data.result) : undefined;
|
|
204
|
+
const errorObj = data.error ? JSON.parse(data.error) : undefined;
|
|
205
|
+
await this.storeLogData(data?.input?.full, raw_input);
|
|
206
|
+
await this.storeLogData(data?.output?.full, raw_output);
|
|
207
|
+
await this.storeLogData(resultObj?.full, raw_result);
|
|
208
|
+
await this.storeLogData(errorObj?.full, raw_error);
|
|
209
|
+
|
|
210
|
+
await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data, this._callId);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
} catch (error) {
|
|
214
|
+
console.error('Error processing log queue:', error?.response?.data?.message || error);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
this._isProcessing = false;
|
|
218
|
+
debounce(this.processQueue.bind(this), 1000, { leading: true, trailing: true, maxWait: 10000 });
|
|
219
|
+
|
|
220
|
+
await delay(1000);
|
|
221
|
+
this.processQueue();
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
public canDelete() {
|
|
225
|
+
if (this.queue.length > 0) {
|
|
226
|
+
this.processQueue();
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
return this._lastPush != 0 && this._lastPush + 1000 * 60 * 60 * 1 < Date.now();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export class AgentLogger {
|
|
233
|
+
private static transactions: any = {};
|
|
234
|
+
private static cleanupInterval: NodeJS.Timeout;
|
|
235
|
+
constructor(private agent: Agent) {}
|
|
236
|
+
|
|
237
|
+
// private static setupCleanupInterval() {
|
|
238
|
+
// if (this.cleanupInterval) return;
|
|
239
|
+
// this.cleanupInterval = setInterval(
|
|
240
|
+
// () => {
|
|
241
|
+
// this.cleanup();
|
|
242
|
+
// },
|
|
243
|
+
// 1000 * 60 * 1,
|
|
244
|
+
// ); //every 1 minute
|
|
245
|
+
// }
|
|
246
|
+
public static async cleanup() {
|
|
247
|
+
const logConnector = ConnectorService.getLogConnector();
|
|
248
|
+
if (!logConnector.valid) return;
|
|
249
|
+
const trIds = Object.keys(AgentLogger.transactions);
|
|
250
|
+
for (const trId of trIds) {
|
|
251
|
+
const transaction = AgentLogger.transactions[trId];
|
|
252
|
+
if (transaction.canDelete()) {
|
|
253
|
+
delete AgentLogger.transactions[trId];
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
public static log(agent, trId, logData: AgentCallLog) {
|
|
258
|
+
const logConnector = ConnectorService.getLogConnector();
|
|
259
|
+
if (!logConnector.valid) return;
|
|
260
|
+
if (agent.agentRuntime.debug) logData.tags = 'DEBUG ';
|
|
261
|
+
if (!trId) trId = 'log-' + uid();
|
|
262
|
+
if (!this.transactions[trId]) {
|
|
263
|
+
this.transactions[trId] = new LogTransaction(agent, trId);
|
|
264
|
+
}
|
|
265
|
+
this.transactions[trId].push(logData);
|
|
266
|
+
|
|
267
|
+
//ensure that a cleanup interval is running
|
|
268
|
+
//this.setupCleanupInterval();
|
|
269
|
+
debounce(this.cleanup.bind(this), 1000, { leading: true, trailing: true, maxWait: 10000 * 1 });
|
|
270
|
+
return trId;
|
|
271
|
+
}
|
|
272
|
+
public static async logTask(agent: Agent, tasks) {
|
|
273
|
+
// const token = (await getM2MToken('https://api.smyth.ai')) as string;
|
|
274
|
+
// const day = new Date().toISOString().split('T')[0] + 'T00:00:00.000Z';
|
|
275
|
+
// const logData = {
|
|
276
|
+
// number: tasks,
|
|
277
|
+
// day,
|
|
278
|
+
// };
|
|
279
|
+
// if (!agent.usingTestDomain) {
|
|
280
|
+
// //only log tasks if debug session is not enabled
|
|
281
|
+
// mwSysAPI.put(`/quota/agent/${agent.id}/tasks`, logData, includeAuth(token)).catch((error) => {
|
|
282
|
+
// console.error('Error in AgentLogger.logTask() function: ', error?.response?.data?.message);
|
|
283
|
+
// });
|
|
284
|
+
// }
|
|
285
|
+
const logConnector = ConnectorService.getLogConnector();
|
|
286
|
+
if (!logConnector.valid) return;
|
|
287
|
+
|
|
288
|
+
if (!agent.usingTestDomain) {
|
|
289
|
+
// only report if on a non test domain
|
|
290
|
+
await logConnector.requester(AccessCandidate.agent(agent.id)).logTask(tasks, agent.usingTestDomain);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
//ensure that a cleanup interval is running
|
|
294
|
+
//this.setupCleanupInterval();
|
|
295
|
+
debounce(this.cleanup.bind(this), 1000, { leading: true, trailing: true, maxWait: 10000 * 1 });
|
|
296
|
+
}
|
|
297
|
+
}
|