@memberjunction/ng-core-entity-forms 2.50.0 → 2.51.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.
Files changed (97) hide show
  1. package/README.md +215 -1
  2. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.d.ts +244 -0
  3. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.d.ts.map +1 -0
  4. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.js +1314 -0
  5. package/dist/lib/custom/AIAgents/agent-execution-monitor.component.js.map +1 -0
  6. package/dist/lib/custom/AIAgents/agent-execution-node.component.d.ts +19 -0
  7. package/dist/lib/custom/AIAgents/agent-execution-node.component.d.ts.map +1 -0
  8. package/dist/lib/custom/AIAgents/agent-execution-node.component.js +458 -0
  9. package/dist/lib/custom/AIAgents/agent-execution-node.component.js.map +1 -0
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +171 -11
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1411 -145
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.d.ts +78 -0
  15. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.d.ts.map +1 -0
  16. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.js +157 -0
  17. package/dist/lib/custom/AIAgents/ai-test-harness-dialog.component.js.map +1 -0
  18. package/dist/lib/custom/AIAgents/ai-test-harness.component.d.ts +508 -0
  19. package/dist/lib/custom/AIAgents/ai-test-harness.component.d.ts.map +1 -0
  20. package/dist/lib/custom/AIAgents/ai-test-harness.component.js +2658 -0
  21. package/dist/lib/custom/AIAgents/ai-test-harness.component.js.map +1 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +40 -0
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -0
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +965 -0
  25. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -0
  26. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.d.ts +5 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.js +137 -99
  29. package/dist/lib/custom/AIPrompts/ai-prompt-execution-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +80 -4
  31. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +956 -470
  33. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +40 -0
  35. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -0
  36. package/dist/lib/custom/Actions/action-execution-log-form.component.js +530 -0
  37. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -0
  38. package/dist/lib/custom/Actions/action-form.component.d.ts +90 -0
  39. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -0
  40. package/dist/lib/custom/Actions/action-form.component.js +1579 -0
  41. package/dist/lib/custom/Actions/action-form.component.js.map +1 -0
  42. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts +32 -0
  43. package/dist/lib/custom/Actions/action-param-dialog.component.d.ts.map +1 -0
  44. package/dist/lib/custom/Actions/action-param-dialog.component.js +320 -0
  45. package/dist/lib/custom/Actions/action-param-dialog.component.js.map +1 -0
  46. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts +15 -0
  47. package/dist/lib/custom/Actions/action-test-harness-dialog.component.d.ts.map +1 -0
  48. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js +96 -0
  49. package/dist/lib/custom/Actions/action-test-harness-dialog.component.js.map +1 -0
  50. package/dist/lib/custom/Actions/action-test-harness.component.d.ts +50 -0
  51. package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +1 -0
  52. package/dist/lib/custom/Actions/action-test-harness.component.js +708 -0
  53. package/dist/lib/custom/Actions/action-test-harness.component.js.map +1 -0
  54. package/dist/lib/custom/custom-forms.module.d.ts +31 -19
  55. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  56. package/dist/lib/custom/custom-forms.module.js +94 -15
  57. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  58. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +35 -0
  59. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -0
  60. package/dist/lib/custom/shared/entity-selector-dialog.component.js +290 -0
  61. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -0
  62. package/dist/lib/custom/test-harness-dialog.service.d.ts +111 -0
  63. package/dist/lib/custom/test-harness-dialog.service.d.ts.map +1 -0
  64. package/dist/lib/custom/test-harness-dialog.service.js +211 -0
  65. package/dist/lib/custom/test-harness-dialog.service.js.map +1 -0
  66. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +12 -11
  67. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  68. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts +54 -0
  69. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts.map +1 -0
  70. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js +492 -0
  71. package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js.map +1 -0
  72. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +8 -7
  73. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +8 -7
  75. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +8 -7
  77. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +12 -11
  79. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +12 -11
  81. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +12 -11
  83. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +12 -11
  85. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.d.ts.map +1 -1
  87. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.js +13 -4
  88. package/dist/lib/generated/Entities/ActionExecutionLog/sections/details.component.js.map +1 -1
  89. package/dist/public-api.d.ts +3 -0
  90. package/dist/public-api.d.ts.map +1 -1
  91. package/dist/public-api.js +16 -0
  92. package/dist/public-api.js.map +1 -1
  93. package/package.json +12 -11
  94. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.d.ts +0 -52
  95. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.d.ts.map +0 -1
  96. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.js +0 -590
  97. package/dist/lib/custom/AIAgents/ai-agent-execution-dialog.component.js.map +0 -1
@@ -1,28 +1,188 @@
1
- import { OnInit } from '@angular/core';
2
- import { AIAgentEntity } from '@memberjunction/core-entities';
1
+ import { OnInit, ViewContainerRef, ElementRef, ChangeDetectorRef } from '@angular/core';
2
+ import { Router, ActivatedRoute } from '@angular/router';
3
+ import { ActionEntity, AIAgentEntity, AIAgentLearningCycleEntity, AIAgentNoteEntity, AIAgentRunEntity, AIPromptEntityExtended } from '@memberjunction/core-entities';
3
4
  import { AIAgentFormComponent } from '../../generated/Entities/AIAgent/aiagent.form.component';
5
+ import { DialogService } from '@progress/kendo-angular-dialog';
6
+ import { SharedService } from '@memberjunction/ng-shared';
4
7
  import * as i0 from "@angular/core";
8
+ /**
9
+ * Enhanced AI Agent form component that extends the auto-generated base form
10
+ * with comprehensive agent management capabilities including test harness integration,
11
+ * related entity management, and execution history tracking.
12
+ *
13
+ * ## Key Features:
14
+ * - **Integrated Test Harness**: Built-in access to agent testing capabilities
15
+ * - **Related Entity Management**: Display and manage sub-agents, prompts, and actions
16
+ * - **Execution History**: View recent agent runs with status and timing information
17
+ * - **Rich UI Components**: Enhanced cards, badges, and status indicators
18
+ * - **Navigation Support**: Links to related entities and management functions
19
+ *
20
+ * ## Form Sections:
21
+ * - **Agent Details**: Basic agent configuration and settings
22
+ * - **Sub-Agents**: Hierarchical agent relationships
23
+ * - **Prompts**: Associated prompts with priority ordering
24
+ * - **Actions**: Available actions and configurations
25
+ * - **Execution History**: Recent runs with detailed status information
26
+ *
27
+ * ## Usage:
28
+ * This component is automatically loaded when editing AI Agent entities through
29
+ * the MemberJunction form system. It extends the base generated form with
30
+ * additional functionality while maintaining full compatibility.
31
+ *
32
+ * @example
33
+ * ```html
34
+ * <!-- Automatically used by form system -->
35
+ * <mj-ai-agent-form [recordId]="agentId"></mj-ai-agent-form>
36
+ * ```
37
+ */
5
38
  export declare class AIAgentFormComponentExtended extends AIAgentFormComponent implements OnInit {
39
+ protected sharedService: SharedService;
40
+ private dialogService;
41
+ private viewContainerRef;
42
+ /** The AI Agent entity being edited */
6
43
  record: AIAgentEntity;
7
- showExecutionDialog: boolean;
8
- private _metadata;
44
+ /** Whether the test harness is currently visible */
45
+ showTestHarness: boolean;
46
+ /** Number of sub-agents under this agent */
47
+ subAgentCount: number;
48
+ /** Number of prompts associated with this agent */
49
+ promptCount: number;
50
+ /** Number of actions configured for this agent */
51
+ actionCount: number;
52
+ /** Number of learning cycles for this agent */
53
+ learningCycleCount: number;
54
+ /** Number of notes associated with this agent */
55
+ noteCount: number;
56
+ /** Number of execution history records */
57
+ executionHistoryCount: number;
58
+ /** Array of sub-agent entities for card display */
59
+ subAgents: AIAgentEntity[];
60
+ /** Array of agent prompt entities for card display */
61
+ agentPrompts: AIPromptEntityExtended[];
62
+ /** Array of agent action entities for card display */
63
+ agentActions: ActionEntity[];
64
+ /** Array of learning cycle entities for display */
65
+ learningCycles: AIAgentLearningCycleEntity[];
66
+ /** Array of agent note entities for display */
67
+ agentNotes: AIAgentNoteEntity[];
68
+ /** Array of recent execution records for history display */
69
+ recentExecutions: AIAgentRunEntity[];
70
+ constructor(elementRef: ElementRef, sharedService: SharedService, router: Router, route: ActivatedRoute, cdr: ChangeDetectorRef, dialogService: DialogService, viewContainerRef: ViewContainerRef);
71
+ /**
72
+ * Component initialization. Calls parent initialization and loads related entity data
73
+ * if an agent record is already available.
74
+ */
9
75
  ngOnInit(): Promise<void>;
10
76
  /**
11
- * Determines if the agent can be executed
77
+ * Loads counts and preview data for all related entities including sub-agents,
78
+ * prompts, actions, learning cycles, notes, and execution history.
79
+ * This data populates the various expander panels in the enhanced form interface.
80
+ * @private
12
81
  */
13
- get canExecute(): boolean;
82
+ private loadRelatedCounts;
14
83
  /**
15
- * Executes the AI agent
84
+ * Opens the integrated test harness for the current agent.
85
+ * Validates that the agent has been saved before allowing testing.
86
+ * Shows a notification if the agent needs to be saved first.
16
87
  */
17
- executeAIAgent(): void;
88
+ openTestHarness(): void;
18
89
  /**
19
- * Gets status badge color
90
+ * Returns the appropriate color for the agent status badge.
91
+ * Uses standard color coding: green for active, yellow for pending, gray for disabled.
92
+ * @returns CSS color value for the status badge
20
93
  */
21
94
  getStatusBadgeColor(): string;
22
95
  /**
23
- * Handles when execution dialog is closed
96
+ * Event handler for test harness visibility changes.
97
+ * Updates the component state when the test harness is opened or closed.
98
+ * @param isVisible - Whether the test harness is currently visible
99
+ */
100
+ onTestHarnessVisibilityChanged(isVisible: boolean): void;
101
+ /**
102
+ * Gets the count of sub-agents
103
+ */
104
+ getSubAgentCount(): number;
105
+ /**
106
+ * Gets the count of prompts
107
+ */
108
+ getPromptCount(): number;
109
+ /**
110
+ * Gets the count of actions
111
+ */
112
+ getActionCount(): number;
113
+ /**
114
+ * Gets the icon for the execution mode
115
+ */
116
+ getExecutionModeIcon(mode: string): string;
117
+ /**
118
+ * Creates a new sub-agent
119
+ */
120
+ createSubAgent(): Promise<void>;
121
+ /**
122
+ * Adds a new prompt to the agent
123
+ */
124
+ addPrompt(): Promise<void>;
125
+ /**
126
+ * Opens the action configuration dialog
127
+ */
128
+ configureActions(): Promise<void>;
129
+ /**
130
+ * Gets the status icon for execution runs
131
+ */
132
+ getExecutionStatusIcon(status: string): string;
133
+ /**
134
+ * Gets the status color for execution runs
135
+ */
136
+ getExecutionStatusColor(status: string): string;
137
+ formatExecutionTimeFromDates(startDate: Date, endDate: Date): string;
138
+ /**
139
+ * Formats execution time
140
+ */
141
+ formatExecutionTime(milliseconds: number): string;
142
+ /**
143
+ * Gets the priority badge color
144
+ */
145
+ getPriorityBadgeColor(priority: number): string;
146
+ /**
147
+ * Gets the priority label
148
+ */
149
+ getPriorityLabel(priority: number): string;
150
+ /**
151
+ * Navigates to a related entity
152
+ */
153
+ navigateToEntity(entityName: string, recordId: string): void;
154
+ /**
155
+ * Refreshes the related data
156
+ */
157
+ refreshRelatedData(): Promise<void>;
158
+ /**
159
+ * Adds a new note to the agent
160
+ */
161
+ addNote(): void;
162
+ /**
163
+ * Links an existing prompt to the agent
164
+ */
165
+ private linkPromptToAgent;
166
+ /**
167
+ * Creates a new prompt and links it to the agent
168
+ */
169
+ private createNewPrompt;
170
+ /**
171
+ * Links an existing action to the agent
172
+ */
173
+ private linkActionToAgent;
174
+ /**
175
+ * Creates a new action and links it to the agent
176
+ */
177
+ private createNewAction;
178
+ /**
179
+ * Removes a prompt from the agent
180
+ */
181
+ removePrompt(prompt: AIPromptEntityExtended, event: Event): Promise<void>;
182
+ /**
183
+ * Removes an action from the agent
24
184
  */
25
- onExecutionDialogClosed(): void;
185
+ removeAction(action: ActionEntity, event: Event): Promise<void>;
26
186
  static ɵfac: i0.ɵɵFactoryDeclaration<AIAgentFormComponentExtended, never>;
27
187
  static ɵcmp: i0.ɵɵComponentDeclaration<AIAgentFormComponentExtended, "mj-ai-agent-form", never, {}, {}, never, ["*"], false, never>;
28
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/ai-agent-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAK9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;;AAG/F,qBAMa,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM;IAC7E,MAAM,EAAG,aAAa,CAAC;IACvB,mBAAmB,UAAS;IAEnC,OAAO,CAAC,SAAS,CAAkB;IAE7B,QAAQ;IAId;;OAEG;IACH,IAAW,UAAU,IAAI,OAAO,CAG/B;IAED;;OAEG;IACI,cAAc;IAsBrB;;OAEG;IACI,mBAAmB,IAAI,MAAM;IASpC;;OAEG;IACI,uBAAuB;yCA1DrB,4BAA4B;2CAA5B,4BAA4B;CA6DxC;AAED,wBAAgB,gCAAgC,SAE/C"}
1
+ {"version":3,"file":"ai-agent-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/ai-agent-form.component.ts"],"names":[],"mappings":"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"}