@smythos/sre 1.7.11 → 1.7.15

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.
Files changed (40) hide show
  1. package/dist/index.js +48 -48
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/Components/APICall/OAuth.helper.d.ts +1 -1
  4. package/dist/types/Core/ConnectorsService.d.ts +3 -1
  5. package/dist/types/Core/HookService.d.ts +18 -0
  6. package/dist/types/helpers/Conversation.helper.d.ts +3 -0
  7. package/dist/types/index.d.ts +7 -3
  8. package/dist/types/subsystems/ObservabilityManager/Log.service/LogConnector.d.ts +3 -1
  9. package/dist/types/subsystems/ObservabilityManager/Log.service/connectors/ConsoleLog.class.d.ts +1 -0
  10. package/dist/types/subsystems/ObservabilityManager/Log.service/connectors/OTel/OTel.class.d.ts +59 -0
  11. package/dist/types/subsystems/ObservabilityManager/Log.service/connectors/OTel/OTelContextRegistry.d.ts +16 -0
  12. package/dist/types/subsystems/ObservabilityManager/Telemetry.service/TelemetryConnector.d.ts +13 -0
  13. package/dist/types/subsystems/ObservabilityManager/Telemetry.service/connectors/OTel/OTel.class.d.ts +59 -0
  14. package/dist/types/subsystems/ObservabilityManager/Telemetry.service/connectors/OTel/OTelContextRegistry.d.ts +16 -0
  15. package/dist/types/subsystems/ObservabilityManager/Telemetry.service/index.d.ts +4 -0
  16. package/dist/types/types/LLM.types.d.ts +3 -1
  17. package/dist/types/types/SRE.types.d.ts +5 -2
  18. package/package.json +9 -1
  19. package/src/Components/APICall/OAuth.helper.ts +24 -25
  20. package/src/Components/APICall/mimeTypeCategories.ts +16 -1
  21. package/src/Components/Component.class.ts +3 -1
  22. package/src/Core/ConnectorsService.ts +5 -1
  23. package/src/Core/HookService.ts +104 -12
  24. package/src/Core/boot.ts +3 -1
  25. package/src/helpers/Conversation.helper.ts +42 -15
  26. package/src/index.ts +212 -208
  27. package/src/index.ts.bak +212 -208
  28. package/src/subsystems/AgentManager/Agent.class.ts +9 -8
  29. package/src/subsystems/AgentManager/AgentRuntime.class.ts +4 -4
  30. package/src/subsystems/AgentManager/OSResourceMonitor.ts +69 -8
  31. package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +1 -1
  32. package/src/subsystems/{IO → ObservabilityManager}/Log.service/LogConnector.ts +6 -1
  33. package/src/subsystems/{IO → ObservabilityManager}/Log.service/connectors/ConsoleLog.class.ts +6 -3
  34. package/src/subsystems/{IO → ObservabilityManager}/Log.service/index.ts +1 -2
  35. package/src/subsystems/ObservabilityManager/Telemetry.service/TelemetryConnector.ts +23 -0
  36. package/src/subsystems/ObservabilityManager/Telemetry.service/connectors/OTel/OTel.class.ts +759 -0
  37. package/src/subsystems/ObservabilityManager/Telemetry.service/connectors/OTel/OTelContextRegistry.ts +35 -0
  38. package/src/subsystems/ObservabilityManager/Telemetry.service/index.ts +12 -0
  39. package/src/types/LLM.types.ts +2 -0
  40. package/src/types/SRE.types.ts +4 -1
@@ -1,12 +1,34 @@
1
1
  import os from 'os';
2
2
  import process from 'process';
3
3
 
4
- const OSResourceMonitor: any = {
4
+ // Store previous CPU times for delta calculation
5
+ let previousCpuTimes: { user: number; nice: number; sys: number; idle: number; irq: number } | null = null;
6
+
7
+ const monitorData: any = {
5
8
  mem: getMemoryUsage(),
6
- //processMemory: getProcessMemoryUsage(),
7
9
  cpu: getCpuUsage(),
10
+ //processMemory: getProcessMemoryUsage(),
8
11
  //processCpu: getProcessCpuUsage(),
9
12
  };
13
+
14
+ const itv = setInterval(() => {
15
+ monitorData.mem = getMemoryUsage();
16
+ monitorData.cpu = getCpuUsage();
17
+ //monitorData.processMemory = getProcessMemoryUsage();
18
+ //monitorData.processCpu = getProcessCpuUsage();
19
+ }, 5000);
20
+
21
+ itv.unref();
22
+
23
+ const OSResourceMonitor: any = {
24
+ get mem() {
25
+ return monitorData.mem;
26
+ },
27
+ get cpu() {
28
+ return monitorData.cpu;
29
+ },
30
+ };
31
+
10
32
  export { OSResourceMonitor };
11
33
 
12
34
  function getCpuUsage() {
@@ -16,8 +38,8 @@ function getCpuUsage() {
16
38
  let sys = 0;
17
39
  let idle = 0;
18
40
  let irq = 0;
19
- let total = 0;
20
41
 
42
+ // Sum up times across all CPU cores
21
43
  for (let cpu of cpus) {
22
44
  user += cpu.times.user;
23
45
  nice += cpu.times.nice;
@@ -26,13 +48,52 @@ function getCpuUsage() {
26
48
  irq += cpu.times.irq;
27
49
  }
28
50
 
29
- total = user + nice + sys + idle + irq;
51
+ const currentTimes = { user, nice, sys, idle, irq };
52
+
53
+ // If this is the first measurement, store it and return zero load
54
+ if (!previousCpuTimes) {
55
+ previousCpuTimes = currentTimes;
56
+ return {
57
+ user: 0,
58
+ sys: 0,
59
+ idle: 100,
60
+ load: 0,
61
+ };
62
+ }
63
+
64
+ // Calculate deltas since last measurement
65
+ const userDelta = currentTimes.user - previousCpuTimes.user;
66
+ const niceDelta = currentTimes.nice - previousCpuTimes.nice;
67
+ const sysDelta = currentTimes.sys - previousCpuTimes.sys;
68
+ const idleDelta = currentTimes.idle - previousCpuTimes.idle;
69
+ const irqDelta = currentTimes.irq - previousCpuTimes.irq;
70
+
71
+ const totalDelta = userDelta + niceDelta + sysDelta + idleDelta + irqDelta;
72
+
73
+ // Store current times for next calculation
74
+ previousCpuTimes = currentTimes;
75
+
76
+ // Avoid division by zero
77
+ if (totalDelta === 0) {
78
+ return {
79
+ user: 0,
80
+ sys: 0,
81
+ idle: 100,
82
+ load: 0,
83
+ };
84
+ }
85
+
86
+ // Calculate percentages based on delta (actual usage since last check)
87
+ const userPercent = (userDelta / totalDelta) * 100;
88
+ const sysPercent = (sysDelta / totalDelta) * 100;
89
+ const idlePercent = (idleDelta / totalDelta) * 100;
90
+ const loadPercent = 100 - idlePercent;
30
91
 
31
92
  return {
32
- user: (user / total) * 100,
33
- sys: (sys / total) * 100,
34
- idle: (idle / total) * 100,
35
- load: 100 - (idle / total) * 100,
93
+ user: Math.round(userPercent * 100) / 100, // Round to 2 decimals
94
+ sys: Math.round(sysPercent * 100) / 100,
95
+ idle: Math.round(idlePercent * 100) / 100,
96
+ load: Math.round(loadPercent * 100) / 100,
36
97
  };
37
98
  }
38
99
 
@@ -49,7 +49,7 @@ export class EchoConnector extends LLMConnector {
49
49
 
50
50
  for (let i = 0; i < chunks.length; i++) {
51
51
  // Simulate network delay
52
- await delay(10);
52
+ await delay(3);
53
53
 
54
54
  const isLastChunk = i === chunks.length - 1;
55
55
  // Add space between chunks except for the last one to avoid trailing space in file URLs
@@ -12,7 +12,10 @@ export interface ILogRequest {
12
12
 
13
13
  export abstract class LogConnector extends SecureConnector {
14
14
  public abstract id: string;
15
- public abstract getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
15
+
16
+ constructor() {
17
+ super();
18
+ }
16
19
 
17
20
  public requester(candidate: AccessCandidate): ILogRequest {
18
21
  if (candidate.role !== 'agent') throw new Error('Only agents can use Log connector');
@@ -27,6 +30,8 @@ export abstract class LogConnector extends SecureConnector {
27
30
  };
28
31
  }
29
32
 
33
+ public abstract getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
30
34
  protected abstract log(acRequest: AccessRequest, logData: AgentCallLog, callId?: string): Promise<any>;
31
35
  protected abstract logTask(acRequest: AccessRequest, tasks: number, isUsingTestDomain: boolean): Promise<void>;
36
+ protected abstract setupHooks(): Promise<void>;
32
37
  }
@@ -5,7 +5,7 @@ import { IAccessCandidate } from '@sre/types/ACL.types';
5
5
  import { LogConnector } from '../LogConnector';
6
6
  import { AgentCallLog } from '@sre/types/AgentLogger.types';
7
7
 
8
- const console = Logger('SmythLog');
8
+ const logger = Logger('SmythLog');
9
9
 
10
10
  export class ConsoleLog extends LogConnector {
11
11
  public name: string = 'ConsoleLog';
@@ -14,15 +14,18 @@ export class ConsoleLog extends LogConnector {
14
14
  return Promise.resolve(new ACL());
15
15
  }
16
16
  protected log(acRequest: AccessRequest, logData: AgentCallLog, callId?: string): Promise<any> {
17
- console.debug(`Log for agent ${acRequest.candidate.id}: ${typeof logData === 'string' ? logData : JSON.stringify(logData)}`);
17
+ logger.debug(`Log for agent ${acRequest.candidate.id}: ${typeof logData === 'string' ? logData : JSON.stringify(logData)}`);
18
18
 
19
19
  return Promise.resolve();
20
20
  }
21
21
  protected logTask(acRequest: AccessRequest, tasks: number, isUsingTestDomain: boolean): Promise<void> {
22
- console.debug(
22
+ logger.debug(
23
23
  `${tasks} Task(s) Consumed by agent ${acRequest.candidate.id}: ${isUsingTestDomain ? 'Using Test Domain' : 'Using Production Domain'}`
24
24
  );
25
25
 
26
26
  return Promise.resolve();
27
27
  }
28
+ protected setupHooks(): Promise<void> {
29
+ return Promise.resolve();
30
+ }
28
31
  }
@@ -1,10 +1,9 @@
1
1
  import { ConnectorService, ConnectorServiceProvider } from '@sre/Core/ConnectorsService';
2
2
  import { TConnectorService } from '@sre/types/SRE.types';
3
- import { Logger } from '@sre/helpers/Log.helper';
4
3
 
5
4
  import { ConsoleLog } from './connectors/ConsoleLog.class';
6
5
 
7
- const console = Logger('LogService');
6
+ //const console = Logger('LogService');
8
7
 
9
8
  export class LogService extends ConnectorServiceProvider {
10
9
  public register() {
@@ -0,0 +1,23 @@
1
+ import { SecureConnector } from '@sre/Security/SecureConnector.class';
2
+ import { IAccessCandidate } from '@sre/types/ACL.types';
3
+ import { ACL } from '@sre/Security/AccessControl/ACL.class';
4
+ import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
5
+ import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
6
+ import { AgentCallLog } from '@sre/types/AgentLogger.types';
7
+
8
+ export interface ITelemetryRequest {}
9
+
10
+ export abstract class TelemetryConnector extends SecureConnector {
11
+ public abstract id: string;
12
+
13
+ constructor() {
14
+ super();
15
+ }
16
+
17
+ public requester(candidate: AccessCandidate): ITelemetryRequest {
18
+ return {};
19
+ }
20
+
21
+ public abstract getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
22
+ protected abstract setupHooks(): Promise<void>;
23
+ }