@memberjunction/ng-core-entity-forms 6.2.1 → 6.3.0-edge.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 (204) hide show
  1. package/README.md +5 -6
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
  8. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
  17. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  18. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  19. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
  20. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
  21. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  25. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  26. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
  29. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  30. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
  31. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
  35. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/Actions/action-form.component.js +502 -453
  37. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  38. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  39. package/dist/lib/custom/Companies/company-header.panel.js +3 -3
  40. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  41. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  42. package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
  43. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  44. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  45. package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
  46. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  47. package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
  48. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  49. package/dist/lib/custom/Entities/entity-form.component.js +836 -801
  50. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  51. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
  52. package/dist/lib/custom/Files/file-form.component.js +2 -2
  53. package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
  54. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Lists/list-form.component.js +355 -338
  56. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  57. package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
  58. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
  59. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
  60. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  61. package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
  62. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  63. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
  64. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  65. package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
  66. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
  68. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-form.component.js +493 -444
  70. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
  72. package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
  73. package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
  74. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Templates/templates-form.component.js +118 -74
  76. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  77. package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
  78. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Tests/test-form.component.js +471 -451
  80. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  81. package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
  82. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
  84. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
  86. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  87. package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
  88. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
  90. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  94. package/dist/lib/custom/Users/user-header.panel.js +3 -3
  95. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
  97. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
  99. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  104. package/dist/lib/custom/custom-forms.module.d.ts +1 -1
  105. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.js +7 -1
  107. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
  110. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
  113. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
  117. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
  121. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
  123. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
  125. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
  126. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
  127. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
  128. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
  129. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
  130. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
  131. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
  132. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
  137. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
  140. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
  142. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
  143. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
  144. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
  145. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
  146. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
  147. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
  151. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
  154. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
  157. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
  161. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
  163. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
  164. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
  166. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
  167. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
  168. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
  169. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
  171. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
  173. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
  175. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
  176. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
  177. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
  178. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
  179. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
  182. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  184. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
  185. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  186. package/dist/lib/generated/generated-forms.module.d.ts +452 -443
  187. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  188. package/dist/lib/generated/generated-forms.module.js +27 -0
  189. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  190. package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
  191. package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
  192. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
  193. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  194. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  195. package/dist/lib/shared/components/template-editor.component.js +2 -2
  196. package/dist/lib/shared/phone-hero.d.ts +17 -0
  197. package/dist/lib/shared/phone-hero.d.ts.map +1 -0
  198. package/dist/lib/shared/phone-hero.js +30 -0
  199. package/dist/lib/shared/phone-hero.js.map +1 -0
  200. package/dist/lib/shared/phone-sections-state.d.ts +28 -0
  201. package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
  202. package/dist/lib/shared/phone-sections-state.js +38 -0
  203. package/dist/lib/shared/phone-sections-state.js.map +1 -0
  204. package/package.json +50 -50
@@ -1 +1 @@
1
- {"version":3,"file":"action-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Actions/action-form.component.ts","../../../../src/lib/custom/Actions/action-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject, ViewContainerRef } from '@angular/core';\nimport { MJActionEntity, MJActionEntity_IRuntimeActionConfiguration, MJActionParamEntity, MJActionResultCodeEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, MJActionLibraryEntity, MJLibraryEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJActionFormComponent } from '../../generated/Entities/MJAction/mjaction.form.component';\nimport { MJDialogService, MJDialogRef } from '@memberjunction/ng-ui-components';\nimport { ActionParamDialogComponent, ActionResultCodeDialogComponent } from '@memberjunction/ng-actions';\n\n@RegisterClass(BaseFormComponent, 'MJ: Actions')\n@Component({\n standalone: false,\n selector: 'mj-action-form',\n templateUrl: './action-form.component.html',\n styleUrls: ['./action-form.component.css']\n})\nexport class MJActionFormComponentExtended extends MJActionFormComponent implements OnInit {\n public record!: MJActionEntity;\n\n // This form has a fully custom layout (header panel + accordion\n // sections we manage ourselves), so the toolbar's section-search,\n // expand/collapse, manage-sections, and width-toggle widgets don't\n // apply. `CUSTOM_LAYOUT_TOOLBAR_CONFIG` hides the entire right-hand\n // group while keeping favorite / history / tags / list buttons intact.\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** @deprecated Use {@link ToolbarConfig}. */\n public get toolbarConfig() {\n return this.ToolbarConfig;\n }\n\n /** Custom-layout Action form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n /** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */\n public override get OwnsEntireFormBody(): boolean { return true; }\n\n // Related entities\n public category: MJActionCategoryEntity | null = null;\n public ActionParams: MJActionParamEntity[] = [];\n\n /** @deprecated Use {@link ActionParams}. */\n public get actionParams(): MJActionParamEntity[] {\n return this.ActionParams;\n }\n /** @deprecated Use {@link ActionParams}. */\n public set actionParams(value: MJActionParamEntity[]) {\n this.ActionParams = value;\n }\n public ResultCodes: MJActionResultCodeEntity[] = [];\n\n /** @deprecated Use {@link ResultCodes}. */\n public get resultCodes(): MJActionResultCodeEntity[] {\n return this.ResultCodes;\n }\n /** @deprecated Use {@link ResultCodes}. */\n public set resultCodes(value: MJActionResultCodeEntity[]) {\n this.ResultCodes = value;\n }\n public RecentExecutions: MJActionExecutionLogEntity[] = [];\n\n /** @deprecated Use {@link RecentExecutions}. */\n public get recentExecutions(): MJActionExecutionLogEntity[] {\n return this.RecentExecutions;\n }\n /** @deprecated Use {@link RecentExecutions}. */\n public set recentExecutions(value: MJActionExecutionLogEntity[]) {\n this.RecentExecutions = value;\n }\n public ActionLibraries: MJActionLibraryEntity[] = [];\n\n /** @deprecated Use {@link ActionLibraries}. */\n public get actionLibraries(): MJActionLibraryEntity[] {\n return this.ActionLibraries;\n }\n /** @deprecated Use {@link ActionLibraries}. */\n public set actionLibraries(value: MJActionLibraryEntity[]) {\n this.ActionLibraries = value;\n }\n public libraries: MJLibraryEntity[] = [];\n \n // Cached filtered params\n private _inputParams: MJActionParamEntity[] = [];\n private _outputParams: MJActionParamEntity[] = [];\n \n // Track params to delete\n private paramsToDelete: MJActionParamEntity[] = [];\n \n // Track result codes to delete\n private resultCodesToDelete: MJActionResultCodeEntity[] = [];\n \n // Loading states\n public IsLoadingParams = false;\n\n /** @deprecated Use {@link IsLoadingParams}. */\n public get isLoadingParams() {\n return this.IsLoadingParams;\n }\n /** @deprecated Use {@link IsLoadingParams}. */\n public set isLoadingParams(value) {\n this.IsLoadingParams = value;\n }\n public IsLoadingResultCodes = false;\n\n /** @deprecated Use {@link IsLoadingResultCodes}. */\n public get isLoadingResultCodes() {\n return this.IsLoadingResultCodes;\n }\n /** @deprecated Use {@link IsLoadingResultCodes}. */\n public set isLoadingResultCodes(value) {\n this.IsLoadingResultCodes = value;\n }\n public IsLoadingExecutions = false;\n\n /** @deprecated Use {@link IsLoadingExecutions}. */\n public get isLoadingExecutions() {\n return this.IsLoadingExecutions;\n }\n /** @deprecated Use {@link IsLoadingExecutions}. */\n public set isLoadingExecutions(value) {\n this.IsLoadingExecutions = value;\n }\n public IsLoadingLibraries = false;\n\n /** @deprecated Use {@link IsLoadingLibraries}. */\n public get isLoadingLibraries() {\n return this.IsLoadingLibraries;\n }\n /** @deprecated Use {@link IsLoadingLibraries}. */\n public set isLoadingLibraries(value) {\n this.IsLoadingLibraries = value;\n }\n \n // UI state\n public ExpandedSections = {\n overview: true,\n code: true,\n params: true,\n resultCodes: true,\n execution: false,\n configuration: false\n };\n\n /** @deprecated Use {@link ExpandedSections}. */\n public get expandedSections() {\n return this.ExpandedSections;\n }\n /** @deprecated Use {@link ExpandedSections}. */\n public set expandedSections(value) {\n this.ExpandedSections = value;\n }\n \n // Test harness state\n public ShowTestHarness = false;\n\n /** @deprecated Use {@link ShowTestHarness}. */\n public get showTestHarness() {\n return this.ShowTestHarness;\n }\n /** @deprecated Use {@link ShowTestHarness}. */\n public set showTestHarness(value) {\n this.ShowTestHarness = value;\n }\n \n // Execution stats\n public ExecutionStats = {\n totalRuns: 0,\n successRate: 0,\n avgDuration: 0,\n lastRun: null as Date | null\n };\n\n /** @deprecated Use {@link ExecutionStats}. */\n public get executionStats() {\n return this.ExecutionStats;\n }\n /** @deprecated Use {@link ExecutionStats}. */\n public set executionStats(value) {\n this.ExecutionStats = value;\n }\n \n // Code editor config\n public CodeLanguage = 'typescript';\n\n /** @deprecated Use {@link CodeLanguage}. */\n public get codeLanguage() {\n return this.CodeLanguage;\n }\n /** @deprecated Use {@link CodeLanguage}. */\n public set codeLanguage(value) {\n this.CodeLanguage = value;\n }\n public ShowCodeComments = false;\n\n /** @deprecated Use {@link ShowCodeComments}. */\n public get showCodeComments() {\n return this.ShowCodeComments;\n }\n /** @deprecated Use {@link ShowCodeComments}. */\n public set showCodeComments(value) {\n this.ShowCodeComments = value;\n }\n \n private dialogService = inject(MJDialogService);\n private viewContainerRef = inject(ViewContainerRef);\n private sharedService = inject(SharedService);\n\n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record?.IsSaved) {\n // Load all related data in parallel\n await Promise.all([\n this.loadCategory(),\n this.loadActionParams(),\n this.loadResultCodes(),\n this.loadRecentExecutions(),\n this.loadActionLibraries(),\n this.loadExecutionStats()\n ]);\n this.cdr.detectChanges();\n }\n }\n \n /**\n * Override InternalSaveRecord to handle Action and related ActionParams in a transaction\n * This follows the same pattern as MJAIAgentFormComponent\n */\n protected async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) {\n return false;\n }\n \n try {\n const md = this.ProviderToUse;\n const transactionGroup = await md.CreateTransactionGroup();\n \n // Set transaction group on the Action record\n this.record.TransactionGroup = transactionGroup;\n \n // Save the Action record first\n const actionSaved = await this.record.Save();\n \n if (!actionSaved) {\n console.error('Failed to save Action record');\n this.sharedService.CreateSimpleNotification('Failed to save Action record', 'error', 5000);\n return false;\n }\n \n // Process all pending records (params and result codes to save or delete)\n for (const pendingRecord of this.PendingRecords) {\n if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Params') {\n const param = pendingRecord.entityObject as MJActionParamEntity;\n \n // Ensure ActionID is set for new params\n if (!param.ActionID) {\n param.ActionID = this.record.ID;\n }\n \n param.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await param.Save();\n if (!saved) {\n console.error('Failed to save parameter:', param.Name);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await param.Delete();\n if (!deleted) {\n console.error('Failed to delete parameter:', param.Name);\n return false;\n }\n }\n } else if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const resultCode = pendingRecord.entityObject as MJActionResultCodeEntity;\n \n // Ensure ActionID is set for new result codes\n if (!resultCode.ActionID) {\n resultCode.ActionID = this.record.ID;\n }\n \n resultCode.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await resultCode.Save();\n if (!saved) {\n console.error('Failed to save result code:', resultCode.ResultCode);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await resultCode.Delete();\n if (!deleted) {\n console.error('Failed to delete result code:', resultCode.ResultCode);\n return false;\n }\n }\n }\n }\n \n // Submit the transaction\n const success = await transactionGroup.Submit();\n \n if (success) {\n // Clear pending records after successful save\n this.PendingRecords.length = 0;\n this.paramsToDelete = [];\n this.resultCodesToDelete = [];\n\n // Note: the base SaveRecord() already emits a \"Record saved\n // successfully\" toast on success — don't emit another one\n // from here or users get two toasts for one save.\n\n // Defer the post-save reload so the template's post-save CD\n // pass completes before `actionParams` / `resultCodes` mutate.\n // We also run the reload *silently* (no isLoadingParams flash)\n // and batch the final state into a single `detectChanges()`\n // to avoid NG0100: previously the spinner toggle + array\n // replacement generated multiple interleaved CD passes that\n // saw `actionParams.length` change between check/verify.\n queueMicrotask(() => {\n void this.reloadAfterSaveSilent();\n });\n }\n\n return success;\n \n } catch (error) {\n console.error('Error saving Action and parameters:', error);\n this.sharedService.CreateSimpleNotification('Error saving Action: ' + error, 'error', 5000);\n return false;\n }\n }\n\n private async loadCategory() {\n if (!this.record.CategoryID) return;\n\n try {\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<MJActionCategoryEntity>('MJ: Action Categories');\n const loaded = await entity.Load(this.record.CategoryID);\n if (loaded) {\n this.category = entity;\n }\n } catch (error) {\n // Error loading category\n }\n }\n\n private async loadActionParams() {\n this.IsLoadingParams = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.ActionParams = result.Results || [];\n // Update cached filtered params - trim and lowercase Type values to handle any whitespace and case\n this._inputParams = this.ActionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n this._outputParams = this.ActionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n } else {\n // Failed to load action params\n this.ActionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n }\n } catch (error) {\n // Error loading action params\n this.ActionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n } finally {\n this.IsLoadingParams = false;\n }\n }\n\n private async loadResultCodes() {\n this.IsLoadingResultCodes = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionResultCodeEntity>({\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'IsSuccess DESC, ResultCode',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.ResultCodes = result.Results || [];\n } else {\n // Failed to load result codes\n this.ResultCodes = [];\n }\n } catch (error) {\n // Error loading result codes\n this.ResultCodes = [];\n } finally {\n this.IsLoadingResultCodes = false;\n }\n }\n\n /**\n * Silent post-save reload. Unlike `loadActionParams` / `loadResultCodes`,\n * this version:\n * - Does NOT toggle `isLoadingParams` / `isLoadingResultCodes`. No\n * spinner is needed; the form is already back in read mode.\n * - Runs both RunViews in parallel off a single network round-trip.\n * - Commits the results in one synchronous block, then calls\n * `detectChanges()` once so Angular sees a single CD pass rather\n * than the three-or-four passes the original flow produced.\n *\n * This is what eliminates the NG0100 \"`actionParams.length` changed\n * from 33 to 35\" error we were seeing after save: previously the\n * length flipped between the check and verify phases of a CD pass\n * triggered by the spinner-flag updates.\n */\n private async reloadAfterSaveSilent(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [paramResult, codeResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'IsSuccess DESC, ResultCode',\n ResultType: 'entity_object'\n }\n ]);\n\n const params = (paramResult.Success ? paramResult.Results : []) as MJActionParamEntity[];\n const codes = (codeResult.Success ? codeResult.Results : []) as MJActionResultCodeEntity[];\n\n // Single synchronous commit — all template-observable arrays\n // swap at once, avoiding interleaved CD passes.\n this.ActionParams = params;\n this._inputParams = params.filter((p) => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n this._outputParams = params.filter((p) => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n this.ResultCodes = codes;\n\n this.cdr.detectChanges();\n } catch (e) {\n console.error('Post-save reload failed:', e);\n }\n }\n\n private async loadRecentExecutions() {\n this.IsLoadingExecutions = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionExecutionLogEntity>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 10,\n Fields: ['ID', 'ActionID', 'StartedAt', 'EndedAt', 'UserID', 'User', 'ResultCode', 'Message'],\n ResultType: 'simple'\n });\n \n if (result.Success) {\n this.RecentExecutions = result.Results || [];\n } else {\n // Failed to load executions\n this.RecentExecutions = [];\n }\n } catch (error) {\n // Error loading executions\n this.RecentExecutions = [];\n } finally {\n this.IsLoadingExecutions = false;\n }\n }\n\n private async loadActionLibraries() {\n this.IsLoadingLibraries = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionLibraryEntity>({\n EntityName: 'MJ: Action Libraries',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Library' \n });\n \n if (result.Success) {\n this.ActionLibraries = result.Results || [];\n \n // Load library details in a single batch query instead of N+1 sequential loads\n if (this.ActionLibraries.length > 0) {\n const libraryIds = this.ActionLibraries.map(al => al.LibraryID).filter((id): id is string => !!id);\n this.libraries = [];\n if (libraryIds.length > 0) {\n const libFilter = libraryIds.map(id => `'${id.replace(/'/g, \"''\")}'`).join(',');\n const libResult = await rv.RunView<MJLibraryEntity>({\n EntityName: 'MJ: Libraries',\n ExtraFilter: `ID IN (${libFilter})`,\n ResultType: 'entity_object'\n });\n if (libResult.Success && libResult.Results) {\n const byId = new Map<string, MJLibraryEntity>();\n for (const lib of libResult.Results) {\n byId.set(lib.ID.toLowerCase(), lib);\n }\n for (const libId of libraryIds) {\n const found = byId.get(libId.toLowerCase());\n if (found) {\n this.libraries.push(found);\n }\n }\n }\n }\n }\n }\n } catch (error) {\n // Error loading libraries\n } finally {\n this.IsLoadingLibraries = false;\n }\n }\n\n private async loadExecutionStats() {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Project only lightweight scalar columns (excluding Params/ResultParams blobs) for stats calculation\n const result = await rv.RunView<Pick<MJActionExecutionLogEntity, 'ID' | 'StartedAt' | 'EndedAt' | 'ResultCode'>>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC',\n Fields: ['ID', 'StartedAt', 'EndedAt', 'ResultCode'],\n ResultType: 'simple'\n });\n \n if (result.Success && result.Results && result.Results.length > 0) {\n const allExecutions = result.Results;\n this.ExecutionStats.totalRuns = allExecutions.length;\n \n // Calculate success rate based on result codes\n const successfulRuns = allExecutions.filter(e => {\n const resultCode = this.ResultCodes.find(rc => rc.ResultCode === e.ResultCode);\n return resultCode?.IsSuccess || false;\n });\n \n this.ExecutionStats.successRate = this.ExecutionStats.totalRuns > 0 \n ? (successfulRuns.length / this.ExecutionStats.totalRuns) * 100 \n : 0;\n \n // Calculate average duration from ALL completed executions\n const completedExecutions = allExecutions.filter(e => e.StartedAt && e.EndedAt);\n if (completedExecutions.length > 0) {\n const totalDuration = completedExecutions.reduce((sum, e) => {\n const duration = new Date(e.EndedAt!).getTime() - new Date(e.StartedAt).getTime();\n // Use absolute value to handle any swapped dates\n return sum + Math.abs(duration);\n }, 0);\n this.ExecutionStats.avgDuration = totalDuration / completedExecutions.length;\n }\n \n // Get last run date from most recent execution\n this.ExecutionStats.lastRun = new Date(allExecutions[0].StartedAt);\n }\n } catch (error) {\n // Error loading execution stats\n }\n }\n\n // UI Helper Methods\n GetStatusColor(): string {\n switch (this.record.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Disabled': return 'var(--mj-status-error)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n getStatusColor(): string {\n return this.GetStatusColor();\n }\n\n GetStatusIcon(): string {\n switch (this.record.Status) {\n case 'Active': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Disabled': return 'fa-ban';\n default: return 'fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetStatusIcon}. */\n getStatusIcon(): string {\n return this.GetStatusIcon();\n }\n\n GetTypeColor(): string {\n switch (this.record.Type) {\n case 'Runtime':\n return 'var(--mj-status-warning)';\n case 'Generated':\n case 'Custom':\n default:\n return 'var(--mj-brand-primary)';\n }\n }\n\n /** @deprecated Use {@link GetTypeColor}. */\n getTypeColor(): string {\n return this.GetTypeColor();\n }\n\n GetTypeIcon(): string {\n switch (this.record.Type) {\n case 'Runtime': return 'fa-wand-magic-sparkles';\n case 'Generated': return 'fa-robot';\n case 'Custom':\n default: return 'fa-code';\n }\n }\n\n /** @deprecated Use {@link GetTypeIcon}. */\n getTypeIcon(): string {\n return this.GetTypeIcon();\n }\n\n // =====================================================================\n // Runtime Actions — approval-UI helpers (Phase 1i)\n //\n // Only relevant when `record.Type === 'Runtime'`. Each method reads the\n // typed `RuntimeActionConfigurationObject` accessor emitted by CodeGen\n // (via the JSONType metadata system) so consumers never hand-parse the\n // raw JSON string. The approval panel uses these to surface the\n // permission set an approver is implicitly blessing.\n // =====================================================================\n\n public get IsRuntimeAction(): boolean {\n return this.record?.Type === 'Runtime';\n }\n\n /** @deprecated Use {@link IsRuntimeAction}. */\n public get isRuntimeAction(): boolean {\n return this.IsRuntimeAction;\n }\n\n public get RuntimeConfig(): MJActionEntity_IRuntimeActionConfiguration | null {\n if (!this.IsRuntimeAction) return null;\n const accessor = (this.record as unknown as {\n RuntimeActionConfigurationObject?: MJActionEntity_IRuntimeActionConfiguration | null;\n });\n return accessor.RuntimeActionConfigurationObject ?? null;\n }\n\n /** @deprecated Use {@link RuntimeConfig}. */\n public get runtimeConfig(): MJActionEntity_IRuntimeActionConfiguration | null {\n return this.RuntimeConfig;\n }\n\n public GetAllowedEntities(): Array<{ id: string; name: string }> {\n return this.RuntimeConfig?.permissions?.allowedEntities ?? [];\n }\n\n /** @deprecated Use {@link GetAllowedEntities}. */\n public getAllowedEntities(): Array<{ id: string; name: string }> {\n return this.GetAllowedEntities();\n }\n\n public GetAllowedActions(): Array<{ id: string; name: string }> {\n return this.RuntimeConfig?.permissions?.allowedActions ?? [];\n }\n\n /** @deprecated Use {@link GetAllowedActions}. */\n public getAllowedActions(): Array<{ id: string; name: string }> {\n return this.GetAllowedActions();\n }\n\n public GetAllowedAgents(): Array<{ id: string; name: string }> {\n return this.RuntimeConfig?.permissions?.allowedAgents ?? [];\n }\n\n /** @deprecated Use {@link GetAllowedAgents}. */\n public getAllowedAgents(): Array<{ id: string; name: string }> {\n return this.GetAllowedAgents();\n }\n\n public GetRequestedLibraries(): Array<{ name: string; version?: string }> {\n return this.RuntimeConfig?.sandbox?.additionalLibraries ?? [];\n }\n\n /** @deprecated Use {@link GetRequestedLibraries}. */\n public getRequestedLibraries(): Array<{ name: string; version?: string }> {\n return this.GetRequestedLibraries();\n }\n\n public GetRuntimeLimits(): { maxMemoryMB: number; maxBridgeCalls: number } {\n const limits = this.RuntimeConfig?.limits ?? {};\n return {\n maxMemoryMB: limits.maxMemoryMB ?? 128,\n maxBridgeCalls: limits.maxBridgeCalls ?? 100\n };\n }\n\n /** @deprecated Use {@link GetRuntimeLimits}. */\n public getRuntimeLimits(): { maxMemoryMB: number; maxBridgeCalls: number } {\n return this.GetRuntimeLimits();\n }\n\n public GetRuntimeConfigSummary(): string {\n const perms = this.RuntimeConfig?.permissions;\n if (!perms) return 'No permissions declared';\n const e = perms.allowedEntities?.length ?? 0;\n const a = perms.allowedActions?.length ?? 0;\n const ag = perms.allowedAgents?.length ?? 0;\n const wildcards = this.GetWildcardFlags();\n const parts: string[] = [];\n parts.push(wildcards.entity ? 'ANY entity' : `${e} entit${e === 1 ? 'y' : 'ies'}`);\n parts.push(wildcards.action ? 'ANY action' : `${a} action${a === 1 ? '' : 's'}`);\n parts.push(wildcards.agent ? 'ANY agent' : `${ag} agent${ag === 1 ? '' : 's'}`);\n return parts.join(', ');\n }\n\n /** @deprecated Use {@link GetRuntimeConfigSummary}. */\n public getRuntimeConfigSummary(): string {\n return this.GetRuntimeConfigSummary();\n }\n\n /**\n * Returns which wildcard permission flags are set on the runtime\n * configuration. Any `true` flag is a prominent security-relevant\n * concession to the action — the approval UI renders a warning banner\n * when any of these are on so the approver sees the blast radius.\n */\n public GetWildcardFlags(): { entity: boolean; action: boolean; agent: boolean; any: boolean } {\n const perms = this.RuntimeConfig?.permissions as\n | { allowAnyEntity?: boolean; allowAnyAction?: boolean; allowAnyAgent?: boolean }\n | undefined;\n const entity = perms?.allowAnyEntity === true;\n const action = perms?.allowAnyAction === true;\n const agent = perms?.allowAnyAgent === true;\n return { entity, action, agent, any: entity || action || agent };\n }\n\n /** @deprecated Use {@link GetWildcardFlags}. */\n public getWildcardFlags(): { entity: boolean; action: boolean; agent: boolean; any: boolean } {\n return this.GetWildcardFlags();\n }\n\n /**\n * Both Generated and Runtime actions carry executable code gated by\n * `CodeApprovalStatus` — the RuntimeActionExecutor refuses to run\n * anything that isn't `Approved`, and CodeGen blocks unapproved\n * Generated code from being emitted. Custom actions run registered\n * TypeScript classes and don't have this gate.\n *\n * Getter rather than method so Angular's change detector can't\n * observe inconsistent results across check/verify passes — this\n * is the standard fix for NG0100 when a conditional's expression\n * depends on a method call.\n */\n get HasCodeApproval(): boolean {\n return this.record?.Type === 'Generated' || this.record?.Type === 'Runtime';\n }\n\n /** @deprecated Use {@link HasCodeApproval}. */\n get hasCodeApproval(): boolean {\n return this.HasCodeApproval;\n }\n\n GetApprovalStatusColor(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Rejected': return 'var(--mj-status-error)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusColor}. */\n getApprovalStatusColor(): string {\n return this.GetApprovalStatusColor();\n }\n\n GetApprovalStatusIcon(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n default: return 'fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusIcon}. */\n getApprovalStatusIcon(): string {\n return this.GetApprovalStatusIcon();\n }\n\n GetParamTypeIcon(type: string): string {\n switch (type) {\n case 'Input': return 'fa-sign-in-alt';\n case 'Output': return 'fa-sign-out-alt';\n case 'Both': return 'fa-exchange-alt';\n default: return 'fa-question';\n }\n }\n\n /** @deprecated Use {@link GetParamTypeIcon}. */\n getParamTypeIcon(type: string): string {\n return this.GetParamTypeIcon(type);\n }\n\n GetParamTypeColor(type: string): string {\n switch (type) {\n case 'Input': return 'var(--mj-brand-primary)';\n case 'Output': return 'var(--mj-status-success)';\n case 'Both': return 'var(--mj-brand-primary)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /** @deprecated Use {@link GetParamTypeColor}. */\n getParamTypeColor(type: string): string {\n return this.GetParamTypeColor(type);\n }\n\n formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n }\n\n formatDate(date: Date | string | null): string {\n if (!date) return 'Never';\n const d = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n \n if (diff < 60000) return 'Just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n if (diff < 604800000) return `${Math.floor(diff / 86400000)}d ago`;\n \n return d.toLocaleDateString();\n }\n\n // Navigation\n NavigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));\n }\n\n /** @deprecated Use {@link NavigateToEntity}. */\n navigateToEntity(entityName: string, recordId: string | null) {\n return this.NavigateToEntity(entityName, recordId);\n }\n\n NavigateToCategory() {\n if (this.record.CategoryID) {\n this.NavigateToEntity('MJ: Action Categories', this.record.CategoryID);\n }\n }\n\n /** @deprecated Use {@link NavigateToCategory}. */\n navigateToCategory() {\n return this.NavigateToCategory();\n }\n\n NavigateToExecution(executionId: string) {\n this.NavigateToEntity('MJ: Action Execution Logs', executionId);\n }\n\n /** @deprecated Use {@link NavigateToExecution}. */\n navigateToExecution(executionId: string) {\n return this.NavigateToExecution(executionId);\n }\n\n NavigateToLibrary(libraryId: string) {\n this.NavigateToEntity('MJ: Libraries', libraryId);\n }\n\n /** @deprecated Use {@link NavigateToLibrary}. */\n navigateToLibrary(libraryId: string) {\n return this.NavigateToLibrary(libraryId);\n }\n\n // Actions\n OpenTestHarness() {\n if (!this.record || !this.record.ID || !this.record.IsSaved || this.record.Status !== 'Active') {\n // Cannot open test harness: Action must be saved and active\n return;\n }\n \n this.ShowTestHarness = true;\n }\n\n /** @deprecated Use {@link OpenTestHarness}. */\n openTestHarness() {\n return this.OpenTestHarness();\n }\n \n /**\n * Event handler for test harness visibility changes\n */\n public OnTestHarnessVisibilityChanged(isVisible: boolean) {\n this.ShowTestHarness = isVisible;\n }\n\n /** @deprecated Use {@link OnTestHarnessVisibilityChanged}. */\n public onTestHarnessVisibilityChanged(isVisible: boolean) {\n return this.OnTestHarnessVisibilityChanged(isVisible);\n }\n\n async RegenerateCode() {\n if (!this.EditMode) return;\n \n this.record.ForceCodeGeneration = true;\n await this.record.Save();\n // Reload related data after save\n await this.loadResultCodes();\n }\n\n /** @deprecated Use {@link RegenerateCode}. */\n async regenerateCode() {\n return this.RegenerateCode();\n }\n\n ToggleCodeComments() {\n this.ShowCodeComments = !this.ShowCodeComments;\n }\n\n /** @deprecated Use {@link ToggleCodeComments}. */\n toggleCodeComments() {\n return this.ToggleCodeComments();\n }\n\n async ApproveCode() {\n if (!this.EditMode) return;\n \n this.record.CodeApprovalStatus = 'Approved';\n this.record.CodeApprovedAt = new Date();\n // Note: CodeApprovedByUserID would be set server-side\n await this.record.Save();\n }\n\n /** @deprecated Use {@link ApproveCode}. */\n async approveCode() {\n return this.ApproveCode();\n }\n\n async RejectCode() {\n if (!this.EditMode) return;\n\n this.record.CodeApprovalStatus = 'Rejected';\n await this.record.Save();\n }\n\n /** @deprecated Use {@link RejectCode}. */\n async rejectCode() {\n return this.RejectCode();\n }\n\n async CopyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could add a notification here\n } catch (err) {\n // Failed to copy\n }\n }\n\n /** @deprecated Use {@link CopyToClipboard}. */\n async copyToClipboard(text: string) {\n return this.CopyToClipboard(text);\n }\n\n // Helper methods for template filtering\n GetInputParams(): MJActionParamEntity[] {\n // Sort by IsRequired (required first) then by Name\n return this._inputParams.sort((a, b) => {\n if (a.IsRequired === b.IsRequired) {\n return (a.Name || '').localeCompare(b.Name || '');\n }\n return a.IsRequired ? -1 : 1;\n });\n }\n\n /** @deprecated Use {@link GetInputParams}. */\n getInputParams(): MJActionParamEntity[] {\n return this.GetInputParams();\n }\n\n GetOutputParams(): MJActionParamEntity[] {\n // Sort by Name\n return this._outputParams.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));\n }\n\n /** @deprecated Use {@link GetOutputParams}. */\n getOutputParams(): MJActionParamEntity[] {\n return this.GetOutputParams();\n }\n\n IsExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n // First check if we have a result code definition\n const resultCode = this.ResultCodes.find(rc => rc.ResultCode === execution.ResultCode);\n if (resultCode) {\n return resultCode.IsSuccess;\n }\n // Fallback to common success patterns if no result code defined\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n /** @deprecated Use {@link IsExecutionSuccess}. */\n isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return this.IsExecutionSuccess(execution);\n }\n\n GetExecutionDuration(execution: MJActionExecutionLogEntity): number {\n if (!execution.EndedAt) return 0;\n \n const startTime = new Date(execution.StartedAt).getTime();\n const endTime = new Date(execution.EndedAt).getTime();\n const duration = endTime - startTime;\n \n // Return absolute value to handle timezone mismatches\n return Math.abs(duration);\n }\n\n /** @deprecated Use {@link GetExecutionDuration}. */\n getExecutionDuration(execution: MJActionExecutionLogEntity): number {\n return this.GetExecutionDuration(execution);\n }\n\n GetSuccessRateColor(): string {\n const rate = this.ExecutionStats.successRate;\n if (rate >= 80) return 'var(--mj-status-success)';\n if (rate >= 60) return 'var(--mj-status-warning)';\n return 'var(--mj-status-error)';\n }\n\n /** @deprecated Use {@link GetSuccessRateColor}. */\n getSuccessRateColor(): string {\n return this.GetSuccessRateColor();\n }\n\n // Parameter management methods\n async AddParameter(type: 'Input' | 'Output' | 'Both') {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = this.ProviderToUse;\n const newParam = await md.GetEntityObject<MJActionParamEntity>('MJ: Action Params');\n \n // Set default values\n newParam.ActionID = this.record.ID;\n newParam.Name = '';\n newParam.Type = type;\n newParam.ValueType = 'Scalar';\n newParam.IsRequired = false;\n newParam.IsArray = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['param'] = newParam;\n dialog['isNew'] = true;\n dialog['editMode'] = true;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result) {\n // The dialog has already modified the newParam entity directly\n // New entities are automatically dirty (IsSaved = false)\n\n // Add to local array\n this.ActionParams.push(newParam);\n\n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newParam,\n action: 'save'\n });\n\n // Update the filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link AddParameter}. */\n async addParameter(type: 'Input' | 'Output' | 'Both') {\n return this.AddParameter(type);\n }\n\n async EditParameter(param: MJActionParamEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['param'] = param;\n dialog['isNew'] = false;\n dialog['editMode'] = this.EditMode;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result && this.EditMode) {\n // Param will be dirty from property changes in dialog\n // Ensure it's in pending records if modified\n if (param.Dirty) {\n const exists = this.PendingRecords.some(pr =>\n pr.entityObject === param && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n\n // Update the local arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link EditParameter}. */\n async editParameter(param: MJActionParamEntity) {\n return this.EditParameter(param);\n }\n \n OnParamClick(param: MJActionParamEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.param-edit-btn') || target.closest('.param-delete-btn')) {\n return;\n }\n \n // Show the parameter dialog\n this.EditParameter(param);\n }\n\n /** @deprecated Use {@link OnParamClick}. */\n onParamClick(param: MJActionParamEntity, event: Event) {\n return this.OnParamClick(param, event);\n }\n\n \n private async updateParamArrays() {\n // Update cached filtered params - exclude deleted items\n const activeParams = this.ActionParams.filter(p => !this.paramsToDelete || !this.paramsToDelete.includes(p));\n \n this._inputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n \n this._outputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n }\n \n // Override to populate pending records with our action params and result codes\n protected PopulatePendingRecords() {\n // Preserve existing pending records before base class clears them\n const currentPendingRecords = [...this.PendingRecords];\n \n // Call parent to handle child components\n super.PopulatePendingRecords();\n \n // Re-add our preserved records\n for (const record of currentPendingRecords) {\n // Only re-add if it's an Action Param or Result Code (avoid duplicates)\n if (record.entityObject.EntityInfo.Name === 'MJ: Action Params' || \n record.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === record.entityObject\n );\n if (!exists) {\n this.PendingRecords.push(record);\n }\n }\n }\n \n // Add action params that need saving\n for (const param of this.ActionParams) {\n if (!param.IsSaved || param.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n }\n \n // Add params marked for deletion\n for (const param of this.paramsToDelete) {\n if (param.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n }\n }\n }\n \n // Add result codes that need saving\n for (const resultCode of this.ResultCodes) {\n if (!resultCode.IsSaved || resultCode.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n }\n \n // Add result codes marked for deletion\n for (const resultCode of this.resultCodesToDelete) {\n if (resultCode.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n }\n }\n }\n }\n \n /**\n * Gets the action's display icon\n * Falls back to default cog icon if no IconClass is set\n */\n public GetActionIcon(): string {\n return this.record?.IconClass || 'fa-solid fa-cog';\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(): string {\n return this.GetActionIcon();\n }\n \n // Result Code management methods\n async AddResultCode() {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = this.ProviderToUse;\n const newResultCode = await md.GetEntityObject<MJActionResultCodeEntity>('MJ: Action Result Codes');\n \n // Set default values\n newResultCode.ActionID = this.record.ID;\n newResultCode.ResultCode = '';\n newResultCode.Description = '';\n newResultCode.IsSuccess = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['resultCode'] = newResultCode;\n dialog['isNew'] = true;\n dialog['editMode'] = true;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result) {\n // Add to local array\n this.ResultCodes.push(newResultCode);\n\n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newResultCode,\n action: 'save'\n });\n\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link AddResultCode}. */\n async addResultCode() {\n return this.AddResultCode();\n }\n \n async EditResultCode(resultCode: MJActionResultCodeEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['resultCode'] = resultCode;\n dialog['isNew'] = false;\n dialog['editMode'] = this.EditMode;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result && this.EditMode) {\n // Ensure it's in pending records if modified\n if (resultCode.Dirty) {\n const exists = this.PendingRecords.some(pr =>\n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link EditResultCode}. */\n async editResultCode(resultCode: MJActionResultCodeEntity) {\n return this.EditResultCode(resultCode);\n }\n \n OnResultCodeClick(resultCode: MJActionResultCodeEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.result-edit-btn') || target.closest('.result-delete-btn')) {\n return;\n }\n \n // Show the result code dialog\n this.EditResultCode(resultCode);\n }\n\n /** @deprecated Use {@link OnResultCodeClick}. */\n onResultCodeClick(resultCode: MJActionResultCodeEntity, event: Event) {\n return this.OnResultCodeClick(resultCode, event);\n }\n \n /**\n * Delete a result code (marks for deletion on save)\n */\n DeleteResultCode(resultCode: MJActionResultCodeEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.ResultCodes.indexOf(resultCode);\n if (index > -1) {\n this.ResultCodes.splice(index, 1);\n }\n \n // Handle pending records\n if (resultCode.IsSaved) {\n // Add to deletion list for saved result codes\n this.resultCodesToDelete.push(resultCode);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n } else {\n // For unsaved result codes, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link DeleteResultCode}. */\n deleteResultCode(resultCode: MJActionResultCodeEntity) {\n return this.DeleteResultCode(resultCode);\n }\n \n /**\n * Delete a parameter (marks for deletion on save)\n */\n DeleteParameter(param: MJActionParamEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.ActionParams.indexOf(param);\n if (index > -1) {\n this.ActionParams.splice(index, 1);\n }\n \n // Handle pending records\n if (param.IsSaved) {\n // Add to deletion list for saved params\n this.paramsToDelete.push(param);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n } else {\n // For unsaved params, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === param && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n // Update filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link DeleteParameter}. */\n deleteParameter(param: MJActionParamEntity) {\n return this.DeleteParameter(param);\n }\n}\n","<!--\n NOTE: We wrap the form content in <mj-record-form-container> rather than\n using <mj-form-toolbar> directly. The container owns the toolbar AND the\n panels behind History/Tags/List buttons — without it those buttons emit\n events that nothing listens to and the features silently break. Follow\n this pattern for every custom entity form — see packages/Angular/CLAUDE.md.\n-->\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-card); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"record.Name\"\n name=\"actionName\"\n placeholder=\"Enter action name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-chip\"\n [attr.data-color]=\"record.Status === 'Active' ? 'success' : record.Status === 'Pending' ? 'warning' : 'error'\">\n {{ record.Status }}\n </span>\n @if (hasCodeApproval && record.CodeApprovalStatus) {\n <span class=\"status-chip\"\n [attr.data-color]=\"record.CodeApprovalStatus === 'Approved' ? 'success' : record.CodeApprovalStatus === 'Pending' ? 'warning' : 'error'\"\n [title]=\"'Code ' + record.CodeApprovalStatus\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" style=\"margin-right: 4px;\"></i>\n {{ record.CodeApprovalStatus }}\n </span>\n }\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"actionStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(ngModel)]=\"record.Type\"\n name=\"actionType\"\n [Data]=\"[{text: 'Generated', value: 'Generated'}, {text: 'Custom', value: 'Custom'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Category <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [Data]=\"[]\"\n Placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n </div>\n @if (hasCodeApproval) {\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\" style=\"margin-right: 4px;\"></i>\n Code Approval\n </label>\n <mj-dropdown [(ngModel)]=\"record.CodeApprovalStatus\"\n name=\"codeApprovalStatus\"\n [Data]=\"[{text: 'Approved', value: 'Approved'}, {text: 'Pending', value: 'Pending'}, {text: 'Rejected', value: 'Rejected'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 160px;\">\n </mj-dropdown>\n </div>\n }\n </div>\n }\n \n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\" \n name=\"actionDescription\"\n [rows]=\"2\"\n placeholder=\"Enter action description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (category) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Category:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500; cursor: pointer;\" (click)=\"navigateToCategory()\">\n {{ category.Name }}\n <i class=\"fa-solid fa-external-link\" style=\"font-size: 0.75em; margin-left: 4px;\"></i>\n </span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-cube\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (hasCodeApproval && record.CodeApprovalStatus) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\"></i>\n <span style=\"color: var(--mj-text-muted);\">Code:</span>\n <span [style.color]=\"getApprovalStatusColor()\" style=\"font-weight: 500;\">{{ record.CodeApprovalStatus }}</span>\n </div>\n }\n \n @if (actionParams.length > 0) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID && !EditMode) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button mjButton variant=\"outline\" size=\"md\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: var(--mj-status-error); text-align: right;\">\n Action must be Active to execute\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ actionParams.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingParams) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading parameters...\n </div>\n } @else if (actionParams.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-sliders\"\n Title=\"No parameters defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add parameters to define inputs and outputs for this action' : ''\" />\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No input parameters defined\" />\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No output parameters defined\" />\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code &amp; Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n <div class=\"generation-controls\">\n <mj-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </mj-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Runtime Action Configuration Section (only for Type='Runtime') -->\n @if (isRuntimeAction) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-status-warning);\"></i>\n Runtime Configuration &amp; Permissions\n <span style=\"color: var(--mj-text-muted); font-weight: 400; font-size: 0.85em;\">\n ({{ getRuntimeConfigSummary() }})\n </span>\n </span>\n </ng-template>\n\n <div style=\"padding: 16px;\">\n @if (!runtimeConfig) {\n <mj-alert Variant=\"error\">\n <strong>Missing or malformed RuntimeActionConfiguration.</strong>\n This Runtime action cannot run until a valid configuration is supplied. Approval should not be granted in this state.\n </mj-alert>\n } @else {\n @if (getWildcardFlags().any) {\n <mj-alert Variant=\"warning\" Title=\"Wildcard permissions enabled\">\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em;\">\n This runtime action has one or more wildcard flags set that bypass the specific allowlists below:\n @if (getWildcardFlags().entity) { <strong>allowAnyEntity</strong> }\n @if (getWildcardFlags().action) { <strong>allowAnyAction</strong> }\n @if (getWildcardFlags().agent) { <strong>allowAnyAgent</strong> }\n . Approving grants this action unrestricted access to that namespace on behalf of any user who invokes it. Only approve if the action is framework-authored or you have personally reviewed every place it touches those resources.\n </div>\n </mj-alert>\n }\n <!-- Declared permissions — the security contract an approver is blessing -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; margin-bottom: 20px;\">\n <!-- Entities -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-database\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Entities ({{ getAllowedEntities().length }})\n </div>\n @if (getAllowedEntities().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (e of getAllowedEntities(); track e.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ e.name }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Actions -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-bolt\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Actions ({{ getAllowedActions().length }})\n </div>\n @if (getAllowedActions().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (a of getAllowedActions(); track a.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ a.name }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Agents -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-robot\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Agents ({{ getAllowedAgents().length }})\n </div>\n @if (getAllowedAgents().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (g of getAllowedAgents(); track g.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ g.name }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Limits + libraries -->\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px;\">\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-gauge-high\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n Resource Limits\n </div>\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em;\">\n <div>Max memory: {{ getRuntimeLimits().maxMemoryMB }} MB</div>\n <div>Max bridge calls: {{ getRuntimeLimits().maxBridgeCalls }}</div>\n @if (record.MaxExecutionTimeMS) {\n <div>Max execution time: {{ record.MaxExecutionTimeMS }} ms</div>\n }\n </div>\n </div>\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-book\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n Additional Libraries\n </div>\n @if (getRequestedLibraries().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None (only default set: lodash, date-fns, uuid, validator)</div>\n } @else {\n <div style=\"display: flex; flex-wrap: wrap; gap: 4px;\">\n @for (lib of getRequestedLibraries(); track lib.name) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 2px 8px; border-radius: 10px; font-size: 0.85em;\">\n {{ lib.name }}@if (lib.version) {<span style=\"color: var(--mj-text-muted);\"> @{{ lib.version }}</span>}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Code payload -->\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-code\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n JavaScript Payload\n </div>\n <pre style=\"background: var(--mj-bg-surface-sunken); color: var(--mj-text-primary); padding: 12px; border-radius: 4px; overflow-x: auto; max-height: 400px; font-family: 'SF Mono', Monaco, Consolas, monospace; font-size: 0.85em; margin: 0;\"><code>{{ record.Code }}</code></pre>\n </div>\n\n <!-- Approval actions (Runtime-specific labels) -->\n @if (EditMode && record.CodeApprovalStatus === 'Pending') {\n <mj-alert Variant=\"warning\" Title=\"Approval required before this Runtime action can execute.\" class=\"approval-required-alert\">\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em; margin-bottom: 12px;\">\n Approving grants this action the permissions listed above on behalf of any user who invokes it. Review the code and permissions carefully before approving.\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button class=\"mj-button mj-button-primary\" (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button class=\"mj-button\" (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-ban\"></i> Reject\n </button>\n </div>\n </mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Result Codes Section -->\n <mj-accordion-panel\n [Expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: var(--mj-text-muted);\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-flag-checkered\"\n Title=\"No result codes defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add result codes to define possible outcomes' : ''\" />\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></i>\n Execution &amp; Monitoring\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-chart-line\"\n Title=\"No executions yet\" />\n } @else {\n <div class=\"execution-stats-row\">\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ formatDuration(executionStats.avgDuration) }}</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-check-circle\" [style.color]=\"getSuccessRateColor()\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Success Rate</div>\n <div class=\"stat-value\" [style.color]=\"getSuccessRateColor()\" style=\"font-weight: 600;\">{{ executionStats.successRate.toFixed(0) }}%</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-play-circle\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-book\"\n Title=\"No libraries configured\" />\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Action Test Harness Dialog -->\n<mj-action-test-harness-dialog\n [Action]=\"record\"\n [ActionParams]=\"actionParams\"\n [IsOpen]=\"showTestHarness\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\">\n</mj-action-test-harness-dialog>"]}
1
+ {"version":3,"file":"action-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Actions/action-form.component.ts","../../../../src/lib/custom/Actions/action-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject, ViewContainerRef } from '@angular/core';\nimport { MJActionEntity, MJActionEntity_IRuntimeActionConfiguration, MJActionParamEntity, MJActionResultCodeEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, MJActionLibraryEntity, MJLibraryEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJActionFormComponent } from '../../generated/Entities/MJAction/mjaction.form.component';\nimport { MJDialogService, MJDialogRef } from '@memberjunction/ng-ui-components';\nimport { ActionParamDialogComponent, ActionResultCodeDialogComponent } from '@memberjunction/ng-actions';\nimport { JoinHeroSummary, CountLabel } from '../../shared/phone-hero';\nimport { PhoneSectionsState } from '../../shared/phone-sections-state';\n\n@RegisterClass(BaseFormComponent, 'MJ: Actions')\n@Component({\n standalone: false,\n selector: 'mj-action-form',\n templateUrl: './action-form.component.html',\n styleUrls: ['./action-form.component.css', '../../shared/phone-hero.css']\n})\nexport class MJActionFormComponentExtended extends MJActionFormComponent implements OnInit {\n\n /** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */\n public Phone = new PhoneSectionsState(() => this.cdr.markForCheck());\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.Phone.Stop();\n }\n\n /** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */\n public HeroDetailsOpen = false;\n\n /** Toggles the phone hero between its compact identity row and the full hero. */\n public ToggleHeroDetails(): void {\n this.HeroDetailsOpen = !this.HeroDetailsOpen;\n this.cdr.markForCheck();\n }\n\n /** The phone hero's one-line summary of what the compact hero leaves out. */\n public get HeroSummary(): string {\n return JoinHeroSummary([\n this.category?.Name,\n this.record.Type,\n CountLabel(this.ActionParams.length, 'param'),\n this.HasCodeApproval && this.record.CodeApprovalStatus ? `Code ${this.record.CodeApprovalStatus.toLowerCase()}` : null,\n ]);\n }\n public record!: MJActionEntity;\n\n // This form has a fully custom layout (header panel + accordion\n // sections we manage ourselves), so the toolbar's section-search,\n // expand/collapse, manage-sections, and width-toggle widgets don't\n // apply. `CUSTOM_LAYOUT_TOOLBAR_CONFIG` hides the entire right-hand\n // group while keeping favorite / history / tags / list buttons intact.\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** @deprecated Use {@link ToolbarConfig}. */\n public get toolbarConfig() {\n return this.ToolbarConfig;\n }\n\n /** Custom-layout Action form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n /** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */\n public override get OwnsEntireFormBody(): boolean { return true; }\n\n // Related entities\n public category: MJActionCategoryEntity | null = null;\n public ActionParams: MJActionParamEntity[] = [];\n\n /** @deprecated Use {@link ActionParams}. */\n public get actionParams(): MJActionParamEntity[] {\n return this.ActionParams;\n }\n /** @deprecated Use {@link ActionParams}. */\n public set actionParams(value: MJActionParamEntity[]) {\n this.ActionParams = value;\n }\n public ResultCodes: MJActionResultCodeEntity[] = [];\n\n /** @deprecated Use {@link ResultCodes}. */\n public get resultCodes(): MJActionResultCodeEntity[] {\n return this.ResultCodes;\n }\n /** @deprecated Use {@link ResultCodes}. */\n public set resultCodes(value: MJActionResultCodeEntity[]) {\n this.ResultCodes = value;\n }\n public RecentExecutions: MJActionExecutionLogEntity[] = [];\n\n /** @deprecated Use {@link RecentExecutions}. */\n public get recentExecutions(): MJActionExecutionLogEntity[] {\n return this.RecentExecutions;\n }\n /** @deprecated Use {@link RecentExecutions}. */\n public set recentExecutions(value: MJActionExecutionLogEntity[]) {\n this.RecentExecutions = value;\n }\n public ActionLibraries: MJActionLibraryEntity[] = [];\n\n /** @deprecated Use {@link ActionLibraries}. */\n public get actionLibraries(): MJActionLibraryEntity[] {\n return this.ActionLibraries;\n }\n /** @deprecated Use {@link ActionLibraries}. */\n public set actionLibraries(value: MJActionLibraryEntity[]) {\n this.ActionLibraries = value;\n }\n public libraries: MJLibraryEntity[] = [];\n \n // Cached filtered params\n private _inputParams: MJActionParamEntity[] = [];\n private _outputParams: MJActionParamEntity[] = [];\n \n // Track params to delete\n private paramsToDelete: MJActionParamEntity[] = [];\n \n // Track result codes to delete\n private resultCodesToDelete: MJActionResultCodeEntity[] = [];\n \n // Loading states\n public IsLoadingParams = false;\n\n /** @deprecated Use {@link IsLoadingParams}. */\n public get isLoadingParams() {\n return this.IsLoadingParams;\n }\n /** @deprecated Use {@link IsLoadingParams}. */\n public set isLoadingParams(value) {\n this.IsLoadingParams = value;\n }\n public IsLoadingResultCodes = false;\n\n /** @deprecated Use {@link IsLoadingResultCodes}. */\n public get isLoadingResultCodes() {\n return this.IsLoadingResultCodes;\n }\n /** @deprecated Use {@link IsLoadingResultCodes}. */\n public set isLoadingResultCodes(value) {\n this.IsLoadingResultCodes = value;\n }\n public IsLoadingExecutions = false;\n\n /** @deprecated Use {@link IsLoadingExecutions}. */\n public get isLoadingExecutions() {\n return this.IsLoadingExecutions;\n }\n /** @deprecated Use {@link IsLoadingExecutions}. */\n public set isLoadingExecutions(value) {\n this.IsLoadingExecutions = value;\n }\n public IsLoadingLibraries = false;\n\n /** @deprecated Use {@link IsLoadingLibraries}. */\n public get isLoadingLibraries() {\n return this.IsLoadingLibraries;\n }\n /** @deprecated Use {@link IsLoadingLibraries}. */\n public set isLoadingLibraries(value) {\n this.IsLoadingLibraries = value;\n }\n \n // UI state\n public ExpandedSections = {\n overview: true,\n code: true,\n params: true,\n resultCodes: true,\n execution: false,\n configuration: false\n };\n\n /** @deprecated Use {@link ExpandedSections}. */\n public get expandedSections() {\n return this.ExpandedSections;\n }\n /** @deprecated Use {@link ExpandedSections}. */\n public set expandedSections(value) {\n this.ExpandedSections = value;\n }\n \n // Test harness state\n public ShowTestHarness = false;\n\n /** @deprecated Use {@link ShowTestHarness}. */\n public get showTestHarness() {\n return this.ShowTestHarness;\n }\n /** @deprecated Use {@link ShowTestHarness}. */\n public set showTestHarness(value) {\n this.ShowTestHarness = value;\n }\n \n // Execution stats\n public ExecutionStats = {\n totalRuns: 0,\n successRate: 0,\n avgDuration: 0,\n lastRun: null as Date | null\n };\n\n /** @deprecated Use {@link ExecutionStats}. */\n public get executionStats() {\n return this.ExecutionStats;\n }\n /** @deprecated Use {@link ExecutionStats}. */\n public set executionStats(value) {\n this.ExecutionStats = value;\n }\n \n // Code editor config\n public CodeLanguage = 'typescript';\n\n /** @deprecated Use {@link CodeLanguage}. */\n public get codeLanguage() {\n return this.CodeLanguage;\n }\n /** @deprecated Use {@link CodeLanguage}. */\n public set codeLanguage(value) {\n this.CodeLanguage = value;\n }\n public ShowCodeComments = false;\n\n /** @deprecated Use {@link ShowCodeComments}. */\n public get showCodeComments() {\n return this.ShowCodeComments;\n }\n /** @deprecated Use {@link ShowCodeComments}. */\n public set showCodeComments(value) {\n this.ShowCodeComments = value;\n }\n \n private dialogService = inject(MJDialogService);\n private viewContainerRef = inject(ViewContainerRef);\n private sharedService = inject(SharedService);\n\n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record?.IsSaved) {\n // Load all related data in parallel\n await Promise.all([\n this.loadCategory(),\n this.loadActionParams(),\n this.loadResultCodes(),\n this.loadRecentExecutions(),\n this.loadActionLibraries(),\n this.loadExecutionStats()\n ]);\n this.cdr.detectChanges();\n }\n }\n \n /**\n * Override InternalSaveRecord to handle Action and related ActionParams in a transaction\n * This follows the same pattern as MJAIAgentFormComponent\n */\n protected async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) {\n return false;\n }\n \n try {\n const md = this.ProviderToUse;\n const transactionGroup = await md.CreateTransactionGroup();\n \n // Set transaction group on the Action record\n this.record.TransactionGroup = transactionGroup;\n \n // Save the Action record first\n const actionSaved = await this.record.Save();\n \n if (!actionSaved) {\n console.error('Failed to save Action record');\n this.sharedService.CreateSimpleNotification('Failed to save Action record', 'error', 5000);\n return false;\n }\n \n // Process all pending records (params and result codes to save or delete)\n for (const pendingRecord of this.PendingRecords) {\n if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Params') {\n const param = pendingRecord.entityObject as MJActionParamEntity;\n \n // Ensure ActionID is set for new params\n if (!param.ActionID) {\n param.ActionID = this.record.ID;\n }\n \n param.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await param.Save();\n if (!saved) {\n console.error('Failed to save parameter:', param.Name);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await param.Delete();\n if (!deleted) {\n console.error('Failed to delete parameter:', param.Name);\n return false;\n }\n }\n } else if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const resultCode = pendingRecord.entityObject as MJActionResultCodeEntity;\n \n // Ensure ActionID is set for new result codes\n if (!resultCode.ActionID) {\n resultCode.ActionID = this.record.ID;\n }\n \n resultCode.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await resultCode.Save();\n if (!saved) {\n console.error('Failed to save result code:', resultCode.ResultCode);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await resultCode.Delete();\n if (!deleted) {\n console.error('Failed to delete result code:', resultCode.ResultCode);\n return false;\n }\n }\n }\n }\n \n // Submit the transaction\n const success = await transactionGroup.Submit();\n \n if (success) {\n // Clear pending records after successful save\n this.PendingRecords.length = 0;\n this.paramsToDelete = [];\n this.resultCodesToDelete = [];\n\n // Note: the base SaveRecord() already emits a \"Record saved\n // successfully\" toast on success — don't emit another one\n // from here or users get two toasts for one save.\n\n // Defer the post-save reload so the template's post-save CD\n // pass completes before `actionParams` / `resultCodes` mutate.\n // We also run the reload *silently* (no isLoadingParams flash)\n // and batch the final state into a single `detectChanges()`\n // to avoid NG0100: previously the spinner toggle + array\n // replacement generated multiple interleaved CD passes that\n // saw `actionParams.length` change between check/verify.\n queueMicrotask(() => {\n void this.reloadAfterSaveSilent();\n });\n }\n\n return success;\n \n } catch (error) {\n console.error('Error saving Action and parameters:', error);\n this.sharedService.CreateSimpleNotification('Error saving Action: ' + error, 'error', 5000);\n return false;\n }\n }\n\n private async loadCategory() {\n if (!this.record.CategoryID) return;\n\n try {\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<MJActionCategoryEntity>('MJ: Action Categories');\n const loaded = await entity.Load(this.record.CategoryID);\n if (loaded) {\n this.category = entity;\n }\n } catch (error) {\n // Error loading category\n }\n }\n\n private async loadActionParams() {\n this.IsLoadingParams = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.ActionParams = result.Results || [];\n // Update cached filtered params - trim and lowercase Type values to handle any whitespace and case\n this._inputParams = this.ActionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n this._outputParams = this.ActionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n } else {\n // Failed to load action params\n this.ActionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n }\n } catch (error) {\n // Error loading action params\n this.ActionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n } finally {\n this.IsLoadingParams = false;\n }\n }\n\n private async loadResultCodes() {\n this.IsLoadingResultCodes = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionResultCodeEntity>({\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'IsSuccess DESC, ResultCode',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.ResultCodes = result.Results || [];\n } else {\n // Failed to load result codes\n this.ResultCodes = [];\n }\n } catch (error) {\n // Error loading result codes\n this.ResultCodes = [];\n } finally {\n this.IsLoadingResultCodes = false;\n }\n }\n\n /**\n * Silent post-save reload. Unlike `loadActionParams` / `loadResultCodes`,\n * this version:\n * - Does NOT toggle `isLoadingParams` / `isLoadingResultCodes`. No\n * spinner is needed; the form is already back in read mode.\n * - Runs both RunViews in parallel off a single network round-trip.\n * - Commits the results in one synchronous block, then calls\n * `detectChanges()` once so Angular sees a single CD pass rather\n * than the three-or-four passes the original flow produced.\n *\n * This is what eliminates the NG0100 \"`actionParams.length` changed\n * from 33 to 35\" error we were seeing after save: previously the\n * length flipped between the check and verify phases of a CD pass\n * triggered by the spinner-flag updates.\n */\n private async reloadAfterSaveSilent(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [paramResult, codeResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'IsSuccess DESC, ResultCode',\n ResultType: 'entity_object'\n }\n ]);\n\n const params = (paramResult.Success ? paramResult.Results : []) as MJActionParamEntity[];\n const codes = (codeResult.Success ? codeResult.Results : []) as MJActionResultCodeEntity[];\n\n // Single synchronous commit — all template-observable arrays\n // swap at once, avoiding interleaved CD passes.\n this.ActionParams = params;\n this._inputParams = params.filter((p) => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n this._outputParams = params.filter((p) => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n this.ResultCodes = codes;\n\n this.cdr.detectChanges();\n } catch (e) {\n console.error('Post-save reload failed:', e);\n }\n }\n\n private async loadRecentExecutions() {\n this.IsLoadingExecutions = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionExecutionLogEntity>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 10,\n Fields: ['ID', 'ActionID', 'StartedAt', 'EndedAt', 'UserID', 'User', 'ResultCode', 'Message'],\n ResultType: 'simple'\n });\n \n if (result.Success) {\n this.RecentExecutions = result.Results || [];\n } else {\n // Failed to load executions\n this.RecentExecutions = [];\n }\n } catch (error) {\n // Error loading executions\n this.RecentExecutions = [];\n } finally {\n this.IsLoadingExecutions = false;\n }\n }\n\n private async loadActionLibraries() {\n this.IsLoadingLibraries = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionLibraryEntity>({\n EntityName: 'MJ: Action Libraries',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Library' \n });\n \n if (result.Success) {\n this.ActionLibraries = result.Results || [];\n \n // Load library details in a single batch query instead of N+1 sequential loads\n if (this.ActionLibraries.length > 0) {\n const libraryIds = this.ActionLibraries.map(al => al.LibraryID).filter((id): id is string => !!id);\n this.libraries = [];\n if (libraryIds.length > 0) {\n const libFilter = libraryIds.map(id => `'${id.replace(/'/g, \"''\")}'`).join(',');\n const libResult = await rv.RunView<MJLibraryEntity>({\n EntityName: 'MJ: Libraries',\n ExtraFilter: `ID IN (${libFilter})`,\n ResultType: 'entity_object'\n });\n if (libResult.Success && libResult.Results) {\n const byId = new Map<string, MJLibraryEntity>();\n for (const lib of libResult.Results) {\n byId.set(lib.ID.toLowerCase(), lib);\n }\n for (const libId of libraryIds) {\n const found = byId.get(libId.toLowerCase());\n if (found) {\n this.libraries.push(found);\n }\n }\n }\n }\n }\n }\n } catch (error) {\n // Error loading libraries\n } finally {\n this.IsLoadingLibraries = false;\n }\n }\n\n private async loadExecutionStats() {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Project only lightweight scalar columns (excluding Params/ResultParams blobs) for stats calculation\n const result = await rv.RunView<Pick<MJActionExecutionLogEntity, 'ID' | 'StartedAt' | 'EndedAt' | 'ResultCode'>>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC',\n Fields: ['ID', 'StartedAt', 'EndedAt', 'ResultCode'],\n ResultType: 'simple'\n });\n \n if (result.Success && result.Results && result.Results.length > 0) {\n const allExecutions = result.Results;\n this.ExecutionStats.totalRuns = allExecutions.length;\n \n // Calculate success rate based on result codes\n const successfulRuns = allExecutions.filter(e => {\n const resultCode = this.ResultCodes.find(rc => rc.ResultCode === e.ResultCode);\n return resultCode?.IsSuccess || false;\n });\n \n this.ExecutionStats.successRate = this.ExecutionStats.totalRuns > 0 \n ? (successfulRuns.length / this.ExecutionStats.totalRuns) * 100 \n : 0;\n \n // Calculate average duration from ALL completed executions\n const completedExecutions = allExecutions.filter(e => e.StartedAt && e.EndedAt);\n if (completedExecutions.length > 0) {\n const totalDuration = completedExecutions.reduce((sum, e) => {\n const duration = new Date(e.EndedAt!).getTime() - new Date(e.StartedAt).getTime();\n // Use absolute value to handle any swapped dates\n return sum + Math.abs(duration);\n }, 0);\n this.ExecutionStats.avgDuration = totalDuration / completedExecutions.length;\n }\n \n // Get last run date from most recent execution\n this.ExecutionStats.lastRun = new Date(allExecutions[0].StartedAt);\n }\n } catch (error) {\n // Error loading execution stats\n }\n }\n\n // UI Helper Methods\n GetStatusColor(): string {\n switch (this.record.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Disabled': return 'var(--mj-status-error)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n getStatusColor(): string {\n return this.GetStatusColor();\n }\n\n GetStatusIcon(): string {\n switch (this.record.Status) {\n case 'Active': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Disabled': return 'fa-ban';\n default: return 'fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetStatusIcon}. */\n getStatusIcon(): string {\n return this.GetStatusIcon();\n }\n\n GetTypeColor(): string {\n switch (this.record.Type) {\n case 'Runtime':\n return 'var(--mj-status-warning)';\n case 'Generated':\n case 'Custom':\n default:\n return 'var(--mj-brand-primary)';\n }\n }\n\n /** @deprecated Use {@link GetTypeColor}. */\n getTypeColor(): string {\n return this.GetTypeColor();\n }\n\n GetTypeIcon(): string {\n switch (this.record.Type) {\n case 'Runtime': return 'fa-wand-magic-sparkles';\n case 'Generated': return 'fa-robot';\n case 'Custom':\n default: return 'fa-code';\n }\n }\n\n /** @deprecated Use {@link GetTypeIcon}. */\n getTypeIcon(): string {\n return this.GetTypeIcon();\n }\n\n // =====================================================================\n // Runtime Actions — approval-UI helpers (Phase 1i)\n //\n // Only relevant when `record.Type === 'Runtime'`. Each method reads the\n // typed `RuntimeActionConfigurationObject` accessor emitted by CodeGen\n // (via the JSONType metadata system) so consumers never hand-parse the\n // raw JSON string. The approval panel uses these to surface the\n // permission set an approver is implicitly blessing.\n // =====================================================================\n\n public get IsRuntimeAction(): boolean {\n return this.record?.Type === 'Runtime';\n }\n\n /** @deprecated Use {@link IsRuntimeAction}. */\n public get isRuntimeAction(): boolean {\n return this.IsRuntimeAction;\n }\n\n public get RuntimeConfig(): MJActionEntity_IRuntimeActionConfiguration | null {\n if (!this.IsRuntimeAction) return null;\n const accessor = (this.record as unknown as {\n RuntimeActionConfigurationObject?: MJActionEntity_IRuntimeActionConfiguration | null;\n });\n return accessor.RuntimeActionConfigurationObject ?? null;\n }\n\n /** @deprecated Use {@link RuntimeConfig}. */\n public get runtimeConfig(): MJActionEntity_IRuntimeActionConfiguration | null {\n return this.RuntimeConfig;\n }\n\n public GetAllowedEntities(): Array<{ id: string; name: string }> {\n return this.RuntimeConfig?.permissions?.allowedEntities ?? [];\n }\n\n /** @deprecated Use {@link GetAllowedEntities}. */\n public getAllowedEntities(): Array<{ id: string; name: string }> {\n return this.GetAllowedEntities();\n }\n\n public GetAllowedActions(): Array<{ id: string; name: string }> {\n return this.RuntimeConfig?.permissions?.allowedActions ?? [];\n }\n\n /** @deprecated Use {@link GetAllowedActions}. */\n public getAllowedActions(): Array<{ id: string; name: string }> {\n return this.GetAllowedActions();\n }\n\n public GetAllowedAgents(): Array<{ id: string; name: string }> {\n return this.RuntimeConfig?.permissions?.allowedAgents ?? [];\n }\n\n /** @deprecated Use {@link GetAllowedAgents}. */\n public getAllowedAgents(): Array<{ id: string; name: string }> {\n return this.GetAllowedAgents();\n }\n\n public GetRequestedLibraries(): Array<{ name: string; version?: string }> {\n return this.RuntimeConfig?.sandbox?.additionalLibraries ?? [];\n }\n\n /** @deprecated Use {@link GetRequestedLibraries}. */\n public getRequestedLibraries(): Array<{ name: string; version?: string }> {\n return this.GetRequestedLibraries();\n }\n\n public GetRuntimeLimits(): { maxMemoryMB: number; maxBridgeCalls: number } {\n const limits = this.RuntimeConfig?.limits ?? {};\n return {\n maxMemoryMB: limits.maxMemoryMB ?? 128,\n maxBridgeCalls: limits.maxBridgeCalls ?? 100\n };\n }\n\n /** @deprecated Use {@link GetRuntimeLimits}. */\n public getRuntimeLimits(): { maxMemoryMB: number; maxBridgeCalls: number } {\n return this.GetRuntimeLimits();\n }\n\n public GetRuntimeConfigSummary(): string {\n const perms = this.RuntimeConfig?.permissions;\n if (!perms) return 'No permissions declared';\n const e = perms.allowedEntities?.length ?? 0;\n const a = perms.allowedActions?.length ?? 0;\n const ag = perms.allowedAgents?.length ?? 0;\n const wildcards = this.GetWildcardFlags();\n const parts: string[] = [];\n parts.push(wildcards.entity ? 'ANY entity' : `${e} entit${e === 1 ? 'y' : 'ies'}`);\n parts.push(wildcards.action ? 'ANY action' : `${a} action${a === 1 ? '' : 's'}`);\n parts.push(wildcards.agent ? 'ANY agent' : `${ag} agent${ag === 1 ? '' : 's'}`);\n return parts.join(', ');\n }\n\n /** @deprecated Use {@link GetRuntimeConfigSummary}. */\n public getRuntimeConfigSummary(): string {\n return this.GetRuntimeConfigSummary();\n }\n\n /**\n * Returns which wildcard permission flags are set on the runtime\n * configuration. Any `true` flag is a prominent security-relevant\n * concession to the action — the approval UI renders a warning banner\n * when any of these are on so the approver sees the blast radius.\n */\n public GetWildcardFlags(): { entity: boolean; action: boolean; agent: boolean; any: boolean } {\n const perms = this.RuntimeConfig?.permissions as\n | { allowAnyEntity?: boolean; allowAnyAction?: boolean; allowAnyAgent?: boolean }\n | undefined;\n const entity = perms?.allowAnyEntity === true;\n const action = perms?.allowAnyAction === true;\n const agent = perms?.allowAnyAgent === true;\n return { entity, action, agent, any: entity || action || agent };\n }\n\n /** @deprecated Use {@link GetWildcardFlags}. */\n public getWildcardFlags(): { entity: boolean; action: boolean; agent: boolean; any: boolean } {\n return this.GetWildcardFlags();\n }\n\n /**\n * Both Generated and Runtime actions carry executable code gated by\n * `CodeApprovalStatus` — the RuntimeActionExecutor refuses to run\n * anything that isn't `Approved`, and CodeGen blocks unapproved\n * Generated code from being emitted. Custom actions run registered\n * TypeScript classes and don't have this gate.\n *\n * Getter rather than method so Angular's change detector can't\n * observe inconsistent results across check/verify passes — this\n * is the standard fix for NG0100 when a conditional's expression\n * depends on a method call.\n */\n get HasCodeApproval(): boolean {\n return this.record?.Type === 'Generated' || this.record?.Type === 'Runtime';\n }\n\n /** @deprecated Use {@link HasCodeApproval}. */\n get hasCodeApproval(): boolean {\n return this.HasCodeApproval;\n }\n\n GetApprovalStatusColor(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Rejected': return 'var(--mj-status-error)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusColor}. */\n getApprovalStatusColor(): string {\n return this.GetApprovalStatusColor();\n }\n\n GetApprovalStatusIcon(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n default: return 'fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusIcon}. */\n getApprovalStatusIcon(): string {\n return this.GetApprovalStatusIcon();\n }\n\n GetParamTypeIcon(type: string): string {\n switch (type) {\n case 'Input': return 'fa-sign-in-alt';\n case 'Output': return 'fa-sign-out-alt';\n case 'Both': return 'fa-exchange-alt';\n default: return 'fa-question';\n }\n }\n\n /** @deprecated Use {@link GetParamTypeIcon}. */\n getParamTypeIcon(type: string): string {\n return this.GetParamTypeIcon(type);\n }\n\n GetParamTypeColor(type: string): string {\n switch (type) {\n case 'Input': return 'var(--mj-brand-primary)';\n case 'Output': return 'var(--mj-status-success)';\n case 'Both': return 'var(--mj-brand-primary)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /** @deprecated Use {@link GetParamTypeColor}. */\n getParamTypeColor(type: string): string {\n return this.GetParamTypeColor(type);\n }\n\n formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n }\n\n formatDate(date: Date | string | null): string {\n if (!date) return 'Never';\n const d = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n \n if (diff < 60000) return 'Just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n if (diff < 604800000) return `${Math.floor(diff / 86400000)}d ago`;\n \n return d.toLocaleDateString();\n }\n\n // Navigation\n NavigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));\n }\n\n /** @deprecated Use {@link NavigateToEntity}. */\n navigateToEntity(entityName: string, recordId: string | null) {\n return this.NavigateToEntity(entityName, recordId);\n }\n\n NavigateToCategory() {\n if (this.record.CategoryID) {\n this.NavigateToEntity('MJ: Action Categories', this.record.CategoryID);\n }\n }\n\n /** @deprecated Use {@link NavigateToCategory}. */\n navigateToCategory() {\n return this.NavigateToCategory();\n }\n\n NavigateToExecution(executionId: string) {\n this.NavigateToEntity('MJ: Action Execution Logs', executionId);\n }\n\n /** @deprecated Use {@link NavigateToExecution}. */\n navigateToExecution(executionId: string) {\n return this.NavigateToExecution(executionId);\n }\n\n NavigateToLibrary(libraryId: string) {\n this.NavigateToEntity('MJ: Libraries', libraryId);\n }\n\n /** @deprecated Use {@link NavigateToLibrary}. */\n navigateToLibrary(libraryId: string) {\n return this.NavigateToLibrary(libraryId);\n }\n\n // Actions\n OpenTestHarness() {\n if (!this.record || !this.record.ID || !this.record.IsSaved || this.record.Status !== 'Active') {\n // Cannot open test harness: Action must be saved and active\n return;\n }\n \n this.ShowTestHarness = true;\n }\n\n /** @deprecated Use {@link OpenTestHarness}. */\n openTestHarness() {\n return this.OpenTestHarness();\n }\n \n /**\n * Event handler for test harness visibility changes\n */\n public OnTestHarnessVisibilityChanged(isVisible: boolean) {\n this.ShowTestHarness = isVisible;\n }\n\n /** @deprecated Use {@link OnTestHarnessVisibilityChanged}. */\n public onTestHarnessVisibilityChanged(isVisible: boolean) {\n return this.OnTestHarnessVisibilityChanged(isVisible);\n }\n\n async RegenerateCode() {\n if (!this.EditMode) return;\n \n this.record.ForceCodeGeneration = true;\n await this.record.Save();\n // Reload related data after save\n await this.loadResultCodes();\n }\n\n /** @deprecated Use {@link RegenerateCode}. */\n async regenerateCode() {\n return this.RegenerateCode();\n }\n\n ToggleCodeComments() {\n this.ShowCodeComments = !this.ShowCodeComments;\n }\n\n /** @deprecated Use {@link ToggleCodeComments}. */\n toggleCodeComments() {\n return this.ToggleCodeComments();\n }\n\n async ApproveCode() {\n if (!this.EditMode) return;\n \n this.record.CodeApprovalStatus = 'Approved';\n this.record.CodeApprovedAt = new Date();\n // Note: CodeApprovedByUserID would be set server-side\n await this.record.Save();\n }\n\n /** @deprecated Use {@link ApproveCode}. */\n async approveCode() {\n return this.ApproveCode();\n }\n\n async RejectCode() {\n if (!this.EditMode) return;\n\n this.record.CodeApprovalStatus = 'Rejected';\n await this.record.Save();\n }\n\n /** @deprecated Use {@link RejectCode}. */\n async rejectCode() {\n return this.RejectCode();\n }\n\n async CopyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could add a notification here\n } catch (err) {\n // Failed to copy\n }\n }\n\n /** @deprecated Use {@link CopyToClipboard}. */\n async copyToClipboard(text: string) {\n return this.CopyToClipboard(text);\n }\n\n // Helper methods for template filtering\n GetInputParams(): MJActionParamEntity[] {\n // Sort by IsRequired (required first) then by Name\n return this._inputParams.sort((a, b) => {\n if (a.IsRequired === b.IsRequired) {\n return (a.Name || '').localeCompare(b.Name || '');\n }\n return a.IsRequired ? -1 : 1;\n });\n }\n\n /** @deprecated Use {@link GetInputParams}. */\n getInputParams(): MJActionParamEntity[] {\n return this.GetInputParams();\n }\n\n GetOutputParams(): MJActionParamEntity[] {\n // Sort by Name\n return this._outputParams.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));\n }\n\n /** @deprecated Use {@link GetOutputParams}. */\n getOutputParams(): MJActionParamEntity[] {\n return this.GetOutputParams();\n }\n\n IsExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n // First check if we have a result code definition\n const resultCode = this.ResultCodes.find(rc => rc.ResultCode === execution.ResultCode);\n if (resultCode) {\n return resultCode.IsSuccess;\n }\n // Fallback to common success patterns if no result code defined\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n /** @deprecated Use {@link IsExecutionSuccess}. */\n isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return this.IsExecutionSuccess(execution);\n }\n\n GetExecutionDuration(execution: MJActionExecutionLogEntity): number {\n if (!execution.EndedAt) return 0;\n \n const startTime = new Date(execution.StartedAt).getTime();\n const endTime = new Date(execution.EndedAt).getTime();\n const duration = endTime - startTime;\n \n // Return absolute value to handle timezone mismatches\n return Math.abs(duration);\n }\n\n /** @deprecated Use {@link GetExecutionDuration}. */\n getExecutionDuration(execution: MJActionExecutionLogEntity): number {\n return this.GetExecutionDuration(execution);\n }\n\n GetSuccessRateColor(): string {\n const rate = this.ExecutionStats.successRate;\n if (rate >= 80) return 'var(--mj-status-success)';\n if (rate >= 60) return 'var(--mj-status-warning)';\n return 'var(--mj-status-error)';\n }\n\n /** @deprecated Use {@link GetSuccessRateColor}. */\n getSuccessRateColor(): string {\n return this.GetSuccessRateColor();\n }\n\n // Parameter management methods\n async AddParameter(type: 'Input' | 'Output' | 'Both') {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = this.ProviderToUse;\n const newParam = await md.GetEntityObject<MJActionParamEntity>('MJ: Action Params');\n \n // Set default values\n newParam.ActionID = this.record.ID;\n newParam.Name = '';\n newParam.Type = type;\n newParam.ValueType = 'Scalar';\n newParam.IsRequired = false;\n newParam.IsArray = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['param'] = newParam;\n dialog['isNew'] = true;\n dialog['editMode'] = true;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result) {\n // The dialog has already modified the newParam entity directly\n // New entities are automatically dirty (IsSaved = false)\n\n // Add to local array\n this.ActionParams.push(newParam);\n\n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newParam,\n action: 'save'\n });\n\n // Update the filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link AddParameter}. */\n async addParameter(type: 'Input' | 'Output' | 'Both') {\n return this.AddParameter(type);\n }\n\n async EditParameter(param: MJActionParamEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['param'] = param;\n dialog['isNew'] = false;\n dialog['editMode'] = this.EditMode;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result && this.EditMode) {\n // Param will be dirty from property changes in dialog\n // Ensure it's in pending records if modified\n if (param.Dirty) {\n const exists = this.PendingRecords.some(pr =>\n pr.entityObject === param && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n\n // Update the local arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link EditParameter}. */\n async editParameter(param: MJActionParamEntity) {\n return this.EditParameter(param);\n }\n \n OnParamClick(param: MJActionParamEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.param-edit-btn') || target.closest('.param-delete-btn')) {\n return;\n }\n \n // Show the parameter dialog\n this.EditParameter(param);\n }\n\n /** @deprecated Use {@link OnParamClick}. */\n onParamClick(param: MJActionParamEntity, event: Event) {\n return this.OnParamClick(param, event);\n }\n\n \n private async updateParamArrays() {\n // Update cached filtered params - exclude deleted items\n const activeParams = this.ActionParams.filter(p => !this.paramsToDelete || !this.paramsToDelete.includes(p));\n \n this._inputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n \n this._outputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n }\n \n // Override to populate pending records with our action params and result codes\n protected PopulatePendingRecords() {\n // Preserve existing pending records before base class clears them\n const currentPendingRecords = [...this.PendingRecords];\n \n // Call parent to handle child components\n super.PopulatePendingRecords();\n \n // Re-add our preserved records\n for (const record of currentPendingRecords) {\n // Only re-add if it's an Action Param or Result Code (avoid duplicates)\n if (record.entityObject.EntityInfo.Name === 'MJ: Action Params' || \n record.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === record.entityObject\n );\n if (!exists) {\n this.PendingRecords.push(record);\n }\n }\n }\n \n // Add action params that need saving\n for (const param of this.ActionParams) {\n if (!param.IsSaved || param.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n }\n \n // Add params marked for deletion\n for (const param of this.paramsToDelete) {\n if (param.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n }\n }\n }\n \n // Add result codes that need saving\n for (const resultCode of this.ResultCodes) {\n if (!resultCode.IsSaved || resultCode.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n }\n \n // Add result codes marked for deletion\n for (const resultCode of this.resultCodesToDelete) {\n if (resultCode.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n }\n }\n }\n }\n \n /**\n * Gets the action's display icon\n * Falls back to default cog icon if no IconClass is set\n */\n public GetActionIcon(): string {\n return this.record?.IconClass || 'fa-solid fa-cog';\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(): string {\n return this.GetActionIcon();\n }\n \n // Result Code management methods\n async AddResultCode() {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = this.ProviderToUse;\n const newResultCode = await md.GetEntityObject<MJActionResultCodeEntity>('MJ: Action Result Codes');\n \n // Set default values\n newResultCode.ActionID = this.record.ID;\n newResultCode.ResultCode = '';\n newResultCode.Description = '';\n newResultCode.IsSuccess = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['resultCode'] = newResultCode;\n dialog['isNew'] = true;\n dialog['editMode'] = true;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result) {\n // Add to local array\n this.ResultCodes.push(newResultCode);\n\n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newResultCode,\n action: 'save'\n });\n\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link AddResultCode}. */\n async addResultCode() {\n return this.AddResultCode();\n }\n \n async EditResultCode(resultCode: MJActionResultCodeEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n\n const dialog = dialogRef.Content!.instance;\n dialog['resultCode'] = resultCode;\n dialog['isNew'] = false;\n dialog['editMode'] = this.EditMode;\n\n dialogRef.Result.subscribe(result => {\n if (result && typeof result === 'object' && 'save' in result && this.EditMode) {\n // Ensure it's in pending records if modified\n if (resultCode.Dirty) {\n const exists = this.PendingRecords.some(pr =>\n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n\n this.cdr.detectChanges();\n }\n });\n }\n\n /** @deprecated Use {@link EditResultCode}. */\n async editResultCode(resultCode: MJActionResultCodeEntity) {\n return this.EditResultCode(resultCode);\n }\n \n OnResultCodeClick(resultCode: MJActionResultCodeEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.result-edit-btn') || target.closest('.result-delete-btn')) {\n return;\n }\n \n // Show the result code dialog\n this.EditResultCode(resultCode);\n }\n\n /** @deprecated Use {@link OnResultCodeClick}. */\n onResultCodeClick(resultCode: MJActionResultCodeEntity, event: Event) {\n return this.OnResultCodeClick(resultCode, event);\n }\n \n /**\n * Delete a result code (marks for deletion on save)\n */\n DeleteResultCode(resultCode: MJActionResultCodeEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.ResultCodes.indexOf(resultCode);\n if (index > -1) {\n this.ResultCodes.splice(index, 1);\n }\n \n // Handle pending records\n if (resultCode.IsSaved) {\n // Add to deletion list for saved result codes\n this.resultCodesToDelete.push(resultCode);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n } else {\n // For unsaved result codes, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link DeleteResultCode}. */\n deleteResultCode(resultCode: MJActionResultCodeEntity) {\n return this.DeleteResultCode(resultCode);\n }\n \n /**\n * Delete a parameter (marks for deletion on save)\n */\n DeleteParameter(param: MJActionParamEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.ActionParams.indexOf(param);\n if (index > -1) {\n this.ActionParams.splice(index, 1);\n }\n \n // Handle pending records\n if (param.IsSaved) {\n // Add to deletion list for saved params\n this.paramsToDelete.push(param);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n } else {\n // For unsaved params, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === param && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n // Update filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link DeleteParameter}. */\n deleteParameter(param: MJActionParamEntity) {\n return this.DeleteParameter(param);\n }\n}\n","<!--\n NOTE: We wrap the form content in <mj-record-form-container> rather than\n using <mj-form-toolbar> directly. The container owns the toolbar AND the\n panels behind History/Tags/List buttons — without it those buttons emit\n events that nothing listens to and the features silently break. Follow\n this pattern for every custom entity form — see packages/Angular/CLAUDE.md.\n-->\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header phone-hero\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-card); border-bottom: 2px solid var(--mj-border-default);\">\n <div class=\"hero-header-row\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"record.Name\"\n name=\"actionName\"\n placeholder=\"Enter action name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-chip\"\n [attr.data-color]=\"record.Status === 'Active' ? 'success' : record.Status === 'Pending' ? 'warning' : 'error'\">\n {{ record.Status }}\n </span>\n @if (hasCodeApproval && record.CodeApprovalStatus) {\n <span class=\"status-chip phone-hero-detail\"\n [attr.data-color]=\"record.CodeApprovalStatus === 'Approved' ? 'success' : record.CodeApprovalStatus === 'Pending' ? 'warning' : 'error'\"\n [title]=\"'Code ' + record.CodeApprovalStatus\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" style=\"margin-right: 4px;\"></i>\n {{ record.CodeApprovalStatus }}\n </span>\n }\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"actionStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(ngModel)]=\"record.Type\"\n name=\"actionType\"\n [Data]=\"[{text: 'Generated', value: 'Generated'}, {text: 'Custom', value: 'Custom'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Category <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <mj-dropdown [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [Data]=\"[]\"\n Placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n </div>\n @if (hasCodeApproval) {\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\" style=\"margin-right: 4px;\"></i>\n Code Approval\n </label>\n <mj-dropdown [(ngModel)]=\"record.CodeApprovalStatus\"\n name=\"codeApprovalStatus\"\n [Data]=\"[{text: 'Approved', value: 'Approved'}, {text: 'Pending', value: 'Pending'}, {text: 'Rejected', value: 'Rejected'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 160px;\">\n </mj-dropdown>\n </div>\n }\n </div>\n }\n \n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\" \n name=\"actionDescription\"\n [rows]=\"2\"\n placeholder=\"Enter action description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </textarea>\n } @else if (record.Description) {\n <p class=\"phone-hero-detail\" style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config phone-hero-detail\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (category) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Category:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500; cursor: pointer;\" (click)=\"navigateToCategory()\">\n {{ category.Name }}\n <i class=\"fa-solid fa-external-link\" style=\"font-size: 0.75em; margin-left: 4px;\"></i>\n </span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-cube\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (hasCodeApproval && record.CodeApprovalStatus) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\"></i>\n <span style=\"color: var(--mj-text-muted);\">Code:</span>\n <span [style.color]=\"getApprovalStatusColor()\" style=\"font-weight: 500;\">{{ record.CodeApprovalStatus }}</span>\n </div>\n }\n \n @if (actionParams.length > 0) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID && !EditMode) {\n <button mjButton variant=\"primary\" size=\"lg\" class=\"phone-hero-run\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button mjButton variant=\"outline\" size=\"md\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: var(--mj-status-error); text-align: right;\">\n Action must be Active to execute\n </div>\n }\n </div>\n </div>\n @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n \n <!-- Parameters Section (FIRST) -->\n <mj-accordion-panel SectionKey=\"parameters\" SectionTitle=\"Parameters\" SectionIcon=\"fa-solid fa-sliders\" [SectionCount]=\"ActionParams.length\"\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ actionParams.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (isLoadingParams) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading parameters...\n </div>\n } @else if (actionParams.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-sliders\"\n Title=\"No parameters defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add parameters to define inputs and outputs for this action' : ''\" />\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No input parameters defined\" />\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No output parameters defined\" />\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <mj-accordion-panel SectionKey=\"code\" SectionTitle=\"Code &amp; Generation\" SectionIcon=\"fa-solid fa-code\"\n [Expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code &amp; Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n <div class=\"generation-controls\">\n <mj-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </mj-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </textarea>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Runtime Action Configuration Section (only for Type='Runtime') -->\n @if (isRuntimeAction) {\n <mj-accordion-panel SectionKey=\"runtime\" SectionTitle=\"Runtime Configuration &amp; Permissions\" SectionIcon=\"fa-solid fa-wand-magic-sparkles\"\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-status-warning);\"></i>\n Runtime Configuration &amp; Permissions\n <span style=\"color: var(--mj-text-muted); font-weight: 400; font-size: 0.85em;\">\n ({{ getRuntimeConfigSummary() }})\n </span>\n </span>\n </ng-template>\n\n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (!runtimeConfig) {\n <mj-alert Variant=\"error\">\n <strong>Missing or malformed RuntimeActionConfiguration.</strong>\n This Runtime action cannot run until a valid configuration is supplied. Approval should not be granted in this state.\n </mj-alert>\n } @else {\n @if (getWildcardFlags().any) {\n <mj-alert Variant=\"warning\" Title=\"Wildcard permissions enabled\">\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em;\">\n This runtime action has one or more wildcard flags set that bypass the specific allowlists below:\n @if (getWildcardFlags().entity) { <strong>allowAnyEntity</strong> }\n @if (getWildcardFlags().action) { <strong>allowAnyAction</strong> }\n @if (getWildcardFlags().agent) { <strong>allowAnyAgent</strong> }\n . Approving grants this action unrestricted access to that namespace on behalf of any user who invokes it. Only approve if the action is framework-authored or you have personally reviewed every place it touches those resources.\n </div>\n </mj-alert>\n }\n <!-- Declared permissions — the security contract an approver is blessing -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; margin-bottom: 20px;\">\n <!-- Entities -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-database\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Entities ({{ getAllowedEntities().length }})\n </div>\n @if (getAllowedEntities().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (e of getAllowedEntities(); track e.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ e.name }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Actions -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-bolt\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Actions ({{ getAllowedActions().length }})\n </div>\n @if (getAllowedActions().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (a of getAllowedActions(); track a.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ a.name }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Agents -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 12px; background: var(--mj-bg-surface-card);\">\n <div style=\"font-weight: 600; margin-bottom: 8px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-robot\" style=\"margin-right: 6px; color: var(--mj-brand-primary);\"></i>\n Allowed Agents ({{ getAllowedAgents().length }})\n </div>\n @if (getAllowedAgents().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None requested</div>\n } @else {\n <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n @for (g of getAllowedAgents(); track g.id) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 4px 8px; border-radius: 4px; font-size: 0.9em; color: var(--mj-text-primary);\">\n {{ g.name }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Limits + libraries -->\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px;\">\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-gauge-high\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n Resource Limits\n </div>\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em;\">\n <div>Max memory: {{ getRuntimeLimits().maxMemoryMB }} MB</div>\n <div>Max bridge calls: {{ getRuntimeLimits().maxBridgeCalls }}</div>\n @if (record.MaxExecutionTimeMS) {\n <div>Max execution time: {{ record.MaxExecutionTimeMS }} ms</div>\n }\n </div>\n </div>\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-book\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n Additional Libraries\n </div>\n @if (getRequestedLibraries().length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">None (only default set: lodash, date-fns, uuid, validator)</div>\n } @else {\n <div style=\"display: flex; flex-wrap: wrap; gap: 4px;\">\n @for (lib of getRequestedLibraries(); track lib.name) {\n <span style=\"background: var(--mj-bg-surface-sunken); padding: 2px 8px; border-radius: 10px; font-size: 0.85em;\">\n {{ lib.name }}@if (lib.version) {<span style=\"color: var(--mj-text-muted);\"> @{{ lib.version }}</span>}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Code payload -->\n <div>\n <div style=\"font-weight: 600; margin-bottom: 6px; color: var(--mj-text-primary);\">\n <i class=\"fa-solid fa-code\" style=\"margin-right: 6px; color: var(--mj-text-muted);\"></i>\n JavaScript Payload\n </div>\n <pre style=\"background: var(--mj-bg-surface-sunken); color: var(--mj-text-primary); padding: 12px; border-radius: 4px; overflow-x: auto; max-height: 400px; font-family: 'SF Mono', Monaco, Consolas, monospace; font-size: 0.85em; margin: 0;\"><code>{{ record.Code }}</code></pre>\n </div>\n\n <!-- Approval actions (Runtime-specific labels) -->\n @if (EditMode && record.CodeApprovalStatus === 'Pending') {\n <mj-alert Variant=\"warning\" Title=\"Approval required before this Runtime action can execute.\" class=\"approval-required-alert\">\n <div style=\"color: var(--mj-text-secondary); font-size: 0.9em; margin-bottom: 12px;\">\n Approving grants this action the permissions listed above on behalf of any user who invokes it. Review the code and permissions carefully before approving.\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button class=\"mj-button mj-button-primary\" (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button class=\"mj-button\" (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-ban\"></i> Reject\n </button>\n </div>\n </mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Result Codes Section -->\n <mj-accordion-panel SectionKey=\"result-codes\" SectionTitle=\"Result Codes\" SectionIcon=\"fa-solid fa-flag-checkered\" [SectionCount]=\"ResultCodes.length\"\n [Expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: var(--mj-text-muted);\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-flag-checkered\"\n Title=\"No result codes defined\"\n [Message]=\"EditMode && record.IsSaved ? 'Add result codes to define possible outcomes' : ''\" />\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"execution\" SectionTitle=\"Execution &amp; Monitoring\" SectionIcon=\"fa-solid fa-chart-line\"\n [Expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></i>\n Execution &amp; Monitoring\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-chart-line\"\n Title=\"No executions yet\" />\n } @else {\n <div class=\"execution-stats-row\">\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ formatDuration(executionStats.avgDuration) }}</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-check-circle\" [style.color]=\"getSuccessRateColor()\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Success Rate</div>\n <div class=\"stat-value\" [style.color]=\"getSuccessRateColor()\" style=\"font-weight: 600;\">{{ executionStats.successRate.toFixed(0) }}%</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-play-circle\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"related\" SectionTitle=\"Related Configuration\" SectionIcon=\"fa-solid fa-cogs\"\n [Expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div class=\"phone-flush-x\" style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-book\"\n Title=\"No libraries configured\" />\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </mj-accordion-sections>\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Action Test Harness Dialog -->\n<mj-action-test-harness-dialog\n [Action]=\"record\"\n [ActionParams]=\"actionParams\"\n [IsOpen]=\"showTestHarness\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\">\n</mj-action-test-harness-dialog>"]}