@memberjunction/ai-agent-manager 2.107.0 → 2.109.0

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.
@@ -0,0 +1,293 @@
1
+ import { BaseAgent, PayloadManager } from '@memberjunction/ai-agents';
2
+ import { ExecuteAgentParams, BaseAgentNextStep, AgentSpec } from '@memberjunction/ai-core-plus';
3
+ import { AIAgentRunEntityExtended, AIAgentRunStepEntityExtended, ActionEntity, AIPromptEntity } from '@memberjunction/core-entities';
4
+ import { Metadata, RunView } from '@memberjunction/core';
5
+ import { RegisterClass } from '@memberjunction/global';
6
+
7
+ /**
8
+ * Architect Agent - Transforms technical design into validated AgentSpec JSON
9
+ *
10
+ * This agent creates AgentSpec objects from technical designs and validates them
11
+ * before passing to the Builder Agent for persistence. It overrides validateSuccessNextStep
12
+ * to ensure the generated AgentSpec is valid before proceeding.
13
+ *
14
+ * Key responsibilities:
15
+ * - Transform design documents into AgentSpec format
16
+ * - Validate required fields are present
17
+ * - Verify action IDs exist in database
18
+ * - Verify prompt IDs exist (if specified)
19
+ * - Validate SubAgent structure
20
+ * - Auto-correct minor issues (casing, missing optional fields)
21
+ * - Force retry with detailed errors if validation fails
22
+ */
23
+ @RegisterClass(BaseAgent, 'AgentArchitectAgent')
24
+ export class AgentArchitectAgent extends BaseAgent {
25
+
26
+ /**
27
+ * Applies payload changes if any are requested in the next step
28
+ */
29
+ protected applyPayloadChanges<P>(payload: P, nextStep: BaseAgentNextStep<P>): P {
30
+ if (nextStep.payloadChangeRequest) {
31
+ const pm = new PayloadManager();
32
+ const result = pm.applyAgentChangeRequest<P>(payload, nextStep.payloadChangeRequest);
33
+ return result.result || payload;
34
+ }
35
+ return payload;
36
+ }
37
+
38
+ protected override async validateSuccessNextStep<P>(
39
+ params: ExecuteAgentParams,
40
+ nextStep: BaseAgentNextStep<P>,
41
+ currentPayload: P,
42
+ agentRun: AIAgentRunEntityExtended,
43
+ currentStep: AIAgentRunStepEntityExtended
44
+ ): Promise<BaseAgentNextStep<P>> {
45
+ // First call base validation
46
+ const baseValidation = await super.validateSuccessNextStep(params, nextStep, currentPayload, agentRun, currentStep);
47
+ if (baseValidation.step === 'Retry') {
48
+ return baseValidation;
49
+ }
50
+
51
+ // Apply payload changes to get the spec that would be sent forward
52
+ const payloadWithChanges = this.applyPayloadChanges<P>(currentPayload, nextStep);
53
+
54
+ // Extract the agentSpec from the nested payload structure
55
+ // The payload has structure: { metadata, requirements, design, agentSpec }
56
+ const agentSpec = (payloadWithChanges as any).agentSpec as AgentSpec;
57
+
58
+ console.log('🏗️ Architect Agent: Validating AgentSpec:', agentSpec ? `Name="${agentSpec.Name}"` : 'agentSpec is null/undefined');
59
+
60
+ // Validate the AgentSpec
61
+ const validation = await this.validateAgentSpec(agentSpec, params);
62
+
63
+ if (validation.errors.length > 0) {
64
+ console.log('❌ Architect Agent: Validation failed with errors:', validation.errors);
65
+ // Return retry with detailed error messages
66
+ return {
67
+ ...nextStep,
68
+ step: 'Retry',
69
+ retryInstructions: this.formatValidationErrors(validation.errors),
70
+ newPayload: nextStep.newPayload
71
+ };
72
+ }
73
+
74
+ // If spec was auto-corrected, update the payload with corrected spec
75
+ if (validation.correctedSpec) {
76
+ console.log('✓ Architect Agent: Auto-corrected AgentSpec, updating payload');
77
+ const updatedPayload = {
78
+ ...(payloadWithChanges as any),
79
+ agentSpec: validation.correctedSpec
80
+ };
81
+ return {
82
+ ...nextStep,
83
+ newPayload: updatedPayload as P
84
+ };
85
+ }
86
+
87
+ console.log('✅ Architect Agent: AgentSpec validation passed');
88
+ return nextStep;
89
+ }
90
+
91
+ /**
92
+ * Validates an AgentSpec object
93
+ * Returns errors array and potentially a corrected spec
94
+ */
95
+ protected async validateAgentSpec(
96
+ spec: AgentSpec,
97
+ params: ExecuteAgentParams
98
+ ): Promise<{ errors: string[]; correctedSpec?: AgentSpec }> {
99
+ const errors: string[] = [];
100
+ let corrected = false;
101
+
102
+ // Check if spec exists
103
+ if (!spec) {
104
+ errors.push('❌ AgentSpec is null or undefined. Ensure you place the AgentSpec in payload.agentSpec (inside a payloadChangeRequest with newElements or replaceElements)');
105
+ return { errors };
106
+ }
107
+
108
+ const correctedSpec = { ...spec };
109
+
110
+ // 1. Validate required fields
111
+ if (!correctedSpec.Name || correctedSpec.Name.trim().length === 0) {
112
+ errors.push('❌ AgentSpec.Name is required and cannot be empty');
113
+ }
114
+
115
+ if (!correctedSpec.StartingPayloadValidationMode) {
116
+ // Auto-correct: add default
117
+ correctedSpec.StartingPayloadValidationMode = 'Fail';
118
+ corrected = true;
119
+ console.log('✓ Auto-corrected: Added default StartingPayloadValidationMode = "Fail"');
120
+ } else if (correctedSpec.StartingPayloadValidationMode !== 'Fail' && correctedSpec.StartingPayloadValidationMode !== 'Warn') {
121
+ errors.push(`❌ StartingPayloadValidationMode must be either "Fail" or "Warn", got: "${correctedSpec.StartingPayloadValidationMode}"`);
122
+ }
123
+
124
+ // 2. Validate Actions if specified
125
+ if (correctedSpec.Actions && correctedSpec.Actions.length > 0) {
126
+ const actionValidation = await this.validateActions(correctedSpec.Actions, params);
127
+ if (actionValidation.errors.length > 0) {
128
+ errors.push(...actionValidation.errors);
129
+ }
130
+ }
131
+
132
+ // 3. Validate SubAgents if specified
133
+ if (correctedSpec.SubAgents && correctedSpec.SubAgents.length > 0) {
134
+ const subAgentValidation = this.validateSubAgents(correctedSpec.SubAgents);
135
+ if (subAgentValidation.errors.length > 0) {
136
+ errors.push(...subAgentValidation.errors);
137
+ }
138
+ if (subAgentValidation.corrected) {
139
+ corrected = true;
140
+ }
141
+ }
142
+
143
+ // 4. Validate optional but important fields
144
+ if (correctedSpec.FinalPayloadValidationMode &&
145
+ !['Fail', 'Retry', 'Warn'].includes(correctedSpec.FinalPayloadValidationMode)) {
146
+ errors.push(`❌ FinalPayloadValidationMode must be "Fail", "Retry", or "Warn", got: "${correctedSpec.FinalPayloadValidationMode}"`);
147
+ }
148
+
149
+ if (correctedSpec.InvocationMode &&
150
+ !['Any', 'Agent', 'User', 'Never'].includes(correctedSpec.InvocationMode)) {
151
+ errors.push(`❌ InvocationMode must be "Any", "Agent", "User", or "Never", got: "${correctedSpec.InvocationMode}"`);
152
+ }
153
+
154
+ return {
155
+ errors,
156
+ correctedSpec: corrected ? correctedSpec : undefined
157
+ };
158
+ }
159
+
160
+ /**
161
+ * Validates that action IDs exist in the database
162
+ */
163
+ protected async validateActions(
164
+ actions: AgentSpec['Actions'],
165
+ params: ExecuteAgentParams
166
+ ): Promise<{ errors: string[] }> {
167
+ const errors: string[] = [];
168
+
169
+ if (!actions || actions.length === 0) {
170
+ return { errors };
171
+ }
172
+
173
+ try {
174
+ const rv = new RunView();
175
+ const actionIds = actions
176
+ .map(a => a.ActionID)
177
+ .filter(id => id && id.trim().length > 0);
178
+
179
+ if (actionIds.length === 0) {
180
+ errors.push('❌ All actions must have an ActionID');
181
+ return { errors };
182
+ }
183
+
184
+ // Query database for these action IDs
185
+ const filter = actionIds.map(id => `ID='${id}'`).join(' OR ');
186
+ const result = await rv.RunView<ActionEntity>({
187
+ EntityName: 'Actions',
188
+ ExtraFilter: filter,
189
+ ResultType: 'entity_object'
190
+ }, params.contextUser);
191
+
192
+ if (!result.Success) {
193
+ errors.push(`❌ Failed to validate actions: ${result.ErrorMessage}`);
194
+ return { errors };
195
+ }
196
+
197
+ const foundIds = new Set(result.Results.map(a => a.ID));
198
+
199
+ // Check which actions weren't found
200
+ for (const action of actions) {
201
+ if (!action.ActionID) {
202
+ errors.push('❌ Action is missing ActionID field');
203
+ continue;
204
+ }
205
+
206
+ if (!foundIds.has(action.ActionID)) {
207
+ errors.push(`❌ Action with ID "${action.ActionID}" not found in database. Please use "Find Best Action" or "List Actions" to get valid action IDs.`);
208
+ }
209
+ }
210
+
211
+ } catch (error: any) {
212
+ errors.push(`❌ Error validating actions: ${error?.message || String(error)}`);
213
+ }
214
+
215
+ return { errors };
216
+ }
217
+
218
+ /**
219
+ * Validates SubAgent structure
220
+ */
221
+ protected validateSubAgents(
222
+ subAgents: AgentSpec['SubAgents']
223
+ ): { errors: string[]; corrected: boolean } {
224
+ const errors: string[] = [];
225
+ let corrected = false;
226
+
227
+ if (!subAgents || subAgents.length === 0) {
228
+ return { errors, corrected };
229
+ }
230
+
231
+ for (let i = 0; i < subAgents.length; i++) {
232
+ const subAgent = subAgents[i];
233
+
234
+ // Validate Type field
235
+ if (!subAgent.Type) {
236
+ errors.push(`❌ SubAgent at index ${i} is missing required "Type" field (must be "child" or "related")`);
237
+ continue;
238
+ }
239
+
240
+ if (subAgent.Type !== 'child' && subAgent.Type !== 'related') {
241
+ errors.push(`❌ SubAgent at index ${i} has invalid Type "${subAgent.Type}" (must be "child" or "related")`);
242
+ continue;
243
+ }
244
+
245
+ // Validate SubAgent.SubAgent field
246
+ if (!subAgent.SubAgent) {
247
+ errors.push(`❌ SubAgent at index ${i} is missing required "SubAgent" field`);
248
+ continue;
249
+ }
250
+
251
+ // SubAgent.ID can be empty string "" for NEW sub-agents (Builder creates them recursively)
252
+ // Only validate that ID is not null/undefined
253
+ if (subAgent.SubAgent.ID === null || subAgent.SubAgent.ID === undefined) {
254
+ errors.push(`❌ SubAgent at index ${i} has null/undefined SubAgent.ID (use empty string "" for new sub-agents, or provide existing agent GUID)`);
255
+ }
256
+
257
+ // Validate SubAgent.SubAgent.Name
258
+ if (!subAgent.SubAgent.Name || subAgent.SubAgent.Name.trim().length === 0) {
259
+ errors.push(`❌ SubAgent at index ${i} is missing SubAgent.Name`);
260
+ }
261
+
262
+ // Auto-correct: Add default StartingPayloadValidationMode if missing
263
+ if (!subAgent.SubAgent.StartingPayloadValidationMode) {
264
+ subAgent.SubAgent.StartingPayloadValidationMode = 'Fail';
265
+ corrected = true;
266
+ console.log(`✓ Auto-corrected: Added SubAgent[${i}].SubAgent.StartingPayloadValidationMode = "Fail"`);
267
+ }
268
+
269
+ // Validate related-specific fields
270
+ if (subAgent.Type === 'related' && !subAgent.AgentRelationshipID) {
271
+ // AgentRelationshipID can be empty for new relationships, it will be created on save
272
+ // This is not an error
273
+ }
274
+ }
275
+
276
+ return { errors, corrected };
277
+ }
278
+
279
+ /**
280
+ * Formats validation errors into a clear, actionable message
281
+ */
282
+ protected formatValidationErrors(errors: string[]): string {
283
+ if (errors.length === 0) {
284
+ return '';
285
+ }
286
+
287
+ const header = '## AgentSpec Validation Errors\n\nThe generated AgentSpec has the following issues that must be fixed:\n\n';
288
+ const errorList = errors.map((err, idx) => `${idx + 1}. ${err}`).join('\n');
289
+ const footer = '\n\n**Please fix these issues and regenerate the AgentSpec.**';
290
+
291
+ return header + errorList + footer;
292
+ }
293
+ }
@@ -0,0 +1,89 @@
1
+ import { BaseAgent } from '@memberjunction/ai-agents';
2
+ import { ExecuteAgentParams, AgentConfiguration, BaseAgentNextStep, AgentSpec } from '@memberjunction/ai-core-plus';
3
+ import { RegisterClass } from '@memberjunction/global';
4
+ import { AgentSpecSync } from '../agent-spec-sync';
5
+
6
+ /**
7
+ * Builder Agent - Persists validated AgentSpec to database via AgentSpecSync
8
+ *
9
+ * This is a code-based agent that overrides executeAgentInternal to bypass
10
+ * the normal chat loop and directly execute persistence logic. It receives
11
+ * a validated AgentSpec from the Architect Agent and saves it to the database
12
+ * using AgentSpecSync.
13
+ *
14
+ * Key responsibilities:
15
+ * - Receive validated AgentSpec from payload
16
+ * - Create AgentSpecSync instance
17
+ * - Persist to database
18
+ * - Return success with created agent ID, or failure with error details
19
+ *
20
+ * This agent does NOT iterate - it runs once and returns Success or Failed.
21
+ */
22
+ @RegisterClass(BaseAgent, 'AgentBuilderAgent')
23
+ export class AgentBuilderAgent extends BaseAgent {
24
+
25
+ /**
26
+ * Override executeAgentInternal to run code instead of chat loop
27
+ * This follows the Skip Code Generator pattern
28
+ */
29
+ protected override async executeAgentInternal<P = any>(
30
+ params: ExecuteAgentParams<P>,
31
+ _config: AgentConfiguration
32
+ ): Promise<{ finalStep: BaseAgentNextStep<P>; stepCount: number }> {
33
+
34
+ console.log('🔨 Builder Agent: Starting agent persistence...');
35
+
36
+ try {
37
+ // Extract AgentSpec from nested payload structure
38
+ // The payload has structure: { metadata, requirements, design, agentSpec }
39
+ const agentSpec = (params.payload as any).agentSpec as AgentSpec;
40
+
41
+ if (!agentSpec) {
42
+ throw new Error('No AgentSpec found in payload.agentSpec - ensure Architect Agent placed it there');
43
+ }
44
+
45
+ if (!agentSpec.Name) {
46
+ throw new Error('AgentSpec is missing required Name field');
47
+ }
48
+
49
+ console.log(`🔨 Builder Agent: Creating agent "${agentSpec.Name}"...`);
50
+
51
+ // Create AgentSpecSync instance
52
+ const specSync = new AgentSpecSync(agentSpec, params.contextUser);
53
+
54
+ // Mark as dirty to ensure it saves
55
+ specSync.markDirty();
56
+
57
+ // Save to database
58
+ const agentId = await specSync.SaveToDatabase();
59
+
60
+ console.log(`✅ Builder Agent: Successfully created agent with ID: ${agentId}`);
61
+
62
+ // Return success with the created agent ID
63
+ const updatedSpec = { ...agentSpec, ID: agentId };
64
+
65
+ return {
66
+ finalStep: {
67
+ terminate: true,
68
+ step: 'Success',
69
+ reasoning: `Successfully created agent "${agentSpec.Name}" with ID: ${agentId}`,
70
+ newPayload: updatedSpec as P
71
+ },
72
+ stepCount: 1
73
+ };
74
+
75
+ } catch (error: any) {
76
+ console.error('❌ Builder Agent: Failed to create agent:', error);
77
+
78
+ // Return failure with error details
79
+ return {
80
+ finalStep: {
81
+ terminate: true,
82
+ step: 'Failed',
83
+ reasoning: `Failed to create agent: ${error?.message || String(error)}`
84
+ },
85
+ stepCount: 1
86
+ };
87
+ }
88
+ }
89
+ }
package/src/index.ts CHANGED
@@ -1,8 +1,29 @@
1
1
  /**
2
2
  * @module @memberjunction/agent-manager-core
3
- *
3
+ *
4
4
  * Core interfaces and types for the MemberJunction Agent Manager system
5
5
  */
6
6
 
7
7
  // Export all interfaces
8
- export * from './interfaces/agent-definition.interface';
8
+ export * from './old/agent-definition.interface';
9
+
10
+ export * from './agent-spec-sync';
11
+
12
+ // Export agent implementations
13
+ export * from './agents/architect-agent';
14
+ export * from './agents/builder-agent';
15
+
16
+ /**
17
+ * Loads the Agent Manager Core module and ensures all agent classes are registered.
18
+ * This function prevents tree shaking from removing the agent class registrations.
19
+ *
20
+ * The function itself doesn't need to do anything - importing the module is enough
21
+ * to trigger the @RegisterClass decorators on AgentArchitectAgent and AgentBuilderAgent.
22
+ */
23
+ export function LoadAgentManagerCore() {
24
+ // Forces module to load and decorators to execute
25
+ // Classes are already exported and decorators run on import
26
+ }
27
+
28
+ // Auto-load on import to ensure decorators execute
29
+ LoadAgentManagerCore();
@@ -10,6 +10,7 @@
10
10
  /**
11
11
  * Complete agent definition that supports n-levels of sub-agent hierarchy
12
12
  * All text fields support markdown formatting for rich documentation
13
+ * @deprecated
13
14
  */
14
15
  export interface AIAgentDefinition {
15
16
  // Basic Information
package/tsconfig.json CHANGED
@@ -12,7 +12,9 @@
12
12
  "declaration": true,
13
13
  "declarationMap": true,
14
14
  "sourceMap": true,
15
- "resolveJsonModule": true
15
+ "resolveJsonModule": true,
16
+ "experimentalDecorators": true,
17
+ "emitDecoratorMetadata": true
16
18
  },
17
19
  "include": [
18
20
  "src/**/*"
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-definition.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/agent-definition.interface.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-definition.interface.js","sourceRoot":"","sources":["../../src/interfaces/agent-definition.interface.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}