@memberjunction/actions 2.52.0 → 2.54.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.
@@ -1,16 +1,29 @@
1
1
  import { EntityInfo, EntitySaveOptions } from "@memberjunction/core";
2
- import { BaseLLM, ChatParams } from "@memberjunction/ai";
3
2
  import { ActionEntityExtended, ActionLibrary, GeneratedCode } from "@memberjunction/actions-base";
3
+ /**
4
+ * Extended GeneratedCode interface to include parameters and result codes
5
+ */
6
+ interface GeneratedCodeExtended extends GeneratedCode {
7
+ Parameters?: Array<{
8
+ Name: string;
9
+ Type: 'Input' | 'Output' | 'Both';
10
+ ValueType: 'Scalar' | 'Simple Object' | 'BaseEntity Sub-Class' | 'Other';
11
+ IsArray: boolean;
12
+ IsRequired: boolean;
13
+ DefaultValue: string | null;
14
+ Description: string;
15
+ }>;
16
+ ResultCodes?: Array<{
17
+ ResultCode: string;
18
+ Description: string;
19
+ IsSuccess: boolean;
20
+ }>;
21
+ }
4
22
  /**
5
23
  * Server-Only custom sub-class for Actions entity. This sub-class handles the process of auto-generation code for the Actions entity.
6
24
  */
7
25
  export declare class ActionEntityServerEntity extends ActionEntityExtended {
8
26
  constructor(Entity: EntityInfo);
9
- /**
10
- * Default implementation simply returns 'OpenAI' - override this in your subclass if you are using a different AI vendor.
11
- * @returns
12
- */
13
- protected get AIVendorName(): string;
14
27
  /**
15
28
  * Override of the base Save method to handle the pre-processing to auto generate code whenever an action's UserPrompt is modified.
16
29
  * This happens when a new record is created and also whenever the UserPrompt field is changed.
@@ -18,20 +31,43 @@ export declare class ActionEntityServerEntity extends ActionEntityExtended {
18
31
  * @returns
19
32
  */
20
33
  Save(options?: EntitySaveOptions): Promise<boolean>;
21
- protected manageLibraries(codeLibraries: ActionLibrary[], wasNewRecord: boolean): Promise<boolean>;
34
+ protected manageLibraries(codeLibraries: ActionLibrary[], wasNewRecord: boolean): Promise<void>;
22
35
  protected SendMessage(message: string): void;
23
36
  /**
24
37
  * This method will generate code using a combination of the UserPrompt field as well as the overall context of how an Action gets executed. Code from the Action is later used by CodeGen to inject into
25
38
  * the mj_actions library for each user environment. The mj_actions library will have a class for each action and that class will have certain libraries imported at the top of the file and available for use.
26
39
  * That information along with a detailed amount of system prompt steering goes into the AI model in order to generate contextually appropriate and reliable code that maps to the business logic of the user
27
40
  */
28
- GenerateCode(maxAttempts?: number): Promise<GeneratedCode>;
29
- protected InternalGenerateCode(llm: BaseLLM, chatParams: ChatParams, attemptsRemaining: number): Promise<GeneratedCode>;
30
- protected ValidateCode(llm: BaseLLM, userRequest: string, generatedCode: GeneratedCode, attemptsRemaining: number): Promise<GeneratedCode>;
31
- GenerateSysPrompt(): string;
32
- GenerateValidateCodePrompt(userRequest: string, generatedCode: GeneratedCode): string;
33
- GenerateContextInfo(): string;
34
- GenerateRunViewParamsInfo(): string;
41
+ GenerateCode(maxAttempts?: number): Promise<GeneratedCodeExtended>;
42
+ /**
43
+ * Prepares the data context for the prompt template
44
+ */
45
+ protected PreparePromptData(): Promise<Record<string, any>>;
46
+ /**
47
+ * Loads the parent action entity if this is a child action
48
+ */
49
+ protected LoadParentAction(): Promise<ActionEntityExtended | null>;
50
+ /**
51
+ * Processes generated parameters and saves them to the database
52
+ */
53
+ protected ProcessGeneratedParameters(parameters: Array<any>): Promise<void>;
54
+ /**
55
+ * Processes generated result codes and saves them to the database
56
+ */
57
+ protected ProcessGeneratedResultCodes(resultCodes: Array<{
58
+ ResultCode: string;
59
+ Description: string;
60
+ IsSuccess: boolean;
61
+ }>): Promise<void>;
62
+ /**
63
+ * Validates the generated code
64
+ */
65
+ protected ValidateGeneratedCode(generatedCode: GeneratedCodeExtended, attemptsRemaining: number): Promise<GeneratedCodeExtended>;
66
+ /**
67
+ * Generates the libraries context for the prompt
68
+ */
69
+ protected GenerateLibrariesContext(): string;
35
70
  }
36
71
  export declare function LoadActionEntityServer(): void;
72
+ export {};
37
73
  //# sourceMappingURL=ActionEntity.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionEntity.server.d.ts","sourceRoot":"","sources":["../../src/generic/ActionEntity.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,UAAU,EAAE,iBAAiB,EAA+B,MAAM,sBAAsB,CAAC;AAKlI,OAAO,EAAE,OAAO,EAAe,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAEnF,OAAO,EAAoB,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEpH;;GAEG;AACH,qBACa,wBAAyB,SAAQ,oBAAoB;gBAClD,MAAM,EAAE,UAAU;IAO9B;;;OAGG;IACH,SAAS,KAAK,YAAY,IAAI,MAAM,CAEnC;IAGD;;;;;OAKG;IACmB,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;cAsCzD,eAAe,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA4DxG,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM;IAQrC;;;;OAIG;IACU,YAAY,CAAC,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,CAAC;cAqC1D,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;cAqD7G,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA8BzI,iBAAiB,IAAI,MAAM;IA+B3B,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM;IA2DrF,mBAAmB,IAAI,MAAM;IAsH7B,yBAAyB,IAAI,MAAM;CAsG7C;AAED,wBAAgB,sBAAsB,SAIrC"}
1
+ {"version":3,"file":"ActionEntity.server.d.ts","sourceRoot":"","sources":["../../src/generic/ActionEntity.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,UAAU,EAAE,iBAAiB,EAA+B,MAAM,sBAAsB,CAAC;AAOpI,OAAO,EAAoB,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEpH;;GAEG;AACH,UAAU,qBAAsB,SAAQ,aAAa;IACjD,UAAU,CAAC,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;QAClC,SAAS,EAAE,QAAQ,GAAG,eAAe,GAAG,sBAAsB,GAAG,OAAO,CAAC;QACzE,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACN;AAED;;GAEG;AACH,qBACa,wBAAyB,SAAQ,oBAAoB;gBAClD,MAAM,EAAE,UAAU;IAS9B;;;;;OAKG;IACmB,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;cA4EzD,eAAe,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDrG,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM;IAQrC;;;;OAIG;IACU,YAAY,CAAC,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA2ElF;;OAEG;cACa,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAwCjE;;OAEG;cACa,gBAAgB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAWxE;;OAEG;cACa,0BAA0B,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqGjF;;OAEG;cACa,2BAA2B,CAAC,WAAW,EAAE,KAAK,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2E7I;;OAEG;cACa,qBAAqB,CAAC,aAAa,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAMtI;;OAEG;IACH,SAAS,CAAC,wBAAwB,IAAI,MAAM;CAa/C;AAED,wBAAgB,sBAAsB,SAIrC"}
@@ -13,7 +13,7 @@ exports.LoadActionEntityServer = exports.ActionEntityServerEntity = void 0;
13
13
  const core_1 = require("@memberjunction/core");
14
14
  const global_1 = require("@memberjunction/global");
15
15
  const aiengine_1 = require("@memberjunction/aiengine");
16
- const ai_1 = require("@memberjunction/ai");
16
+ const ai_prompts_1 = require("@memberjunction/ai-prompts");
17
17
  const doc_utils_1 = require("@memberjunction/doc-utils");
18
18
  const actions_base_1 = require("@memberjunction/actions-base");
19
19
  /**
@@ -26,13 +26,6 @@ let ActionEntityServerEntity = class ActionEntityServerEntity extends actions_ba
26
26
  if (md.ProviderType !== 'Database')
27
27
  throw new Error('This class is only supported for server-side/database providers. Remove this package from your application.');
28
28
  }
29
- /**
30
- * Default implementation simply returns 'OpenAI' - override this in your subclass if you are using a different AI vendor.
31
- * @returns
32
- */
33
- get AIVendorName() {
34
- return 'OpenAI';
35
- }
36
29
  /**
37
30
  * Override of the base Save method to handle the pre-processing to auto generate code whenever an action's UserPrompt is modified.
38
31
  * This happens when a new record is created and also whenever the UserPrompt field is changed.
@@ -43,36 +36,66 @@ let ActionEntityServerEntity = class ActionEntityServerEntity extends actions_ba
43
36
  // make sure the ActionEngine is configured
44
37
  await actions_base_1.ActionEngineBase.Instance.Config(false, this.ContextCurrentUser);
45
38
  await doc_utils_1.DocumentationEngine.Instance.Config(false, this.ContextCurrentUser);
46
- let newCodeGenerated = false;
47
- let codeLibraries = [];
48
- if (this.Type === 'Generated' && // only generate when the type is Generated
49
- !this.CodeLocked && // only generate when the code is not locked
50
- (this.GetFieldByName('UserPrompt').Dirty || !this.IsSaved || this.ForceCodeGeneration) // only generate when the UserPrompt field is dirty or this is a new record or we are being asked to FORCE code generation
51
- ) {
52
- // UserPrompt field is dirty, or this is a new record, either way, this is the condition where we want to generate the Code.
53
- const result = await this.GenerateCode();
54
- if (result.Success) {
55
- this.Code = result.Code;
56
- this.CodeComments = result.Comments;
57
- this.CodeApprovalStatus = 'Pending'; // set to pending even if previously approved since we changed the code
58
- this.CodeApprovedAt = null; // reset the approved at date
59
- this.CodeApprovedByUserID = null; // reset the approved by user id
60
- newCodeGenerated = true; // flag for post-save processing of libraries
61
- codeLibraries = result.LibrariesUsed;
39
+ const provider = core_1.Metadata.Provider;
40
+ // Start a database transaction
41
+ await provider.BeginTransaction();
42
+ try {
43
+ let newCodeGenerated = false;
44
+ let codeLibraries = [];
45
+ let generatedParameters = [];
46
+ let generatedResultCodes = [];
47
+ if (this.Type === 'Generated' && // only generate when the type is Generated
48
+ !this.CodeLocked && // only generate when the code is not locked
49
+ (this.GetFieldByName('UserPrompt').Dirty || !this.IsSaved || this.ForceCodeGeneration) // only generate when the UserPrompt field is dirty or this is a new record or we are being asked to FORCE code generation
50
+ ) {
51
+ // UserPrompt field is dirty, or this is a new record, either way, this is the condition where we want to generate the Code.
52
+ const result = await this.GenerateCode();
53
+ if (result.Success) {
54
+ this.Code = result.Code;
55
+ this.CodeComments = result.Comments;
56
+ this.CodeApprovalStatus = 'Pending'; // set to pending even if previously approved since we changed the code
57
+ this.CodeApprovedAt = null; // reset the approved at date
58
+ this.CodeApprovedByUserID = null; // reset the approved by user id
59
+ newCodeGenerated = true; // flag for post-save processing of libraries
60
+ codeLibraries = result.LibrariesUsed;
61
+ // Store the generated parameters and result codes for later processing
62
+ generatedParameters = result.Parameters || [];
63
+ generatedResultCodes = result.ResultCodes || [];
64
+ }
65
+ else
66
+ throw new Error(`Failed to generate code for Action ${this.Name}.`);
62
67
  }
63
- else
64
- throw new Error(`Failed to generate code for Action ${this.Name}.`);
65
- }
66
- this.ForceCodeGeneration = false; // make sure to reset this flag every time we save, it should never live past one run of the Save method, of course if Save fails, below, then it will not be reset
67
- const wasNewRecord = !this.IsSaved;
68
- if (await super.Save(options)) {
69
- if (newCodeGenerated)
70
- return this.manageLibraries(codeLibraries, wasNewRecord);
71
- else
68
+ this.ForceCodeGeneration = false; // make sure to reset this flag every time we save, it should never live past one run of the Save method
69
+ const wasNewRecord = !this.IsSaved;
70
+ if (await super.Save(options)) {
71
+ // Now handle all the child entities within the same transaction
72
+ if (newCodeGenerated) {
73
+ // Process libraries
74
+ await this.manageLibraries(codeLibraries, wasNewRecord);
75
+ // Process parameters
76
+ if (generatedParameters.length > 0) {
77
+ await this.ProcessGeneratedParameters(generatedParameters);
78
+ }
79
+ // Process result codes
80
+ if (generatedResultCodes.length > 0) {
81
+ await this.ProcessGeneratedResultCodes(generatedResultCodes);
82
+ }
83
+ }
84
+ // Commit the transaction
85
+ await provider.CommitTransaction();
72
86
  return true;
87
+ }
88
+ else {
89
+ // Rollback on save failure
90
+ await provider.RollbackTransaction();
91
+ return false;
92
+ }
93
+ }
94
+ catch (e) {
95
+ // Rollback on any error
96
+ await provider.RollbackTransaction();
97
+ throw e;
73
98
  }
74
- else
75
- return false;
76
99
  }
77
100
  async manageLibraries(codeLibraries, wasNewRecord) {
78
101
  // new code was generated, we need to sync up the ActionLibraries table with the libraries used in the code for this Action
@@ -95,7 +118,6 @@ let ActionEntityServerEntity = class ActionEntityServerEntity extends actions_ba
95
118
  const librariesToRemove = existingLibraries.filter(el => !codeLibraries.some(l => l.LibraryName.trim().toLowerCase() === el.Library.trim().toLowerCase()));
96
119
  const librariesToUpdate = existingLibraries.filter(el => codeLibraries.some(l => l.LibraryName.trim().toLowerCase() === el.Library.trim().toLowerCase()));
97
120
  const md = new core_1.Metadata();
98
- const tg = await md.CreateTransactionGroup();
99
121
  for (const lib of librariesToAdd) {
100
122
  const libMetadata = md.Libraries.find(l => l.Name.trim().toLowerCase() === lib.LibraryName.trim().toLowerCase());
101
123
  if (libMetadata) {
@@ -103,7 +125,6 @@ let ActionEntityServerEntity = class ActionEntityServerEntity extends actions_ba
103
125
  newLib.ActionID = this.ID;
104
126
  newLib.LibraryID = libMetadata.ID;
105
127
  newLib.ItemsUsed = lib.ItemsUsed.join(',');
106
- newLib.TransactionGroup = tg;
107
128
  await newLib.Save();
108
129
  }
109
130
  }
@@ -111,20 +132,13 @@ let ActionEntityServerEntity = class ActionEntityServerEntity extends actions_ba
111
132
  for (const lib of librariesToUpdate) {
112
133
  const newCode = codeLibraries.find(l => l.LibraryName.trim().toLowerCase() === lib.Library.trim().toLowerCase());
113
134
  lib.ItemsUsed = newCode.ItemsUsed.join(',');
114
- lib.TransactionGroup = tg;
115
135
  await lib.Save();
116
136
  }
117
137
  // now remove the libraries that are no longer used
118
138
  for (const lib of librariesToRemove) {
119
139
  // each lib in this array iteration is already a BaseEntity derived object
120
- lib.TransactionGroup = tg;
121
140
  await lib.Delete();
122
141
  }
123
- // now commit the transaction
124
- if (await tg.Submit())
125
- return true;
126
- else
127
- return false;
128
142
  }
129
143
  SendMessage(message) {
130
144
  global_1.MJGlobal.Instance.RaiseEvent({
@@ -142,416 +156,270 @@ let ActionEntityServerEntity = class ActionEntityServerEntity extends actions_ba
142
156
  async GenerateCode(maxAttempts = 3) {
143
157
  try {
144
158
  this.SendMessage('Generating code... ');
145
- const model = await aiengine_1.AIEngine.Instance.GetHighestPowerModel(this.AIVendorName, 'llm', this.ContextCurrentUser);
146
- const llm = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.BaseLLM, model.DriverClass, (0, ai_1.GetAIAPIKey)(model.DriverClass));
147
- const chatParams = {
148
- model: model.APINameOrName,
149
- messages: [
150
- {
151
- role: 'system',
152
- content: this.GenerateSysPrompt()
153
- },
154
- {
155
- role: 'user',
156
- content: this.UserPrompt,
157
- },
158
- ],
159
- };
160
- let result = await this.InternalGenerateCode(llm, chatParams, maxAttempts);
161
- if (result.Success) {
162
- //now run the code through the QA agent to make sure the code is valid
163
- let qaResult = await this.ValidateCode(llm, this.UserPrompt, result, maxAttempts);
164
- return qaResult;
165
- }
166
- else {
167
- //something went wrong in the first pass, just return the error
168
- return result;
159
+ // Ensure AIEngine is configured
160
+ await aiengine_1.AIEngine.Instance.Config(false, this.ContextCurrentUser);
161
+ // Load the consolidated prompt template from preloaded prompts
162
+ const aiPrompt = aiengine_1.AIEngine.Instance.Prompts.find(p => p.Name === 'Generate Action Code' &&
163
+ p.Category === 'Actions');
164
+ if (!aiPrompt) {
165
+ throw new Error('Failed to find AI prompt template: Generate Action Code in Actions category');
169
166
  }
170
- }
171
- catch (e) {
172
- (0, core_1.LogError)(e);
173
- throw e;
174
- }
175
- }
176
- async InternalGenerateCode(llm, chatParams, attemptsRemaining) {
177
- try {
178
- const result = await llm.ChatCompletion(chatParams);
179
- if (result && result.data) {
180
- const llmResponse = result.data.choices[0].message.content;
181
- if (llmResponse) {
182
- // try to parse it as JSON
183
- const cleansed = (0, global_1.CleanJSON)(llmResponse);
184
- if (!cleansed)
185
- throw new Error('Invalid JSON response from AI: ' + llmResponse);
186
- const parsed = JSON.parse(cleansed);
187
- if (parsed.code && parsed.code.length > 0) {
188
- const trimmed = parsed.code.trim();
189
- let comments = parsed.explanation;
190
- if (parsed.reflection) {
191
- comments = comments + `\n ${parsed.reflection}`;
192
- }
193
- const result = {
194
- Success: true,
195
- Code: trimmed,
196
- Comments: parsed.explanation,
197
- LibrariesUsed: parsed.libraries
198
- };
199
- return result;
200
- }
201
- else {
202
- throw new Error('Invalid JSON response from AI: ' + llmResponse);
203
- }
204
- }
205
- else
206
- throw new Error('No response from AI');
207
- }
208
- else
209
- throw new Error('No response from AI');
210
- }
211
- catch (e) {
212
- (0, core_1.LogError)(e);
213
- if (attemptsRemaining > 1) {
214
- // try again
215
- return await this.InternalGenerateCode(llm, chatParams, attemptsRemaining - 1);
167
+ // Prepare prompt data
168
+ const promptData = await this.PreparePromptData();
169
+ // Execute the prompt using AIPromptRunner
170
+ const promptRunner = new ai_prompts_1.AIPromptRunner();
171
+ const params = new ai_prompts_1.AIPromptParams();
172
+ params.prompt = aiPrompt;
173
+ params.data = promptData;
174
+ params.contextUser = this.ContextCurrentUser;
175
+ const result = await promptRunner.ExecutePrompt(params);
176
+ if (result.success && result.result) {
177
+ const generatedCode = {
178
+ Success: true,
179
+ Code: result.result.code.trim(),
180
+ Comments: result.result.explanation,
181
+ LibrariesUsed: result.result.libraries,
182
+ Parameters: result.result.parameters,
183
+ ResultCodes: result.result.resultCodes
184
+ };
185
+ // Validate the generated code
186
+ return await this.ValidateGeneratedCode(generatedCode, maxAttempts);
216
187
  }
217
- else
188
+ else {
218
189
  return {
219
190
  Success: false,
220
191
  Code: '',
221
- Comments: `Error communicating with AI: ${e.message}`,
192
+ Comments: result.errorMessage || 'Failed to generate code',
222
193
  LibrariesUsed: []
223
194
  };
195
+ }
224
196
  }
225
- }
226
- async ValidateCode(llm, userRequest, generatedCode, attemptsRemaining) {
227
- this.SendMessage(`Reviewing code...`);
228
- const model = await aiengine_1.AIEngine.Instance.GetHighestPowerModel(this.AIVendorName, 'llm', this.ContextCurrentUser);
229
- const promptMessage = this.GenerateValidateCodePrompt(userRequest, generatedCode);
230
- const validatePrompt = {
231
- role: 'system',
232
- content: promptMessage
233
- };
234
- let chatParams = new ai_1.ChatParams();
235
- chatParams.messages = [validatePrompt];
236
- chatParams.model = model.APINameOrName;
237
- let result = await this.InternalGenerateCode(llm, chatParams, attemptsRemaining);
238
- if (result.Success) {
239
- return result;
240
- }
241
- else if (attemptsRemaining > 1) {
242
- return this.ValidateCode(llm, userRequest, generatedCode, attemptsRemaining - 1);
243
- }
244
- else {
245
- return {
246
- Success: false,
247
- Code: '',
248
- Comments: `Error communicating with AI: ${result.Comments}`,
249
- LibrariesUsed: []
250
- };
197
+ catch (e) {
198
+ (0, core_1.LogError)(e);
199
+ throw e;
251
200
  }
252
201
  }
253
- GenerateSysPrompt() {
254
- const prompt = `<RETURN_FORMAT>
255
- * CRITICAL - I am a bot, I can ONLY understand fully formed JSON responses
256
- * YOUR RESPONSE MUST BE A JSON OBJECT
257
- * MORE INFO BELOW
258
- </RETURN_FORMAT>
259
-
260
- <INTRODUCTION>
261
- You are an expert in TypeScript coding and business applications. You take great pride in easy to read, commented, and nicely formatted code.
262
- You will be provided a request for how to handle a specific type of action that they want created. An action is a "verb" in the MemberJunction framework that can do basically anything the user asks for.
263
- Your job is to write the TypeScript code that will be taken and inserted into a class as shown below using the classes
264
- for inputs/outputs and the ActionResultSimple class that is provided. The code you write will be used by the MemberJunction engine to execute the action when
265
- it is called by the user.
266
- </INTRODUCTION>
267
-
268
- ${this.GenerateContextInfo()}
269
-
270
- Your response must be JSON and parsable into this type:
271
- const returnType = {
272
- code: string, // The typescript code you will create that will work in the context described above. Make sure to include line breaks, but not tabs. That is, pretty format in terms of new lines, but do NOT indent with spaces/tabs, as I'll handle indentation.
273
- explanation: string // an explanation for a semi-technical person explaining what the code does. Here again use line breaks liberally to make it easy to read but do NOT indent with spaces/tabs as I will handle that. Use * lists and numbered lists as appropriate.
274
- libraries: [
275
- {LibraryName: string, ItemsUsed: string[]}, // tell me the libraries you have used in the code you created here in this array of libraries. I need this info to properly import them in the final code.
276
- ]
277
- };
278
- </CRITICAL>
279
- **** REMEMBER **** I am a BOT, do not return anything other than the above JSON format to me or I will choke on your response!
280
- `;
281
- return prompt;
282
- }
283
- GenerateValidateCodePrompt(userRequest, generatedCode) {
284
- return `<RETURN_FORMAT>
285
- * CRITICAL - I am a bot, I can ONLY understand fully formed JSON responses
286
- * YOUR RESPONSE MUST BE A JSON OBJECT
287
- * MORE INFO BELOW
288
- </RETURN_FORMAT>
289
-
290
- <INTRODUCTION>
291
- You are an expert in TypeScript coding and business applications. You take great pride in easy to read, commented, and nicely formatted code.
292
- You are also exceptional in catching errors in other people's code and providing clear and easy to understand bug fixes, with comments explaining the
293
- issues and how you corrected it.
294
- You will be provided a request for how to handle a specific type of action that they want created, as well code written by someone else that attempts
295
- to satisfy the request. An action is a "verb" in the MemberJunction framework that can do basically anything the user asks for.
296
- Your job is to:
297
- 1 - Verify that the given code can successfully compile and run, using the provided libraries and parameters.
298
- 2- Verify that the given code satifies the user's request.
299
- </INTRODUCTION>
300
-
301
- The user's original request was:
302
- ${userRequest}
303
-
304
- The generated code is below:
305
- <GENERATEDCODE>
306
- ${generatedCode.Code}
307
- </GENERATEDCODE>
308
-
309
- Here are some comments about the above code:
310
- <CODECOMMENTS>
311
- ${generatedCode.Comments}
312
- </CODECOMMENTS>
313
-
314
- As well as the libraries used in the above code:
315
- <LIBRARIESUSED>
316
- ${JSON.stringify(generatedCode.LibrariesUsed, null, 2)}
317
- </LIBRARIESUSED>
318
-
319
- <CONTEXTINFO>
320
- Here is some additional info to help you:
321
- ${this.GenerateContextInfo()}
322
- </CONTEXTINFO>
323
-
324
- <RUNVIEWINFO>
325
- Here is some additonal info regarding the RunViewParams object
326
- ${this.GenerateRunViewParamsInfo()}
327
- </RUNVIEWINFO>
202
+ /**
203
+ * Prepares the data context for the prompt template
204
+ */
205
+ async PreparePromptData() {
206
+ const data = {
207
+ userPrompt: this.UserPrompt,
208
+ availableLibraries: this.GenerateLibrariesContext(),
209
+ IsChildAction: !!this.ParentID // Template variable for conditional sections
210
+ };
211
+ // If this is a child action, load parent context and create ChildActionInfo
212
+ if (this.ParentID) {
213
+ const parentAction = await this.LoadParentAction();
214
+ if (parentAction) {
215
+ // Create the ChildActionInfo template variable with all parent details
216
+ data.ChildActionInfo = `
217
+ **Parent Action Name:** ${parentAction.Name}
218
+ **Parent Description:** ${parentAction.Description || 'No description provided'}
328
219
 
329
- Your response must be JSON and parsable into this type:
330
- const returnType = {
331
- reflection: string, //Jot down your notes here on why you think the given code was valid or not. If it wasnt, write down why it isnt. Is it because there are syntax or logic errors, or because it doesnt satisfy the user's request?
332
- success: boolean //whether or not the above code is valid and can successfully compile and run, using the given libraries and data types
333
- code: string, // REMEMBER: your code will be inserted INTO an existing method so do not generate the method signature, just the code that I will drop into my existing method as shown in the <CONTEXTINFO>
334
- explanation: string // If the code is not valid, you will provide an explanation for a semi-technical person explaining what the corrected code does. Here again use line breaks liberally to make it easy to read but do NOT indent with spaces/tabs as I will handle that. Use * lists and numbered lists as appropriate.
335
- libraries: [
336
- {LibraryName: string, ItemsUsed: string[]}, // If the code is not valid, tell me the libraries you have used in the corrected code you created here in this array of libraries. I need this info to properly import them in the final code.
337
- ]
338
- };
220
+ **Parent Parameters:**
221
+ ${JSON.stringify(parentAction.Params.map(p => {
222
+ return {
223
+ Name: p.Name,
224
+ Type: p.Type,
225
+ ValueType: p.ValueType,
226
+ IsArray: p.IsArray,
227
+ IsRequired: p.IsRequired,
228
+ DefaultValue: p.DefaultValue,
229
+ Description: p.Description
230
+ };
231
+ }), null, 2)}
339
232
  `;
340
- }
341
- GenerateContextInfo() {
342
- return `
343
- <CODE_EXAMPLE>
344
- export class ${this.ProgrammaticName}Action extends BaseAction {
345
- public async Run(params: RunActionParams): Promise<ActionResultSimple> {
346
- // IMPORTANT: your code will go here, do not generate the method signature, just the code inside the method
347
- /* FOR THE RETURN VALUE you should return a JavaScript object that has these properties:
348
- {
349
- Success: boolean // or false if the action failed
350
- ResultCode: ${this.ResultCodes && this.ResultCodes.length > 0 ? this.ResultCodes.map(rc => `'${rc.ResultCode}'`).join(" | ") : 'string'} // The result of the action
351
- Message: string // a message to show the user
233
+ // Also include the parent action object for template access
234
+ data.parentAction = {
235
+ Name: parentAction.Name,
236
+ Description: parentAction.Description
237
+ };
352
238
  }
353
- */
239
+ }
240
+ return data;
354
241
  }
355
- }
356
- </CODE_EXAMPLE>
357
-
358
- <AVAILABLE_PARAMETERS>
359
- The params parameter into the Run method has a property called Params which is an array of ActionParam objects. These objects have a Name and Value property and map to the defined parameters for this action. The parameters for this
360
- action are as shown below. For parameters shown as output, make sure you generate the code to handle this and place a new item in the Params array with the Name and Value set to the output parameter name and value respectively. If
361
- the parameter has a type of input/output, you will receive the value as an input, and you can update it if the program you create needs to pass back a different value.
362
- ${JSON.stringify(this.Params)}
363
- </AVAILABLE_PARAMETERS>
364
-
365
- <AVAILABLE_LIBRARIES>
366
- The following libraries are available for use in your code. THEY ARE ALREADY IMPORTED. **DO NOT IMPORT THEM IN YOUR CODE**
367
- Use the code examples and reference information shown below, only use properties and methods shown in the documentation/examples.
368
- IMPORTANT: DO NOT GENERATE IMPORT STATEMENTS FOR THESE LIBRARIES, THEY ARE ALREADY IMPORTED FOR YOU!
369
- ${doc_utils_1.DocumentationEngine.Instance.Libraries.map((library) => {
370
- return library.Items.map((item) => {
371
- return `
372
- {
373
- "LibraryName": ${item.Name},
374
- "Content": ${item.HTMLContent}
375
- }
376
- `;
377
- });
378
- })}
379
- </AVAILABLE_LIBRARIES>
380
-
381
- <REFERENCE_TYPES>
382
242
  /**
383
- * Class that has the result of the individual action execution and used by the engine or other caller
243
+ * Loads the parent action entity if this is a child action
384
244
  */
385
- export class ActionResultSimple {
386
- /**
387
- * Indicates if the action was successful or not.
388
- */
389
- public Success: boolean;
390
-
391
- /**
392
- * A string that indicates the strucutred output/results of the action
393
- */
394
- public ResultCode: string;
395
-
396
- /**
397
- * Optional, additional information about the result of the action
398
- */
399
- public Message?: string;
400
-
401
- /**
402
- * Some actions return output parameters. If the action that was run has outputs, they will be provided here.
403
- */
404
- public Outputs?: ActionParam[];
245
+ async LoadParentAction() {
246
+ if (!this.ParentID)
247
+ return null;
248
+ const md = new core_1.Metadata();
249
+ const parent = await md.GetEntityObject('Actions', this.ContextCurrentUser);
250
+ if (await parent.Load(this.ParentID)) {
251
+ return parent;
252
+ }
253
+ return null;
405
254
  }
406
255
  /**
407
- * Generic class for holding parameters for an action for both inputs and outputs
256
+ * Processes generated parameters and saves them to the database
408
257
  */
409
- export class ActionParam {
410
- /**
411
- * The name of the parameter
412
- */
413
- public Name: string;
414
- /**
415
- * The value of the parameter. This can be any type of object.
416
- */
417
- public Value: any;
258
+ async ProcessGeneratedParameters(parameters) {
259
+ const md = new core_1.Metadata();
260
+ try {
261
+ // First, get existing parameters
262
+ const rv = new core_1.RunView();
263
+ const existingParams = await rv.RunView({
264
+ EntityName: 'Action Params',
265
+ ExtraFilter: `ActionID='${this.ID}'`,
266
+ ResultType: 'entity_object'
267
+ }, this.ContextCurrentUser);
268
+ if (!existingParams.Success) {
269
+ throw new Error(`Failed to load existing parameters: ${existingParams.ErrorMessage}`);
270
+ }
271
+ const existingParamsList = existingParams.Results || [];
272
+ const generatedParamNames = parameters.map(p => p.Name.toLowerCase());
273
+ // Find parameters to add, update, or remove
274
+ const paramsToAdd = parameters.filter(p => !existingParamsList.some(ep => ep.Name.toLowerCase() === p.Name.toLowerCase()));
275
+ const paramsToUpdate = existingParamsList.filter(ep => parameters.some(p => p.Name.toLowerCase() === ep.Name.toLowerCase()));
276
+ const paramsToRemove = existingParamsList.filter(ep => !generatedParamNames.includes(ep.Name.toLowerCase()));
277
+ // Add new parameters
278
+ for (const param of paramsToAdd) {
279
+ const newParam = await md.GetEntityObject('Action Params', this.ContextCurrentUser);
280
+ newParam.ActionID = this.ID;
281
+ newParam.Name = param.Name;
282
+ const t = param.Type;
283
+ if (t === 'Input' || t === 'Output' || t === 'Both') {
284
+ newParam.Type = t;
285
+ }
286
+ else {
287
+ newParam.Type = 'Input'; // Default to Input if type is not recognized and emit a warning
288
+ console.warn(`Action Generator: Unrecognized parameter type "${t}" for parameter "${param.Name}". Defaulting to "Input".`);
289
+ }
290
+ newParam.ValueType = param.ValueType;
291
+ newParam.IsArray = param.IsArray;
292
+ newParam.IsRequired = param.IsRequired;
293
+ newParam.DefaultValue = param.DefaultValue;
294
+ newParam.Description = param.Description;
295
+ await newParam.Save();
296
+ }
297
+ // Update existing parameters if properties changed
298
+ for (const existingParam of paramsToUpdate) {
299
+ const generatedParam = parameters.find(p => p.Name.toLowerCase() === existingParam.Name.toLowerCase());
300
+ if (generatedParam) {
301
+ let hasChanges = false;
302
+ // Check each property for changes
303
+ if (existingParam.Type !== generatedParam.Type) {
304
+ existingParam.Type = generatedParam.Type;
305
+ hasChanges = true;
306
+ }
307
+ if (existingParam.ValueType !== generatedParam.ValueType) {
308
+ existingParam.ValueType = generatedParam.ValueType;
309
+ hasChanges = true;
310
+ }
311
+ if (existingParam.IsArray !== generatedParam.IsArray) {
312
+ existingParam.IsArray = generatedParam.IsArray;
313
+ hasChanges = true;
314
+ }
315
+ if (existingParam.IsRequired !== generatedParam.IsRequired) {
316
+ existingParam.IsRequired = generatedParam.IsRequired;
317
+ hasChanges = true;
318
+ }
319
+ if (existingParam.DefaultValue !== generatedParam.DefaultValue) {
320
+ existingParam.DefaultValue = generatedParam.DefaultValue;
321
+ hasChanges = true;
322
+ }
323
+ if (existingParam.Description !== generatedParam.Description) {
324
+ existingParam.Description = generatedParam.Description;
325
+ hasChanges = true;
326
+ }
327
+ if (hasChanges) {
328
+ await existingParam.Save();
329
+ }
330
+ }
331
+ }
332
+ // Remove parameters that are no longer in the generated list
333
+ for (const paramToRemove of paramsToRemove) {
334
+ await paramToRemove.Delete();
335
+ }
336
+ }
337
+ catch (e) {
338
+ (0, core_1.LogError)('Failed to save generated parameters:', e);
339
+ throw e; // Re-throw since we're in a transaction
340
+ }
418
341
  }
419
342
  /**
420
- * Class that holds the parameters for an action to be run. This is passed to the Run method of an action.
343
+ * Processes generated result codes and saves them to the database
421
344
  */
422
- export class RunActionParams {
423
- public Action: ActionEntity;
424
- public ContextUser: UserInfo;
425
- /**
426
- * Optional, a list of filters that should be run before the action is executed.
427
- */
428
- public Filters: ActionFilterEntity[];
429
- /**
430
- * Optional, the input and output parameters as defined in the metadata for the action.
431
- */
432
- public Params: ActionParam[];
433
- }
434
- </REFERENCE_TYPES>
435
-
436
- <ENTITIES>
437
- Entities in MemberJunction are storage objects and roughly map to database tables. Here are the entities in the system to give you additional context to understand the request:
438
- ${JSON.stringify(core_1.Metadata.Provider.Entities.map(e => {
439
- // for each entity, get the name, description and base view
440
- return {
441
- Entity: e.Name,
442
- SchemaName: e.SchemaName,
443
- Description: e.Description,
444
- BaseView: e.BaseView
445
- };
446
- }))}
447
- </ENTITIES>
448
- The next message, which will be a user message in the conversation, will contain the sys admin's requested behavior for this entity.
449
-
450
- <CRITICAL>
451
- I am a bot and can only understand FULLY FORMED JSON responses that can be parsed with JSON.parse().
452
- `;
345
+ async ProcessGeneratedResultCodes(resultCodes) {
346
+ const md = new core_1.Metadata();
347
+ try {
348
+ // First, get existing result codes
349
+ const rv = new core_1.RunView();
350
+ const existingCodes = await rv.RunView({
351
+ EntityName: 'Action Result Codes',
352
+ ExtraFilter: `ActionID='${this.ID}'`,
353
+ ResultType: 'entity_object'
354
+ }, this.ContextCurrentUser);
355
+ if (!existingCodes.Success) {
356
+ throw new Error(`Failed to load existing result codes: ${existingCodes.ErrorMessage}`);
357
+ }
358
+ const existingCodesList = existingCodes.Results || [];
359
+ const generatedCodeNames = resultCodes.map(rc => rc.ResultCode.toLowerCase());
360
+ // Find result codes to add, update, or remove
361
+ const codesToAdd = resultCodes.filter(rc => !existingCodesList.some(ec => ec.ResultCode.toLowerCase() === rc.ResultCode.toLowerCase()));
362
+ const codesToUpdate = existingCodesList.filter(ec => resultCodes.some(rc => rc.ResultCode.toLowerCase() === ec.ResultCode.toLowerCase()));
363
+ const codesToRemove = existingCodesList.filter(ec => !generatedCodeNames.includes(ec.ResultCode.toLowerCase()));
364
+ // Add new result codes
365
+ for (const resultCode of codesToAdd) {
366
+ const newCode = await md.GetEntityObject('Action Result Codes', this.ContextCurrentUser);
367
+ newCode.ActionID = this.ID;
368
+ newCode.ResultCode = resultCode.ResultCode;
369
+ newCode.Description = resultCode.Description;
370
+ newCode.IsSuccess = resultCode.IsSuccess;
371
+ await newCode.Save();
372
+ }
373
+ // Update existing result codes if properties changed
374
+ for (const existingCode of codesToUpdate) {
375
+ const generatedCode = resultCodes.find(rc => rc.ResultCode.toLowerCase() === existingCode.ResultCode.toLowerCase());
376
+ if (generatedCode) {
377
+ let hasChanges = false;
378
+ // Check each property for changes
379
+ if (existingCode.Description !== generatedCode.Description) {
380
+ existingCode.Description = generatedCode.Description;
381
+ hasChanges = true;
382
+ }
383
+ if (existingCode.IsSuccess !== generatedCode.IsSuccess) {
384
+ existingCode.IsSuccess = generatedCode.IsSuccess;
385
+ hasChanges = true;
386
+ }
387
+ if (hasChanges) {
388
+ await existingCode.Save();
389
+ }
390
+ }
391
+ }
392
+ // Remove result codes that are no longer in the generated list
393
+ for (const codeToRemove of codesToRemove) {
394
+ await codeToRemove.Delete();
395
+ }
396
+ }
397
+ catch (e) {
398
+ (0, core_1.LogError)('Failed to save generated result codes:', e);
399
+ throw e; // Re-throw since we're in a transaction
400
+ }
453
401
  }
454
- GenerateRunViewParamsInfo() {
455
- return `/**
456
- * Parameters for running either a stored or dynamic view.
457
- * A stored view is a view that is saved in the database and can be run either by ID or Name.
458
- * A dynamic view is one that is not stored in the database and you provide parameters to return data as
459
- * desired programatically.
460
- */
461
- export type RunViewParams = {
462
- /**
463
- * optional - ID of the UserView record to run, if provided, ViewName is ignored
464
- */
465
- ViewID?: number
466
402
  /**
467
- * optional - Name of the UserView record to run, if you are using this, make sure to use a naming convention
468
- * so that your view names are unique. For example use a prefix like __Entity_View_ etc so that you're
469
- * likely to have a single result. If more than one view is available that matches a provided view name an
470
- * exception will be thrown.
403
+ * Validates the generated code
471
404
  */
472
- ViewName?: string
473
- /**
474
- * optional - this is the loaded instance of the BaseEntity (UserViewEntityComplete or a subclass of it).
475
- * This is the preferred parameter to use IF you already have a view entity object loaded up in your code
476
- * becuase by passing this in, the RunView() method doesn't have to lookup all the metadata for the view and it is faster.
477
- * If you provide ViewEntity, ViewID/ViewName are ignored.
478
- */
479
- ViewEntity?: BaseEntity
480
- /**
481
- * optional - this is only used if ViewID/ViewName/ViewEntity are not provided, it is used for
482
- * Dynamic Views in combination with the optional ExtraFilter
483
- */
484
- EntityName?: string
485
- /**
486
- * An optional SQL WHERE clause that you can add to the existing filters on a stored view. For dynamic views, you can either
487
- * run a view without a filter (if the entity definition allows it with AllowAllRowsAPI=1) or filter with any valid SQL WHERE clause.
488
- */
489
- ExtraFilter?: string
490
- /**
491
- * An optional SQL ORDER BY clause that you can use for dynamic views, as well as to OVERRIDE the stored view's sorting order.
492
- */
493
- OrderBy?: string
494
- /**
495
- * An optional array of field names that you want returned. The RunView() function will always return ID so you don't need to ask for that. If you leave this null then
496
- * for a dynamic view all fields are returned, and for stored views, the fields stored in it view configuration are returned.
497
- */
498
- Fields?: string[]
499
- /**
500
- * optional - string that represents a user "search" - typically from a text search option in a UI somewhere. This field is then used in the view filtering to search whichever fields are configured to be included in search in the Entity Fields definition.
501
- * Search String is combined with the stored view filters as well as ExtraFilter with an AND.
502
- */
503
- UserSearchString?: string
504
- /**
505
- * optional - if provided, records that were returned in the specified UserViewRunID will NOT be allowed in the result set.
506
- * This is useful if you want to run a particular view over time and exclude a specific prior run's resulting data set. If you
507
- * want to exclude ALL data returned from ALL prior runs, use the ExcludeDataFromAllPriorViewRuns property instead.
508
- */
509
- ExcludeUserViewRunID?: number
510
- /**
511
- * optional - if set to true, the resulting data will filter out ANY records that were ever returned by this view, when the SaveViewResults property was set to true.
512
- * This is useful if you want to run a particular view over time and make sure the results returned each time are new to the view.
513
- */
514
- ExcludeDataFromAllPriorViewRuns?: boolean
515
- /**
516
- * optional - if you are providing the optional ExcludeUserViewRunID property, you can also optionally provide
517
- * this filter which will negate the specific list of record IDs that are excluded by the ExcludeUserViewRunID property.
518
- * This can be useful if you want to ensure a certain class of data is always allowed into your view and not filtered out
519
- * by a prior view run.
520
- *
521
- */
522
- OverrideExcludeFilter?: string
523
- /**
524
- * optional - if set to true, the LIST OF ID values from the view run will be stored in the User View Runs entity and the
525
- * newly created UserViewRun.ID value will be returned in the RunViewResult that the RunView() function sends back to ya.
526
- */
527
- SaveViewResults?: boolean
528
- /**
529
- * optional - if set to true, if there IS any UserViewMaxRows property set for the entity in question, it will be IGNORED. This is useful in scenarios where you
530
- * want to programmatically run a view and get ALL the data back, regardless of the MaxRows setting on the entity.
531
- */
532
- IgnoreMaxRows?: boolean
533
-
534
- /**
535
- * optional - if provided, and if IgnoreMaxRows = false, this value will be used to constrain the total # of rows returned by the view. If this is not provided, either the default settings at the entity-level will be used, or if the entity has no UserViewMaxRows setting, all rows will be returned that match any filter, if provided.
536
- */
537
- MaxRows?: number
538
- /**
539
- * optional - if set to true, the view run will ALWAYS be logged to the Audit Log, regardless of the entity's property settings for logging view runs.
540
- */
541
- ForceAuditLog?: boolean
542
- /**
543
- * optional - if provided and either ForceAuditLog is set, or the entity's property settings for logging view runs are set to true, this will be used as the Audit Log Description.
544
- */
545
- AuditLogDescription?: string
546
-
405
+ async ValidateGeneratedCode(generatedCode, attemptsRemaining) {
406
+ // For now, return the code as-is
407
+ // TODO: Implement validation logic using a separate prompt
408
+ return generatedCode;
409
+ }
547
410
  /**
548
- * Result Type is: 'simple', 'entity_object', or 'count_only' and defaults to 'simple'. If 'entity_object' is specified, the Results[] array will contain
549
- * BaseEntity-derived objects instead of simple objects. This is useful if you want to work with the data in a more strongly typed manner and/or
550
- * if you plan to do any update/delete operations on the data after it is returned. The 'count_only' option will return no rows, but the TotalRowCount property of the RunViewResult object will be populated.
411
+ * Generates the libraries context for the prompt
551
412
  */
552
- ResultType?: 'simple' | 'entity_object' | 'count_only';
553
- }
554
- `;
413
+ GenerateLibrariesContext() {
414
+ return doc_utils_1.DocumentationEngine.Instance.Libraries.map((library) => {
415
+ return library.Items.map((item) => {
416
+ return JSON.stringify({
417
+ LibraryName: library.Name,
418
+ ItemName: item.Name,
419
+ Content: item.HTMLContent
420
+ });
421
+ }).join('\n');
422
+ }).join('\n');
555
423
  }
556
424
  };
557
425
  exports.ActionEntityServerEntity = ActionEntityServerEntity;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionEntity.server.js","sourceRoot":"","sources":["../../src/generic/ActionEntity.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionEntity.server.js","sourceRoot":"","sources":["../../src/generic/ActionEntity.server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/actions",
3
- "version": "2.52.0",
3
+ "version": "2.54.0",
4
4
  "description": "Main library for MemberJunction Actions. This library is only intended to be imported on the server side.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,12 +19,13 @@
19
19
  "typescript": "^5.4.5"
20
20
  },
21
21
  "dependencies": {
22
- "@memberjunction/global": "2.52.0",
23
- "@memberjunction/core": "2.52.0",
24
- "@memberjunction/actions-base": "2.52.0",
25
- "@memberjunction/core-entities": "2.52.0",
26
- "@memberjunction/ai": "2.52.0",
27
- "@memberjunction/aiengine": "2.52.0",
28
- "@memberjunction/doc-utils": "2.52.0"
22
+ "@memberjunction/global": "2.54.0",
23
+ "@memberjunction/core": "2.54.0",
24
+ "@memberjunction/actions-base": "2.54.0",
25
+ "@memberjunction/core-entities": "2.54.0",
26
+ "@memberjunction/ai": "2.54.0",
27
+ "@memberjunction/aiengine": "2.54.0",
28
+ "@memberjunction/ai-prompts": "2.54.0",
29
+ "@memberjunction/doc-utils": "2.54.0"
29
30
  }
30
31
  }