@memberjunction/ng-flow-editor 6.2.0-edge.1 → 6.2.0-edge.3

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 (36) hide show
  1. package/dist/lib/agent-editor/agent-flow-transformer.service.d.ts +17 -5
  2. package/dist/lib/agent-editor/agent-flow-transformer.service.d.ts.map +1 -1
  3. package/dist/lib/agent-editor/agent-flow-transformer.service.js +70 -12
  4. package/dist/lib/agent-editor/agent-flow-transformer.service.js.map +1 -1
  5. package/dist/lib/agent-editor/agent-properties-panel.component.d.ts +216 -7
  6. package/dist/lib/agent-editor/agent-properties-panel.component.d.ts.map +1 -1
  7. package/dist/lib/agent-editor/agent-properties-panel.component.js +1679 -250
  8. package/dist/lib/agent-editor/agent-properties-panel.component.js.map +1 -1
  9. package/dist/lib/agent-editor/agent-step-list.component.d.ts.map +1 -1
  10. package/dist/lib/agent-editor/agent-step-list.component.js +10 -1
  11. package/dist/lib/agent-editor/agent-step-list.component.js.map +1 -1
  12. package/dist/lib/agent-editor/decision-step-config.d.ts +27 -0
  13. package/dist/lib/agent-editor/decision-step-config.d.ts.map +1 -0
  14. package/dist/lib/agent-editor/decision-step-config.js +70 -0
  15. package/dist/lib/agent-editor/decision-step-config.js.map +1 -0
  16. package/dist/lib/agent-editor/flow-agent-editor.component.d.ts +37 -5
  17. package/dist/lib/agent-editor/flow-agent-editor.component.d.ts.map +1 -1
  18. package/dist/lib/agent-editor/flow-agent-editor.component.js +177 -45
  19. package/dist/lib/agent-editor/flow-agent-editor.component.js.map +1 -1
  20. package/dist/lib/agent-editor/flow-run-check.d.ts +32 -0
  21. package/dist/lib/agent-editor/flow-run-check.d.ts.map +1 -0
  22. package/dist/lib/agent-editor/flow-run-check.js +146 -0
  23. package/dist/lib/agent-editor/flow-run-check.js.map +1 -0
  24. package/dist/lib/flow-editor.module.d.ts +1 -1
  25. package/dist/lib/flow-editor.module.d.ts.map +1 -1
  26. package/dist/lib/flow-editor.module.js +4 -1
  27. package/dist/lib/flow-editor.module.js.map +1 -1
  28. package/dist/lib/interfaces/flow-types.d.ts +5 -0
  29. package/dist/lib/interfaces/flow-types.d.ts.map +1 -1
  30. package/dist/lib/interfaces/flow-types.js +0 -4
  31. package/dist/lib/interfaces/flow-types.js.map +1 -1
  32. package/dist/public-api.d.ts +1 -0
  33. package/dist/public-api.d.ts.map +1 -1
  34. package/dist/public-api.js +1 -0
  35. package/dist/public-api.js.map +1 -1
  36. package/package.json +10 -9
@@ -1 +1 @@
1
- {"version":3,"file":"agent-properties-panel.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-properties-panel.component.ts","../../../src/lib/agent-editor/agent-properties-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity } from '@memberjunction/core-entities';\nimport { FlowConnection } from '../interfaces/flow-types';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/** Step type accent color mapping */\nconst STEP_TYPE_COLORS: Record<string, string> = {\n Action: '#3b82f6',\n Prompt: '#8b5cf6',\n 'Sub-Agent': '#10b981',\n ForEach: '#f59e0b',\n While: '#f59e0b'\n};\n\n/** Step type icon mapping */\nconst STEP_TYPE_ICONS: Record<string, string> = {\n Action: 'fa-bolt',\n Prompt: 'fa-comment-dots',\n 'Sub-Agent': 'fa-robot',\n ForEach: 'fa-arrows-spin',\n While: 'fa-rotate'\n};\n\n/**\n * Properties panel for editing AI Agent step and path configurations.\n * Shows context-aware sections based on the selected step type.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-properties-panel',\n templateUrl: './agent-properties-panel.component.html',\n styleUrls: ['./agent-properties-panel.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class AgentPropertiesPanelComponent {\n // ── Inputs ──────────────────────────────────────────────────\n @Input() Step: MJAIAgentStepEntity | null = null;\n @Input() SelectedConnection: FlowConnection | null = null;\n @Input() PathEntity: MJAIAgentStepPathEntity | null = null;\n @Input() ReadOnly = false;\n @Input() Actions: Array<{ ID: string; Name: string; IconClass?: string | null }> = [];\n @Input() Prompts: Array<{ ID: string; Name: string }> = [];\n @Input() Agents: Array<{ ID: string; Name: string; IconClass?: string | null; LogoURL?: string | null }> = [];\n @Input() AllSteps: MJAIAgentStepEntity[] = [];\n\n // ── Outputs ─────────────────────────────────────────────────\n @Output() StepChanged = new EventEmitter<MJAIAgentStepEntity>();\n @Output() PathChanged = new EventEmitter<MJAIAgentStepPathEntity>();\n @Output() DeleteStepRequested = new EventEmitter<MJAIAgentStepEntity>();\n @Output() DeletePathRequested = new EventEmitter<MJAIAgentStepPathEntity>();\n @Output() CloseRequested = new EventEmitter<void>();\n\n // ── Collapsible section state ─────────────────────────────\n protected collapsedSections: Record<string, boolean> = {};\n\n // ── Computed Properties ─────────────────────────────────────\n\n get IsStepSelected(): boolean {\n return this.Step != null;\n }\n\n /** @deprecated Use {@link IsStepSelected}. */\n get isStepSelected(): boolean {\n return this.IsStepSelected;\n }\n\n get IsConnectionSelected(): boolean {\n return this.SelectedConnection != null && this.PathEntity != null;\n }\n\n /** @deprecated Use {@link IsConnectionSelected}. */\n get isConnectionSelected(): boolean {\n return this.IsConnectionSelected;\n }\n\n get ShowActionPicker(): boolean {\n return this.Step?.StepType === 'Action' ||\n ((this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While') && this.Step?.LoopBodyType === 'Action');\n }\n\n /** @deprecated Use {@link ShowActionPicker}. */\n get showActionPicker(): boolean {\n return this.ShowActionPicker;\n }\n\n get ShowPromptPicker(): boolean {\n return this.Step?.StepType === 'Prompt' ||\n ((this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While') && this.Step?.LoopBodyType === 'Prompt');\n }\n\n /** @deprecated Use {@link ShowPromptPicker}. */\n get showPromptPicker(): boolean {\n return this.ShowPromptPicker;\n }\n\n get ShowAgentPicker(): boolean {\n return this.Step?.StepType === 'Sub-Agent' ||\n ((this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While') && this.Step?.LoopBodyType === 'Sub-Agent');\n }\n\n /** @deprecated Use {@link ShowAgentPicker}. */\n get showAgentPicker(): boolean {\n return this.ShowAgentPicker;\n }\n\n get ShowLoopConfig(): boolean {\n return this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While';\n }\n\n /** @deprecated Use {@link ShowLoopConfig}. */\n get showLoopConfig(): boolean {\n return this.ShowLoopConfig;\n }\n\n get StepTypeLabel(): string {\n switch (this.Step?.StepType) {\n case 'Action': return 'Action';\n case 'Prompt': return 'Prompt';\n case 'Sub-Agent': return 'Sub-Agent';\n case 'ForEach': return 'For Each Loop';\n case 'While': return 'While Loop';\n default: return 'Step';\n }\n }\n\n /** @deprecated Use {@link StepTypeLabel}. */\n get stepTypeLabel(): string {\n return this.StepTypeLabel;\n }\n\n get StepTypeColor(): string {\n return STEP_TYPE_COLORS[this.Step?.StepType ?? ''] ?? '#64748b';\n }\n\n /** @deprecated Use {@link StepTypeColor}. */\n get stepTypeColor(): string {\n return this.StepTypeColor;\n }\n\n get StepTypeIcon(): string {\n return STEP_TYPE_ICONS[this.Step?.StepType ?? ''] ?? 'fa-circle-nodes';\n }\n\n /** @deprecated Use {@link StepTypeIcon}. */\n get stepTypeIcon(): string {\n return this.StepTypeIcon;\n }\n\n get StatusColor(): string {\n switch (this.Step?.Status) {\n case 'Active': return '#10b981';\n case 'Disabled': return '#94a3b8';\n case 'Pending': return '#f59e0b';\n default: return '#94a3b8';\n }\n }\n\n /** @deprecated Use {@link StatusColor}. */\n get statusColor(): string {\n return this.StatusColor;\n }\n\n /** Path: origin step name */\n get OriginStepName(): string {\n if (!this.PathEntity) return '';\n const step = this.AllSteps.find(s => UUIDsEqual(s.ID, this.PathEntity!.OriginStepID));\n return step?.Name ?? 'Unknown Step';\n }\n\n /** @deprecated Use {@link OriginStepName}. */\n get originStepName(): string {\n return this.OriginStepName;\n }\n\n /** Path: destination step name */\n get DestinationStepName(): string {\n if (!this.PathEntity) return '';\n const step = this.AllSteps.find(s => UUIDsEqual(s.ID, this.PathEntity!.DestinationStepID));\n return step?.Name ?? 'Unknown Step';\n }\n\n /** @deprecated Use {@link DestinationStepName}. */\n get destinationStepName(): string {\n return this.DestinationStepName;\n }\n\n /** Path: whether a condition is set */\n get IsConditionalPath(): boolean {\n return this.PathEntity?.Condition != null && this.PathEntity.Condition.trim().length > 0;\n }\n\n /** @deprecated Use {@link IsConditionalPath}. */\n get isConditionalPath(): boolean {\n return this.IsConditionalPath;\n }\n\n /** Path accent color */\n get PathAccentColor(): string {\n return this.IsConditionalPath ? '#f59e0b' : '#94a3b8';\n }\n\n /** @deprecated Use {@link PathAccentColor}. */\n get pathAccentColor(): string {\n return this.PathAccentColor;\n }\n\n /** Resolved action name for display */\n get SelectedActionName(): string {\n if (!this.Step?.ActionID) return 'None selected';\n return this.Actions.find(a => UUIDsEqual(a.ID, this.Step!.ActionID))?.Name ?? 'Unknown';\n }\n\n /** @deprecated Use {@link SelectedActionName}. */\n get selectedActionName(): string {\n return this.SelectedActionName;\n }\n\n /** Resolved prompt name for display */\n get SelectedPromptName(): string {\n if (!this.Step?.PromptID) return 'None selected';\n return this.Prompts.find(p => UUIDsEqual(p.ID, this.Step!.PromptID))?.Name ?? 'Unknown';\n }\n\n /** @deprecated Use {@link SelectedPromptName}. */\n get selectedPromptName(): string {\n return this.SelectedPromptName;\n }\n\n /** Resolved agent name for display */\n get SelectedAgentName(): string {\n if (!this.Step?.SubAgentID) return 'None selected';\n return this.Agents.find(a => UUIDsEqual(a.ID, this.Step!.SubAgentID))?.Name ?? 'Unknown';\n }\n\n /** @deprecated Use {@link SelectedAgentName}. */\n get selectedAgentName(): string {\n return this.SelectedAgentName;\n }\n\n // ── Section Collapse ──────────────────────────────────────\n\n ToggleSection(sectionId: string): void {\n this.collapsedSections[sectionId] = !this.collapsedSections[sectionId];\n }\n\n IsSectionCollapsed(sectionId: string): boolean {\n return this.collapsedSections[sectionId] === true;\n }\n\n // ── Step Event Handlers ─────────────────────────────────────\n\n OnNameChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Name = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnDescriptionChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Description = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnStatusChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Status = value as 'Active' | 'Disabled' | 'Pending';\n this.StepChanged.emit(this.Step);\n }\n\n OnStartingStepChange(checked: boolean): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.StartingStep = checked;\n this.StepChanged.emit(this.Step);\n }\n\n OnActionChange(actionId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.ActionID = actionId || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnPromptChange(promptId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.PromptID = promptId || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnSubAgentChange(agentId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.SubAgentID = agentId || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnLoopBodyTypeChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.LoopBodyType = value as 'Action' | 'Prompt' | 'Sub-Agent';\n this.StepChanged.emit(this.Step);\n }\n\n OnInputMappingChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.ActionInputMapping = value || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnOutputMappingChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.ActionOutputMapping = value || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnErrorBehaviorChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.OnErrorBehavior = value as 'fail' | 'continue' | 'retry';\n this.StepChanged.emit(this.Step);\n }\n\n OnRetryCountChange(value: number): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.RetryCount = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnTimeoutChange(value: number): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.TimeoutSeconds = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnConfigurationChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Configuration = value || null;\n this.StepChanged.emit(this.Step);\n }\n\n // ── Path Event Handlers ─────────────────────────────────────\n\n OnPathDescriptionChange(value: string): void {\n if (!this.PathEntity || this.ReadOnly) return;\n this.PathEntity.Description = value;\n this.PathChanged.emit(this.PathEntity);\n }\n\n OnPathConditionChange(value: string): void {\n if (!this.PathEntity || this.ReadOnly) return;\n this.PathEntity.Condition = value || null;\n this.PathChanged.emit(this.PathEntity);\n }\n\n OnPathPriorityChange(value: number): void {\n if (!this.PathEntity || this.ReadOnly) return;\n this.PathEntity.Priority = value;\n this.PathChanged.emit(this.PathEntity);\n }\n\n OnDeleteStep(): void {\n if (this.Step) {\n this.DeleteStepRequested.emit(this.Step);\n }\n }\n\n OnDeletePath(): void {\n if (this.PathEntity) {\n this.DeletePathRequested.emit(this.PathEntity);\n }\n }\n\n // ── Template Helpers ──────────────────────────────────────\n\n /** Safely extract string value from an input/textarea/select change event */\n protected InputValue(event: Event): string {\n return (event.target as HTMLInputElement).value;\n }\n\n /** Safely extract checked state from a checkbox change event */\n protected CheckedValue(event: Event): boolean {\n return (event.target as HTMLInputElement).checked;\n }\n\n /** Safely extract numeric value from a number input event */\n protected NumericValue(event: Event): number {\n return +(event.target as HTMLInputElement).value;\n }\n\n /** Format JSON for display */\n protected FormatJsonDisplay(value: string | null | undefined): string {\n if (!value) return '';\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n}\n","<div class=\"mj-agent-props\">\n\n <!-- Empty State -->\n @if (!isStepSelected && !isConnectionSelected) {\n <mj-empty-state class=\"mj-agent-props-empty\"\n Icon=\"fa-solid fa-arrow-pointer\"\n Title=\"No selection\"\n Message=\"Select a step or connection to view its properties\" />\n }\n\n <!-- ============================================ -->\n <!-- STEP PROPERTIES -->\n <!-- ============================================ -->\n @if (isStepSelected) {\n <!-- Step Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--step\"\n [style.border-left-color]=\"stepTypeColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">STEP</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon\" [style.background]=\"stepTypeColor\">\n <i class=\"fa-solid\" [ngClass]=\"stepTypeIcon\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-identity-name\">{{ Step!.Name }}</span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\" [style.color]=\"stepTypeColor\"\n [style.background]=\"stepTypeColor + '18'\">{{ stepTypeLabel }}</span>\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n <span class=\"mj-agent-props-status-label\">{{ Step!.Status }}</span>\n @if (Step!.StartingStep) {\n <span class=\"mj-agent-props-start-badge\">Start</span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- ── General Section ─────────────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('general')\" (ExpandedChange)=\"ToggleSection('general')\">\n <ng-template mjAccordionTitle><span>General</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Name</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"Step!.Name\"\n (input)=\"OnNameChange(InputValue($event))\"\n placeholder=\"Step name...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.Name }}</div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <textarea [value]=\"Step!.Description || ''\"\n (input)=\"OnDescriptionChange(InputValue($event))\"\n placeholder=\"Optional description...\" rows=\"2\"\n class=\"mj-agent-props-input mj-agent-props-textarea\"></textarea>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.Description || '—' }}\n </div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Status</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.Status\"\n (change)=\"OnStatusChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Active\">Active</option>\n <option value=\"Disabled\">Disabled</option>\n <option value=\"Pending\">Pending</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n {{ Step!.Status }}\n </div>\n }\n </div>\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-field mj-agent-props-field--row\">\n <label class=\"mj-agent-props-checkbox-label\">\n <input type=\"checkbox\" [checked]=\"Step!.StartingStep\"\n (change)=\"OnStartingStepChange(CheckedValue($event))\">\n Starting Step\n </label>\n </div>\n }\n @if (ReadOnly && Step!.StartingStep) {\n <div class=\"mj-agent-props-field\">\n <label>Starting Step</label>\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-start-badge\">Yes — this is the entry point</span>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Configuration Section ───────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('config')\" (ExpandedChange)=\"ToggleSection('config')\">\n <ng-template mjAccordionTitle><span>Configuration</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <!-- Loop Body Type (ForEach / While) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Body Type</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.LoopBodyType || 'Action'\"\n (change)=\"OnLoopBodyTypeChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Action\">Action</option>\n <option value=\"Prompt\">Prompt</option>\n <option value=\"Sub-Agent\">Sub-Agent</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.LoopBodyType || 'Action' }}\n </div>\n }\n </div>\n }\n <!-- Action Picker -->\n @if (showActionPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Action</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.ActionID || ''\"\n (change)=\"OnActionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Action --</option>\n @for (action of Actions; track action) {\n <option [value]=\"action.ID\">{{ action.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedActionName }}</div>\n }\n </div>\n }\n <!-- Prompt Picker -->\n @if (showPromptPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Prompt</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.PromptID || ''\"\n (change)=\"OnPromptChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Prompt --</option>\n @for (prompt of Prompts; track prompt) {\n <option [value]=\"prompt.ID\">{{ prompt.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedPromptName }}</div>\n }\n </div>\n }\n <!-- Sub-Agent Picker -->\n @if (showAgentPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Sub-Agent</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.SubAgentID || ''\"\n (change)=\"OnSubAgentChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Agent --</option>\n @for (agent of Agents; track agent) {\n <option [value]=\"agent.ID\">{{ agent.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedAgentName }}</div>\n }\n </div>\n }\n <!-- Loop Configuration (JSON) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Configuration</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.Configuration)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n (change)=\"OnConfigurationChange($any($event))\">\n </mj-code-editor>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Data Mapping Section (Action steps) ─── -->\n @if (Step!.StepType === 'Action' || showActionPicker) {\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('mapping')\" (ExpandedChange)=\"ToggleSection('mapping')\">\n <ng-template mjAccordionTitle><span>Data Mapping</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Input Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionInputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON input mapping...\"\n (change)=\"OnInputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Output Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionOutputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON output mapping...\"\n (change)=\"OnOutputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n <!-- ── Error Handling Section ──────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('errors')\" (ExpandedChange)=\"ToggleSection('errors')\">\n <ng-template mjAccordionTitle><span>Error Handling</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>On Error</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.OnErrorBehavior\"\n (change)=\"OnErrorBehaviorChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"fail\">Fail (stop flow)</option>\n <option value=\"continue\">Continue (ignore error)</option>\n <option value=\"retry\">Retry</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.OnErrorBehavior === 'fail' ? 'Fail (stop flow)' :\n Step!.OnErrorBehavior === 'continue' ? 'Continue (ignore error)' : 'Retry' }}\n </div>\n }\n </div>\n @if (Step!.OnErrorBehavior === 'retry') {\n <div class=\"mj-agent-props-field\">\n <label>Retry Count</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.RetryCount\" min=\"0\" max=\"10\"\n (input)=\"OnRetryCountChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.RetryCount }}</div>\n }\n </div>\n }\n <div class=\"mj-agent-props-field\">\n <label>Timeout (seconds)</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.TimeoutSeconds\" min=\"1\"\n (input)=\"OnTimeoutChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.TimeoutSeconds }}s</div>\n }\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Danger Zone ─────────────────────── -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeleteStep()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Step\n </button>\n </div>\n }\n </div>\n }\n\n <!-- ============================================ -->\n <!-- PATH PROPERTIES -->\n <!-- ============================================ -->\n @if (isConnectionSelected) {\n <!-- Path Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--path\"\n [style.border-left-color]=\"pathAccentColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">PATH</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Path identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon mj-agent-props-identity-icon--path\"\n [style.background]=\"pathAccentColor\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-path-route\">\n <span class=\"mj-agent-props-path-step-name\">{{ originStepName }}</span>\n <i class=\"fa-solid fa-arrow-right mj-agent-props-path-arrow\"></i>\n <span class=\"mj-agent-props-path-step-name\">{{ destinationStepName }}</span>\n </span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\"\n [style.color]=\"pathAccentColor\"\n [style.background]=\"pathAccentColor + '18'\">\n {{ isConditionalPath ? 'Conditional' : 'Always' }}\n </span>\n @if (PathEntity!.Priority !== 0) {\n <span class=\"mj-agent-props-priority-badge\">\n Priority: {{ PathEntity!.Priority }}\n </span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- ── Overview Section ────────────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-overview')\" (ExpandedChange)=\"ToggleSection('path-overview')\">\n <ng-template mjAccordionTitle><span>Route</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>From</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ originStepName }}\n </div>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>To</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ destinationStepName }}\n </div>\n </div>\n <span class=\"mj-agent-props-hint\">To change the route, rewire the connection on the canvas.</span>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Path Settings Section ───────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-settings')\" (ExpandedChange)=\"ToggleSection('path-settings')\">\n <ng-template mjAccordionTitle><span>Settings</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"PathEntity!.Description || ''\"\n (input)=\"OnPathDescriptionChange(InputValue($event))\"\n placeholder=\"Path label...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ PathEntity!.Description || '—' }}\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">Displayed as a label on the connection line</span>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Condition</label>\n @if (!ReadOnly) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition || ''\"\n language=\"javascript\"\n [readonly]=\"false\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"e.g. payload.status === 'active'\"\n (change)=\"OnPathConditionChange($any($event))\">\n </mj-code-editor>\n }\n @if (ReadOnly && PathEntity!.Condition) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition\"\n language=\"javascript\"\n [readonly]=\"true\"\n setup=\"minimal\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n }\n @if (ReadOnly && !PathEntity!.Condition) {\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n No condition (always taken)\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">\n JavaScript expression evaluated at runtime. Leave empty for unconditional.\n </span>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Priority</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"PathEntity!.Priority\" min=\"-100\" max=\"100\"\n (input)=\"OnPathPriorityChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ PathEntity!.Priority }}</div>\n }\n <span class=\"mj-agent-props-hint\">Higher priority paths are evaluated first when multiple paths leave a step.</span>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Danger Zone ─────────────────────── -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeletePath()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Path\n </button>\n </div>\n }\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"agent-properties-panel.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-properties-panel.component.ts","../../../src/lib/agent-editor/agent-properties-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity } from '@memberjunction/core-entities';\nimport { FlowConnection, PromptOption } from '../interfaces/flow-types';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport {\n FlowDecisionKeyProblem,\n FlowDecisionStepConfiguration,\n ReadFlowDecisionStepConfiguration,\n RewriteDecisionReferences,\n RewriteDecisionQuestionReferences,\n RewriteDecisionChoiceValues,\n DecisionChoiceTestOf,\n DecisionConditionLiteral,\n DecisionReferenceText,\n IsDecisionPrompt\n} from '@memberjunction/ai-core-plus';\nimport type { TaskGraphDecisionQuestion } from '@memberjunction/ai-core-plus';\nimport { DECISION_QUESTION_KEY_PATTERN, ReadDecisionStepKey, ReadEditableDecisionConfig } from './decision-step-config';\nimport { PathRunProblems, StepRunProblems, type FlowRunProblem } from './flow-run-check';\n\n/** Step type accent color mapping */\nconst STEP_TYPE_COLORS: Record<string, string> = {\n Action: '#3b82f6',\n Prompt: '#8b5cf6',\n Decision: '#0891b2',\n 'Sub-Agent': '#10b981',\n ForEach: '#f59e0b',\n While: '#f59e0b'\n};\n\n/** Step type icon mapping */\nconst STEP_TYPE_ICONS: Record<string, string> = {\n Action: 'fa-bolt',\n Prompt: 'fa-comment-dots',\n Decision: 'fa-scale-balanced',\n 'Sub-Agent': 'fa-robot',\n ForEach: 'fa-arrows-spin',\n While: 'fa-rotate'\n};\n\n/** What a Decision question asks for. */\ntype DecisionQuestionKind = TaskGraphDecisionQuestion['kind'];\n\n/** One option of a Choice question. */\ntype ChoiceOption = Extract<TaskGraphDecisionQuestion, { kind: 'Choice' }>['options'][number];\n\n/** The kinds the question editor offers, in the order it lists them. */\nconst DECISION_QUESTION_KINDS: readonly DecisionQuestionKind[] = ['Likelihood', 'Choice', 'Score'];\n\n/** The key an option's refused value is kept under: the question and the option's position. */\nfunction optionErrorKey(questionKey: string, index: number | string): string {\n return `${questionKey}\\u0000${index}`;\n}\n\n/** A runtime problem phrase (\"its key ... cannot be named ...\") as a sentence on its own. */\nfunction capitalize(phrase: string): string {\n return phrase.charAt(0).toUpperCase() + phrase.slice(1);\n}\n\n/**\n * Properties panel for editing AI Agent step and path configurations.\n * Shows context-aware sections based on the selected step type.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-properties-panel',\n templateUrl: './agent-properties-panel.component.html',\n styleUrls: ['./agent-properties-panel.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class AgentPropertiesPanelComponent {\n // ── Inputs ──────────────────────────────────────────────────\n /** The selected step. Selecting a different one drops whatever was typed but not committed for the last. */\n @Input()\n set Step(value: MJAIAgentStepEntity | null) {\n if (!UUIDsEqual(value?.ID, this._step?.ID)) {\n this.clearDecisionDrafts();\n }\n this._step = value;\n }\n get Step(): MJAIAgentStepEntity | null {\n return this._step;\n }\n private _step: MJAIAgentStepEntity | null = null;\n\n @Input() SelectedConnection: FlowConnection | null = null;\n @Input() PathEntity: MJAIAgentStepPathEntity | null = null;\n @Input() ReadOnly = false;\n @Input() Actions: Array<{ ID: string; Name: string; IconClass?: string | null }> = [];\n @Input() Prompts: PromptOption[] = [];\n @Input() DecisionModelTypeID: string | null = null;\n @Input() Agents: Array<{ ID: string; Name: string; IconClass?: string | null; LogoURL?: string | null }> = [];\n @Input() AllSteps: MJAIAgentStepEntity[] = [];\n @Input() AllPaths: MJAIAgentStepPathEntity[] = [];\n /** The flow editor's run check: why the flow would not run as it stands, by step and path. */\n @Input() RunProblems: readonly FlowRunProblem[] = [];\n\n // ── Outputs ─────────────────────────────────────────────────\n @Output() StepChanged = new EventEmitter<MJAIAgentStepEntity>();\n @Output() PathChanged = new EventEmitter<MJAIAgentStepPathEntity>();\n @Output() DeleteStepRequested = new EventEmitter<MJAIAgentStepEntity>();\n @Output() DeletePathRequested = new EventEmitter<MJAIAgentStepPathEntity>();\n @Output() CloseRequested = new EventEmitter<void>();\n\n // ── Collapsible section state ─────────────────────────────\n protected collapsedSections: Record<string, boolean> = {};\n\n // ── Computed Properties ─────────────────────────────────────\n\n get IsStepSelected(): boolean {\n return this.Step != null;\n }\n\n /** @deprecated Use {@link IsStepSelected}. */\n get isStepSelected(): boolean {\n return this.IsStepSelected;\n }\n\n get IsConnectionSelected(): boolean {\n return this.SelectedConnection != null && this.PathEntity != null;\n }\n\n /** @deprecated Use {@link IsConnectionSelected}. */\n get isConnectionSelected(): boolean {\n return this.IsConnectionSelected;\n }\n\n get ShowActionPicker(): boolean {\n return this.Step?.StepType === 'Action' ||\n ((this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While') && this.Step?.LoopBodyType === 'Action');\n }\n\n /** @deprecated Use {@link ShowActionPicker}. */\n get showActionPicker(): boolean {\n return this.ShowActionPicker;\n }\n\n get ShowPromptPicker(): boolean {\n return this.Step?.StepType === 'Prompt' ||\n ((this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While') && this.Step?.LoopBodyType === 'Prompt');\n }\n\n /** @deprecated Use {@link ShowPromptPicker}. */\n get showPromptPicker(): boolean {\n return this.ShowPromptPicker;\n }\n\n get ShowAgentPicker(): boolean {\n return this.Step?.StepType === 'Sub-Agent' ||\n ((this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While') && this.Step?.LoopBodyType === 'Sub-Agent');\n }\n\n /** @deprecated Use {@link ShowAgentPicker}. */\n get showAgentPicker(): boolean {\n return this.ShowAgentPicker;\n }\n\n get ShowLoopConfig(): boolean {\n return this.Step?.StepType === 'ForEach' || this.Step?.StepType === 'While';\n }\n\n /** @deprecated Use {@link ShowLoopConfig}. */\n get showLoopConfig(): boolean {\n return this.ShowLoopConfig;\n }\n\n get StepTypeLabel(): string {\n switch (this.Step?.StepType) {\n case 'Action': return 'Action';\n case 'Prompt': return 'Prompt';\n case 'Decision': return 'Decision';\n case 'Sub-Agent': return 'Sub-Agent';\n case 'ForEach': return 'For Each Loop';\n case 'While': return 'While Loop';\n default: return 'Step';\n }\n }\n\n /** @deprecated Use {@link StepTypeLabel}. */\n get stepTypeLabel(): string {\n return this.StepTypeLabel;\n }\n\n get StepTypeColor(): string {\n return STEP_TYPE_COLORS[this.Step?.StepType ?? ''] ?? '#64748b';\n }\n\n /** @deprecated Use {@link StepTypeColor}. */\n get stepTypeColor(): string {\n return this.StepTypeColor;\n }\n\n get StepTypeIcon(): string {\n return STEP_TYPE_ICONS[this.Step?.StepType ?? ''] ?? 'fa-circle-nodes';\n }\n\n /** @deprecated Use {@link StepTypeIcon}. */\n get stepTypeIcon(): string {\n return this.StepTypeIcon;\n }\n\n get StatusColor(): string {\n switch (this.Step?.Status) {\n case 'Active': return '#10b981';\n case 'Disabled': return '#94a3b8';\n case 'Pending': return '#f59e0b';\n default: return '#94a3b8';\n }\n }\n\n /** @deprecated Use {@link StatusColor}. */\n get statusColor(): string {\n return this.StatusColor;\n }\n\n /** Path: origin step name */\n get OriginStepName(): string {\n if (!this.PathEntity) return '';\n const step = this.AllSteps.find(s => UUIDsEqual(s.ID, this.PathEntity!.OriginStepID));\n return step?.Name ?? 'Unknown Step';\n }\n\n /** @deprecated Use {@link OriginStepName}. */\n get originStepName(): string {\n return this.OriginStepName;\n }\n\n /** Path: destination step name */\n get DestinationStepName(): string {\n if (!this.PathEntity) return '';\n const step = this.AllSteps.find(s => UUIDsEqual(s.ID, this.PathEntity!.DestinationStepID));\n return step?.Name ?? 'Unknown Step';\n }\n\n /** @deprecated Use {@link DestinationStepName}. */\n get destinationStepName(): string {\n return this.DestinationStepName;\n }\n\n /** Path: whether a condition is set */\n get IsConditionalPath(): boolean {\n return this.PathEntity?.Condition != null && this.PathEntity.Condition.trim().length > 0;\n }\n\n /** @deprecated Use {@link IsConditionalPath}. */\n get isConditionalPath(): boolean {\n return this.IsConditionalPath;\n }\n\n /** Path accent color */\n get PathAccentColor(): string {\n return this.IsConditionalPath ? '#f59e0b' : '#94a3b8';\n }\n\n /** @deprecated Use {@link PathAccentColor}. */\n get pathAccentColor(): string {\n return this.PathAccentColor;\n }\n\n /** Resolved action name for display */\n get SelectedActionName(): string {\n if (!this.Step?.ActionID) return 'None selected';\n return this.Actions.find(a => UUIDsEqual(a.ID, this.Step!.ActionID))?.Name ?? 'Unknown';\n }\n\n /** @deprecated Use {@link SelectedActionName}. */\n get selectedActionName(): string {\n return this.SelectedActionName;\n }\n\n /** Resolved prompt name for display */\n get SelectedPromptName(): string {\n if (!this.Step?.PromptID) return 'None selected';\n return this.Prompts.find(p => UUIDsEqual(p.ID, this.Step!.PromptID))?.Name ?? 'Unknown';\n }\n\n /** @deprecated Use {@link SelectedPromptName}. */\n get selectedPromptName(): string {\n return this.SelectedPromptName;\n }\n\n /** Resolved agent name for display */\n get SelectedAgentName(): string {\n if (!this.Step?.SubAgentID) return 'None selected';\n return this.Agents.find(a => UUIDsEqual(a.ID, this.Step!.SubAgentID))?.Name ?? 'Unknown';\n }\n\n /** @deprecated Use {@link SelectedAgentName}. */\n get selectedAgentName(): string {\n return this.SelectedAgentName;\n }\n\n // ── Decision Step Properties & Getters ────────────────────\n\n get ShowDecisionConfig(): boolean {\n return this.Step?.StepType === 'Decision';\n }\n\n get DecisionPrompts(): PromptOption[] {\n return this.Prompts.filter(p => IsDecisionPrompt(p, this.DecisionModelTypeID));\n }\n\n get SelectedDecisionPromptName(): string {\n if (!this.Step?.PromptID) return 'Default Decision (system default)';\n return this.Prompts.find(p => UUIDsEqual(p.ID, this.Step!.PromptID))?.Name ?? 'Unknown Prompt';\n }\n\n /**\n * The step's configuration as the runtime reads it or, while the runtime still refuses it, the parts\n * that parse — so an unfinished step can be shown and finished. Whether it can run is\n * {@link DecisionValidationError}'s answer, which is the runtime's.\n */\n get DecisionConfig(): FlowDecisionStepConfiguration {\n return ReadEditableDecisionConfig(this.Step?.Configuration) ?? { key: '', questions: {} };\n }\n\n get DecisionValidationError(): string | null {\n if (this.Step?.StepType !== 'Decision') return null;\n const read = ReadFlowDecisionStepConfiguration(this.Step?.Configuration);\n return 'Error' in read ? read.Error : null;\n }\n\n /** The key field's text: what the author is typing, until it is committed; the stored key otherwise. */\n get DecisionKeyText(): string {\n return this.keyDraftFor(this.Step) ?? this.DecisionConfig.key;\n }\n\n /**\n * Why the key in the field cannot be committed, or `null`. Judged as it is typed, so the author sees\n * the problem before committing, with the runtime's own wording for a key a condition cannot name.\n */\n get DecisionKeyError(): string | null {\n if (!this.ShowDecisionConfig) return null;\n return this.decisionKeyProblem(this.DecisionKeyText.trim());\n }\n\n /** The run check's problems on the selected step, less what the step's own warnings already say. */\n get StepRunProblemMessages(): string[] {\n return StepRunProblems(this.RunProblems, this.Step?.ID).map(p => p.Message);\n }\n\n /** The run check's problems with the selected path's condition. */\n get PathRunProblemMessages(): string[] {\n return PathRunProblems(this.RunProblems, this.PathEntity?.ID).map(p => p.Message);\n }\n\n get DecisionQuestionsList(): Array<{ key: string; question: TaskGraphDecisionQuestion }> {\n const questions = this.DecisionConfig.questions || {};\n return Object.entries(questions).map(([key, question]) => ({ key, question }));\n }\n\n /** A Choice question's options; empty for any other kind, or a Choice stored without them. */\n ChoiceOptionsOf(question: TaskGraphDecisionQuestion): ChoiceOption[] {\n return question.kind === 'Choice' && Array.isArray(question.options) ? question.options : [];\n }\n\n /** A Score question's levels, lowest first; empty for any other kind, or a Score stored without them. */\n ScoreLevelsOf(question: TaskGraphDecisionQuestion): string[] {\n return question.kind === 'Score' && Array.isArray(question.levels) ? question.levels : [];\n }\n\n /**\n * What is wrong with question `questionKey`'s key: why the last rename of it was refused, or — for a\n * key stored before the editor held keys to a shape — that a condition cannot name it with dots.\n */\n QuestionKeyError(questionKey: string): string | null {\n const refused = this.questionKeyErrors.get(questionKey);\n if (refused) return refused;\n return DECISION_QUESTION_KEY_PATTERN.test(questionKey)\n ? null\n : `Question key \"${questionKey}\" cannot be named in a path condition with dots; rename it using letters, digits and underscores, not starting with a digit`;\n }\n\n // ── Decision Step Mutators ────────────────────────────────\n\n /**\n * The key field's `input` event: records what the author typed, and nothing else.\n *\n * The key is not stored, and no path condition is touched, until the author commits it\n * ({@link OnDecisionKeyCommit}). Renaming on every keystroke passed each in-between value through\n * the flow's conditions: typing through another step's key merged the two steps' references, and\n * clearing the field on the way to a new key stranded them on a fragment of the old one.\n */\n OnDecisionKeyChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.keyDraft = { StepID: this.Step.ID, Value: value };\n }\n\n /** The key field's `change` event and Enter: commits what was typed. Refused keys stay in the field with their error. */\n OnDecisionKeyCommit(): void {\n const typed = this.keyDraftFor(this.Step);\n if (typed !== null) {\n this.RenameDecisionKey(typed);\n }\n }\n\n /**\n * Renames this Decision step's key and, in the same change, every path condition that names the step\n * by it.\n *\n * Refused — nothing stored, nothing rewritten — when the key is one a condition cannot name or another\n * Decision step already uses. Conditions follow only a key that named this step alone: when another\n * step shares the old key, nothing says which of the two a condition meant, so they are left for the\n * flow check to report rather than guessed at.\n *\n * @param newKey the key to give the step; surrounding whitespace is dropped\n * @returns why the key was refused, or `null` when it was stored (or unchanged)\n */\n RenameDecisionKey(newKey: string): string | null {\n if (!this.Step || this.ReadOnly || !this.ShowDecisionConfig) return null;\n const key = newKey.trim();\n const config = this.DecisionConfig;\n const previous = config.key;\n if (key === previous) {\n this.keyDraft = null;\n return null;\n }\n const problem = this.decisionKeyProblem(key);\n if (problem) {\n this.keyDraft = { StepID: this.Step.ID, Value: newKey };\n return problem;\n }\n\n this.keyDraft = null;\n this.updateDecisionConfig({ ...config, key });\n if (this.conditionsFollowKey(previous)) {\n this.rewritePathConditions(condition =>\n RewriteDecisionReferences(condition, k => (k === previous ? key : undefined)).Expression);\n }\n return null;\n }\n\n OnDecisionPromptChange(promptId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.PromptID = promptId ? promptId : null;\n this.StepChanged.emit(this.Step);\n }\n\n /**\n * The state field's `input` event. An empty field stores no state, which the runtime reads as the\n * whole payload; whether a state it can resolve was typed is the runtime reader's to say\n * ({@link DecisionValidationError}).\n */\n OnDecisionStateChange(newState: string): void {\n if (!this.Step || this.ReadOnly) return;\n const config: FlowDecisionStepConfiguration = { ...this.DecisionConfig };\n const state = newState.trim();\n if (state) {\n config.state = state;\n } else {\n delete config.state;\n }\n this.updateDecisionConfig(config);\n }\n\n OnAddDecisionQuestion(): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n let counter = 1;\n while (questions[`question_${counter}`]) {\n counter++;\n }\n const newKey = `question_${counter}`;\n questions[newKey] = {\n kind: 'Likelihood',\n instructions: ''\n };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnRemoveDecisionQuestion(key: string): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n delete questions[key];\n this.questionKeyErrors.delete(key);\n this.clearOptionValueErrors(key);\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n /**\n * The question key field's `change` event: renames the question, keeping its place in the list, and\n * every path condition that reads it.\n *\n * Refused — nothing stored, nothing rewritten — when the key is empty, is not the identifier shape a\n * step key has, or is another question's key. A refused key stays in the field with\n * {@link QuestionKeyError} beneath it.\n *\n * @returns why the key was refused, or `null`\n */\n OnDecisionQuestionKeyChange(oldKey: string, newKey: string): string | null {\n if (!this.Step || this.ReadOnly) return null;\n const config = this.DecisionConfig;\n if (!Object.prototype.hasOwnProperty.call(config.questions, oldKey)) return null;\n const key = newKey.trim();\n const problem = key === oldKey ? null : this.questionKeyProblem(key, config);\n if (problem) {\n this.questionKeyErrors.set(oldKey, problem);\n return problem;\n }\n this.questionKeyErrors.delete(oldKey);\n if (key === oldKey) return null;\n\n const questions = Object.fromEntries(\n Object.entries(config.questions).map(([k, question]) => [k === oldKey ? key : k, question])\n );\n this.updateDecisionConfig({ ...config, questions });\n this.moveOptionValueErrors(oldKey, key);\n\n const stepKey = this.conditionsFollowKey(config.key);\n if (stepKey) {\n this.rewritePathConditions(condition =>\n RewriteDecisionQuestionReferences(condition, stepKey, q => (q === oldKey ? key : undefined)));\n }\n return null;\n }\n\n /** The kind select's `change` event. A value the editor does not offer is ignored. */\n OnDecisionQuestionKindSelect(key: string, value: string): void {\n const kind = DECISION_QUESTION_KINDS.find(k => k === value);\n if (kind) {\n this.OnDecisionQuestionKindChange(key, kind);\n }\n }\n\n OnDecisionQuestionKindChange(key: string, kind: DecisionQuestionKind): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const existing = questions[key];\n if (!existing) return;\n\n if (kind === 'Likelihood') {\n questions[key] = {\n kind: 'Likelihood',\n instructions: existing.instructions,\n ...(existing.minConfidence !== undefined ? { minConfidence: existing.minConfidence } : {})\n };\n } else if (kind === 'Choice') {\n questions[key] = {\n kind: 'Choice',\n instructions: existing.instructions,\n options: [\n { value: 'option_1', description: 'First option' },\n { value: 'option_2', description: 'Second option' }\n ],\n ...(existing.minConfidence !== undefined ? { minConfidence: existing.minConfidence } : {})\n };\n } else if (kind === 'Score') {\n questions[key] = {\n kind: 'Score',\n instructions: existing.instructions,\n levels: ['Lowest / poor', 'Highest / good'],\n ...(existing.minConfidence !== undefined ? { minConfidence: existing.minConfidence } : {})\n };\n }\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnDecisionQuestionInstructionsChange(key: string, instructions: string): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n if (!questions[key]) return;\n questions[key] = { ...questions[key], instructions };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnDecisionQuestionMinConfidenceChange(key: string, value: string): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n if (!questions[key]) return;\n const trimmed = value.trim();\n if (trimmed === '') {\n const q = { ...questions[key] };\n delete q.minConfidence;\n questions[key] = q;\n } else {\n const num = parseFloat(trimmed);\n if (!isNaN(num)) {\n questions[key] = { ...questions[key], minConfidence: num };\n }\n }\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnAddChoiceOption(questionKey: string): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Choice') return;\n const options = [...(q.options || [])];\n let newIdx = options.length + 1;\n while (options.some(o => o.value === `option_${newIdx}`)) {\n newIdx++;\n }\n options.push({ value: `option_${newIdx}`, description: '' });\n questions[questionKey] = { ...q, options };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnRemoveChoiceOption(questionKey: string, index: number): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Choice') return;\n const options = q.options.filter((_, i) => i !== index);\n questions[questionKey] = { ...q, options };\n this.clearOptionValueErrors(questionKey);\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n /**\n * Edits one option of a Choice question. A description is stored as typed; a value is committed\n * through {@link OnChoiceOptionValueChange}, since path conditions read it.\n */\n OnChoiceOptionChange(questionKey: string, index: number, field: 'value' | 'description', val: string): void {\n if (field === 'value') {\n this.OnChoiceOptionValueChange(questionKey, index, val);\n return;\n }\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Choice') return;\n const options = q.options.map((opt, i) => i === index ? { ...opt, description: val } : opt);\n questions[questionKey] = { ...q, options };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n /**\n * An option value field's `change` event: renames the option and every path condition that compares\n * the question's answer with it.\n *\n * Refused — nothing stored, nothing rewritten — when the value is empty, is another option's value,\n * or holds characters no condition literal can carry verbatim (a backslash, a line break, or both\n * kinds of quote). A refused value stays in the field with {@link OptionValueError} beneath it.\n *\n * @returns why the value was refused, or `null`\n */\n OnChoiceOptionValueChange(questionKey: string, index: number, newValue: string): string | null {\n if (!this.Step || this.ReadOnly) return null;\n const config = this.DecisionConfig;\n const q = config.questions[questionKey];\n if (!q || q.kind !== 'Choice' || !q.options?.[index]) return null;\n const previous = q.options[index].value;\n const value = newValue.trim();\n const errorKey = optionErrorKey(questionKey, index);\n const problem = value === previous ? null : this.optionValueProblem(value, q.options, index);\n if (problem) {\n this.optionValueErrors.set(errorKey, problem);\n return problem;\n }\n this.optionValueErrors.delete(errorKey);\n if (value === previous) return null;\n\n const options = q.options.map((opt, i) => (i === index ? { ...opt, value } : opt));\n this.updateDecisionConfig({ ...config, questions: { ...config.questions, [questionKey]: { ...q, options } } });\n\n const stepKey = this.conditionsFollowKey(config.key);\n const sharedValue = q.options.some((opt, i) => i !== index && opt.value === previous);\n if (stepKey && previous && !sharedValue) {\n this.rewritePathConditions(condition =>\n RewriteDecisionChoiceValues(condition, stepKey, questionKey, v => (v === previous ? value : undefined)));\n }\n return null;\n }\n\n /** Why the last change to option `index` of question `questionKey` was refused, or `null`. */\n OptionValueError(questionKey: string, index: number): string | null {\n return this.optionValueErrors.get(optionErrorKey(questionKey, index)) ?? null;\n }\n\n GetChoiceCoverageHint(questionKey: string, options: Array<{ value: string; description: string }>): string {\n if (!this.Step) return '';\n return this.computeChoiceCoverageHint(this.Step.ID, this.DecisionConfig.key, questionKey, options);\n }\n\n OnAddScoreLevel(questionKey: string): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Score') return;\n const levels = [...(q.levels || [])];\n levels.push('');\n questions[questionKey] = { ...q, levels };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnRemoveScoreLevel(questionKey: string, index: number): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Score') return;\n const levels = q.levels.filter((_, i) => i !== index);\n questions[questionKey] = { ...q, levels };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnScoreLevelChange(questionKey: string, index: number, desc: string): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Score') return;\n const levels = q.levels.map((lvl, i) => i === index ? desc : lvl);\n questions[questionKey] = { ...q, levels };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n OnMoveScoreLevel(questionKey: string, index: number, direction: 'up' | 'down'): void {\n if (!this.Step || this.ReadOnly) return;\n const currentConfig = this.DecisionConfig;\n const questions = { ...currentConfig.questions };\n const q = questions[questionKey];\n if (!q || q.kind !== 'Score') return;\n const targetIndex = direction === 'up' ? index - 1 : index + 1;\n if (targetIndex < 0 || targetIndex >= q.levels.length) return;\n const levels = [...q.levels];\n const temp = levels[index];\n levels[index] = levels[targetIndex];\n levels[targetIndex] = temp;\n questions[questionKey] = { ...q, levels };\n this.updateDecisionConfig({ ...currentConfig, questions });\n }\n\n private updateDecisionConfig(config: FlowDecisionStepConfiguration): void {\n if (!this.Step) return;\n this.Step.Configuration = JSON.stringify(config, null, 2);\n this.StepChanged.emit(this.Step);\n }\n\n // ── Decision step: uncommitted edits and the flow's conditions ───────\n\n /** The key the author is typing into a Decision step's key field, before it is committed. */\n private keyDraft: { StepID: string; Value: string } | null = null;\n\n /** The typed, uncommitted key for `step`, or `null` when nothing is being typed for it. */\n private keyDraftFor(step: MJAIAgentStepEntity | null): string | null {\n return step && this.keyDraft && UUIDsEqual(this.keyDraft.StepID, step.ID) ? this.keyDraft.Value : null;\n }\n\n /** Why the last rename of each question was refused, by the question's current key. */\n private questionKeyErrors = new Map<string, string>();\n\n /** Why the last change to each option value was refused, by {@link optionErrorKey}. */\n private optionValueErrors = new Map<string, string>();\n\n /** Forgets everything typed but not committed. */\n private clearDecisionDrafts(): void {\n this.keyDraft = null;\n this.questionKeyErrors.clear();\n this.optionValueErrors.clear();\n }\n\n /** Forgets the refused option values of one question, whose options have moved. */\n private clearOptionValueErrors(questionKey: string): void {\n for (const key of [...this.optionValueErrors.keys()]) {\n if (key.startsWith(optionErrorKey(questionKey, ''))) this.optionValueErrors.delete(key);\n }\n }\n\n /** Carries a renamed question's refused option values over to its new key. */\n private moveOptionValueErrors(oldKey: string, newKey: string): void {\n const prefix = optionErrorKey(oldKey, '');\n for (const [key, error] of [...this.optionValueErrors]) {\n if (!key.startsWith(prefix)) continue;\n this.optionValueErrors.delete(key);\n this.optionValueErrors.set(optionErrorKey(newKey, key.slice(prefix.length)), error);\n }\n }\n\n /** Why `value` cannot be the value of option `index`, or `null`. */\n private optionValueProblem(value: string, options: ChoiceOption[], index: number): string | null {\n if (!value) {\n return 'An option needs a value; the decision answers with it, and paths compare against it';\n }\n if (options.some((opt, i) => i !== index && opt.value === value)) {\n return `This question already offers \"${value}\"`;\n }\n return DecisionConditionLiteral(value) === null\n ? 'An option value cannot hold a backslash, a line break, or both kinds of quote; a path condition could not name it'\n : null;\n }\n\n /**\n * The key path conditions name this step by, when they can be followed through a rename: the step has\n * a key, and no other Decision step shares it. With a shared key, which step a condition meant cannot\n * be told, so nothing is rewritten and the flow check reports the clash instead.\n */\n private conditionsFollowKey(stepKey: string): string | null {\n return stepKey && !this.decisionStepUsingKey(stepKey) ? stepKey : null;\n }\n\n /** Why `key` cannot be a question key on this step, or `null`. */\n private questionKeyProblem(key: string, config: FlowDecisionStepConfiguration): string | null {\n if (!key) {\n return 'A question needs a key; path conditions read its answer by it';\n }\n if (!DECISION_QUESTION_KEY_PATTERN.test(key)) {\n return `Question key \"${key}\" cannot be named in a path condition; use letters, digits and underscores, not starting with a digit`;\n }\n return Object.prototype.hasOwnProperty.call(config.questions, key)\n ? `This step already asks a question keyed \"${key}\"`\n : null;\n }\n\n /** Why `key` cannot be this step's key, or `null`. The shape is the runtime's rule and wording. */\n private decisionKeyProblem(key: string): string | null {\n const problem = FlowDecisionKeyProblem(key);\n if (problem) return capitalize(problem);\n const owner = this.decisionStepUsingKey(key);\n return owner\n ? `Decision step \"${owner.Name}\" already uses the key \"${key}\"; each Decision step needs its own, so a path condition can say which one it reads`\n : null;\n }\n\n /**\n * Another Decision step whose configuration stores `key`, whether or not the runtime can read the rest\n * of it — a step still being written keeps its key, and sharing it would merge the two steps'\n * conditions once both run.\n */\n private decisionStepUsingKey(key: string): MJAIAgentStepEntity | null {\n return this.AllSteps.find(s =>\n s.StepType === 'Decision' && !UUIDsEqual(s.ID, this.Step?.ID) && ReadDecisionStepKey(s.Configuration) === key\n ) ?? null;\n }\n\n /** Applies `rewrite` to every path condition in the flow, and reports each path it changes. */\n private rewritePathConditions(rewrite: (condition: string) => string): void {\n for (const path of this.AllPaths) {\n if (!path.Condition) continue;\n const rewritten = rewrite(path.Condition);\n if (rewritten !== path.Condition) {\n path.Condition = rewritten;\n this.PathChanged.emit(path);\n }\n }\n }\n\n // ── Route on Answer (Path Helper) ─────────────────────────\n\n private routeQuestionKey = '';\n private routeChoiceOption = '';\n private routeThresholdText = '0.8';\n private routeScoreLevelIndex = 0;\n\n get OriginDecisionStep(): MJAIAgentStepEntity | null {\n if (!this.PathEntity?.OriginStepID) return null;\n const step = this.AllSteps.find(s => UUIDsEqual(s.ID, this.PathEntity!.OriginStepID));\n return step?.StepType === 'Decision' ? step : null;\n }\n\n get OriginDecisionConfig(): FlowDecisionStepConfiguration | null {\n return ReadEditableDecisionConfig(this.OriginDecisionStep?.Configuration);\n }\n\n get OriginDecisionQuestions(): Array<{ key: string; question: TaskGraphDecisionQuestion }> {\n const config = this.OriginDecisionConfig;\n if (!config?.questions) return [];\n return Object.entries(config.questions).map(([key, question]) => ({ key, question }));\n }\n\n get SelectedRouteQuestionKey(): string {\n const list = this.OriginDecisionQuestions;\n if (list.length === 0) return '';\n if (this.routeQuestionKey && list.some(q => q.key === this.routeQuestionKey)) {\n return this.routeQuestionKey;\n }\n return list[0].key;\n }\n\n get RouteSelectedQuestion(): TaskGraphDecisionQuestion | null {\n const key = this.SelectedRouteQuestionKey;\n if (!key) return null;\n const config = this.OriginDecisionConfig;\n return config?.questions?.[key] ?? null;\n }\n\n get RouteChoiceOptions(): ChoiceOption[] {\n const q = this.RouteSelectedQuestion;\n return q ? this.ChoiceOptionsOf(q) : [];\n }\n\n get SelectedRouteChoiceOption(): string {\n const options = this.RouteChoiceOptions;\n if (options.length === 0) return '';\n if (this.routeChoiceOption && options.some(o => o.value === this.routeChoiceOption)) {\n return this.routeChoiceOption;\n }\n return options[0].value;\n }\n\n get RouteScoreLevels(): string[] {\n const q = this.RouteSelectedQuestion;\n return q ? this.ScoreLevelsOf(q) : [];\n }\n\n /** The threshold field's text, as typed — kept as text so an unfinished entry is not rewritten under the author. */\n get RouteThresholdText(): string {\n return this.routeThresholdText;\n }\n\n /** The chosen minimum Score level. */\n get RouteScoreLevelIndex(): number {\n return this.routeScoreLevelIndex;\n }\n\n /**\n * The Likelihood threshold typed, or `null` when there is none to use: an empty field is no threshold,\n * not zero (`probability >= 0` would take the path on every answer), and a probability outside 0..1\n * could never, or would always, be met.\n */\n get RouteLikelihoodThreshold(): number | null {\n const text = this.routeThresholdText.trim();\n const threshold = text === '' ? NaN : Number(text);\n return Number.isFinite(threshold) && threshold >= 0 && threshold <= 1 ? threshold : null;\n }\n\n get RouteChoiceCoverageHint(): string {\n const origin = this.OriginDecisionStep;\n const config = this.OriginDecisionConfig;\n const qKey = this.SelectedRouteQuestionKey;\n const q = this.RouteSelectedQuestion;\n if (!origin || !config || !qKey || !q || q.kind !== 'Choice') return '';\n return this.computeChoiceCoverageHint(origin.ID, config.key, qKey, q.options || []);\n }\n\n /**\n * Why the helper cannot write a condition for the current choices, or `null` when it can (or there is\n * nothing to route on yet).\n */\n get RouteConditionProblem(): string | null {\n return this.buildRouteCondition().Problem;\n }\n\n OnRouteQuestionChange(key: string): void {\n this.routeQuestionKey = key;\n this.routeChoiceOption = '';\n this.routeScoreLevelIndex = 0;\n }\n\n OnRouteChoiceOptionChange(option: string): void {\n this.routeChoiceOption = option;\n }\n\n /** The threshold field's `input` event, with the text as typed. */\n OnRouteLikelihoodThresholdChange(text: string): void {\n this.routeThresholdText = text;\n }\n\n OnRouteScoreLevelChange(index: number): void {\n this.routeScoreLevelIndex = index;\n }\n\n /** The condition the helper would write, or `''` when it cannot write one ({@link RouteConditionProblem} says why). */\n GetGeneratedRouteCondition(): string {\n return this.buildRouteCondition().Condition;\n }\n\n ApplyRouteCondition(): void {\n if (!this.PathEntity || this.ReadOnly) return;\n const cond = this.GetGeneratedRouteCondition();\n if (cond) {\n this.PathEntity.Condition = cond;\n this.PathChanged.emit(this.PathEntity);\n }\n }\n\n /**\n * The condition for the current choices, written with the runtime's own writers so the runtime reads\n * back exactly the step, question and option chosen: a name that cannot follow a dot is bracketed,\n * and an option is quoted with a quote it does not contain.\n */\n private buildRouteCondition(): { Condition: string; Problem: string | null } {\n const none = (problem: string | null = null): { Condition: string; Problem: string | null } => ({ Condition: '', Problem: problem });\n const config = this.OriginDecisionConfig;\n const qKey = this.SelectedRouteQuestionKey;\n const q = this.RouteSelectedQuestion;\n if (!config || !qKey || !q) return none();\n if (!config.key) return none('This Decision step has no key yet; give it one before routing on its answers');\n\n const field = q.kind === 'Likelihood' ? 'probability' : 'value';\n const reference = DecisionReferenceText(config.key, qKey, field);\n if (!reference) {\n return none(`The key \"${config.key}\" or question \"${qKey}\" cannot be written in a condition; rename it using letters, digits and underscores`);\n }\n switch (q.kind) {\n case 'Choice': return this.choiceRouteCondition(reference);\n case 'Likelihood': {\n const threshold = this.RouteLikelihoodThreshold;\n return threshold === null\n ? none('Enter a probability threshold from 0 to 1')\n : { Condition: `${reference} >= ${threshold}`, Problem: null };\n }\n case 'Score': {\n const index = this.routeScoreLevelIndex;\n return index >= 0 && index < this.RouteScoreLevels.length\n ? { Condition: `${reference} >= ${index}`, Problem: null }\n : none('Choose the lowest level this path takes');\n }\n default:\n return none();\n }\n }\n\n private choiceRouteCondition(reference: string): { Condition: string; Problem: string | null } {\n const option = this.SelectedRouteChoiceOption;\n if (!option) return { Condition: '', Problem: 'This question has no options to route on yet' };\n const literal = DecisionConditionLiteral(option);\n return literal\n ? { Condition: `${reference} === ${literal}`, Problem: null }\n : { Condition: '', Problem: `The option \"${option}\" cannot be written in a condition: it holds a backslash, a line break, or both kinds of quote. Rename the option to route on it` };\n }\n\n private computeChoiceCoverageHint(\n stepId: string,\n stepKey: string,\n questionKey: string,\n options: Array<{ value: string; description: string }>\n ): string {\n if (!options || options.length === 0) return '';\n const outgoingPaths = this.AllPaths.filter(p => UUIDsEqual(p.OriginStepID, stepId));\n const coveredValues = new Set<string>();\n for (const p of outgoingPaths) {\n if (!p.Condition) continue;\n const test = DecisionChoiceTestOf(p.Condition);\n if (test && test.NodeId === stepKey && test.QuestionKey === questionKey) {\n for (const v of test.Values) {\n coveredValues.add(v);\n }\n }\n }\n const allValues = options.map(o => o.value);\n const missing = allValues.filter(v => !coveredValues.has(v));\n const coveredCount = allValues.length - missing.length;\n if (missing.length === 0) {\n return `Paths cover all ${allValues.length} options`;\n }\n return `Paths cover ${coveredCount} of ${allValues.length} options (missing: ${missing.join(', ')})`;\n }\n\n // ── Section Collapse ──────────────────────────────────────\n\n ToggleSection(sectionId: string): void {\n this.collapsedSections[sectionId] = !this.collapsedSections[sectionId];\n }\n\n IsSectionCollapsed(sectionId: string): boolean {\n return this.collapsedSections[sectionId] === true;\n }\n\n // ── Step Event Handlers ─────────────────────────────────────\n\n OnNameChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Name = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnDescriptionChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Description = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnStatusChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Status = value as 'Active' | 'Disabled' | 'Pending';\n this.StepChanged.emit(this.Step);\n }\n\n OnStartingStepChange(checked: boolean): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.StartingStep = checked;\n this.StepChanged.emit(this.Step);\n }\n\n OnActionChange(actionId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.ActionID = actionId || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnPromptChange(promptId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.PromptID = promptId || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnSubAgentChange(agentId: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.SubAgentID = agentId || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnLoopBodyTypeChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.LoopBodyType = value as 'Action' | 'Prompt' | 'Sub-Agent';\n this.StepChanged.emit(this.Step);\n }\n\n OnInputMappingChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.ActionInputMapping = value || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnOutputMappingChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.ActionOutputMapping = value || null;\n this.StepChanged.emit(this.Step);\n }\n\n OnErrorBehaviorChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.OnErrorBehavior = value as 'fail' | 'continue' | 'retry';\n this.StepChanged.emit(this.Step);\n }\n\n OnRetryCountChange(value: number): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.RetryCount = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnTimeoutChange(value: number): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.TimeoutSeconds = value;\n this.StepChanged.emit(this.Step);\n }\n\n OnConfigurationChange(value: string): void {\n if (!this.Step || this.ReadOnly) return;\n this.Step.Configuration = value || null;\n this.StepChanged.emit(this.Step);\n }\n\n // ── Path Event Handlers ─────────────────────────────────────\n\n OnPathDescriptionChange(value: string): void {\n if (!this.PathEntity || this.ReadOnly) return;\n this.PathEntity.Description = value;\n this.PathChanged.emit(this.PathEntity);\n }\n\n OnPathConditionChange(value: string): void {\n if (!this.PathEntity || this.ReadOnly) return;\n this.PathEntity.Condition = value || null;\n this.PathChanged.emit(this.PathEntity);\n }\n\n OnPathPriorityChange(value: number): void {\n if (!this.PathEntity || this.ReadOnly) return;\n this.PathEntity.Priority = value;\n this.PathChanged.emit(this.PathEntity);\n }\n\n OnDeleteStep(): void {\n if (this.Step) {\n this.DeleteStepRequested.emit(this.Step);\n }\n }\n\n OnDeletePath(): void {\n if (this.PathEntity) {\n this.DeletePathRequested.emit(this.PathEntity);\n }\n }\n\n // ── Template Helpers ──────────────────────────────────────\n\n /** Safely extract string value from an input/textarea/select change event */\n protected InputValue(event: Event): string {\n return (event.target as HTMLInputElement).value;\n }\n\n /** Safely extract checked state from a checkbox change event */\n protected CheckedValue(event: Event): boolean {\n return (event.target as HTMLInputElement).checked;\n }\n\n /** Blurs the event's target, so Enter commits a field the way leaving it does. */\n protected BlurTarget(event: Event): void {\n (event.target as HTMLElement).blur();\n }\n\n /** Safely extract numeric value from a number input event */\n protected NumericValue(event: Event): number {\n return +(event.target as HTMLInputElement).value;\n }\n\n /** Format JSON for display */\n protected FormatJsonDisplay(value: string | null | undefined): string {\n if (!value) return '';\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n}\n","<div class=\"mj-agent-props\">\n\n <!-- Empty State -->\n @if (!isStepSelected && !isConnectionSelected) {\n <mj-empty-state class=\"mj-agent-props-empty\"\n Icon=\"fa-solid fa-arrow-pointer\"\n Title=\"No selection\"\n Message=\"Select a step or connection to view its properties\" />\n }\n\n <!-- ============================================ -->\n <!-- STEP PROPERTIES -->\n <!-- ============================================ -->\n @if (isStepSelected) {\n <!-- Step Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--step\"\n [style.border-left-color]=\"stepTypeColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">STEP</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon\" [style.background]=\"stepTypeColor\">\n <i class=\"fa-solid\" [ngClass]=\"stepTypeIcon\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-identity-name\">{{ Step!.Name }}</span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\" [style.color]=\"stepTypeColor\"\n [style.background]=\"stepTypeColor + '18'\">{{ stepTypeLabel }}</span>\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n <span class=\"mj-agent-props-status-label\">{{ Step!.Status }}</span>\n @if (Step!.StartingStep) {\n <span class=\"mj-agent-props-start-badge\">Start</span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- The flow run check's problems on this step (the runtime compiler's and validator's). -->\n @if (StepRunProblemMessages.length > 0) {\n <mj-alert class=\"mj-agent-props-run-problems\" Variant=\"warning\" Size=\"sm\" Title=\"This flow would not run\">\n <ul class=\"mj-agent-props-run-problems-list\">\n @for (message of StepRunProblemMessages; track $index) {\n <li>{{ message }}</li>\n }\n </ul>\n </mj-alert>\n }\n <!-- ── General Section ─────────────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('general')\" (ExpandedChange)=\"ToggleSection('general')\">\n <ng-template mjAccordionTitle><span>General</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Name</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"Step!.Name\"\n (input)=\"OnNameChange(InputValue($event))\"\n placeholder=\"Step name...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.Name }}</div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <textarea [value]=\"Step!.Description || ''\"\n (input)=\"OnDescriptionChange(InputValue($event))\"\n placeholder=\"Optional description...\" rows=\"2\"\n class=\"mj-agent-props-input mj-agent-props-textarea\"></textarea>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.Description || '—' }}\n </div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Status</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.Status\"\n (change)=\"OnStatusChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Active\">Active</option>\n <option value=\"Disabled\">Disabled</option>\n <option value=\"Pending\">Pending</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n {{ Step!.Status }}\n </div>\n }\n </div>\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-field mj-agent-props-field--row\">\n <label class=\"mj-agent-props-checkbox-label\">\n <input type=\"checkbox\" [checked]=\"Step!.StartingStep\"\n (change)=\"OnStartingStepChange(CheckedValue($event))\">\n Starting Step\n </label>\n </div>\n }\n @if (ReadOnly && Step!.StartingStep) {\n <div class=\"mj-agent-props-field\">\n <label>Starting Step</label>\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-start-badge\">Yes — this is the entry point</span>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Configuration Section ───────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('config')\" (ExpandedChange)=\"ToggleSection('config')\">\n <ng-template mjAccordionTitle><span>Configuration</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <!-- Loop Body Type (ForEach / While) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Body Type</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.LoopBodyType || 'Action'\"\n (change)=\"OnLoopBodyTypeChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Action\">Action</option>\n <option value=\"Prompt\">Prompt</option>\n <option value=\"Sub-Agent\">Sub-Agent</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.LoopBodyType || 'Action' }}\n </div>\n }\n </div>\n }\n <!-- Action Picker -->\n @if (showActionPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Action</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.ActionID || ''\"\n (change)=\"OnActionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Action --</option>\n @for (action of Actions; track action) {\n <option [value]=\"action.ID\">{{ action.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedActionName }}</div>\n }\n </div>\n }\n <!-- Prompt Picker -->\n @if (showPromptPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Prompt</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.PromptID || ''\"\n (change)=\"OnPromptChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Prompt --</option>\n @for (prompt of Prompts; track prompt) {\n <option [value]=\"prompt.ID\">{{ prompt.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedPromptName }}</div>\n }\n </div>\n }\n <!-- Sub-Agent Picker -->\n @if (showAgentPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Sub-Agent</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.SubAgentID || ''\"\n (change)=\"OnSubAgentChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Agent --</option>\n @for (agent of Agents; track agent) {\n <option [value]=\"agent.ID\">{{ agent.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedAgentName }}</div>\n }\n </div>\n }\n <!-- Loop Configuration (JSON) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Configuration</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.Configuration)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n (change)=\"OnConfigurationChange($any($event))\">\n </mj-code-editor>\n </div>\n }\n <!-- Decision Step Properties -->\n @if (ShowDecisionConfig) {\n <!-- Key -->\n <div class=\"mj-agent-props-field\">\n <label>Key <span class=\"mj-agent-props-required\">*</span></label>\n @if (!ReadOnly) {\n <!-- Typing only records the key; it is stored, and the paths that read it follow, on\n commit (blur or Enter). -->\n <input type=\"text\" [value]=\"DecisionKeyText\"\n (input)=\"OnDecisionKeyChange(InputValue($event))\"\n (change)=\"OnDecisionKeyCommit()\"\n (keydown.enter)=\"OnDecisionKeyCommit()\"\n placeholder=\"e.g. triage\" class=\"mj-agent-props-input\"\n [class.mj-agent-props-input--error]=\"!!DecisionKeyError\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ DecisionConfig.key }}</div>\n }\n @if (DecisionKeyError) {\n <span class=\"mj-agent-props-error\">{{ DecisionKeyError }}</span>\n }\n <span class=\"mj-agent-props-hint\">Names the step in path conditions: decisions.&lt;key&gt;.&lt;question&gt;</span>\n </div>\n\n <!-- Decision Prompt -->\n <div class=\"mj-agent-props-field\">\n <label>Decision Prompt</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.PromptID || ''\"\n (change)=\"OnDecisionPromptChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">Default Decision (system default)</option>\n @for (prompt of DecisionPrompts; track prompt.ID) {\n <option [value]=\"prompt.ID\">{{ prompt.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ SelectedDecisionPromptName }}</div>\n }\n <span class=\"mj-agent-props-hint\">Optional prompt bound to the Decision model type.</span>\n </div>\n\n <!-- State -->\n <div class=\"mj-agent-props-field\">\n <label>State</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"DecisionConfig.state ?? ''\"\n (input)=\"OnDecisionStateChange(InputValue($event))\"\n placeholder=\"payload\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ DecisionConfig.state || 'payload' }}</div>\n }\n <span class=\"mj-agent-props-hint\">What the questions are about: \"payload\" (default) or \"payload.&lt;path&gt;\"</span>\n </div>\n\n <!-- Questions List Header & Add Button -->\n <div class=\"mj-agent-props-questions-header\">\n <label class=\"mj-agent-props-questions-label\">\n Questions ({{ DecisionQuestionsList.length }})\n </label>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--sm\"\n (click)=\"OnAddDecisionQuestion()\">\n <i class=\"fa-solid fa-plus\"></i> Add Question\n </button>\n }\n </div>\n\n <!-- Questions List -->\n <div class=\"mj-agent-props-questions-list\">\n @for (item of DecisionQuestionsList; track item.key) {\n <div class=\"mj-agent-props-question-card\">\n <div class=\"mj-agent-props-question-card-header\">\n <span class=\"mj-agent-props-question-card-title\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <code>{{ item.key }}</code>\n </span>\n <span class=\"mj-agent-props-question-kind-badge\">{{ item.question.kind }}</span>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-icon-btn mj-agent-props-icon-btn--danger\"\n title=\"Remove Question\"\n (click)=\"OnRemoveDecisionQuestion(item.key)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n\n <div class=\"mj-agent-props-question-card-body\">\n <!-- Question Key -->\n <div class=\"mj-agent-props-field\">\n <label>Question Key</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"item.key\"\n (change)=\"OnDecisionQuestionKeyChange(item.key, InputValue($event))\"\n (keydown.enter)=\"BlurTarget($event)\"\n class=\"mj-agent-props-input\"\n [class.mj-agent-props-input--error]=\"!!QuestionKeyError(item.key)\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.key }}</div>\n }\n @if (QuestionKeyError(item.key); as keyError) {\n <span class=\"mj-agent-props-error\">{{ keyError }}</span>\n }\n </div>\n\n <!-- Question Kind -->\n <div class=\"mj-agent-props-field\">\n <label>Kind</label>\n @if (!ReadOnly) {\n <select [value]=\"item.question.kind\"\n (change)=\"OnDecisionQuestionKindSelect(item.key, InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Likelihood\">Likelihood (yes/no probability)</option>\n <option value=\"Choice\">Choice (pick one option)</option>\n <option value=\"Score\">Score (ordered rubric)</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.question.kind }}</div>\n }\n </div>\n\n <!-- Instructions -->\n <div class=\"mj-agent-props-field\">\n <label>Instructions <span class=\"mj-agent-props-required\">*</span></label>\n @if (!ReadOnly) {\n <textarea [value]=\"item.question.instructions || ''\"\n (input)=\"OnDecisionQuestionInstructionsChange(item.key, InputValue($event))\"\n rows=\"2\" class=\"mj-agent-props-input mj-agent-props-textarea\"\n placeholder=\"Full sentence instructions for the model...\"></textarea>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.question.instructions || '—' }}</div>\n }\n </div>\n\n <!-- Min Confidence -->\n <div class=\"mj-agent-props-field\">\n <label>Min Confidence (optional, 0..1)</label>\n @if (!ReadOnly) {\n <input type=\"number\" min=\"0\" max=\"1\" step=\"0.05\"\n [value]=\"item.question.minConfidence ?? ''\"\n (input)=\"OnDecisionQuestionMinConfidenceChange(item.key, InputValue($event))\"\n placeholder=\"e.g. 0.8\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.question.minConfidence ?? 'None' }}</div>\n }\n </div>\n\n <!-- Choice Options -->\n @if (item.question.kind === 'Choice') {\n <div class=\"mj-agent-props-options-section\">\n <div class=\"mj-agent-props-options-header\">\n <label>Options (2..255)</label>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--xs\"\n (click)=\"OnAddChoiceOption(item.key)\">\n <i class=\"fa-solid fa-plus\"></i> Add Option\n </button>\n }\n </div>\n @for (opt of ChoiceOptionsOf(item.question); track $index) {\n <div class=\"mj-agent-props-option-row\">\n <!-- Committed on change: paths compare against the value, and follow it when it is renamed. -->\n <input type=\"text\" [value]=\"opt.value\"\n [readonly]=\"ReadOnly\"\n (change)=\"OnChoiceOptionValueChange(item.key, $index, InputValue($event))\"\n (keydown.enter)=\"BlurTarget($event)\"\n placeholder=\"Value (e.g. billing)\" class=\"mj-agent-props-input mj-agent-props-input--sm\"\n [class.mj-agent-props-input--error]=\"!!OptionValueError(item.key, $index)\">\n <input type=\"text\" [value]=\"opt.description\"\n [readonly]=\"ReadOnly\"\n (input)=\"OnChoiceOptionChange(item.key, $index, 'description', InputValue($event))\"\n placeholder=\"Description for model...\" class=\"mj-agent-props-input mj-agent-props-input--sm\">\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-icon-btn mj-agent-props-icon-btn--danger\"\n title=\"Remove Option\"\n (click)=\"OnRemoveChoiceOption(item.key, $index)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n @if (OptionValueError(item.key, $index); as valueError) {\n <span class=\"mj-agent-props-error\">{{ valueError }}</span>\n }\n }\n <!-- Choice Coverage Hint -->\n <div class=\"mj-agent-props-coverage-hint\">\n <i class=\"fa-solid fa-code-fork\"></i>\n <span>{{ GetChoiceCoverageHint(item.key, ChoiceOptionsOf(item.question)) }}</span>\n </div>\n </div>\n }\n\n <!-- Score Levels -->\n @if (item.question.kind === 'Score') {\n <div class=\"mj-agent-props-levels-section\">\n <div class=\"mj-agent-props-options-header\">\n <label>Levels (2..10, lowest first)</label>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--xs\"\n (click)=\"OnAddScoreLevel(item.key)\">\n <i class=\"fa-solid fa-plus\"></i> Add Level\n </button>\n }\n </div>\n @for (level of ScoreLevelsOf(item.question); track $index) {\n <div class=\"mj-agent-props-level-row\">\n <span class=\"mj-agent-props-level-badge\">{{ $index }}</span>\n <input type=\"text\" [value]=\"level\"\n [readonly]=\"ReadOnly\"\n (input)=\"OnScoreLevelChange(item.key, $index, InputValue($event))\"\n placeholder=\"Description for level...\" class=\"mj-agent-props-input mj-agent-props-input--sm\">\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-icon-btn\"\n [disabled]=\"$first\"\n title=\"Move Up\"\n (click)=\"OnMoveScoreLevel(item.key, $index, 'up')\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button type=\"button\" class=\"mj-agent-props-icon-btn\"\n [disabled]=\"$last\"\n title=\"Move Down\"\n (click)=\"OnMoveScoreLevel(item.key, $index, 'down')\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n <button type=\"button\" class=\"mj-agent-props-icon-btn mj-agent-props-icon-btn--danger\"\n title=\"Remove Level\"\n (click)=\"OnRemoveScoreLevel(item.key, $index)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Why the runtime would refuse this step, in the runtime reader's own words -->\n @if (DecisionValidationError) {\n <mj-alert class=\"mj-agent-props-run-problems\" Variant=\"error\" Size=\"sm\"\n Title=\"This step cannot run\" [Message]=\"DecisionValidationError\"></mj-alert>\n }\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Data Mapping Section (Action steps) ─── -->\n @if (Step!.StepType === 'Action' || showActionPicker) {\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('mapping')\" (ExpandedChange)=\"ToggleSection('mapping')\">\n <ng-template mjAccordionTitle><span>Data Mapping</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Input Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionInputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON input mapping...\"\n (change)=\"OnInputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Output Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionOutputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON output mapping...\"\n (change)=\"OnOutputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n <!-- ── Error Handling Section ──────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('errors')\" (ExpandedChange)=\"ToggleSection('errors')\">\n <ng-template mjAccordionTitle><span>Error Handling</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>On Error</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.OnErrorBehavior\"\n (change)=\"OnErrorBehaviorChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"fail\">Fail (stop flow)</option>\n <option value=\"continue\">Continue (ignore error)</option>\n <option value=\"retry\">Retry</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.OnErrorBehavior === 'fail' ? 'Fail (stop flow)' :\n Step!.OnErrorBehavior === 'continue' ? 'Continue (ignore error)' : 'Retry' }}\n </div>\n }\n </div>\n @if (Step!.OnErrorBehavior === 'retry') {\n <div class=\"mj-agent-props-field\">\n <label>Retry Count</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.RetryCount\" min=\"0\" max=\"10\"\n (input)=\"OnRetryCountChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.RetryCount }}</div>\n }\n </div>\n }\n <div class=\"mj-agent-props-field\">\n <label>Timeout (seconds)</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.TimeoutSeconds\" min=\"1\"\n (input)=\"OnTimeoutChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.TimeoutSeconds }}s</div>\n }\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Danger Zone ─────────────────────── -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeleteStep()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Step\n </button>\n </div>\n }\n </div>\n }\n\n <!-- ============================================ -->\n <!-- PATH PROPERTIES -->\n <!-- ============================================ -->\n @if (isConnectionSelected) {\n <!-- Path Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--path\"\n [style.border-left-color]=\"pathAccentColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">PATH</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Path identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon mj-agent-props-identity-icon--path\"\n [style.background]=\"pathAccentColor\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-path-route\">\n <span class=\"mj-agent-props-path-step-name\">{{ originStepName }}</span>\n <i class=\"fa-solid fa-arrow-right mj-agent-props-path-arrow\"></i>\n <span class=\"mj-agent-props-path-step-name\">{{ destinationStepName }}</span>\n </span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\"\n [style.color]=\"pathAccentColor\"\n [style.background]=\"pathAccentColor + '18'\">\n {{ isConditionalPath ? 'Conditional' : 'Always' }}\n </span>\n @if (PathEntity!.Priority !== 0) {\n <span class=\"mj-agent-props-priority-badge\">\n Priority: {{ PathEntity!.Priority }}\n </span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- ── Overview Section ────────────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-overview')\" (ExpandedChange)=\"ToggleSection('path-overview')\">\n <ng-template mjAccordionTitle><span>Route</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>From</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ originStepName }}\n </div>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>To</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ destinationStepName }}\n </div>\n </div>\n <span class=\"mj-agent-props-hint\">To change the route, rewire the connection on the canvas.</span>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Path Settings Section ───────────── -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-settings')\" (ExpandedChange)=\"ToggleSection('path-settings')\">\n <ng-template mjAccordionTitle><span>Settings</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"PathEntity!.Description || ''\"\n (input)=\"OnPathDescriptionChange(InputValue($event))\"\n placeholder=\"Path label...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ PathEntity!.Description || '—' }}\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">Displayed as a label on the connection line</span>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Condition</label>\n @if (!ReadOnly) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition || ''\"\n language=\"javascript\"\n [readonly]=\"false\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"e.g. payload.status === 'active'\"\n (change)=\"OnPathConditionChange($any($event))\">\n </mj-code-editor>\n }\n @if (ReadOnly && PathEntity!.Condition) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition\"\n language=\"javascript\"\n [readonly]=\"true\"\n setup=\"minimal\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n }\n @if (ReadOnly && !PathEntity!.Condition) {\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n No condition (always taken)\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">\n JavaScript expression evaluated at runtime. Leave empty for unconditional.\n </span>\n }\n <!-- The flow run check's problems with this condition (the runtime validator's). -->\n @if (PathRunProblemMessages.length > 0) {\n <mj-alert class=\"mj-agent-props-run-problems\" Variant=\"warning\" Size=\"sm\" Title=\"This condition would stop the flow\">\n <ul class=\"mj-agent-props-run-problems-list\">\n @for (message of PathRunProblemMessages; track $index) {\n <li>{{ message }}</li>\n }\n </ul>\n </mj-alert>\n }\n </div>\n <!-- Route on Answer Helper (when origin step is a Decision step) -->\n @if (OriginDecisionStep && OriginDecisionConfig) {\n <div class=\"mj-agent-props-route-helper\">\n <div class=\"mj-agent-props-route-helper-header\">\n <span class=\"mj-agent-props-route-helper-title\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Route on Answer\n </span>\n </div>\n\n <div class=\"mj-agent-props-field\">\n <label>Decision Question</label>\n <select [value]=\"SelectedRouteQuestionKey\"\n (change)=\"OnRouteQuestionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n @for (q of OriginDecisionQuestions; track q.key) {\n <option [value]=\"q.key\">{{ q.key }} ({{ q.question.kind }})</option>\n }\n </select>\n </div>\n\n @if (RouteSelectedQuestion?.kind === 'Choice') {\n <div class=\"mj-agent-props-field\">\n <label>Choice Option</label>\n <select [value]=\"SelectedRouteChoiceOption\"\n (change)=\"OnRouteChoiceOptionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n @for (opt of RouteChoiceOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.value }} — {{ opt.description }}</option>\n }\n </select>\n </div>\n @if (RouteChoiceCoverageHint) {\n <div class=\"mj-agent-props-coverage-hint\">\n <i class=\"fa-solid fa-code-fork\"></i>\n <span>{{ RouteChoiceCoverageHint }}</span>\n </div>\n }\n }\n\n @if (RouteSelectedQuestion?.kind === 'Likelihood') {\n <div class=\"mj-agent-props-field\">\n <label>Probability Threshold (0..1)</label>\n <input type=\"number\" min=\"0\" max=\"1\" step=\"0.05\"\n [value]=\"RouteThresholdText\"\n (input)=\"OnRouteLikelihoodThresholdChange(InputValue($event))\"\n class=\"mj-agent-props-input\"\n [class.mj-agent-props-input--error]=\"RouteLikelihoodThreshold === null\">\n <span class=\"mj-agent-props-hint\">Route taken when probability &gt;= threshold</span>\n </div>\n }\n\n @if (RouteSelectedQuestion?.kind === 'Score') {\n <div class=\"mj-agent-props-field\">\n <label>Minimum Level (Score &gt;= Index)</label>\n <select [value]=\"RouteScoreLevelIndex\"\n (change)=\"OnRouteScoreLevelChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n @for (level of RouteScoreLevels; track $index) {\n <option [value]=\"$index\">Level {{ $index }}: {{ level }}</option>\n }\n </select>\n </div>\n }\n\n @if (RouteConditionProblem; as routeProblem) {\n <span class=\"mj-agent-props-error\">{{ routeProblem }}</span>\n }\n\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--secondary\"\n [disabled]=\"!GetGeneratedRouteCondition()\"\n (click)=\"ApplyRouteCondition()\">\n <i class=\"fa-solid fa-code\"></i> Apply to Condition\n </button>\n }\n </div>\n }\n <div class=\"mj-agent-props-field\">\n <label>Priority</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"PathEntity!.Priority\" min=\"-100\" max=\"100\"\n (input)=\"OnPathPriorityChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ PathEntity!.Priority }}</div>\n }\n <span class=\"mj-agent-props-hint\">Higher priority paths are evaluated first when multiple paths leave a step.</span>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- ── Danger Zone ─────────────────────── -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeletePath()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Path\n </button>\n </div>\n }\n </div>\n }\n</div>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-step-list.component.d.ts","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-step-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAA8C,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;;AAG7F;;;GAGG;AACH,qBA2Ma,sBAAsB;IACxB,KAAK,EAAE,mBAAmB,EAAE,CAAM;IAClC,KAAK,EAAE,uBAAuB,EAAE,CAAM;IACtC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,WAAW,oCAA2C;IAEhE,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO;IAIlD,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;IAWpD,iDAAiD;IACjD,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;yCAvBzC,sBAAsB;2CAAtB,sBAAsB;CA0BlC"}
1
+ {"version":3,"file":"agent-step-list.component.d.ts","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-step-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAA8C,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;;AAI7F;;;GAGG;AACH,qBA2Ma,sBAAsB;IACxB,KAAK,EAAE,mBAAmB,EAAE,CAAM;IAClC,KAAK,EAAE,uBAAuB,EAAE,CAAM;IACtC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,WAAW,oCAA2C;IAEhE,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO;IAIlD,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;IAmBpD,iDAAiD;IACjD,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;yCA/BzC,sBAAsB;2CAAtB,sBAAsB;CAkClC"}
@@ -1,5 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { UUIDsEqual } from '@memberjunction/global';
3
+ import { ReadFlowDecisionStepConfiguration } from '@memberjunction/ai-core-plus';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@memberjunction/ng-ui-components";
5
6
  function AgentStepListComponent_Conditional_7_For_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
@@ -137,6 +138,14 @@ export class AgentStepListComponent {
137
138
  case 'Sub-Agent': return step.SubAgent || '—';
138
139
  case 'ForEach':
139
140
  case 'While': return `${step.LoopBodyType ?? 'Action'} loop`;
141
+ case 'Decision': {
142
+ const read = ReadFlowDecisionStepConfiguration(step.Configuration);
143
+ if ('Config' in read) {
144
+ const count = Object.keys(read.Config.questions || {}).length;
145
+ return `${read.Config.key} · ${count} ${count === 1 ? 'question' : 'questions'}`;
146
+ }
147
+ return 'Unconfigured';
148
+ }
140
149
  default: return '—';
141
150
  }
142
151
  }
@@ -275,5 +284,5 @@ export class AgentStepListComponent {
275
284
  }], StepClicked: [{
276
285
  type: Output
277
286
  }] }); })();
278
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentStepListComponent, { className: "AgentStepListComponent", filePath: "src/lib/agent-editor/agent-step-list.component.ts", lineNumber: 212 }); })();
287
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentStepListComponent, { className: "AgentStepListComponent", filePath: "src/lib/agent-editor/agent-step-list.component.ts", lineNumber: 213 }); })();
279
288
  //# sourceMappingURL=agent-step-list.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-step-list.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-step-list.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Tabular list view of agent steps and paths.\n * Alternative to the visual flow canvas — useful for quick overview and bulk editing.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-step-list',\n template: `\n <div class=\"mj-step-list\">\n <!-- Steps Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-circle-nodes\"></i> Steps ({{ Steps.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Steps.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Status</th>\n <th>Start</th>\n <th>Configured</th>\n </tr>\n </thead>\n <tbody>\n @for (step of Steps; track step) {\n <tr\n [class.mj-step-list-row--selected]=\"IsStepSelected(step)\"\n (click)=\"StepClicked.emit(step)\">\n <td class=\"mj-step-list-name\">{{ step.Name }}</td>\n <td>\n <span class=\"mj-step-list-type-badge\" [attr.data-type]=\"step.StepType\">\n {{ step.StepType }}\n </span>\n </td>\n <td>\n <span class=\"mj-step-list-status\" [attr.data-status]=\"step.Status\">\n {{ step.Status }}\n </span>\n </td>\n <td>\n @if (step.StartingStep) {\n <i class=\"fa-solid fa-check mj-step-list-check\"></i>\n }\n </td>\n <td class=\"mj-step-list-configured\">{{ getConfiguredItem(step) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Steps.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No steps defined\" />\n }\n </div>\n </div>\n \n <!-- Paths Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-link\"></i> Paths ({{ Paths.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Paths.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>From</th>\n <th>To</th>\n <th>Condition</th>\n <th>Priority</th>\n </tr>\n </thead>\n <tbody>\n @for (path of Paths; track path) {\n <tr>\n <td>{{ path.OriginStep }}</td>\n <td>{{ path.DestinationStep }}</td>\n <td class=\"mj-step-list-condition\">{{ path.Condition || '(always)' }}</td>\n <td>{{ path.Priority }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Paths.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No paths defined\" />\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n .mj-step-list {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n }\n\n .mj-step-list-section {\n margin-bottom: 24px;\n }\n\n .mj-step-list-section-header h4 {\n font-size: 14px;\n font-weight: 600;\n color: #334155;\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n i { font-size: 13px; color: #64748b; }\n }\n\n .mj-step-list-table-wrap {\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .mj-step-list-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n\n th {\n background: #f8fafc;\n padding: 8px 12px;\n text-align: left;\n font-weight: 600;\n color: #64748b;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid #e2e8f0;\n }\n\n td {\n padding: 8px 12px;\n color: #334155;\n border-bottom: 1px solid #f1f5f9;\n }\n\n tbody tr {\n cursor: pointer;\n transition: background-color 0.1s ease;\n &:hover { background: #f8fafc; }\n &:last-child td { border-bottom: none; }\n }\n }\n\n .mj-step-list-row--selected {\n background: #eff6ff !important;\n }\n\n .mj-step-list-name { font-weight: 500; }\n\n .mj-step-list-type-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 4px;\n background: #f1f5f9;\n color: #475569;\n }\n\n .mj-step-list-status {\n font-size: 11px;\n font-weight: 500;\n &[data-status=\"Active\"] { color: #10b981; }\n &[data-status=\"Disabled\"] { color: #94a3b8; }\n &[data-status=\"Pending\"] { color: #f59e0b; }\n }\n\n .mj-step-list-check { color: #10b981; font-size: 12px; }\n\n .mj-step-list-configured {\n color: #64748b;\n font-size: 12px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-condition {\n font-family: 'SF Mono', monospace;\n font-size: 11px;\n color: #64748b;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-empty {\n padding: 24px;\n text-align: center;\n color: #94a3b8;\n font-size: 13px;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AgentStepListComponent {\n @Input() Steps: MJAIAgentStepEntity[] = [];\n @Input() Paths: MJAIAgentStepPathEntity[] = [];\n @Input() SelectedStepID: string | null = null;\n\n @Output() StepClicked = new EventEmitter<MJAIAgentStepEntity>();\n\n IsStepSelected(step: MJAIAgentStepEntity): boolean {\n return UUIDsEqual(this.SelectedStepID, step.ID);\n }\n\n GetConfiguredItem(step: MJAIAgentStepEntity): string {\n switch (step.StepType) {\n case 'Action': return step.Action || '—';\n case 'Prompt': return step.Prompt || '—';\n case 'Sub-Agent': return step.SubAgent || '—';\n case 'ForEach':\n case 'While': return `${step.LoopBodyType ?? 'Action'} loop`;\n default: return '—';\n }\n }\n\n /** @deprecated Use {@link GetConfiguredItem}. */\n getConfiguredItem(step: MJAIAgentStepEntity): string {\n return this.GetConfiguredItem(step);\n }\n}\n"]}
1
+ {"version":3,"file":"agent-step-list.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-step-list.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { ReadFlowDecisionStepConfiguration } from '@memberjunction/ai-core-plus';\n\n/**\n * Tabular list view of agent steps and paths.\n * Alternative to the visual flow canvas — useful for quick overview and bulk editing.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-step-list',\n template: `\n <div class=\"mj-step-list\">\n <!-- Steps Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-circle-nodes\"></i> Steps ({{ Steps.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Steps.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Status</th>\n <th>Start</th>\n <th>Configured</th>\n </tr>\n </thead>\n <tbody>\n @for (step of Steps; track step) {\n <tr\n [class.mj-step-list-row--selected]=\"IsStepSelected(step)\"\n (click)=\"StepClicked.emit(step)\">\n <td class=\"mj-step-list-name\">{{ step.Name }}</td>\n <td>\n <span class=\"mj-step-list-type-badge\" [attr.data-type]=\"step.StepType\">\n {{ step.StepType }}\n </span>\n </td>\n <td>\n <span class=\"mj-step-list-status\" [attr.data-status]=\"step.Status\">\n {{ step.Status }}\n </span>\n </td>\n <td>\n @if (step.StartingStep) {\n <i class=\"fa-solid fa-check mj-step-list-check\"></i>\n }\n </td>\n <td class=\"mj-step-list-configured\">{{ getConfiguredItem(step) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Steps.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No steps defined\" />\n }\n </div>\n </div>\n \n <!-- Paths Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-link\"></i> Paths ({{ Paths.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Paths.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>From</th>\n <th>To</th>\n <th>Condition</th>\n <th>Priority</th>\n </tr>\n </thead>\n <tbody>\n @for (path of Paths; track path) {\n <tr>\n <td>{{ path.OriginStep }}</td>\n <td>{{ path.DestinationStep }}</td>\n <td class=\"mj-step-list-condition\">{{ path.Condition || '(always)' }}</td>\n <td>{{ path.Priority }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Paths.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No paths defined\" />\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n .mj-step-list {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n }\n\n .mj-step-list-section {\n margin-bottom: 24px;\n }\n\n .mj-step-list-section-header h4 {\n font-size: 14px;\n font-weight: 600;\n color: #334155;\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n i { font-size: 13px; color: #64748b; }\n }\n\n .mj-step-list-table-wrap {\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .mj-step-list-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n\n th {\n background: #f8fafc;\n padding: 8px 12px;\n text-align: left;\n font-weight: 600;\n color: #64748b;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid #e2e8f0;\n }\n\n td {\n padding: 8px 12px;\n color: #334155;\n border-bottom: 1px solid #f1f5f9;\n }\n\n tbody tr {\n cursor: pointer;\n transition: background-color 0.1s ease;\n &:hover { background: #f8fafc; }\n &:last-child td { border-bottom: none; }\n }\n }\n\n .mj-step-list-row--selected {\n background: #eff6ff !important;\n }\n\n .mj-step-list-name { font-weight: 500; }\n\n .mj-step-list-type-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 4px;\n background: #f1f5f9;\n color: #475569;\n }\n\n .mj-step-list-status {\n font-size: 11px;\n font-weight: 500;\n &[data-status=\"Active\"] { color: #10b981; }\n &[data-status=\"Disabled\"] { color: #94a3b8; }\n &[data-status=\"Pending\"] { color: #f59e0b; }\n }\n\n .mj-step-list-check { color: #10b981; font-size: 12px; }\n\n .mj-step-list-configured {\n color: #64748b;\n font-size: 12px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-condition {\n font-family: 'SF Mono', monospace;\n font-size: 11px;\n color: #64748b;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-empty {\n padding: 24px;\n text-align: center;\n color: #94a3b8;\n font-size: 13px;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AgentStepListComponent {\n @Input() Steps: MJAIAgentStepEntity[] = [];\n @Input() Paths: MJAIAgentStepPathEntity[] = [];\n @Input() SelectedStepID: string | null = null;\n\n @Output() StepClicked = new EventEmitter<MJAIAgentStepEntity>();\n\n IsStepSelected(step: MJAIAgentStepEntity): boolean {\n return UUIDsEqual(this.SelectedStepID, step.ID);\n }\n\n GetConfiguredItem(step: MJAIAgentStepEntity): string {\n switch (step.StepType) {\n case 'Action': return step.Action || '—';\n case 'Prompt': return step.Prompt || '—';\n case 'Sub-Agent': return step.SubAgent || '—';\n case 'ForEach':\n case 'While': return `${step.LoopBodyType ?? 'Action'} loop`;\n case 'Decision': {\n const read = ReadFlowDecisionStepConfiguration(step.Configuration);\n if ('Config' in read) {\n const count = Object.keys(read.Config.questions || {}).length;\n return `${read.Config.key} · ${count} ${count === 1 ? 'question' : 'questions'}`;\n }\n return 'Unconfigured';\n }\n default: return '—';\n }\n }\n\n /** @deprecated Use {@link GetConfiguredItem}. */\n getConfiguredItem(step: MJAIAgentStepEntity): string {\n return this.GetConfiguredItem(step);\n }\n}\n"]}