@memberjunction/ng-core-entity-forms 5.49.0 → 5.50.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.
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +13 -7
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +33 -51
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +72 -74
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +71 -27
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAISkillSearchScope/mjaiskillsearchscope.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillSearchScope/mjaiskillsearchscope.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillSearchScope/mjaiskillsearchscope.form.component.js +68 -0
- package/dist/lib/generated/Entities/MJAISkillSearchScope/mjaiskillsearchscope.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +90 -40
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js +153 -0
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +38 -34
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +24 -20
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationCompactionRun/mjconversationcompactionrun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationCompactionRun/mjconversationcompactionrun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationCompactionRun/mjconversationcompactionrun.form.component.js +64 -0
- package/dist/lib/generated/Entities/MJConversationCompactionRun/mjconversationcompactionrun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +79 -63
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.js +16 -4
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js +30 -12
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.js +16 -4
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +333 -325
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +169 -130
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +39 -39
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-agent-run.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAGhF,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAInG,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mEAAmE,CAAC;AAE9G,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAyB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;;AAGnE,qBAOa,iCAAkC,SAAQ,yBAA0B,YAAW,MAAM,EAAE,SAAS;IACpG,MAAM,EAAG,0BAA0B,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAAuB;IAMvC,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,OAAO,CAAC,eAAe,CAAS;IAGhC,SAAS,SAAc;IACvB,oBAAoB,EAAE,YAAY,GAAG,IAAI,CAAQ;IACjD,iBAAiB,UAAS;IAC1B,OAAO,UAAS;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,eAAe,UAAS;IACxB,mBAAmB,UAAS;IAE5B,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAG7C,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAG/C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,4BAA4B,CAAuB;IAC3D,OAAO,CAAC,yBAAyB,CAAuB;IACxD,OAAO,CAAC,iBAAiB,CAAuB;IAGhD,OAAO,CAAC,mBAAmB,CAAS;IAEI,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAC/C,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;IAG3F,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,UAAU,CAA8B;IAGzC,UAAU,uBAA8B;IAEzC,QAAQ;IAqBd,WAAW;IAWX,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,wBAAwB;IAKhC;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"ai-agent-run.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -852,17 +852,23 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
|
|
|
852
852
|
}
|
|
853
853
|
return;
|
|
854
854
|
}
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
entityName === 'MJ: Action Execution Logs') {
|
|
858
|
-
// A child row was written for SOME run — only react if it belongs
|
|
859
|
-
// to ours. AgentRunID is the FK on steps; for prompt runs and
|
|
860
|
-
// action logs we just refresh if any field matches (cheap and the
|
|
861
|
-
// data helper handles dedupe).
|
|
855
|
+
// Steps still carry AgentRunID, so a step write can be correlated exactly to this run.
|
|
856
|
+
if (entityName === 'MJ: AI Agent Run Steps') {
|
|
862
857
|
const childAgentRunId = this.resolveEventField(evt, 'AgentRunID');
|
|
863
858
|
if (childAgentRunId && UUIDsEqual(childAgentRunId, runId)) {
|
|
864
859
|
this.refreshRunDataDebounced();
|
|
865
860
|
}
|
|
861
|
+
return;
|
|
862
|
+
}
|
|
863
|
+
// Prompt runs and action logs expose no AgentRunID to correlate on: AIPromptRun.AgentRunID was
|
|
864
|
+
// dropped in v5.50 (Break_CodeGen_Cycle_Remove_PromptRun_AgentRunID) and ActionExecutionLog never
|
|
865
|
+
// had one. Correlating on it made this branch dead for action logs from the start, and for prompt
|
|
866
|
+
// runs from v5.50 — the form simply stopped live-refreshing. Refresh unconditionally instead,
|
|
867
|
+
// which is what the original comment described: the reload is debounced and re-reads only THIS
|
|
868
|
+
// run, and the subscription is dropped once the run leaves 'Running', so a foreign write costs at
|
|
869
|
+
// most one collapsed reload while a run is open on screen.
|
|
870
|
+
if (entityName === 'MJ: AI Prompt Runs' || entityName === 'MJ: Action Execution Logs') {
|
|
871
|
+
this.refreshRunDataDebounced();
|
|
866
872
|
}
|
|
867
873
|
}
|
|
868
874
|
resolveEventID(evt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { BaseEntity, BaseEntityEvent, CompositeKey, Metadata } from '@memberjunction/core';\nimport { MJAIAgentRunEntityExtended, MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJGlobal, MJEvent, MJEventType, RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { TimelineItem, AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunFormComponent } from '../../generated/Entities/MJAIAgentRun/mjaiagentrun.form.component';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';\nimport { AIAgentRunCostService, AgentRunCostMetrics } from './ai-agent-run-cost.service';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs') \n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-form',\n templateUrl: './ai-agent-run.component.html',\n styleUrls: ['./ai-agent-run.component.css']\n})\nexport class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent implements OnInit, OnDestroy {\n public record!: MJAIAgentRunEntityExtended;\n \n private destroy$ = new Subject<void>();\n\n // MJGlobal BaseEntity event subscription — fires on both local Save()\n // and server-side remote-invalidate events. While the run is Running,\n // this is how we hear about new steps and status changes without\n // polling the DB on a timer. Only attached when Status === 'Running'.\n private entityEventSubscription: Subscription | null = null;\n private refreshInFlight = false;\n\n // UI state\n activeTab = 'timeline';\n selectedTimelineItem: TimelineItem | null = null;\n jsonPanelExpanded = false;\n loading = false;\n error: string | null = null;\n analyticsLoaded = false;\n visualizationLoaded = false;\n \n agent: MJAIAgentEntityExtended | null = null;\n \n // Cost metrics using shared service\n costMetrics: AgentRunCostMetrics | null = null;\n \n // Cached parsed results to prevent redundant JSON parsing\n private _cachedParsedResult: string | null = null;\n private _cachedParsedStartingPayload: string | null = null;\n private _cachedParsedFinalPayload: string | null = null;\n private _cachedParsedData: string | null = null;\n \n // Simple parsing state - true when all parsing is complete\n private _allParsingComplete = false;\n \n @ViewChild(AIAgentRunTimelineComponent) timelineComponent?: AIAgentRunTimelineComponent;\n @ViewChild(AIAgentRunAnalyticsComponent) analyticsComponent?: AIAgentRunAnalyticsComponent;\n\n // Field injections\n private navigationService = inject(NavigationService);\n private costService = inject(AIAgentRunCostService);\n private appManager = inject(ApplicationManager);\n\n // Instance of data helper per component\n public dataHelper = new AIAgentRunDataHelper();\n \n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record && this.record.ID) {\n await this.dataHelper.loadAgentRunData(this.record.ID);\n await this.loadAgent();\n await this.loadCostMetrics();\n\n // Parse all JSON fields on form load for instant access later\n this.parseAllFields();\n\n // If the run is in progress, subscribe to BaseEntity events so we\n // pick up new steps / status changes the moment AgentRunner saves\n // them — no 30s polling timer. Same pattern used by the Form\n // Builder cockpit. See `handleEntityEvent` below for filtering.\n if (this.record.Status === 'Running') {\n this.subscribeToRunEvents();\n }\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n this.clearParsedCache();\n this.dataHelper.clearData();\n this.costMetrics = null;\n this.agent = null;\n }\n\n private subscribeToRunEvents(): void {\n if (this.entityEventSubscription) return;\n this.entityEventSubscription = MJGlobal.Instance.GetEventListener(false)\n .subscribe(mjEvent => this.handleEntityEvent(mjEvent));\n }\n\n private unsubscribeFromRunEvents(): void {\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n }\n\n /**\n * Filter the global BaseEntity event firehose down to saves on the\n * current Agent Run row, its Steps, or its Prompt Runs — and only when\n * AgentRunID matches `this.record.ID`. Local `save` events come from\n * the in-process AgentRunner (dev/same-tab case, which is the primary\n * use case here); `remote-invalidate` covers writes from a separate\n * server process if GraphQL cache-invalidation is wired up.\n */\n private handleEntityEvent(mjEvent: MJEvent): void {\n if (mjEvent.event !== MJEventType.ComponentEvent) return;\n if (mjEvent.eventCode !== BaseEntity.BaseEventCode) return;\n const evt = mjEvent.args as BaseEntityEvent | undefined;\n if (!evt) return;\n if (evt.type !== 'save' && evt.type !== 'remote-invalidate') return;\n\n const entityName = evt.entityName ?? evt.baseEntity?.EntityInfo?.Name;\n if (!entityName) return;\n\n const runId = this.record?.ID;\n if (!runId) return;\n\n if (entityName === 'MJ: AI Agent Runs') {\n // Status change on THIS run row.\n const savedID = this.resolveEventID(evt);\n if (savedID && UUIDsEqual(savedID, runId)) {\n this.refreshData();\n // If the run completed, drop the subscription — no further\n // writes are expected and we don't want to hold the listener.\n const newStatus = this.resolveEventField<string>(evt, 'Status');\n if (newStatus && newStatus !== 'Running') {\n this.unsubscribeFromRunEvents();\n }\n }\n return;\n }\n\n if (entityName === 'MJ: AI Agent Run Steps' ||\n entityName === 'MJ: AI Prompt Runs' ||\n entityName === 'MJ: Action Execution Logs') {\n // A child row was written for SOME run — only react if it belongs\n // to ours. AgentRunID is the FK on steps; for prompt runs and\n // action logs we just refresh if any field matches (cheap and the\n // data helper handles dedupe).\n const childAgentRunId = this.resolveEventField<string>(evt, 'AgentRunID');\n if (childAgentRunId && UUIDsEqual(childAgentRunId, runId)) {\n this.refreshRunDataDebounced();\n }\n }\n }\n\n private resolveEventID(evt: BaseEntityEvent): string | null {\n if (evt.baseEntity) {\n return evt.baseEntity.PrimaryKey?.ToConcatenatedString() ?? null;\n }\n const payload = evt.payload as { primaryKeyValues?: string | null; recordData?: string | null } | undefined;\n if (!payload) return null;\n try {\n if (payload.primaryKeyValues) {\n const pk = JSON.parse(payload.primaryKeyValues) as Record<string, unknown> | unknown[];\n if (Array.isArray(pk)) {\n const idPair = pk.find(p => (p as { FieldName?: string }).FieldName === 'ID') as { Value?: unknown } | undefined;\n if (idPair?.Value != null) return String(idPair.Value);\n } else if (pk && typeof pk === 'object' && 'ID' in pk) {\n const v = (pk as { ID?: unknown }).ID;\n if (v != null) return String(v);\n }\n }\n } catch {\n // bad JSON — fall through to recordData\n }\n try {\n if (payload.recordData) {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n if (typeof row?.ID === 'string') return row.ID;\n }\n } catch {\n // ignore\n }\n return null;\n }\n\n private resolveEventField<T>(evt: BaseEntityEvent, fieldName: string): T | null {\n if (evt.baseEntity) {\n const val = evt.baseEntity.Get?.(fieldName) as T | undefined;\n return val ?? null;\n }\n const payload = evt.payload as { recordData?: string | null } | undefined;\n if (!payload?.recordData) return null;\n try {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n const v = row?.[fieldName];\n return (v ?? null) as T | null;\n } catch {\n return null;\n }\n }\n\n /**\n * Collapse rapid bursts of step/prompt/action events into a single\n * reload — AgentRunner often saves several rows in quick succession.\n */\n private refreshRunDataDebounced(): void {\n if (this.refreshInFlight) return;\n this.refreshInFlight = true;\n queueMicrotask(() => {\n this.refreshInFlight = false;\n if (!this.record?.ID) return;\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n });\n }\n \n private async loadAgent() {\n if (!this.record?.AgentID) return;\n \n try {\n const md = this.ProviderToUse;\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n if (agent && await agent.Load(this.record.AgentID)) {\n this.agent = agent;\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading agent:', error);\n }\n }\n\n private async loadCostMetrics() {\n if (!this.record?.ID) return;\n \n try {\n this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading cost metrics:', error);\n this.costMetrics = {\n totalCost: 0,\n totalPrompts: 0,\n totalTokensInput: 0,\n totalTokensOutput: 0,\n isLoading: false,\n error: 'Failed to load cost data'\n };\n }\n }\n \n changeTab(tab: string) {\n this.activeTab = tab;\n \n // Lazy load the Visualization (playable + static flow) view on first access\n if (tab === 'visualization' && !this.visualizationLoaded) {\n this.visualizationLoaded = true;\n this.cdr.markForCheck();\n }\n \n // Lazy load analytics when the tab is first accessed\n if (tab === 'analytics' && !this.analyticsLoaded) {\n this.analyticsLoaded = true;\n this.cdr.markForCheck();\n }\n }\n \n \n calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = end.getTime() - start.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n selectTimelineItem(item: TimelineItem) {\n this.selectedTimelineItem = item;\n this.jsonPanelExpanded = true;\n this.cdr.markForCheck();\n }\n \n closeJsonPanel() {\n this.selectedTimelineItem = null;\n this.cdr.markForCheck();\n }\n \n navigateToSubRun(runId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(runId));\n }\n\n navigateToParentRun() {\n if (this.record.ParentRunID) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(this.record.ParentRunID));\n }\n }\n \n navigateToActionLog(logId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: Action Execution Logs\", CompositeKey.FromID(logId));\n }\n \n openEntityRecord(entityName: string, recordId: string | null) {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n \n navigateToEntityRecord(event: { entityName: string; recordId: string }) {\n SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));\n }\n\n /**\n * Navigate to the conversation in the Chat application\n */\n navigateToConversation() {\n if (!this.record?.ConversationID) return;\n\n // Find the Chat app\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n console.warn('Chat application not found');\n return;\n }\n\n // Navigate to the Conversations nav item with the conversationId parameter\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n { conversationId: this.record.ConversationID },\n chatApp.ID\n );\n }\n \n refreshData() {\n // Reload the agent run record to get latest status\n if (this.record?.ID) {\n // Clear parsed cache when refreshing data\n this.clearParsedCache();\n \n // No panel states to reset in simplified approach\n \n this.record.Load(this.record.ID).then(() => {\n // Clear cost cache and reload\n this.costService.clearCache(this.record.ID);\n this.loadCostMetrics();\n \n // Reload data through helper - this will update all components (force reload for refresh)\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n \n // Trigger analytics refresh\n if (this.analyticsComponent) {\n this.analyticsComponent.loadData();\n }\n });\n }\n }\n \n \n getStatusIcon(status: string): string {\n const iconMap: Record<string, string> = {\n 'Running': 'fa-circle-notch fa-spin',\n 'Completed': 'fa-check-circle',\n 'Failed': 'fa-times-circle',\n 'Cancelled': 'fa-ban',\n 'Paused': 'fa-pause-circle'\n };\n return iconMap[status] || 'fa-question-circle';\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n \n /**\n * Get the Result field with recursive JSON parsing applied\n */\n get parsedResult(): string {\n if (!this.record?.Result) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedResult !== null) {\n return this._cachedParsedResult;\n }\n \n \n try {\n // First, check if Result is a JSON string that needs to be parsed\n let resultData = this.record.Result;\n try {\n // If Result is a JSON string, parse it first\n resultData = JSON.parse(this.record.Result);\n } catch {\n // If it's not valid JSON, use it as-is\n resultData = this.record.Result;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(resultData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedResult = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Result;\n this._cachedParsedResult = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get the Starting Payload field with recursive JSON parsing applied\n */\n get parsedStartingPayload(): string {\n if (!this.record?.StartingPayload) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedStartingPayload !== null) {\n return this._cachedParsedStartingPayload;\n }\n \n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedStartingPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.StartingPayload;\n this._cachedParsedStartingPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Final Payload (state) field with recursive JSON parsing applied\n */\n get parsedFinalPayload(): string {\n if (!this.record?.FinalPayload) return '';\n \n // Return cached result if available\n if (this._cachedParsedFinalPayload !== null) {\n return this._cachedParsedFinalPayload;\n }\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedFinalPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.FinalPayload;\n this._cachedParsedFinalPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Data field with recursive JSON parsing applied\n */\n get parsedData(): string {\n if (!this.record?.Data) return '';\n \n // Return cached result if available\n if (this._cachedParsedData !== null) {\n return this._cachedParsedData;\n }\n \n try {\n // First, check if Data is a JSON string that needs to be parsed\n let data = this.record.Data;\n try {\n // If Data is a JSON string, parse it first\n data = JSON.parse(this.record.Data);\n } catch {\n // If it's not valid JSON, use it as-is\n data = this.record.Data;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(data, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedData = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Data;\n this._cachedParsedData = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get parsed Starting Payload as an object for deep diff\n */\n get startingPayloadObject(): any {\n if (!this.record?.StartingPayload) return null;\n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed Final Payload as an object for deep diff\n */\n get finalPayloadObject(): any {\n if (!this.record?.FinalPayload) return null;\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Clear all cached parsed results\n */\n private clearParsedCache(): void {\n this._cachedParsedResult = null;\n this._cachedParsedStartingPayload = null;\n this._cachedParsedFinalPayload = null;\n this._cachedParsedData = null;\n this._allParsingComplete = false;\n }\n \n /**\n * Parse all JSON fields at once and cache results\n */\n private parseAllFields(): void {\n try {\n let parsedCount = 0;\n \n // Parse all fields that exist\n if (this.record?.Result) {\n this.parsedResult; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.StartingPayload) {\n this.parsedStartingPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.FinalPayload) {\n this.parsedFinalPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.Data) {\n this.parsedData; // Triggers parsing and caching\n parsedCount++;\n }\n \n this._allParsingComplete = true;\n \n } catch (error) {\n console.error('Error during JSON parsing:', error);\n }\n }\n \n /**\n * Check if all parsing is complete - used by template\n */\n get isParsingComplete(): boolean {\n return this._allParsingComplete;\n }\n\n /**\n * Check if we have both payloads to show diff\n */\n get showPayloadDiff(): boolean {\n return !!(this.record?.StartingPayload && this.record?.FinalPayload);\n }\n\n /**\n * Check if selected timeline item is a step with payload changes\n */\n get showStepPayloadDiff(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (stepData && (stepData.PayloadAtStart?.trim().length > 0 \n || stepData.PayloadAtEnd?.trim().length > 0)) {\n return stepData.PayloadAtStart !== stepData.PayloadAtEnd;\n }\n else {\n return false;\n }\n }\n\n /**\n * Get parsed PayloadAtStart for the selected step\n */\n get stepPayloadAtStartObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtStart) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtStart;\n try {\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed PayloadAtEnd for the selected step\n */\n get stepPayloadAtEndObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtEnd) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtEnd;\n try {\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n}\n","<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n @if (record.PlanMode) {\n <div class=\"plan-mode-badge\" title=\"This run executed in Plan Mode — the agent presented a plan for human approval before executing actions or sub-agents\">\n <i class=\"fas fa-clipboard-check\"></i>\n Plan Mode\n </div>\n }\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab (animated flow views + static flowchart) -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-flow\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [agentName]=\"agent?.Name || null\"\n [runStatus]=\"record.Status || ''\"\n [agentIconClass]=\"agent?.IconClass || null\"\n [agentLogoUrl]=\"agent?.LogoURL || null\">\n </mj-ai-agent-run-flow>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage & Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { BaseEntity, BaseEntityEvent, CompositeKey, Metadata } from '@memberjunction/core';\nimport { MJAIAgentRunEntityExtended, MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJGlobal, MJEvent, MJEventType, RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { TimelineItem, AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunFormComponent } from '../../generated/Entities/MJAIAgentRun/mjaiagentrun.form.component';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';\nimport { AIAgentRunCostService, AgentRunCostMetrics } from './ai-agent-run-cost.service';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs') \n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-form',\n templateUrl: './ai-agent-run.component.html',\n styleUrls: ['./ai-agent-run.component.css']\n})\nexport class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent implements OnInit, OnDestroy {\n public record!: MJAIAgentRunEntityExtended;\n \n private destroy$ = new Subject<void>();\n\n // MJGlobal BaseEntity event subscription — fires on both local Save()\n // and server-side remote-invalidate events. While the run is Running,\n // this is how we hear about new steps and status changes without\n // polling the DB on a timer. Only attached when Status === 'Running'.\n private entityEventSubscription: Subscription | null = null;\n private refreshInFlight = false;\n\n // UI state\n activeTab = 'timeline';\n selectedTimelineItem: TimelineItem | null = null;\n jsonPanelExpanded = false;\n loading = false;\n error: string | null = null;\n analyticsLoaded = false;\n visualizationLoaded = false;\n \n agent: MJAIAgentEntityExtended | null = null;\n \n // Cost metrics using shared service\n costMetrics: AgentRunCostMetrics | null = null;\n \n // Cached parsed results to prevent redundant JSON parsing\n private _cachedParsedResult: string | null = null;\n private _cachedParsedStartingPayload: string | null = null;\n private _cachedParsedFinalPayload: string | null = null;\n private _cachedParsedData: string | null = null;\n \n // Simple parsing state - true when all parsing is complete\n private _allParsingComplete = false;\n \n @ViewChild(AIAgentRunTimelineComponent) timelineComponent?: AIAgentRunTimelineComponent;\n @ViewChild(AIAgentRunAnalyticsComponent) analyticsComponent?: AIAgentRunAnalyticsComponent;\n\n // Field injections\n private navigationService = inject(NavigationService);\n private costService = inject(AIAgentRunCostService);\n private appManager = inject(ApplicationManager);\n\n // Instance of data helper per component\n public dataHelper = new AIAgentRunDataHelper();\n \n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record && this.record.ID) {\n await this.dataHelper.loadAgentRunData(this.record.ID);\n await this.loadAgent();\n await this.loadCostMetrics();\n\n // Parse all JSON fields on form load for instant access later\n this.parseAllFields();\n\n // If the run is in progress, subscribe to BaseEntity events so we\n // pick up new steps / status changes the moment AgentRunner saves\n // them — no 30s polling timer. Same pattern used by the Form\n // Builder cockpit. See `handleEntityEvent` below for filtering.\n if (this.record.Status === 'Running') {\n this.subscribeToRunEvents();\n }\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n this.clearParsedCache();\n this.dataHelper.clearData();\n this.costMetrics = null;\n this.agent = null;\n }\n\n private subscribeToRunEvents(): void {\n if (this.entityEventSubscription) return;\n this.entityEventSubscription = MJGlobal.Instance.GetEventListener(false)\n .subscribe(mjEvent => this.handleEntityEvent(mjEvent));\n }\n\n private unsubscribeFromRunEvents(): void {\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n }\n\n /**\n * Filter the global BaseEntity event firehose down to saves on the\n * current Agent Run row, its Steps, or its Prompt Runs — and only when\n * AgentRunID matches `this.record.ID`. Local `save` events come from\n * the in-process AgentRunner (dev/same-tab case, which is the primary\n * use case here); `remote-invalidate` covers writes from a separate\n * server process if GraphQL cache-invalidation is wired up.\n */\n private handleEntityEvent(mjEvent: MJEvent): void {\n if (mjEvent.event !== MJEventType.ComponentEvent) return;\n if (mjEvent.eventCode !== BaseEntity.BaseEventCode) return;\n const evt = mjEvent.args as BaseEntityEvent | undefined;\n if (!evt) return;\n if (evt.type !== 'save' && evt.type !== 'remote-invalidate') return;\n\n const entityName = evt.entityName ?? evt.baseEntity?.EntityInfo?.Name;\n if (!entityName) return;\n\n const runId = this.record?.ID;\n if (!runId) return;\n\n if (entityName === 'MJ: AI Agent Runs') {\n // Status change on THIS run row.\n const savedID = this.resolveEventID(evt);\n if (savedID && UUIDsEqual(savedID, runId)) {\n this.refreshData();\n // If the run completed, drop the subscription — no further\n // writes are expected and we don't want to hold the listener.\n const newStatus = this.resolveEventField<string>(evt, 'Status');\n if (newStatus && newStatus !== 'Running') {\n this.unsubscribeFromRunEvents();\n }\n }\n return;\n }\n\n // Steps still carry AgentRunID, so a step write can be correlated exactly to this run.\n if (entityName === 'MJ: AI Agent Run Steps') {\n const childAgentRunId = this.resolveEventField<string>(evt, 'AgentRunID');\n if (childAgentRunId && UUIDsEqual(childAgentRunId, runId)) {\n this.refreshRunDataDebounced();\n }\n return;\n }\n\n // Prompt runs and action logs expose no AgentRunID to correlate on: AIPromptRun.AgentRunID was\n // dropped in v5.50 (Break_CodeGen_Cycle_Remove_PromptRun_AgentRunID) and ActionExecutionLog never\n // had one. Correlating on it made this branch dead for action logs from the start, and for prompt\n // runs from v5.50 — the form simply stopped live-refreshing. Refresh unconditionally instead,\n // which is what the original comment described: the reload is debounced and re-reads only THIS\n // run, and the subscription is dropped once the run leaves 'Running', so a foreign write costs at\n // most one collapsed reload while a run is open on screen.\n if (entityName === 'MJ: AI Prompt Runs' || entityName === 'MJ: Action Execution Logs') {\n this.refreshRunDataDebounced();\n }\n }\n\n private resolveEventID(evt: BaseEntityEvent): string | null {\n if (evt.baseEntity) {\n return evt.baseEntity.PrimaryKey?.ToConcatenatedString() ?? null;\n }\n const payload = evt.payload as { primaryKeyValues?: string | null; recordData?: string | null } | undefined;\n if (!payload) return null;\n try {\n if (payload.primaryKeyValues) {\n const pk = JSON.parse(payload.primaryKeyValues) as Record<string, unknown> | unknown[];\n if (Array.isArray(pk)) {\n const idPair = pk.find(p => (p as { FieldName?: string }).FieldName === 'ID') as { Value?: unknown } | undefined;\n if (idPair?.Value != null) return String(idPair.Value);\n } else if (pk && typeof pk === 'object' && 'ID' in pk) {\n const v = (pk as { ID?: unknown }).ID;\n if (v != null) return String(v);\n }\n }\n } catch {\n // bad JSON — fall through to recordData\n }\n try {\n if (payload.recordData) {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n if (typeof row?.ID === 'string') return row.ID;\n }\n } catch {\n // ignore\n }\n return null;\n }\n\n private resolveEventField<T>(evt: BaseEntityEvent, fieldName: string): T | null {\n if (evt.baseEntity) {\n const val = evt.baseEntity.Get?.(fieldName) as T | undefined;\n return val ?? null;\n }\n const payload = evt.payload as { recordData?: string | null } | undefined;\n if (!payload?.recordData) return null;\n try {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n const v = row?.[fieldName];\n return (v ?? null) as T | null;\n } catch {\n return null;\n }\n }\n\n /**\n * Collapse rapid bursts of step/prompt/action events into a single\n * reload — AgentRunner often saves several rows in quick succession.\n */\n private refreshRunDataDebounced(): void {\n if (this.refreshInFlight) return;\n this.refreshInFlight = true;\n queueMicrotask(() => {\n this.refreshInFlight = false;\n if (!this.record?.ID) return;\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n });\n }\n \n private async loadAgent() {\n if (!this.record?.AgentID) return;\n \n try {\n const md = this.ProviderToUse;\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n if (agent && await agent.Load(this.record.AgentID)) {\n this.agent = agent;\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading agent:', error);\n }\n }\n\n private async loadCostMetrics() {\n if (!this.record?.ID) return;\n \n try {\n this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading cost metrics:', error);\n this.costMetrics = {\n totalCost: 0,\n totalPrompts: 0,\n totalTokensInput: 0,\n totalTokensOutput: 0,\n isLoading: false,\n error: 'Failed to load cost data'\n };\n }\n }\n \n changeTab(tab: string) {\n this.activeTab = tab;\n \n // Lazy load the Visualization (playable + static flow) view on first access\n if (tab === 'visualization' && !this.visualizationLoaded) {\n this.visualizationLoaded = true;\n this.cdr.markForCheck();\n }\n \n // Lazy load analytics when the tab is first accessed\n if (tab === 'analytics' && !this.analyticsLoaded) {\n this.analyticsLoaded = true;\n this.cdr.markForCheck();\n }\n }\n \n \n calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = end.getTime() - start.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n selectTimelineItem(item: TimelineItem) {\n this.selectedTimelineItem = item;\n this.jsonPanelExpanded = true;\n this.cdr.markForCheck();\n }\n \n closeJsonPanel() {\n this.selectedTimelineItem = null;\n this.cdr.markForCheck();\n }\n \n navigateToSubRun(runId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(runId));\n }\n\n navigateToParentRun() {\n if (this.record.ParentRunID) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(this.record.ParentRunID));\n }\n }\n \n navigateToActionLog(logId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: Action Execution Logs\", CompositeKey.FromID(logId));\n }\n \n openEntityRecord(entityName: string, recordId: string | null) {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n \n navigateToEntityRecord(event: { entityName: string; recordId: string }) {\n SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));\n }\n\n /**\n * Navigate to the conversation in the Chat application\n */\n navigateToConversation() {\n if (!this.record?.ConversationID) return;\n\n // Find the Chat app\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n console.warn('Chat application not found');\n return;\n }\n\n // Navigate to the Conversations nav item with the conversationId parameter\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n { conversationId: this.record.ConversationID },\n chatApp.ID\n );\n }\n \n refreshData() {\n // Reload the agent run record to get latest status\n if (this.record?.ID) {\n // Clear parsed cache when refreshing data\n this.clearParsedCache();\n \n // No panel states to reset in simplified approach\n \n this.record.Load(this.record.ID).then(() => {\n // Clear cost cache and reload\n this.costService.clearCache(this.record.ID);\n this.loadCostMetrics();\n \n // Reload data through helper - this will update all components (force reload for refresh)\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n \n // Trigger analytics refresh\n if (this.analyticsComponent) {\n this.analyticsComponent.loadData();\n }\n });\n }\n }\n \n \n getStatusIcon(status: string): string {\n const iconMap: Record<string, string> = {\n 'Running': 'fa-circle-notch fa-spin',\n 'Completed': 'fa-check-circle',\n 'Failed': 'fa-times-circle',\n 'Cancelled': 'fa-ban',\n 'Paused': 'fa-pause-circle'\n };\n return iconMap[status] || 'fa-question-circle';\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n \n /**\n * Get the Result field with recursive JSON parsing applied\n */\n get parsedResult(): string {\n if (!this.record?.Result) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedResult !== null) {\n return this._cachedParsedResult;\n }\n \n \n try {\n // First, check if Result is a JSON string that needs to be parsed\n let resultData = this.record.Result;\n try {\n // If Result is a JSON string, parse it first\n resultData = JSON.parse(this.record.Result);\n } catch {\n // If it's not valid JSON, use it as-is\n resultData = this.record.Result;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(resultData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedResult = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Result;\n this._cachedParsedResult = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get the Starting Payload field with recursive JSON parsing applied\n */\n get parsedStartingPayload(): string {\n if (!this.record?.StartingPayload) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedStartingPayload !== null) {\n return this._cachedParsedStartingPayload;\n }\n \n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedStartingPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.StartingPayload;\n this._cachedParsedStartingPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Final Payload (state) field with recursive JSON parsing applied\n */\n get parsedFinalPayload(): string {\n if (!this.record?.FinalPayload) return '';\n \n // Return cached result if available\n if (this._cachedParsedFinalPayload !== null) {\n return this._cachedParsedFinalPayload;\n }\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedFinalPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.FinalPayload;\n this._cachedParsedFinalPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Data field with recursive JSON parsing applied\n */\n get parsedData(): string {\n if (!this.record?.Data) return '';\n \n // Return cached result if available\n if (this._cachedParsedData !== null) {\n return this._cachedParsedData;\n }\n \n try {\n // First, check if Data is a JSON string that needs to be parsed\n let data = this.record.Data;\n try {\n // If Data is a JSON string, parse it first\n data = JSON.parse(this.record.Data);\n } catch {\n // If it's not valid JSON, use it as-is\n data = this.record.Data;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(data, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedData = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Data;\n this._cachedParsedData = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get parsed Starting Payload as an object for deep diff\n */\n get startingPayloadObject(): any {\n if (!this.record?.StartingPayload) return null;\n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed Final Payload as an object for deep diff\n */\n get finalPayloadObject(): any {\n if (!this.record?.FinalPayload) return null;\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Clear all cached parsed results\n */\n private clearParsedCache(): void {\n this._cachedParsedResult = null;\n this._cachedParsedStartingPayload = null;\n this._cachedParsedFinalPayload = null;\n this._cachedParsedData = null;\n this._allParsingComplete = false;\n }\n \n /**\n * Parse all JSON fields at once and cache results\n */\n private parseAllFields(): void {\n try {\n let parsedCount = 0;\n \n // Parse all fields that exist\n if (this.record?.Result) {\n this.parsedResult; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.StartingPayload) {\n this.parsedStartingPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.FinalPayload) {\n this.parsedFinalPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.Data) {\n this.parsedData; // Triggers parsing and caching\n parsedCount++;\n }\n \n this._allParsingComplete = true;\n \n } catch (error) {\n console.error('Error during JSON parsing:', error);\n }\n }\n \n /**\n * Check if all parsing is complete - used by template\n */\n get isParsingComplete(): boolean {\n return this._allParsingComplete;\n }\n\n /**\n * Check if we have both payloads to show diff\n */\n get showPayloadDiff(): boolean {\n return !!(this.record?.StartingPayload && this.record?.FinalPayload);\n }\n\n /**\n * Check if selected timeline item is a step with payload changes\n */\n get showStepPayloadDiff(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (stepData && (stepData.PayloadAtStart?.trim().length > 0 \n || stepData.PayloadAtEnd?.trim().length > 0)) {\n return stepData.PayloadAtStart !== stepData.PayloadAtEnd;\n }\n else {\n return false;\n }\n }\n\n /**\n * Get parsed PayloadAtStart for the selected step\n */\n get stepPayloadAtStartObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtStart) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtStart;\n try {\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed PayloadAtEnd for the selected step\n */\n get stepPayloadAtEndObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtEnd) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtEnd;\n try {\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n}\n","<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n @if (record.PlanMode) {\n <div class=\"plan-mode-badge\" title=\"This run executed in Plan Mode — the agent presented a plan for human approval before executing actions or sub-agents\">\n <i class=\"fas fa-clipboard-check\"></i>\n Plan Mode\n </div>\n }\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab (animated flow views + static flowchart) -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-flow\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [agentName]=\"agent?.Name || null\"\n [runStatus]=\"record.Status || ''\"\n [agentIconClass]=\"agent?.IconClass || null\"\n [agentLogoUrl]=\"agent?.LogoURL || null\">\n </mj-ai-agent-run-flow>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage & Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>"]}
|