@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.
- package/CHANGELOG +15 -0
- package/dist/index.js +52 -46
- package/dist/index.js.map +1 -1
- package/dist/types/Components/APIEndpoint.class.d.ts +2 -8
- package/dist/types/Components/Component.class.d.ts +9 -0
- package/dist/types/Components/Triggers/Gmail.trigger.d.ts +0 -17
- package/dist/types/Components/Triggers/JobScheduler.trigger.d.ts +10 -0
- package/dist/types/Components/Triggers/Trigger.class.d.ts +11 -0
- package/dist/types/Components/index.d.ts +6 -0
- package/dist/types/Core/Connector.class.d.ts +1 -0
- package/dist/types/Core/ConnectorsService.d.ts +2 -0
- package/dist/types/Core/HookService.d.ts +1 -1
- package/dist/types/helpers/Conversation.helper.d.ts +2 -0
- package/dist/types/helpers/Crypto.helper.d.ts +8 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/subsystems/AgentManager/Agent.class.d.ts +4 -2
- package/dist/types/subsystems/AgentManager/AgentData.service/AgentDataConnector.d.ts +13 -0
- package/dist/types/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.d.ts +1 -4
- package/dist/types/subsystems/AgentManager/Scheduler.service/Job.class.d.ts +29 -6
- package/dist/types/subsystems/AgentManager/Scheduler.service/SchedulerConnector.d.ts +11 -3
- package/dist/types/subsystems/AgentManager/Scheduler.service/connectors/LocalScheduler.class.d.ts +31 -7
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.d.ts +2 -5
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.d.ts +3 -6
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.d.ts +7 -0
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/xAI.class.d.ts +2 -5
- package/dist/types/types/Agent.types.d.ts +1 -0
- package/dist/types/types/LLM.types.d.ts +2 -5
- package/dist/types/types/SRE.types.d.ts +4 -1
- package/package.json +6 -2
- package/src/Components/APICall/OAuth.helper.ts +30 -35
- package/src/Components/APIEndpoint.class.ts +25 -6
- package/src/Components/Component.class.ts +11 -0
- package/src/Components/Triggers/Gmail.trigger.ts +282 -0
- package/src/Components/Triggers/JobScheduler.trigger.ts +45 -0
- package/src/Components/Triggers/README.md +3 -0
- package/src/Components/Triggers/Trigger.class.ts +101 -0
- package/src/Components/Triggers/WhatsApp.trigger.ts +219 -0
- package/src/Components/index.ts +8 -0
- package/src/Core/AgentProcess.helper.ts +4 -6
- package/src/Core/Connector.class.ts +11 -3
- package/src/Core/ConnectorsService.ts +5 -0
- package/src/Core/ExternalEventsReceiver.ts +317 -0
- package/src/Core/HookService.ts +20 -6
- package/src/Core/SmythRuntime.class.ts +7 -0
- package/src/Core/SystemEvents.ts +17 -0
- package/src/Core/boot.ts +2 -0
- package/src/helpers/Conversation.helper.ts +35 -11
- package/src/helpers/Crypto.helper.ts +28 -0
- package/src/index.ts +208 -195
- package/src/index.ts.bak +208 -195
- package/src/subsystems/AGENTS.md +594 -0
- package/src/subsystems/AgentManager/Agent.class.ts +71 -21
- package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +24 -1
- package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +2 -2
- package/src/subsystems/AgentManager/AgentRuntime.class.ts +34 -5
- package/src/subsystems/AgentManager/Scheduler.service/Job.class.ts +414 -0
- package/src/subsystems/AgentManager/Scheduler.service/Schedule.class.ts +200 -0
- package/src/subsystems/AgentManager/Scheduler.service/SchedulerConnector.ts +200 -0
- package/src/subsystems/AgentManager/Scheduler.service/connectors/LocalScheduler.class.ts +767 -0
- package/src/subsystems/AgentManager/Scheduler.service/index.ts +11 -0
- package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +1 -1
- package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +61 -2
- package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +3 -0
- package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +3 -1
- package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +5 -1
- package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +247 -56
- package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +3 -0
- package/src/subsystems/LLMManager/LLM.service/connectors/Ollama.class.ts +28 -21
- package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +3 -0
- package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +121 -33
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +38 -27
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +115 -18
- package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +3 -0
- package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +1 -6
- package/src/subsystems/MemoryManager/LLMContext.ts +3 -8
- package/src/subsystems/MemoryManager/RuntimeContext.ts +10 -9
- package/src/subsystems/Security/Credentials/Credentials.class.ts +1 -0
- package/src/subsystems/Security/Credentials/ManagedOAuth2Credentials.class.ts +106 -0
- package/src/types/Agent.types.ts +1 -0
- package/src/types/LLM.types.ts +2 -2
- 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
|
+
}
|