@memberjunction/ng-dashboards 5.11.0 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +34 -2
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +586 -223
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +8 -0
  7. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-filter-panel.component.js +85 -52
  9. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  10. package/dist/AI/components/charts/performance-heatmap.component.d.ts +1 -0
  11. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  12. package/dist/AI/components/charts/performance-heatmap.component.js +27 -5
  13. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  14. package/dist/AI/components/charts/time-series-chart.component.d.ts +5 -0
  15. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.js +23 -8
  17. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  18. package/dist/AI/components/execution-monitoring.component.js +2 -2
  19. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  20. package/dist/AI/components/models/model-management.component.js +2 -2
  21. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  22. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  23. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  24. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-version-control.component.js +2 -2
  26. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +83 -0
  27. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -0
  28. package/dist/AI/components/requests/agent-requests-resource.component.js +547 -0
  29. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -0
  30. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  31. package/dist/AI/components/system/system-configuration.component.js +2 -2
  32. package/dist/AI/components/widgets/kpi-card.component.js +7 -7
  33. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  34. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  35. package/dist/AI/components/widgets/live-execution-widget.component.js +6 -6
  36. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  37. package/dist/AI/index.d.ts +1 -0
  38. package/dist/AI/index.d.ts.map +1 -1
  39. package/dist/AI/index.js +2 -0
  40. package/dist/AI/index.js.map +1 -1
  41. package/dist/APIKeys/api-applications-panel.component.js +3 -3
  42. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  43. package/dist/APIKeys/api-key-create-dialog.component.js +3 -3
  44. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  45. package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
  46. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  47. package/dist/APIKeys/api-key-list.component.js +3 -3
  48. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  49. package/dist/APIKeys/api-keys-resource.component.js +1 -1
  50. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  51. package/dist/APIKeys/api-scopes-panel.component.js +2 -2
  52. package/dist/APIKeys/api-usage-panel.component.js +2 -2
  53. package/dist/Actions/components/actions-overview.component.js +2 -2
  54. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  55. package/dist/Actions/components/explorer/action-breadcrumb.component.js +2 -2
  56. package/dist/Actions/components/explorer/action-card.component.js +2 -2
  57. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  58. package/dist/Actions/components/explorer/action-list-item.component.js +2 -2
  59. package/dist/Actions/components/explorer/action-toolbar.component.js +2 -2
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +2 -2
  61. package/dist/Actions/components/explorer/new-action-panel.component.js +2 -2
  62. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  63. package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
  64. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  65. package/dist/Communication/communication-dashboard.component.js +2 -2
  66. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  67. package/dist/Communication/communication-logs-resource.component.js +3 -3
  68. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  69. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  70. package/dist/Communication/communication-monitor-resource.component.js +5 -5
  71. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  72. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  73. package/dist/Communication/communication-providers-resource.component.js +3 -3
  74. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  75. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  76. package/dist/Communication/communication-runs-resource.component.js +3 -3
  77. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  78. package/dist/Communication/communication-templates-resource.component.js +2 -2
  79. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  80. package/dist/ComponentStudio/component-studio-dashboard.component.js +2 -2
  81. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
  82. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
  83. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
  84. package/dist/ComponentStudio/components/browser/component-browser.component.js +2 -2
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +2 -2
  86. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +2 -2
  88. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +2 -2
  90. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js +2 -2
  92. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +2 -2
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +2 -2
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  96. package/dist/ComponentStudio/components/text-import-dialog.component.js +2 -2
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  98. package/dist/ComponentStudio/components/workspace/component-preview.component.js +2 -2
  99. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +2 -2
  100. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-audit-resource.component.js +9 -9
  102. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +11 -3
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.js +2 -2
  107. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-overview-resource.component.js +12 -11
  109. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-types-resource.component.js +9 -9
  111. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  112. package/dist/Credentials/credentials-dashboard.component.js +2 -2
  113. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +2 -2
  114. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
  115. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  116. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +2 -2
  117. package/dist/DataExplorer/components/view-selector/view-selector.component.js +2 -2
  118. package/dist/DataExplorer/data-explorer-dashboard.component.js +4 -4
  119. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  120. package/dist/Home/home-dashboard.component.js +2 -2
  121. package/dist/Integration/components/activity/activity.component.d.ts +1 -1
  122. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  123. package/dist/Integration/components/activity/activity.component.js +5 -5
  124. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  125. package/dist/Integration/components/connections/connections.component.d.ts +31 -2
  126. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  127. package/dist/Integration/components/connections/connections.component.js +753 -412
  128. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  129. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -3
  130. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  131. package/dist/Integration/components/overview/overview.component.d.ts +0 -1
  132. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  133. package/dist/Integration/components/overview/overview.component.js +3 -6
  134. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  135. package/dist/Integration/components/pipelines/pipelines.component.js +3 -3
  136. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  137. package/dist/Integration/components/schedules/schedules.component.d.ts +20 -0
  138. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  139. package/dist/Integration/components/schedules/schedules.component.js +97 -5
  140. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  141. package/dist/Integration/components/visual-editor/visual-editor.component.js +2 -2
  142. package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
  143. package/dist/Integration/components/widgets/integration-card.component.js +5 -1
  144. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  145. package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
  146. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  147. package/dist/Integration/integration.module.d.ts +2 -1
  148. package/dist/Integration/integration.module.d.ts.map +1 -1
  149. package/dist/Integration/integration.module.js +7 -3
  150. package/dist/Integration/integration.module.js.map +1 -1
  151. package/dist/Integration/services/integration-data.service.d.ts +27 -2
  152. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  153. package/dist/Integration/services/integration-data.service.js +107 -4
  154. package/dist/Integration/services/integration-data.service.js.map +1 -1
  155. package/dist/Lists/components/lists-browse-resource.component.js +2 -2
  156. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  157. package/dist/Lists/components/lists-categories-resource.component.js +2 -2
  158. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  159. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
  160. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  161. package/dist/Lists/components/lists-operations-resource.component.js +2 -2
  162. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  163. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +3 -3
  164. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  165. package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
  166. package/dist/MCP/components/mcp-log-detail-panel.component.js +2 -2
  167. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  168. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  169. package/dist/MCP/components/mcp-test-tool-dialog.component.js +2 -2
  170. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  171. package/dist/MCP/mcp-dashboard.component.js +2 -2
  172. package/dist/MCP/mcp-filter-panel.component.js +2 -2
  173. package/dist/QueryBrowser/query-browser-resource.component.js +7 -7
  174. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  175. package/dist/Scheduling/components/index.d.ts +0 -1
  176. package/dist/Scheduling/components/index.d.ts.map +1 -1
  177. package/dist/Scheduling/components/index.js +0 -1
  178. package/dist/Scheduling/components/index.js.map +1 -1
  179. package/dist/Scheduling/components/scheduling-activity.component.js +2 -2
  180. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +6 -9
  181. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  182. package/dist/Scheduling/components/scheduling-jobs.component.js +118 -110
  183. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  184. package/dist/Scheduling/components/scheduling-overview.component.js +3 -3
  185. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  186. package/dist/Scheduling/scheduling-dashboard.component.js +2 -2
  187. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
  188. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  189. package/dist/Testing/components/testing-analytics.component.js +2 -2
  190. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  191. package/dist/Testing/components/testing-dashboard-tab.component.js +4 -4
  192. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  193. package/dist/Testing/components/testing-explorer.component.js +2 -2
  194. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  195. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  196. package/dist/Testing/components/testing-review.component.js +5 -5
  197. package/dist/Testing/components/testing-review.component.js.map +1 -1
  198. package/dist/Testing/components/testing-runs.component.js +2 -2
  199. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  200. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +2 -2
  201. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  202. package/dist/Testing/components/widgets/suite-tree.component.js +4 -4
  203. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  204. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +2 -2
  205. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  206. package/dist/Testing/testing-dashboard.component.js +2 -2
  207. package/dist/VersionHistory/components/diff-resource.component.js +2 -2
  208. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  209. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  210. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  211. package/dist/VersionHistory/components/restore-resource.component.js +3 -3
  212. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  213. package/dist/__tests__/integration-data-service.test.js +1 -0
  214. package/dist/__tests__/integration-data-service.test.js.map +1 -1
  215. package/dist/module.d.ts +52 -49
  216. package/dist/module.d.ts.map +1 -1
  217. package/dist/module.js +25 -6
  218. package/dist/module.js.map +1 -1
  219. package/dist/public-api.d.ts +1 -1
  220. package/dist/public-api.d.ts.map +1 -1
  221. package/dist/public-api.js +1 -1
  222. package/dist/public-api.js.map +1 -1
  223. package/package.json +42 -40
  224. package/dist/Scheduling/components/job-slideout.component.d.ts +0 -45
  225. package/dist/Scheduling/components/job-slideout.component.d.ts.map +0 -1
  226. package/dist/Scheduling/components/job-slideout.component.js +0 -459
  227. package/dist/Scheduling/components/job-slideout.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-test-tool-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-test-tool-dialog.component.ts","../../../src/MCP/components/mcp-test-tool-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Test Tool Slide-Out Panel Component\n *\n * Provides a beautiful UX for testing MCP tools with:\n * - Server/Connection/Tool selection\n * - Dynamic parameter input UI based on JSON Schema\n * - Tool execution with results display\n * - User settings caching via UserInfoEngine\n * - Resizable slide-out panel with width persistence\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, HostListener, ElementRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Interface for JSON Schema property definition\n */\ninterface JsonSchemaProperty {\n type?: string | string[];\n description?: string;\n default?: unknown;\n enum?: unknown[];\n required?: boolean;\n items?: JsonSchemaProperty;\n properties?: Record<string, JsonSchemaProperty>;\n format?: string;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n}\n\n/**\n * Interface for JSON Schema\n */\ninterface JsonSchema {\n type?: string;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n description?: string;\n}\n\n/**\n * Parameter input configuration derived from schema\n */\ninterface ParameterConfig {\n name: string;\n type: string;\n description: string;\n required: boolean;\n defaultValue: unknown;\n enumValues: unknown[];\n format: string | null;\n minimum?: number;\n maximum?: number;\n}\n\n/**\n * Tool execution result\n */\ninterface ToolExecutionResult {\n Success: boolean;\n ErrorMessage?: string;\n Result?: unknown;\n DurationMs?: number;\n}\n\n/**\n * Server data for selection\n */\nexport interface TestToolServerData {\n ID: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Connection data for selection\n */\nexport interface TestToolConnectionData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Tool data for selection\n */\nexport interface TestToolData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n ToolName: string;\n ToolTitle: string | null;\n ToolDescription: string | null;\n InputSchema: string;\n Status: string;\n}\n\n/**\n * GraphQL mutation for executing MCP tool\n */\nconst ExecuteMCPToolMutation = gql`\n mutation ExecuteMCPTool($input: ExecuteMCPToolInput!) {\n ExecuteMCPTool(input: $input) {\n Success\n ErrorMessage\n Result\n DurationMs\n }\n }\n`;\n\n@Component({\n standalone: false,\n selector: 'mj-mcp-test-tool-dialog',\n templateUrl: './mcp-test-tool-dialog.component.html',\n styleUrls: ['./mcp-test-tool-dialog.component.css'],\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class MCPTestToolDialogComponent implements OnInit, OnDestroy {\n\n // ========================================\n // Inputs\n // ========================================\n\n @Input() Visible = false;\n @Input() Servers: TestToolServerData[] = [];\n @Input() Connections: TestToolConnectionData[] = [];\n @Input() Tools: TestToolData[] = [];\n\n /** Pre-selected server ID */\n @Input() SelectedServerID: string | null = null;\n\n /** Pre-selected connection ID */\n @Input() SelectedConnectionID: string | null = null;\n\n /** Pre-selected tool ID */\n @Input() SelectedToolID: string | null = null;\n\n // ========================================\n // Outputs\n // ========================================\n\n @Output() Close = new EventEmitter<void>();\n\n // ========================================\n // State\n // ========================================\n\n /** Current step: 'select' | 'configure' | 'results' */\n CurrentStep: 'select' | 'configure' | 'results' = 'select';\n\n /** Selected IDs */\n ServerID: string | null = null;\n ConnectionID: string | null = null;\n ToolID: string | null = null;\n\n /** Filtered lists based on selection */\n FilteredConnections: TestToolConnectionData[] = [];\n FilteredTools: TestToolData[] = [];\n\n /** Display lists for dropdowns (filtered by search) */\n DisplayServers: TestToolServerData[] = [];\n DisplayConnections: TestToolConnectionData[] = [];\n DisplayTools: TestToolData[] = [];\n\n /** No connections warning */\n NoConnectionsWarning: string | null = null;\n\n /** Selected tool details */\n SelectedTool: TestToolData | null = null;\n ParameterConfigs: ParameterConfig[] = [];\n ParameterValues: Record<string, unknown> = {};\n\n /** Execution state */\n IsExecuting = false;\n ExecutionResult: ToolExecutionResult | null = null;\n ExecutionError: string | null = null;\n\n /** User settings key prefix */\n private readonly SETTINGS_PREFIX = 'mcp-tool-test/';\n\n // ========================================\n // Panel Width / Resize State\n // ========================================\n\n /** Panel width settings key */\n private readonly PANEL_WIDTH_SETTING_KEY = 'mcp-test-tool-panel/width';\n\n /** Panel width constraints */\n private readonly MIN_PANEL_WIDTH = 320;\n private readonly MAX_PANEL_WIDTH = 900;\n private readonly DEFAULT_PANEL_WIDTH = 700;\n private readonly MOBILE_BREAKPOINT = 768;\n\n /** Current panel width in pixels */\n PanelWidth: number = this.DEFAULT_PANEL_WIDTH;\n\n /** Whether user is currently resizing */\n IsResizing = false;\n\n /** Whether panel should be full-width (mobile mode) */\n get IsMobileMode(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= this.MOBILE_BREAKPOINT;\n }\n\n /** Subject for debounced width persistence */\n private widthPersistSubject = new Subject<number>();\n\n private destroy$ = new Subject<void>();\n private gqlProvider = GraphQLDataProvider.Instance;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n // Debounce width persistence to avoid excessive writes\n this.widthPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(width => {\n this.persistPanelWidth(width);\n });\n }\n\n ngOnInit(): void {\n // Load saved panel width\n this.loadSavedPanelWidth();\n\n // Initialize display arrays\n this.DisplayServers = [...this.Servers];\n\n // Apply pre-selected values\n if (this.SelectedServerID) {\n this.ServerID = this.SelectedServerID;\n this.onServerChange();\n }\n if (this.SelectedConnectionID) {\n this.ConnectionID = this.SelectedConnectionID;\n this.onConnectionChange();\n }\n if (this.SelectedToolID) {\n this.ToolID = this.SelectedToolID;\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Selection Handlers\n // ========================================\n\n onServerChange(): void {\n this.NoConnectionsWarning = null;\n\n // Filter connections by selected server\n if (this.ServerID) {\n this.FilteredConnections = this.Connections.filter(\n c => UUIDsEqual(c.MCPServerID, this.ServerID) && c.Status === 'Active'\n );\n // Filter tools by selected server\n this.FilteredTools = this.Tools.filter(\n t => UUIDsEqual(t.MCPServerID, this.ServerID) && t.Status === 'Active'\n );\n\n // Check if server requires authentication\n const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));\n const serverRequiresAuth = server?.Status === 'Active'; // All servers currently need connections\n\n // Auto-select connection logic\n if (this.FilteredConnections.length === 0) {\n this.ConnectionID = null;\n if (serverRequiresAuth) {\n this.NoConnectionsWarning = 'No active connections available for this server. Please create a connection first.';\n }\n } else if (this.FilteredConnections.length === 1) {\n // Auto-select the only connection\n this.ConnectionID = this.FilteredConnections[0].ID;\n } else {\n // Select the first connection by default\n this.ConnectionID = this.FilteredConnections[0].ID;\n }\n } else {\n this.FilteredConnections = [];\n this.FilteredTools = [];\n this.ConnectionID = null;\n }\n\n // Update display arrays for filtering\n this.DisplayConnections = [...this.FilteredConnections];\n this.DisplayTools = [...this.FilteredTools];\n\n // Reset tool selection\n this.ToolID = null;\n this.cdr.detectChanges();\n }\n\n onConnectionChange(): void {\n // Connection changed - tools are filtered by server, not connection\n this.cdr.detectChanges();\n }\n\n onToolChange(): void {\n this.cdr.detectChanges();\n }\n\n // ========================================\n // Dropdown Filter Handlers\n // ========================================\n\n /**\n * Handle server dropdown filter change\n */\n onServerFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayServers = this.Servers.filter(s =>\n s.Name.toLowerCase().includes(filterLower) ||\n (s.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle connection dropdown filter change\n */\n onConnectionFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayConnections = this.FilteredConnections.filter(c =>\n c.Name.toLowerCase().includes(filterLower) ||\n (c.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle tool dropdown filter change\n */\n onToolFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayTools = this.FilteredTools.filter(t =>\n t.ToolName.toLowerCase().includes(filterLower) ||\n (t.ToolTitle?.toLowerCase().includes(filterLower) ?? false) ||\n (t.ToolDescription?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Can proceed to configuration step\n */\n get CanProceedToConfig(): boolean {\n return this.ServerID != null && this.ConnectionID != null && this.ToolID != null;\n }\n\n /**\n * Proceed to configuration step\n */\n async proceedToConfig(): Promise<void> {\n if (!this.CanProceedToConfig) return;\n\n this.SelectedTool = this.Tools.find(t => UUIDsEqual(t.ID, this.ToolID)) || null;\n if (!this.SelectedTool) return;\n\n // Parse input schema and create parameter configs\n this.parseInputSchema();\n\n // Load cached parameter values\n await this.loadCachedParameters();\n\n this.CurrentStep = 'configure';\n this.cdr.detectChanges();\n }\n\n /**\n * Parse the tool's input schema to create parameter configurations\n */\n private parseInputSchema(): void {\n if (!this.SelectedTool?.InputSchema) {\n this.ParameterConfigs = [];\n return;\n }\n\n try {\n const schema: JsonSchema = JSON.parse(this.SelectedTool.InputSchema);\n const properties = schema.properties || {};\n const required = schema.required || [];\n\n this.ParameterConfigs = Object.entries(properties).map(([name, prop]) => {\n const propDef = prop as JsonSchemaProperty;\n return {\n name,\n type: this.normalizeType(propDef.type),\n description: propDef.description || '',\n required: required.includes(name),\n defaultValue: propDef.default,\n enumValues: propDef.enum || [],\n format: propDef.format || null,\n minimum: propDef.minimum,\n maximum: propDef.maximum\n };\n });\n\n // Sort: required first, then alphabetically\n this.ParameterConfigs.sort((a, b) => {\n if (a.required !== b.required) return a.required ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n // Initialize parameter values with defaults\n this.ParameterValues = {};\n for (const config of this.ParameterConfigs) {\n if (config.defaultValue !== undefined) {\n this.ParameterValues[config.name] = config.defaultValue;\n } else {\n this.ParameterValues[config.name] = this.getDefaultForType(config.type);\n }\n }\n } catch (error) {\n console.error('Failed to parse input schema:', error);\n this.ParameterConfigs = [];\n }\n }\n\n /**\n * Normalize JSON Schema type to string\n */\n private normalizeType(type: string | string[] | undefined): string {\n if (!type) return 'string';\n if (Array.isArray(type)) {\n // Filter out 'null' and take first type\n const nonNull = type.filter(t => t !== 'null');\n return nonNull.length > 0 ? nonNull[0] : 'string';\n }\n return type;\n }\n\n /**\n * Get default value for a type\n */\n private getDefaultForType(type: string): unknown {\n switch (type) {\n case 'string': return '';\n case 'number':\n case 'integer': return null;\n case 'boolean': return false;\n case 'array': return [];\n case 'object': return {};\n default: return '';\n }\n }\n\n /**\n * Load cached parameter values from UserInfoEngine\n */\n private async loadCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n const cachedValue = engine.GetSetting(settingKey);\n\n if (cachedValue) {\n try {\n const cached = JSON.parse(cachedValue);\n // Merge cached values with defaults (cached takes precedence)\n this.ParameterValues = { ...this.ParameterValues, ...cached };\n } catch (error) {\n console.warn('Failed to parse cached parameters:', error);\n }\n }\n }\n\n /**\n * Save current parameter values to cache\n */\n private async saveCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n try {\n await engine.SetSetting(settingKey, JSON.stringify(this.ParameterValues));\n } catch (error) {\n console.warn('Failed to save cached parameters:', error);\n }\n }\n\n /**\n * Get the setting key for caching parameters\n */\n private getSettingKey(): string {\n return `${this.SETTINGS_PREFIX}${this.ServerID}/${this.ToolID}`;\n }\n\n // ========================================\n // Parameter Input Helpers\n // ========================================\n\n /**\n * Get input type for a parameter\n */\n getInputType(config: ParameterConfig): string {\n if (config.enumValues.length > 0) return 'select';\n if (config.format === 'date') return 'date';\n if (config.format === 'date-time') return 'datetime-local';\n if (config.format === 'email') return 'email';\n if (config.format === 'uri' || config.format === 'url') return 'url';\n\n switch (config.type) {\n case 'boolean': return 'checkbox';\n case 'integer':\n case 'number': return 'number';\n case 'array':\n case 'object': return 'textarea';\n default: return 'text';\n }\n }\n\n /**\n * Check if parameter should use textarea\n */\n isTextarea(config: ParameterConfig): boolean {\n return config.type === 'array' || config.type === 'object' ||\n (config.description != null && config.description.length > 100);\n }\n\n /**\n * Handle parameter value change\n */\n onParameterChange(name: string, value: unknown): void {\n this.ParameterValues[name] = value;\n }\n\n /**\n * Get parameter value as string for textarea display\n */\n getTextareaValue(name: string): string {\n const value = this.ParameterValues[name];\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(value, null, 2);\n return String(value);\n }\n\n /**\n * Handle textarea change - parse JSON if needed\n */\n onTextareaChange(name: string, value: string, config: ParameterConfig): void {\n if (config.type === 'array' || config.type === 'object') {\n try {\n this.ParameterValues[name] = JSON.parse(value || (config.type === 'array' ? '[]' : '{}'));\n } catch {\n // Keep as string if not valid JSON\n this.ParameterValues[name] = value;\n }\n } else {\n this.ParameterValues[name] = value;\n }\n }\n\n // ========================================\n // Execution\n // ========================================\n\n /**\n * Validate that all required parameters have values\n */\n get IsValid(): boolean {\n for (const config of this.ParameterConfigs) {\n if (config.required) {\n const value = this.ParameterValues[config.name];\n if (value === null || value === undefined || value === '') {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Execute the tool\n */\n async executeTool(): Promise<void> {\n if (!this.IsValid || !this.ConnectionID || !this.ToolID) return;\n\n this.IsExecuting = true;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n\n // Save parameters before execution\n await this.saveCachedParameters();\n\n // Build input arguments, filtering out empty optional values\n const inputArgs: Record<string, unknown> = {};\n for (const config of this.ParameterConfigs) {\n const value = this.ParameterValues[config.name];\n if (config.required || (value !== null && value !== undefined && value !== '')) {\n inputArgs[config.name] = value;\n }\n }\n\n try {\n const result = await this.gqlProvider.ExecuteGQL(ExecuteMCPToolMutation, {\n input: {\n ConnectionID: this.ConnectionID,\n ToolID: this.ToolID,\n ToolName: this.SelectedTool?.ToolName,\n InputArgs: JSON.stringify(inputArgs)\n }\n });\n\n this.ExecutionResult = result?.ExecuteMCPTool || {\n Success: false,\n ErrorMessage: 'No result returned from server'\n };\n\n this.CurrentStep = 'results';\n } catch (error) {\n this.ExecutionError = error instanceof Error ? error.message : String(error);\n this.ExecutionResult = {\n Success: false,\n ErrorMessage: this.ExecutionError\n };\n this.CurrentStep = 'results';\n } finally {\n this.IsExecuting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ========================================\n // Results Helpers\n // ========================================\n\n /**\n * Format the result for display\n */\n get FormattedResult(): string {\n if (!this.ExecutionResult?.Result) return '';\n\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n // Try to parse as JSON for pretty printing\n const parsed = JSON.parse(this.ExecutionResult.Result);\n return JSON.stringify(parsed, null, 2);\n }\n return JSON.stringify(this.ExecutionResult.Result, null, 2);\n } catch {\n return String(this.ExecutionResult.Result);\n }\n }\n\n /**\n * Check if result is JSON\n */\n get IsResultJson(): boolean {\n if (!this.ExecutionResult?.Result) return false;\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n JSON.parse(this.ExecutionResult.Result);\n }\n return typeof this.ExecutionResult.Result === 'object';\n } catch {\n return false;\n }\n }\n\n /**\n * Copy result to clipboard\n */\n async copyResult(): Promise<void> {\n if (!this.FormattedResult) return;\n\n try {\n await navigator.clipboard.writeText(this.FormattedResult);\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n }\n }\n\n // ========================================\n // Navigation\n // ========================================\n\n /**\n * Go back to previous step\n */\n goBack(): void {\n if (this.CurrentStep === 'results') {\n this.CurrentStep = 'configure';\n } else if (this.CurrentStep === 'configure') {\n this.CurrentStep = 'select';\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Run the tool again with same parameters\n */\n async runAgain(): Promise<void> {\n this.CurrentStep = 'configure';\n this.ExecutionResult = null;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Close the dialog\n */\n closeDialog(): void {\n this.Close.emit();\n }\n\n // ========================================\n // Panel Resize Handlers\n // ========================================\n\n /**\n * Start resize operation\n */\n onResizeStart(event: MouseEvent): void {\n if (this.IsMobileMode) return; // No resize on mobile\n\n event.preventDefault();\n this.IsResizing = true;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Handle mouse move during resize\n */\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.IsResizing) return;\n\n // Calculate width from right edge of viewport to cursor\n const newWidth = window.innerWidth - event.clientX;\n\n // Clamp to bounds\n this.PanelWidth = Math.min(\n Math.max(newWidth, this.MIN_PANEL_WIDTH),\n Math.min(this.MAX_PANEL_WIDTH, window.innerWidth - 50) // Leave 50px margin\n );\n\n this.cdr.detectChanges();\n }\n\n /**\n * End resize operation\n */\n @HostListener('document:mouseup')\n onMouseUp(): void {\n if (this.IsResizing) {\n this.IsResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n\n // Persist panel width (debounced)\n this.widthPersistSubject.next(this.PanelWidth);\n }\n }\n\n /**\n * Handle window resize for mobile mode\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n } else {\n // Ensure panel doesn't exceed viewport\n if (this.PanelWidth > window.innerWidth - 50) {\n this.PanelWidth = Math.max(this.MIN_PANEL_WIDTH, window.innerWidth - 50);\n }\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Load saved panel width from user settings\n */\n private loadSavedPanelWidth(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n return;\n }\n\n try {\n const savedWidth = UserInfoEngine.Instance.GetSetting(this.PANEL_WIDTH_SETTING_KEY);\n if (savedWidth) {\n const width = parseInt(savedWidth, 10);\n if (!isNaN(width) && width >= this.MIN_PANEL_WIDTH && width <= this.MAX_PANEL_WIDTH) {\n this.PanelWidth = width;\n }\n }\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to load saved panel width:', error);\n }\n }\n\n /**\n * Persist panel width to user settings\n */\n private async persistPanelWidth(width: number): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(this.PANEL_WIDTH_SETTING_KEY, String(width));\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to persist panel width:', error);\n }\n }\n\n /**\n * Get display name for selected server\n */\n get SelectedServerName(): string {\n const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));\n return server?.Name || '';\n }\n\n /**\n * Get display name for selected connection\n */\n get SelectedConnectionName(): string {\n const connection = this.Connections.find(c => UUIDsEqual(c.ID, this.ConnectionID));\n return connection?.Name || '';\n }\n\n /**\n * Get display name for selected tool\n */\n get SelectedToolName(): string {\n return this.SelectedTool?.ToolTitle || this.SelectedTool?.ToolName || '';\n }\n}\n","<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\" (click)=\"closeDialog()\"></div>\n}\n\n<!-- Slide-out Panel -->\n@if (Visible) {\n <div class=\"slide-out-panel\"\n @slideIn\n [style.width.px]=\"IsMobileMode ? null : PanelWidth\"\n [class.mobile]=\"IsMobileMode\"\n [class.resizing]=\"IsResizing\">\n <!-- Resize Handle (left edge) -->\n @if (!IsMobileMode) {\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n [class.active]=\"IsResizing\"\n title=\"Drag to resize\">\n <div class=\"resize-grip\"></div>\n </div>\n }\n <!-- Panel Header -->\n <div class=\"panel-header\">\n <h2 class=\"panel-title\">\n <i class=\"fa-solid fa-flask\"></i>\n Test MCP Tool\n </h2>\n <button class=\"close-btn\" (click)=\"closeDialog()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Step Indicator -->\n <div class=\"step-indicator\">\n <div class=\"step\" [class.active]=\"CurrentStep === 'select'\" [class.completed]=\"CurrentStep !== 'select'\">\n <span class=\"step-number\">1</span>\n <span class=\"step-label\">Select Tool</span>\n </div>\n <div class=\"step-connector\" [class.completed]=\"CurrentStep !== 'select'\"></div>\n <div class=\"step\" [class.active]=\"CurrentStep === 'configure'\" [class.completed]=\"CurrentStep === 'results'\">\n <span class=\"step-number\">2</span>\n <span class=\"step-label\">Configure</span>\n </div>\n <div class=\"step-connector\" [class.completed]=\"CurrentStep === 'results'\"></div>\n <div class=\"step\" [class.active]=\"CurrentStep === 'results'\">\n <span class=\"step-number\">3</span>\n <span class=\"step-label\">Results</span>\n </div>\n </div>\n <!-- Panel Content -->\n <div class=\"panel-content\">\n <!-- Step 1: Select Server, Connection, Tool -->\n @if (CurrentStep === 'select') {\n <div class=\"step-content\">\n <div class=\"selection-form\">\n <!-- Server Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-server\"></i>\n Server\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayServers\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ServerID\"\n (valueChange)=\"onServerChange()\"\n [filterable]=\"true\"\n (filterChange)=\"onServerFilterChange($event)\"\n placeholder=\"Select a server...\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item\">\n <span class=\"item-name\">{{ dataItem.Name }}</span>\n <span class=\"item-status\" [class]=\"'status-' + dataItem.Status.toLowerCase()\">\n {{ dataItem.Status }}\n </span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n </div>\n <!-- Connection Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-link\"></i>\n Connection\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayConnections\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ConnectionID\"\n (valueChange)=\"onConnectionChange()\"\n [disabled]=\"!ServerID || NoConnectionsWarning !== null\"\n [filterable]=\"true\"\n (filterChange)=\"onConnectionFilterChange($event)\"\n placeholder=\"Select a connection...\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item\">\n <span class=\"item-name\">{{ dataItem.Name }}</span>\n @if (dataItem.Description) {\n <span class=\"item-description\">{{ dataItem.Description }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (!ServerID) {\n <span class=\"field-hint\">Select a server first</span>\n }\n @if (NoConnectionsWarning) {\n <span class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ NoConnectionsWarning }}\n </span>\n }\n @if (FilteredConnections.length === 1 && ConnectionID) {\n <span class=\"field-hint auto-selected\">\n <i class=\"fa-solid fa-check\"></i>\n Auto-selected (only connection available)\n </span>\n }\n </div>\n <!-- Tool Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-wrench\"></i>\n Tool\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayTools\"\n [textField]=\"'ToolTitle'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ToolID\"\n (valueChange)=\"onToolChange()\"\n [disabled]=\"!ServerID\"\n [filterable]=\"true\"\n (filterChange)=\"onToolFilterChange($event)\"\n placeholder=\"Select a tool...\">\n <ng-template kendoDropDownListValueTemplate let-dataItem>\n {{ dataItem?.ToolTitle || dataItem?.ToolName || 'Select a tool...' }}\n </ng-template>\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item tool-item\">\n <span class=\"item-name\">{{ dataItem.ToolTitle || dataItem.ToolName }}</span>\n @if (dataItem.ToolDescription) {\n <span class=\"item-description\">{{ dataItem.ToolDescription }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (!ServerID) {\n <span class=\"field-hint\">Select a server first</span>\n }\n </div>\n </div>\n </div>\n }\n <!-- Step 2: Configure Parameters -->\n @if (CurrentStep === 'configure') {\n <div class=\"step-content\">\n <div class=\"tool-header\">\n <div class=\"tool-info\">\n <h3 class=\"tool-name\">\n <i class=\"fa-solid fa-wrench\"></i>\n {{ SelectedTool?.ToolTitle || SelectedTool?.ToolName }}\n </h3>\n @if (SelectedTool?.ToolDescription) {\n <p class=\"tool-description\">{{ SelectedTool?.ToolDescription }}</p>\n }\n </div>\n <div class=\"tool-context\">\n <span class=\"context-item\">\n <i class=\"fa-solid fa-server\"></i>\n {{ SelectedServerName }}\n </span>\n <span class=\"context-item\">\n <i class=\"fa-solid fa-link\"></i>\n {{ SelectedConnectionName }}\n </span>\n </div>\n </div>\n @if (ParameterConfigs.length === 0) {\n <div class=\"no-params\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>This tool requires no parameters.</p>\n </div>\n } @else {\n <div class=\"parameters-form\">\n <h4 class=\"params-title\">Parameters</h4>\n @for (config of ParameterConfigs; track config.name) {\n <div class=\"param-group\" [class.required]=\"config.required\">\n <label class=\"param-label\">\n {{ config.name }}\n @if (config.required) {\n <span class=\"required\">*</span>\n }\n </label>\n @if (config.description) {\n <p class=\"param-description\">{{ config.description }}</p>\n }\n <!-- Enum/Select -->\n @if (config.enumValues.length > 0) {\n <kendo-dropdownlist\n [data]=\"config.enumValues\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\">\n </kendo-dropdownlist>\n }\n <!-- Boolean -->\n @else if (config.type === 'boolean') {\n <div class=\"checkbox-wrapper\">\n <input type=\"checkbox\"\n [id]=\"'param-' + config.name\"\n [checked]=\"ParameterValues[config.name]\"\n (change)=\"onParameterChange(config.name, $any($event.target).checked)\">\n <label [for]=\"'param-' + config.name\">Enabled</label>\n </div>\n }\n <!-- Number/Integer -->\n @else if (config.type === 'number' || config.type === 'integer') {\n <kendo-numerictextbox\n [format]=\"config.type === 'integer' ? 'n0' : 'n'\"\n [step]=\"config.type === 'integer' ? 1 : 0.1\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\">\n </kendo-numerictextbox>\n }\n <!-- Array/Object (Textarea with JSON) -->\n @else if (config.type === 'array' || config.type === 'object') {\n <textarea class=\"json-input\"\n rows=\"4\"\n [value]=\"getTextareaValue(config.name)\"\n (input)=\"onTextareaChange(config.name, $any($event.target).value, config)\"\n placeholder=\"Enter JSON {{ config.type }}...\"></textarea>\n <span class=\"field-hint\">Enter valid JSON</span>\n }\n <!-- String (default) -->\n @else {\n @if (isTextarea(config)) {\n <textarea class=\"text-input\"\n rows=\"3\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (input)=\"onParameterChange(config.name, $any($event.target).value)\"\n [placeholder]=\"config.description || 'Enter value...'\"></textarea>\n } @else {\n <kendo-textbox\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\"\n [placeholder]=\"config.description || 'Enter value...'\">\n </kendo-textbox>\n }\n }\n </div>\n }\n </div>\n }\n</div>\n}\n<!-- Step 3: Results -->\n@if (CurrentStep === 'results') {\n <div class=\"step-content results-step\">\n <div class=\"results-container\">\n <!-- Success/Error Header -->\n <div class=\"result-header\" [class.success]=\"ExecutionResult?.Success\" [class.error]=\"!ExecutionResult?.Success\">\n @if (ExecutionResult?.Success) {\n <i class=\"fa-solid fa-check-circle\"></i>\n <span class=\"result-status\">Execution Successful</span>\n } @else {\n <i class=\"fa-solid fa-times-circle\"></i>\n <span class=\"result-status\">Execution Failed</span>\n }\n @if (ExecutionResult?.DurationMs) {\n <span class=\"duration\">{{ ExecutionResult?.DurationMs }}ms</span>\n }\n </div>\n <!-- Executed Tool Info (moved to top) -->\n <div class=\"execution-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">Tool:</span>\n <span class=\"info-value\">{{ SelectedToolName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Server:</span>\n <span class=\"info-value\">{{ SelectedServerName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Connection:</span>\n <span class=\"info-value\">{{ SelectedConnectionName }}</span>\n </div>\n </div>\n <!-- Error Message -->\n @if (ExecutionResult?.ErrorMessage) {\n <div class=\"error-panel\">\n <h4><i class=\"fa-solid fa-exclamation-triangle\"></i> Error</h4>\n <pre class=\"error-message\">{{ ExecutionResult?.ErrorMessage }}</pre>\n </div>\n }\n <!-- Result Data (fills remaining space) -->\n @if (ExecutionResult?.Result) {\n <div class=\"result-panel fill-space\">\n <div class=\"result-panel-header\">\n <h4><i class=\"fa-solid fa-code\"></i> Result</h4>\n <button kendoButton fillMode=\"flat\" (click)=\"copyResult()\" title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <div class=\"code-editor-container\">\n <mj-code-editor\n [ngModel]=\"FormattedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </div>\n}\n</div>\n<!-- Panel Actions -->\n<div class=\"panel-actions\">\n @switch (CurrentStep) {\n @case ('select') {\n <button kendoButton themeColor=\"primary\" (click)=\"proceedToConfig()\" [disabled]=\"!CanProceedToConfig\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n Next\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"closeDialog()\">Cancel</button>\n }\n @case ('configure') {\n <button kendoButton themeColor=\"primary\" (click)=\"executeTool()\" [disabled]=\"!IsValid || IsExecuting\">\n @if (IsExecuting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Executing...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Execute Tool\n }\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back\n </button>\n }\n @case ('results') {\n <button kendoButton themeColor=\"primary\" (click)=\"runAgain()\">\n <i class=\"fa-solid fa-redo\"></i>\n Run Again\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Edit Parameters\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"closeDialog()\">Close</button>\n }\n }\n</div>\n</div>\n}\n"]}
1
+ {"version":3,"file":"mcp-test-tool-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-test-tool-dialog.component.ts","../../../src/MCP/components/mcp-test-tool-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Test Tool Slide-Out Panel Component\n *\n * Provides a beautiful UX for testing MCP tools with:\n * - Server/Connection/Tool selection\n * - Dynamic parameter input UI based on JSON Schema\n * - Tool execution with results display\n * - User settings caching via UserInfoEngine\n * - Resizable slide-out panel with width persistence\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, HostListener, ElementRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Interface for JSON Schema property definition\n */\ninterface JsonSchemaProperty {\n type?: string | string[];\n description?: string;\n default?: unknown;\n enum?: unknown[];\n required?: boolean;\n items?: JsonSchemaProperty;\n properties?: Record<string, JsonSchemaProperty>;\n format?: string;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n}\n\n/**\n * Interface for JSON Schema\n */\ninterface JsonSchema {\n type?: string;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n description?: string;\n}\n\n/**\n * Parameter input configuration derived from schema\n */\ninterface ParameterConfig {\n name: string;\n type: string;\n description: string;\n required: boolean;\n defaultValue: unknown;\n enumValues: unknown[];\n format: string | null;\n minimum?: number;\n maximum?: number;\n}\n\n/**\n * Tool execution result\n */\ninterface ToolExecutionResult {\n Success: boolean;\n ErrorMessage?: string;\n Result?: unknown;\n DurationMs?: number;\n}\n\n/**\n * Server data for selection\n */\nexport interface TestToolServerData {\n ID: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Connection data for selection\n */\nexport interface TestToolConnectionData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Tool data for selection\n */\nexport interface TestToolData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n ToolName: string;\n ToolTitle: string | null;\n ToolDescription: string | null;\n InputSchema: string;\n Status: string;\n}\n\n/**\n * GraphQL mutation for executing MCP tool\n */\nconst ExecuteMCPToolMutation = gql`\n mutation ExecuteMCPTool($input: ExecuteMCPToolInput!) {\n ExecuteMCPTool(input: $input) {\n Success\n ErrorMessage\n Result\n DurationMs\n }\n }\n`;\n\n@Component({\n standalone: false,\n selector: 'mj-mcp-test-tool-dialog',\n templateUrl: './mcp-test-tool-dialog.component.html',\n styleUrls: ['./mcp-test-tool-dialog.component.css'],\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class MCPTestToolDialogComponent implements OnInit, OnDestroy {\n\n // ========================================\n // Inputs\n // ========================================\n\n @Input() Visible = false;\n @Input() Servers: TestToolServerData[] = [];\n @Input() Connections: TestToolConnectionData[] = [];\n @Input() Tools: TestToolData[] = [];\n\n /** Pre-selected server ID */\n @Input() SelectedServerID: string | null = null;\n\n /** Pre-selected connection ID */\n @Input() SelectedConnectionID: string | null = null;\n\n /** Pre-selected tool ID */\n @Input() SelectedToolID: string | null = null;\n\n // ========================================\n // Outputs\n // ========================================\n\n @Output() Close = new EventEmitter<void>();\n\n // ========================================\n // State\n // ========================================\n\n /** Current step: 'select' | 'configure' | 'results' */\n CurrentStep: 'select' | 'configure' | 'results' = 'select';\n\n /** Selected IDs */\n ServerID: string | null = null;\n ConnectionID: string | null = null;\n ToolID: string | null = null;\n\n /** Filtered lists based on selection */\n FilteredConnections: TestToolConnectionData[] = [];\n FilteredTools: TestToolData[] = [];\n\n /** Display lists for dropdowns (filtered by search) */\n DisplayServers: TestToolServerData[] = [];\n DisplayConnections: TestToolConnectionData[] = [];\n DisplayTools: TestToolData[] = [];\n\n /** No connections warning */\n NoConnectionsWarning: string | null = null;\n\n /** Selected tool details */\n SelectedTool: TestToolData | null = null;\n ParameterConfigs: ParameterConfig[] = [];\n ParameterValues: Record<string, unknown> = {};\n\n /** Execution state */\n IsExecuting = false;\n ExecutionResult: ToolExecutionResult | null = null;\n ExecutionError: string | null = null;\n\n /** User settings key prefix */\n private readonly SETTINGS_PREFIX = 'mcp-tool-test/';\n\n // ========================================\n // Panel Width / Resize State\n // ========================================\n\n /** Panel width settings key */\n private readonly PANEL_WIDTH_SETTING_KEY = 'mcp-test-tool-panel/width';\n\n /** Panel width constraints */\n private readonly MIN_PANEL_WIDTH = 320;\n private readonly MAX_PANEL_WIDTH = 900;\n private readonly DEFAULT_PANEL_WIDTH = 700;\n private readonly MOBILE_BREAKPOINT = 768;\n\n /** Current panel width in pixels */\n PanelWidth: number = this.DEFAULT_PANEL_WIDTH;\n\n /** Whether user is currently resizing */\n IsResizing = false;\n\n /** Whether panel should be full-width (mobile mode) */\n get IsMobileMode(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= this.MOBILE_BREAKPOINT;\n }\n\n /** Subject for debounced width persistence */\n private widthPersistSubject = new Subject<number>();\n\n private destroy$ = new Subject<void>();\n private gqlProvider = GraphQLDataProvider.Instance;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n // Debounce width persistence to avoid excessive writes\n this.widthPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(width => {\n this.persistPanelWidth(width);\n });\n }\n\n ngOnInit(): void {\n // Load saved panel width\n this.loadSavedPanelWidth();\n\n // Initialize display arrays\n this.DisplayServers = [...this.Servers];\n\n // Apply pre-selected values\n if (this.SelectedServerID) {\n this.ServerID = this.SelectedServerID;\n this.onServerChange();\n }\n if (this.SelectedConnectionID) {\n this.ConnectionID = this.SelectedConnectionID;\n this.onConnectionChange();\n }\n if (this.SelectedToolID) {\n this.ToolID = this.SelectedToolID;\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Selection Handlers\n // ========================================\n\n onServerChange(): void {\n this.NoConnectionsWarning = null;\n\n // Filter connections by selected server\n if (this.ServerID) {\n this.FilteredConnections = this.Connections.filter(\n c => UUIDsEqual(c.MCPServerID, this.ServerID) && c.Status === 'Active'\n );\n // Filter tools by selected server\n this.FilteredTools = this.Tools.filter(\n t => UUIDsEqual(t.MCPServerID, this.ServerID) && t.Status === 'Active'\n );\n\n // Check if server requires authentication\n const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));\n const serverRequiresAuth = server?.Status === 'Active'; // All servers currently need connections\n\n // Auto-select connection logic\n if (this.FilteredConnections.length === 0) {\n this.ConnectionID = null;\n if (serverRequiresAuth) {\n this.NoConnectionsWarning = 'No active connections available for this server. Please create a connection first.';\n }\n } else if (this.FilteredConnections.length === 1) {\n // Auto-select the only connection\n this.ConnectionID = this.FilteredConnections[0].ID;\n } else {\n // Select the first connection by default\n this.ConnectionID = this.FilteredConnections[0].ID;\n }\n } else {\n this.FilteredConnections = [];\n this.FilteredTools = [];\n this.ConnectionID = null;\n }\n\n // Update display arrays for filtering\n this.DisplayConnections = [...this.FilteredConnections];\n this.DisplayTools = [...this.FilteredTools];\n\n // Reset tool selection\n this.ToolID = null;\n this.cdr.detectChanges();\n }\n\n onConnectionChange(): void {\n // Connection changed - tools are filtered by server, not connection\n this.cdr.detectChanges();\n }\n\n onToolChange(): void {\n this.cdr.detectChanges();\n }\n\n // ========================================\n // Dropdown Filter Handlers\n // ========================================\n\n /**\n * Handle server dropdown filter change\n */\n onServerFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayServers = this.Servers.filter(s =>\n s.Name.toLowerCase().includes(filterLower) ||\n (s.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle connection dropdown filter change\n */\n onConnectionFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayConnections = this.FilteredConnections.filter(c =>\n c.Name.toLowerCase().includes(filterLower) ||\n (c.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle tool dropdown filter change\n */\n onToolFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayTools = this.FilteredTools.filter(t =>\n t.ToolName.toLowerCase().includes(filterLower) ||\n (t.ToolTitle?.toLowerCase().includes(filterLower) ?? false) ||\n (t.ToolDescription?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Can proceed to configuration step\n */\n get CanProceedToConfig(): boolean {\n return this.ServerID != null && this.ConnectionID != null && this.ToolID != null;\n }\n\n /**\n * Proceed to configuration step\n */\n async proceedToConfig(): Promise<void> {\n if (!this.CanProceedToConfig) return;\n\n this.SelectedTool = this.Tools.find(t => UUIDsEqual(t.ID, this.ToolID)) || null;\n if (!this.SelectedTool) return;\n\n // Parse input schema and create parameter configs\n this.parseInputSchema();\n\n // Load cached parameter values\n await this.loadCachedParameters();\n\n this.CurrentStep = 'configure';\n this.cdr.detectChanges();\n }\n\n /**\n * Parse the tool's input schema to create parameter configurations\n */\n private parseInputSchema(): void {\n if (!this.SelectedTool?.InputSchema) {\n this.ParameterConfigs = [];\n return;\n }\n\n try {\n const schema: JsonSchema = JSON.parse(this.SelectedTool.InputSchema);\n const properties = schema.properties || {};\n const required = schema.required || [];\n\n this.ParameterConfigs = Object.entries(properties).map(([name, prop]) => {\n const propDef = prop as JsonSchemaProperty;\n return {\n name,\n type: this.normalizeType(propDef.type),\n description: propDef.description || '',\n required: required.includes(name),\n defaultValue: propDef.default,\n enumValues: propDef.enum || [],\n format: propDef.format || null,\n minimum: propDef.minimum,\n maximum: propDef.maximum\n };\n });\n\n // Sort: required first, then alphabetically\n this.ParameterConfigs.sort((a, b) => {\n if (a.required !== b.required) return a.required ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n // Initialize parameter values with defaults\n this.ParameterValues = {};\n for (const config of this.ParameterConfigs) {\n if (config.defaultValue !== undefined) {\n this.ParameterValues[config.name] = config.defaultValue;\n } else {\n this.ParameterValues[config.name] = this.getDefaultForType(config.type);\n }\n }\n } catch (error) {\n console.error('Failed to parse input schema:', error);\n this.ParameterConfigs = [];\n }\n }\n\n /**\n * Normalize JSON Schema type to string\n */\n private normalizeType(type: string | string[] | undefined): string {\n if (!type) return 'string';\n if (Array.isArray(type)) {\n // Filter out 'null' and take first type\n const nonNull = type.filter(t => t !== 'null');\n return nonNull.length > 0 ? nonNull[0] : 'string';\n }\n return type;\n }\n\n /**\n * Get default value for a type\n */\n private getDefaultForType(type: string): unknown {\n switch (type) {\n case 'string': return '';\n case 'number':\n case 'integer': return null;\n case 'boolean': return false;\n case 'array': return [];\n case 'object': return {};\n default: return '';\n }\n }\n\n /**\n * Load cached parameter values from UserInfoEngine\n */\n private async loadCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n const cachedValue = engine.GetSetting(settingKey);\n\n if (cachedValue) {\n try {\n const cached = JSON.parse(cachedValue);\n // Merge cached values with defaults (cached takes precedence)\n this.ParameterValues = { ...this.ParameterValues, ...cached };\n } catch (error) {\n console.warn('Failed to parse cached parameters:', error);\n }\n }\n }\n\n /**\n * Save current parameter values to cache\n */\n private async saveCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n try {\n await engine.SetSetting(settingKey, JSON.stringify(this.ParameterValues));\n } catch (error) {\n console.warn('Failed to save cached parameters:', error);\n }\n }\n\n /**\n * Get the setting key for caching parameters\n */\n private getSettingKey(): string {\n return `${this.SETTINGS_PREFIX}${this.ServerID}/${this.ToolID}`;\n }\n\n // ========================================\n // Parameter Input Helpers\n // ========================================\n\n /**\n * Get input type for a parameter\n */\n getInputType(config: ParameterConfig): string {\n if (config.enumValues.length > 0) return 'select';\n if (config.format === 'date') return 'date';\n if (config.format === 'date-time') return 'datetime-local';\n if (config.format === 'email') return 'email';\n if (config.format === 'uri' || config.format === 'url') return 'url';\n\n switch (config.type) {\n case 'boolean': return 'checkbox';\n case 'integer':\n case 'number': return 'number';\n case 'array':\n case 'object': return 'textarea';\n default: return 'text';\n }\n }\n\n /**\n * Check if parameter should use textarea\n */\n isTextarea(config: ParameterConfig): boolean {\n return config.type === 'array' || config.type === 'object' ||\n (config.description != null && config.description.length > 100);\n }\n\n /**\n * Handle parameter value change\n */\n onParameterChange(name: string, value: unknown): void {\n this.ParameterValues[name] = value;\n }\n\n /**\n * Get parameter value as string for textarea display\n */\n getTextareaValue(name: string): string {\n const value = this.ParameterValues[name];\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(value, null, 2);\n return String(value);\n }\n\n /**\n * Handle textarea change - parse JSON if needed\n */\n onTextareaChange(name: string, value: string, config: ParameterConfig): void {\n if (config.type === 'array' || config.type === 'object') {\n try {\n this.ParameterValues[name] = JSON.parse(value || (config.type === 'array' ? '[]' : '{}'));\n } catch {\n // Keep as string if not valid JSON\n this.ParameterValues[name] = value;\n }\n } else {\n this.ParameterValues[name] = value;\n }\n }\n\n // ========================================\n // Execution\n // ========================================\n\n /**\n * Validate that all required parameters have values\n */\n get IsValid(): boolean {\n for (const config of this.ParameterConfigs) {\n if (config.required) {\n const value = this.ParameterValues[config.name];\n if (value === null || value === undefined || value === '') {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Execute the tool\n */\n async executeTool(): Promise<void> {\n if (!this.IsValid || !this.ConnectionID || !this.ToolID) return;\n\n this.IsExecuting = true;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n\n // Save parameters before execution\n await this.saveCachedParameters();\n\n // Build input arguments, filtering out empty optional values\n const inputArgs: Record<string, unknown> = {};\n for (const config of this.ParameterConfigs) {\n const value = this.ParameterValues[config.name];\n if (config.required || (value !== null && value !== undefined && value !== '')) {\n inputArgs[config.name] = value;\n }\n }\n\n try {\n const result = await this.gqlProvider.ExecuteGQL(ExecuteMCPToolMutation, {\n input: {\n ConnectionID: this.ConnectionID,\n ToolID: this.ToolID,\n ToolName: this.SelectedTool?.ToolName,\n InputArgs: JSON.stringify(inputArgs)\n }\n });\n\n this.ExecutionResult = result?.ExecuteMCPTool || {\n Success: false,\n ErrorMessage: 'No result returned from server'\n };\n\n this.CurrentStep = 'results';\n } catch (error) {\n this.ExecutionError = error instanceof Error ? error.message : String(error);\n this.ExecutionResult = {\n Success: false,\n ErrorMessage: this.ExecutionError\n };\n this.CurrentStep = 'results';\n } finally {\n this.IsExecuting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ========================================\n // Results Helpers\n // ========================================\n\n /**\n * Format the result for display\n */\n get FormattedResult(): string {\n if (!this.ExecutionResult?.Result) return '';\n\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n // Try to parse as JSON for pretty printing\n const parsed = JSON.parse(this.ExecutionResult.Result);\n return JSON.stringify(parsed, null, 2);\n }\n return JSON.stringify(this.ExecutionResult.Result, null, 2);\n } catch {\n return String(this.ExecutionResult.Result);\n }\n }\n\n /**\n * Check if result is JSON\n */\n get IsResultJson(): boolean {\n if (!this.ExecutionResult?.Result) return false;\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n JSON.parse(this.ExecutionResult.Result);\n }\n return typeof this.ExecutionResult.Result === 'object';\n } catch {\n return false;\n }\n }\n\n /**\n * Copy result to clipboard\n */\n async copyResult(): Promise<void> {\n if (!this.FormattedResult) return;\n\n try {\n await navigator.clipboard.writeText(this.FormattedResult);\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n }\n }\n\n // ========================================\n // Navigation\n // ========================================\n\n /**\n * Go back to previous step\n */\n goBack(): void {\n if (this.CurrentStep === 'results') {\n this.CurrentStep = 'configure';\n } else if (this.CurrentStep === 'configure') {\n this.CurrentStep = 'select';\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Run the tool again with same parameters\n */\n async runAgain(): Promise<void> {\n this.CurrentStep = 'configure';\n this.ExecutionResult = null;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Close the dialog\n */\n closeDialog(): void {\n this.Close.emit();\n }\n\n // ========================================\n // Panel Resize Handlers\n // ========================================\n\n /**\n * Start resize operation\n */\n onResizeStart(event: MouseEvent): void {\n if (this.IsMobileMode) return; // No resize on mobile\n\n event.preventDefault();\n this.IsResizing = true;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Handle mouse move during resize\n */\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.IsResizing) return;\n\n // Calculate width from right edge of viewport to cursor\n const newWidth = window.innerWidth - event.clientX;\n\n // Clamp to bounds\n this.PanelWidth = Math.min(\n Math.max(newWidth, this.MIN_PANEL_WIDTH),\n Math.min(this.MAX_PANEL_WIDTH, window.innerWidth - 50) // Leave 50px margin\n );\n\n this.cdr.detectChanges();\n }\n\n /**\n * End resize operation\n */\n @HostListener('document:mouseup')\n onMouseUp(): void {\n if (this.IsResizing) {\n this.IsResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n\n // Persist panel width (debounced)\n this.widthPersistSubject.next(this.PanelWidth);\n }\n }\n\n /**\n * Handle window resize for mobile mode\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n } else {\n // Ensure panel doesn't exceed viewport\n if (this.PanelWidth > window.innerWidth - 50) {\n this.PanelWidth = Math.max(this.MIN_PANEL_WIDTH, window.innerWidth - 50);\n }\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Load saved panel width from user settings\n */\n private loadSavedPanelWidth(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n return;\n }\n\n try {\n const savedWidth = UserInfoEngine.Instance.GetSetting(this.PANEL_WIDTH_SETTING_KEY);\n if (savedWidth) {\n const width = parseInt(savedWidth, 10);\n if (!isNaN(width) && width >= this.MIN_PANEL_WIDTH && width <= this.MAX_PANEL_WIDTH) {\n this.PanelWidth = width;\n }\n }\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to load saved panel width:', error);\n }\n }\n\n /**\n * Persist panel width to user settings\n */\n private async persistPanelWidth(width: number): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(this.PANEL_WIDTH_SETTING_KEY, String(width));\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to persist panel width:', error);\n }\n }\n\n /**\n * Get display name for selected server\n */\n get SelectedServerName(): string {\n const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));\n return server?.Name || '';\n }\n\n /**\n * Get display name for selected connection\n */\n get SelectedConnectionName(): string {\n const connection = this.Connections.find(c => UUIDsEqual(c.ID, this.ConnectionID));\n return connection?.Name || '';\n }\n\n /**\n * Get display name for selected tool\n */\n get SelectedToolName(): string {\n return this.SelectedTool?.ToolTitle || this.SelectedTool?.ToolName || '';\n }\n}\n","<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\" (click)=\"closeDialog()\"></div>\n}\n\n<!-- Slide-out Panel -->\n@if (Visible) {\n <div class=\"slide-out-panel\"\n @slideIn\n [style.width.px]=\"IsMobileMode ? null : PanelWidth\"\n [class.mobile]=\"IsMobileMode\"\n [class.resizing]=\"IsResizing\">\n <!-- Resize Handle (left edge) -->\n @if (!IsMobileMode) {\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n [class.active]=\"IsResizing\"\n title=\"Drag to resize\">\n <div class=\"resize-grip\"></div>\n </div>\n }\n <!-- Panel Header -->\n <div class=\"panel-header\">\n <h2 class=\"panel-title\">\n <i class=\"fa-solid fa-flask\"></i>\n Test MCP Tool\n </h2>\n <button class=\"close-btn\" (click)=\"closeDialog()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Step Indicator -->\n <div class=\"step-indicator\">\n <div class=\"step\" [class.active]=\"CurrentStep === 'select'\" [class.completed]=\"CurrentStep !== 'select'\">\n <span class=\"step-number\">1</span>\n <span class=\"step-label\">Select Tool</span>\n </div>\n <div class=\"step-connector\" [class.completed]=\"CurrentStep !== 'select'\"></div>\n <div class=\"step\" [class.active]=\"CurrentStep === 'configure'\" [class.completed]=\"CurrentStep === 'results'\">\n <span class=\"step-number\">2</span>\n <span class=\"step-label\">Configure</span>\n </div>\n <div class=\"step-connector\" [class.completed]=\"CurrentStep === 'results'\"></div>\n <div class=\"step\" [class.active]=\"CurrentStep === 'results'\">\n <span class=\"step-number\">3</span>\n <span class=\"step-label\">Results</span>\n </div>\n </div>\n <!-- Panel Content -->\n <div class=\"panel-content\">\n <!-- Step 1: Select Server, Connection, Tool -->\n @if (CurrentStep === 'select') {\n <div class=\"step-content\">\n <div class=\"selection-form\">\n <!-- Server Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-server\"></i>\n Server\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayServers\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ServerID\"\n (valueChange)=\"onServerChange()\"\n [filterable]=\"true\"\n (filterChange)=\"onServerFilterChange($event)\"\n placeholder=\"Select a server...\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item\">\n <span class=\"item-name\">{{ dataItem.Name }}</span>\n <span class=\"item-status\" [class]=\"'status-' + dataItem.Status.toLowerCase()\">\n {{ dataItem.Status }}\n </span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n </div>\n <!-- Connection Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-link\"></i>\n Connection\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayConnections\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ConnectionID\"\n (valueChange)=\"onConnectionChange()\"\n [disabled]=\"!ServerID || NoConnectionsWarning !== null\"\n [filterable]=\"true\"\n (filterChange)=\"onConnectionFilterChange($event)\"\n placeholder=\"Select a connection...\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item\">\n <span class=\"item-name\">{{ dataItem.Name }}</span>\n @if (dataItem.Description) {\n <span class=\"item-description\">{{ dataItem.Description }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (!ServerID) {\n <span class=\"field-hint\">Select a server first</span>\n }\n @if (NoConnectionsWarning) {\n <span class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ NoConnectionsWarning }}\n </span>\n }\n @if (FilteredConnections.length === 1 && ConnectionID) {\n <span class=\"field-hint auto-selected\">\n <i class=\"fa-solid fa-check\"></i>\n Auto-selected (only connection available)\n </span>\n }\n </div>\n <!-- Tool Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-wrench\"></i>\n Tool\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayTools\"\n [textField]=\"'ToolTitle'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ToolID\"\n (valueChange)=\"onToolChange()\"\n [disabled]=\"!ServerID\"\n [filterable]=\"true\"\n (filterChange)=\"onToolFilterChange($event)\"\n placeholder=\"Select a tool...\">\n <ng-template kendoDropDownListValueTemplate let-dataItem>\n {{ dataItem?.ToolTitle || dataItem?.ToolName || 'Select a tool...' }}\n </ng-template>\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item tool-item\">\n <span class=\"item-name\">{{ dataItem.ToolTitle || dataItem.ToolName }}</span>\n @if (dataItem.ToolDescription) {\n <span class=\"item-description\">{{ dataItem.ToolDescription }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (!ServerID) {\n <span class=\"field-hint\">Select a server first</span>\n }\n </div>\n </div>\n </div>\n }\n <!-- Step 2: Configure Parameters -->\n @if (CurrentStep === 'configure') {\n <div class=\"step-content\">\n <div class=\"tool-header\">\n <div class=\"tool-info\">\n <h3 class=\"tool-name\">\n <i class=\"fa-solid fa-wrench\"></i>\n {{ SelectedTool?.ToolTitle || SelectedTool?.ToolName }}\n </h3>\n @if (SelectedTool?.ToolDescription) {\n <p class=\"tool-description\">{{ SelectedTool?.ToolDescription }}</p>\n }\n </div>\n <div class=\"tool-context\">\n <span class=\"context-item\">\n <i class=\"fa-solid fa-server\"></i>\n {{ SelectedServerName }}\n </span>\n <span class=\"context-item\">\n <i class=\"fa-solid fa-link\"></i>\n {{ SelectedConnectionName }}\n </span>\n </div>\n </div>\n @if (ParameterConfigs.length === 0) {\n <div class=\"no-params\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>This tool requires no parameters.</p>\n </div>\n } @else {\n <div class=\"parameters-form\">\n <h4 class=\"params-title\">Parameters</h4>\n @for (config of ParameterConfigs; track config.name) {\n <div class=\"param-group\" [class.required]=\"config.required\">\n <label class=\"param-label\">\n {{ config.name }}\n @if (config.required) {\n <span class=\"required\">*</span>\n }\n </label>\n @if (config.description) {\n <p class=\"param-description\">{{ config.description }}</p>\n }\n <!-- Enum/Select -->\n @if (config.enumValues.length > 0) {\n <kendo-dropdownlist\n [data]=\"config.enumValues\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\">\n </kendo-dropdownlist>\n }\n <!-- Boolean -->\n @else if (config.type === 'boolean') {\n <div class=\"checkbox-wrapper\">\n <input type=\"checkbox\"\n [id]=\"'param-' + config.name\"\n [checked]=\"ParameterValues[config.name]\"\n (change)=\"onParameterChange(config.name, $any($event.target).checked)\">\n <label [for]=\"'param-' + config.name\">Enabled</label>\n </div>\n }\n <!-- Number/Integer -->\n @else if (config.type === 'number' || config.type === 'integer') {\n <kendo-numerictextbox\n [format]=\"config.type === 'integer' ? 'n0' : 'n'\"\n [step]=\"config.type === 'integer' ? 1 : 0.1\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\">\n </kendo-numerictextbox>\n }\n <!-- Array/Object (Textarea with JSON) -->\n @else if (config.type === 'array' || config.type === 'object') {\n <textarea class=\"json-input\"\n rows=\"4\"\n [value]=\"getTextareaValue(config.name)\"\n (input)=\"onTextareaChange(config.name, $any($event.target).value, config)\"\n placeholder=\"Enter JSON {{ config.type }}...\"></textarea>\n <span class=\"field-hint\">Enter valid JSON</span>\n }\n <!-- String (default) -->\n @else {\n @if (isTextarea(config)) {\n <textarea class=\"text-input\"\n rows=\"3\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (input)=\"onParameterChange(config.name, $any($event.target).value)\"\n [placeholder]=\"config.description || 'Enter value...'\"></textarea>\n } @else {\n <kendo-textbox\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\"\n [placeholder]=\"config.description || 'Enter value...'\">\n </kendo-textbox>\n }\n }\n </div>\n }\n </div>\n }\n</div>\n}\n<!-- Step 3: Results -->\n@if (CurrentStep === 'results') {\n <div class=\"step-content results-step\">\n <div class=\"results-container\">\n <!-- Success/Error Header -->\n <div class=\"result-header\" [class.success]=\"ExecutionResult?.Success\" [class.error]=\"!ExecutionResult?.Success\">\n @if (ExecutionResult?.Success) {\n <i class=\"fa-solid fa-check-circle\"></i>\n <span class=\"result-status\">Execution Successful</span>\n } @else {\n <i class=\"fa-solid fa-times-circle\"></i>\n <span class=\"result-status\">Execution Failed</span>\n }\n @if (ExecutionResult?.DurationMs) {\n <span class=\"duration\">{{ ExecutionResult?.DurationMs }}ms</span>\n }\n </div>\n <!-- Executed Tool Info (moved to top) -->\n <div class=\"execution-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">Tool:</span>\n <span class=\"info-value\">{{ SelectedToolName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Server:</span>\n <span class=\"info-value\">{{ SelectedServerName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Connection:</span>\n <span class=\"info-value\">{{ SelectedConnectionName }}</span>\n </div>\n </div>\n <!-- Error Message -->\n @if (ExecutionResult?.ErrorMessage) {\n <div class=\"error-panel\">\n <h4><i class=\"fa-solid fa-exclamation-triangle\"></i> Error</h4>\n <pre class=\"error-message\">{{ ExecutionResult?.ErrorMessage }}</pre>\n </div>\n }\n <!-- Result Data (fills remaining space) -->\n @if (ExecutionResult?.Result) {\n <div class=\"result-panel fill-space\">\n <div class=\"result-panel-header\">\n <h4><i class=\"fa-solid fa-code\"></i> Result</h4>\n <button kendoButton fillMode=\"flat\" (click)=\"copyResult()\" title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <div class=\"code-editor-container\">\n <mj-code-editor\n [ngModel]=\"FormattedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </div>\n}\n</div>\n<!-- Panel Actions -->\n<div class=\"panel-actions\">\n @switch (CurrentStep) {\n @case ('select') {\n <button kendoButton themeColor=\"primary\" (click)=\"proceedToConfig()\" [disabled]=\"!CanProceedToConfig\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n Next\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"closeDialog()\">Cancel</button>\n }\n @case ('configure') {\n <button kendoButton themeColor=\"primary\" (click)=\"executeTool()\" [disabled]=\"!IsValid || IsExecuting\">\n @if (IsExecuting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Executing...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Execute Tool\n }\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back\n </button>\n }\n @case ('results') {\n <button kendoButton themeColor=\"primary\" (click)=\"runAgain()\">\n <i class=\"fa-solid fa-redo\"></i>\n Run Again\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Edit Parameters\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"closeDialog()\">Close</button>\n }\n }\n</div>\n</div>\n}\n"]}