@smythos/sre 1.6.14 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG +15 -0
  2. package/dist/index.js +52 -46
  3. package/dist/index.js.map +1 -1
  4. package/dist/types/Components/APIEndpoint.class.d.ts +2 -8
  5. package/dist/types/Components/Component.class.d.ts +9 -0
  6. package/dist/types/Components/Triggers/Gmail.trigger.d.ts +0 -17
  7. package/dist/types/Components/Triggers/JobScheduler.trigger.d.ts +10 -0
  8. package/dist/types/Components/Triggers/Trigger.class.d.ts +11 -0
  9. package/dist/types/Components/index.d.ts +6 -0
  10. package/dist/types/Core/Connector.class.d.ts +1 -0
  11. package/dist/types/Core/ConnectorsService.d.ts +2 -0
  12. package/dist/types/Core/HookService.d.ts +1 -1
  13. package/dist/types/helpers/Conversation.helper.d.ts +2 -0
  14. package/dist/types/helpers/Crypto.helper.d.ts +8 -0
  15. package/dist/types/index.d.ts +13 -0
  16. package/dist/types/subsystems/AgentManager/Agent.class.d.ts +4 -2
  17. package/dist/types/subsystems/AgentManager/AgentData.service/AgentDataConnector.d.ts +13 -0
  18. package/dist/types/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.d.ts +1 -4
  19. package/dist/types/subsystems/AgentManager/Scheduler.service/Job.class.d.ts +29 -6
  20. package/dist/types/subsystems/AgentManager/Scheduler.service/SchedulerConnector.d.ts +11 -3
  21. package/dist/types/subsystems/AgentManager/Scheduler.service/connectors/LocalScheduler.class.d.ts +31 -7
  22. package/dist/types/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.d.ts +2 -5
  23. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.d.ts +3 -6
  24. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.d.ts +7 -0
  25. package/dist/types/subsystems/LLMManager/LLM.service/connectors/xAI.class.d.ts +2 -5
  26. package/dist/types/types/Agent.types.d.ts +1 -0
  27. package/dist/types/types/LLM.types.d.ts +2 -5
  28. package/dist/types/types/SRE.types.d.ts +4 -1
  29. package/package.json +6 -2
  30. package/src/Components/APICall/OAuth.helper.ts +30 -35
  31. package/src/Components/APIEndpoint.class.ts +25 -6
  32. package/src/Components/Component.class.ts +11 -0
  33. package/src/Components/Triggers/Gmail.trigger.ts +282 -0
  34. package/src/Components/Triggers/JobScheduler.trigger.ts +45 -0
  35. package/src/Components/Triggers/README.md +3 -0
  36. package/src/Components/Triggers/Trigger.class.ts +101 -0
  37. package/src/Components/Triggers/WhatsApp.trigger.ts +219 -0
  38. package/src/Components/index.ts +8 -0
  39. package/src/Core/AgentProcess.helper.ts +4 -6
  40. package/src/Core/Connector.class.ts +11 -3
  41. package/src/Core/ConnectorsService.ts +5 -0
  42. package/src/Core/ExternalEventsReceiver.ts +317 -0
  43. package/src/Core/HookService.ts +20 -6
  44. package/src/Core/SmythRuntime.class.ts +7 -0
  45. package/src/Core/SystemEvents.ts +17 -0
  46. package/src/Core/boot.ts +2 -0
  47. package/src/helpers/Conversation.helper.ts +35 -11
  48. package/src/helpers/Crypto.helper.ts +28 -0
  49. package/src/index.ts +208 -195
  50. package/src/index.ts.bak +208 -195
  51. package/src/subsystems/AGENTS.md +594 -0
  52. package/src/subsystems/AgentManager/Agent.class.ts +71 -21
  53. package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +24 -1
  54. package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +2 -2
  55. package/src/subsystems/AgentManager/AgentRuntime.class.ts +34 -5
  56. package/src/subsystems/AgentManager/Scheduler.service/Job.class.ts +414 -0
  57. package/src/subsystems/AgentManager/Scheduler.service/Schedule.class.ts +200 -0
  58. package/src/subsystems/AgentManager/Scheduler.service/SchedulerConnector.ts +200 -0
  59. package/src/subsystems/AgentManager/Scheduler.service/connectors/LocalScheduler.class.ts +767 -0
  60. package/src/subsystems/AgentManager/Scheduler.service/index.ts +11 -0
  61. package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +1 -1
  62. package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +61 -2
  63. package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +3 -0
  64. package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +3 -1
  65. package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +5 -1
  66. package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +247 -56
  67. package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +3 -0
  68. package/src/subsystems/LLMManager/LLM.service/connectors/Ollama.class.ts +28 -21
  69. package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +3 -0
  70. package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +121 -33
  71. package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +38 -27
  72. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +115 -18
  73. package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +3 -0
  74. package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +1 -6
  75. package/src/subsystems/MemoryManager/LLMContext.ts +3 -8
  76. package/src/subsystems/MemoryManager/RuntimeContext.ts +10 -9
  77. package/src/subsystems/Security/Credentials/Credentials.class.ts +1 -0
  78. package/src/subsystems/Security/Credentials/ManagedOAuth2Credentials.class.ts +106 -0
  79. package/src/types/Agent.types.ts +1 -0
  80. package/src/types/LLM.types.ts +2 -2
  81. package/src/types/SRE.types.ts +3 -0
@@ -0,0 +1,200 @@
1
+ import { ACL } from '@sre/Security/AccessControl/ACL.class';
2
+ import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
3
+ import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
4
+ import { SecureConnector } from '@sre/Security/SecureConnector.class';
5
+ import { IAccessCandidate, IACL, TAccessRole } from '@sre/types/ACL.types';
6
+ import { Schedule, IScheduleData } from './Schedule.class';
7
+ import { Job, IJobConfig } from './Job.class';
8
+ import EventEmitter from 'events';
9
+ import { ConnectorService } from '@sre/Core/ConnectorsService';
10
+
11
+ /**
12
+ * Scheduled job data structure
13
+ */
14
+ export interface IScheduledJob {
15
+ id: string;
16
+ schedule: IScheduleData;
17
+ jobConfig: IJobConfig; // Full job configuration (type, agentId, skillName/prompt, args, metadata)
18
+ acl: IACL;
19
+ status: 'active' | 'paused'; // User-controlled state only (not execution results)
20
+ lastRun?: string; // ISO 8601 date string
21
+ nextRun?: string; // ISO 8601 date string
22
+ createdBy: {
23
+ role: TAccessRole;
24
+ id: string;
25
+ };
26
+ executionHistory?: IJobExecution[];
27
+ }
28
+
29
+ /**
30
+ * Job execution record
31
+ */
32
+ export interface IJobExecution {
33
+ timestamp: string; // ISO 8601 date string
34
+ success: boolean;
35
+ error?: string;
36
+ executionTime: number; // milliseconds
37
+ retries?: number;
38
+ }
39
+
40
+ /**
41
+ * Public interface for scheduler operations
42
+ */
43
+ export interface ISchedulerRequest {
44
+ list(): Promise<IScheduledJob[]>;
45
+ add(jobId: string, job: Job, schedule: Schedule): Promise<void>;
46
+ delete(jobId: string): Promise<void>;
47
+ get(jobId: string): Promise<IScheduledJob | undefined>;
48
+ pause(jobId: string): Promise<void>;
49
+ resume(jobId: string): Promise<void>;
50
+ on(event: string, listener: (...args: any[]) => void);
51
+ off(event: string, listener: (...args: any[]) => void);
52
+ }
53
+
54
+ /**
55
+ * Abstract base class for scheduler connectors
56
+ *
57
+ * Follows the SRE connector pattern with ACL-based access control.
58
+ * All operations are secured and candidate-scoped.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const scheduler = new LocalScheduler({ folder: '~/.smyth/scheduler' });
63
+ * const candidate = new AccessCandidate(TAccessRole.User, 'user123');
64
+ * const requester = scheduler.requester(candidate);
65
+ *
66
+ * // Add a scheduled job
67
+ * const schedule = Schedule.every('10m');
68
+ * const job = new Job(async () => {
69
+ * console.log('Job executed');
70
+ * }, { name: 'My Job' });
71
+ *
72
+ * await requester.add('job1', schedule, job);
73
+ *
74
+ * // List jobs
75
+ * const jobs = await requester.list();
76
+ * ```
77
+ */
78
+ export abstract class SchedulerConnector extends SecureConnector<ISchedulerRequest> {
79
+ public abstract id: string;
80
+ public abstract name: string;
81
+ protected _eventEmitter: EventEmitter;
82
+
83
+ constructor(settings?: any) {
84
+ super(settings);
85
+ this._eventEmitter = new EventEmitter();
86
+ }
87
+
88
+ /**
89
+ * Get ACL for a specific job resource
90
+ * @param resourceId - Job ID
91
+ * @param candidate - Access candidate
92
+ */
93
+ public abstract getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
94
+
95
+ /**
96
+ * Create a requester interface for the given candidate
97
+ * This wraps all protected methods with access control
98
+ */
99
+ public requester(candidate: AccessCandidate): ISchedulerRequest {
100
+ return {
101
+ list: async () => {
102
+ return await this.list(candidate.readRequest);
103
+ },
104
+ add: async (jobId: string, job: Job, schedule: Schedule) => {
105
+ //check if the candidate it attempting to schedule a job for an agent that is not in the same team as the candidate
106
+ const accountConnector = ConnectorService.getAccountConnector();
107
+ const agentTeam = await accountConnector.getCandidateTeam(AccessCandidate.agent(job.agentId));
108
+ const candidateTeam = await accountConnector.getCandidateTeam(candidate);
109
+ if (agentTeam !== candidateTeam) {
110
+ throw new Error(`Candidate ${candidate.id} is not authorized to schedule a job for agent ${job.agentId}`);
111
+ }
112
+ await this.add(candidate.writeRequest, jobId, job, schedule);
113
+ },
114
+ delete: async (jobId: string) => {
115
+ await this.delete(candidate.writeRequest, jobId);
116
+ },
117
+ get: async (jobId: string) => {
118
+ return await this.get(candidate.readRequest, jobId);
119
+ },
120
+ pause: async (jobId: string) => {
121
+ await this.pause(candidate.writeRequest, jobId);
122
+ },
123
+ resume: async (jobId: string) => {
124
+ await this.resume(candidate.writeRequest, jobId);
125
+ },
126
+ on: (event: string, listener: (...args: any[]) => void) => {
127
+ this.on(event, listener);
128
+ },
129
+ off: (event: string, listener: (...args: any[]) => void) => {
130
+ this.off(event, listener);
131
+ },
132
+ };
133
+ }
134
+
135
+ /**
136
+ * List all jobs for the candidate
137
+ * @param acRequest - Access request
138
+ */
139
+ protected abstract list(acRequest: AccessRequest): Promise<IScheduledJob[]>;
140
+
141
+ /**
142
+ * Add or update a scheduled job
143
+ * @param acRequest - Access request
144
+ * @param jobId - Job identifier
145
+ * @param schedule - Schedule definition
146
+ * @param job - Job to execute
147
+ */
148
+ protected abstract add(acRequest: AccessRequest, jobId: string, job: Job, schedule: Schedule): Promise<void>;
149
+
150
+ /**
151
+ * Delete a scheduled job
152
+ * @param acRequest - Access request
153
+ * @param jobId - Job identifier
154
+ */
155
+ protected abstract delete(acRequest: AccessRequest, jobId: string): Promise<void>;
156
+
157
+ /**
158
+ * Get a specific job
159
+ * @param acRequest - Access request
160
+ * @param jobId - Job identifier
161
+ */
162
+ protected abstract get(acRequest: AccessRequest, jobId: string): Promise<IScheduledJob | undefined>;
163
+
164
+ /**
165
+ * Pause a scheduled job
166
+ * @param acRequest - Access request
167
+ * @param jobId - Job identifier
168
+ */
169
+ protected abstract pause(acRequest: AccessRequest, jobId: string): Promise<void>;
170
+
171
+ /**
172
+ * Resume a paused job
173
+ * @param acRequest - Access request
174
+ * @param jobId - Job identifier
175
+ */
176
+ protected abstract resume(acRequest: AccessRequest, jobId: string): Promise<void>;
177
+
178
+ /**
179
+ * Construct a unique job identifier scoped to the candidate
180
+ * @param candidate - Access candidate
181
+ * @param jobId - Job ID
182
+ */
183
+ protected constructJobKey(candidate: IAccessCandidate, jobId: string): string {
184
+ return `${candidate.role}_${candidate.id}_${jobId}`;
185
+ }
186
+
187
+ protected emit(event: string, ...args: any[]): boolean {
188
+ return this._eventEmitter.emit(event, ...args);
189
+ }
190
+
191
+ public on(event: string, listener: (...args: any[]) => void) {
192
+ this._eventEmitter.on(event, listener);
193
+ return this;
194
+ }
195
+
196
+ public off(event: string, listener: (...args: any[]) => void) {
197
+ this._eventEmitter.off(event, listener);
198
+ return this;
199
+ }
200
+ }