@memberjunction/ng-dashboards 6.2.0-edge.3 → 6.2.0-edge.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts +4 -3
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +8 -5
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
- package/dist/AI/components/duplicates/compare-value.component.d.ts +67 -0
- package/dist/AI/components/duplicates/compare-value.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/compare-value.component.js +168 -0
- package/dist/AI/components/duplicates/compare-value.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +49 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +287 -169
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +77 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +116 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +16 -4
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +2 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +12 -6
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.d.ts +53 -0
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -0
- package/dist/AI/components/vectors/sensitive-fields.js +226 -0
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts +126 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-document-rules.js +168 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -0
- package/dist/AI/components/vectors/vector-index-auto.d.ts +29 -0
- package/dist/AI/components/vectors/vector-index-auto.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-index-auto.js +59 -0
- package/dist/AI/components/vectors/vector-index-auto.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +58 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +493 -250
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +7 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Communication/communication-agent-context.d.ts +11 -1
- package/dist/Communication/communication-agent-context.d.ts.map +1 -1
- package/dist/Communication/communication-agent-context.js +15 -0
- package/dist/Communication/communication-agent-context.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +5 -0
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +27 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +722 -78
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +0 -3
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +5 -14
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +12 -10
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts +14 -43
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js +6 -29
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +174 -321
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +522 -1195
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts +116 -0
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js +277 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts +26 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js +32 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts +58 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js +391 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts +37 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js +68 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +295 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.js +1022 -0
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts +23 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.js +3 -0
- package/dist/DashboardEditor/dashboard-editor.types.js.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts +11 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js +17 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +51 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +375 -223
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +2 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +1 -0
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.d.ts.map +1 -1
- package/dist/DevTools/class-registry.component.js +1 -0
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.d.ts.map +1 -1
- package/dist/DevTools/event-monitor.component.js +2 -0
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/grid-width-lab.component.d.ts.map +1 -1
- package/dist/DevTools/grid-width-lab.component.js +1 -0
- package/dist/DevTools/grid-width-lab.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +1 -0
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +1 -0
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.d.ts.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +1 -0
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/DevTools/tab-strip-lab.component.d.ts.map +1 -1
- package/dist/DevTools/tab-strip-lab.component.js +1 -0
- package/dist/DevTools/tab-strip-lab.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +5 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +8 -5
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.d.ts +0 -14
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +7 -29
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Home/home-agent-context.d.ts +29 -10
- package/dist/Home/home-agent-context.d.ts.map +1 -1
- package/dist/Home/home-agent-context.js +50 -24
- package/dist/Home/home-agent-context.js.map +1 -1
- package/dist/Home/home-dashboard-switcher.component.d.ts +95 -0
- package/dist/Home/home-dashboard-switcher.component.d.ts.map +1 -0
- package/dist/Home/home-dashboard-switcher.component.js +442 -0
- package/dist/Home/home-dashboard-switcher.component.js.map +1 -0
- package/dist/Home/home-dashboard.component.d.ts +330 -17
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1702 -1014
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Home/home-menus.d.ts +38 -0
- package/dist/Home/home-menus.d.ts.map +1 -0
- package/dist/Home/home-menus.js +53 -0
- package/dist/Home/home-menus.js.map +1 -0
- package/dist/Home/home-pinned-dashboards.d.ts +33 -0
- package/dist/Home/home-pinned-dashboards.d.ts.map +1 -0
- package/dist/Home/home-pinned-dashboards.js +76 -0
- package/dist/Home/home-pinned-dashboards.js.map +1 -0
- package/dist/Integration/components/overview/overview.component.js +2 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +2 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +24 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +16 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +87 -33
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-inspector.component.d.ts +130 -0
- package/dist/LoginStudio/login-studio-inspector.component.d.ts.map +1 -0
- package/dist/LoginStudio/login-studio-inspector.component.js +781 -0
- package/dist/LoginStudio/login-studio-inspector.component.js.map +1 -0
- package/dist/LoginStudio/login-studio-resource.component.d.ts +153 -0
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -0
- package/dist/LoginStudio/login-studio-resource.component.js +857 -0
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-production.component.d.ts +5 -1
- package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +64 -41
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +3 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js +2 -2
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js.map +1 -1
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -1
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +7 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +7 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Workflows/components/workflow-runs-resource.component.js +4 -4
- package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +21 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +4 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +70 -62
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +33 -5
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +1 -1
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +3 -1
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/dashboard-library-changes.d.ts +23 -0
- package/dist/shared/dashboard-library-changes.d.ts.map +1 -0
- package/dist/shared/dashboard-library-changes.js +26 -0
- package/dist/shared/dashboard-library-changes.js.map +1 -0
- package/dist/shared/dashboard-owner-names.d.ts +17 -0
- package/dist/shared/dashboard-owner-names.d.ts.map +1 -0
- package/dist/shared/dashboard-owner-names.js +65 -0
- package/dist/shared/dashboard-owner-names.js.map +1 -0
- package/dist/shared/dashboard-recents.d.ts +34 -0
- package/dist/shared/dashboard-recents.d.ts.map +1 -0
- package/dist/shared/dashboard-recents.js +87 -0
- package/dist/shared/dashboard-recents.js.map +1 -0
- package/dist/shared/dashboards-app-install.d.ts +59 -0
- package/dist/shared/dashboards-app-install.d.ts.map +1 -0
- package/dist/shared/dashboards-app-install.js +97 -0
- package/dist/shared/dashboards-app-install.js.map +1 -0
- package/dist/shared/dashboards-app.helpers.d.ts +42 -0
- package/dist/shared/dashboards-app.helpers.d.ts.map +1 -0
- package/dist/shared/dashboards-app.helpers.js +143 -0
- package/dist/shared/dashboards-app.helpers.js.map +1 -0
- package/package.json +73 -69
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-registry.component.js","sourceRoot":"","sources":["../../src/DevTools/class-registry.component.ts","../../src/DevTools/class-registry.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass, MJGlobal } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { BuildClassRegistryAgentContext } from './dev-tools-agent-context';\nimport { AgentToolResult, ValidateStringParam } from '../shared/agent-tool-validation';\n\n/** Local mirror of MJGlobal's ClassRegistration shape (avoids importing the type). */\ninterface ClassRegistration {\n BaseClass: { name?: string };\n SubClass: { name?: string };\n Key: string | null;\n Priority: number;\n}\n\ninterface RegistrationGroup {\n baseClassName: string;\n count: number;\n registrations: ClassRegistration[];\n expanded: boolean;\n /** Number of distinct keys (some keys can have multiple registrations at different priorities). */\n uniqueKeys: number;\n /** True when at least one key in this group has multiple registrations (priority resolution applies). */\n hasOverrides: boolean;\n}\n\n/**\n * Class Registry Browser — read-only inspector of every `@RegisterClass`\n * registration tracked by `MJGlobal.Instance.ClassFactory`. Groups by base\n * class, surfaces priority/override conflicts, supports search + copy.\n */\n@RegisterClass(BaseResourceComponent, 'ClassRegistryInspector')\n@Component({\n standalone: false,\n selector: 'mj-class-registry-inspector',\n templateUrl: './class-registry.component.html',\n styleUrls: ['./inspector-shared.css', './class-registry.component.css']\n})\nexport class ClassRegistryInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public Groups: RegistrationGroup[] = [];\n public Stats = { total: 0, baseClasses: 0, withOverrides: 0 };\n public SearchQuery = '';\n public CopyConfirmed = false;\n public LastRefreshed = new Date();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const prefs = DevToolsPrefs.Get<{ search?: string; expanded?: string[] }>('classRegistry');\n if (prefs?.search) this.SearchQuery = prefs.search;\n this.Refresh();\n // Restore expansion after groups are built\n if (prefs?.expanded) {\n for (const g of this.Groups) {\n g.expanded = prefs.expanded.includes(g.baseClassName);\n }\n }\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish initial agent context + register the read-only client tools.\n // Re-emit happens on every search / filter change (OnSearchChange, the tools).\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n super.ngOnDestroy();\n }\n\n public PersistPrefs(): void {\n this.savePrefs();\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save('classRegistry', {\n search: this.SearchQuery,\n expanded: this.Groups.filter(g => g.expanded).map(g => g.baseClassName)\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Class Registry'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-cubes'; }\n\n public Refresh(): void {\n const factory = MJGlobal.Instance.ClassFactory as unknown as { _registrations: ClassRegistration[] };\n const all = factory._registrations ?? [];\n\n // Group by base class name\n const byBase = new Map<string, ClassRegistration[]>();\n for (const reg of all) {\n const baseName = reg.BaseClass?.name ?? '(unknown)';\n const arr = byBase.get(baseName) ?? [];\n arr.push(reg);\n byBase.set(baseName, arr);\n }\n\n // Build groups\n const groups: RegistrationGroup[] = [];\n for (const [baseClassName, registrations] of byBase) {\n const keyCounts = new Map<string, number>();\n for (const r of registrations) {\n const k = r.Key ?? '';\n keyCounts.set(k, (keyCounts.get(k) ?? 0) + 1);\n }\n let hasOverrides = false;\n for (const c of keyCounts.values()) {\n if (c > 1) { hasOverrides = true; break; }\n }\n groups.push({\n baseClassName,\n count: registrations.length,\n registrations: registrations.sort((a, b) => {\n const ak = a.Key ?? '';\n const bk = b.Key ?? '';\n if (ak !== bk) return ak.localeCompare(bk);\n return b.Priority - a.Priority;\n }),\n expanded: false,\n uniqueKeys: keyCounts.size,\n hasOverrides\n });\n }\n\n this.Groups = groups.sort((a, b) => b.count - a.count);\n\n this.Stats = {\n total: all.length,\n baseClasses: byBase.size,\n withOverrides: groups.filter(g => g.hasOverrides).length\n };\n\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link Refresh}. */\n public refresh(): void {\n return this.Refresh();\n }\n\n public OnGroupExpandedChange(group: RegistrationGroup, expanded: boolean): void {\n group.expanded = expanded;\n this.savePrefs();\n }\n\n public ExpandAll(): void {\n for (const g of this.FilteredGroups) g.expanded = true;\n this.savePrefs();\n }\n\n public CollapseAll(): void {\n for (const g of this.Groups) g.expanded = false;\n this.savePrefs();\n }\n\n public OnSearchChange(value: string): void {\n this.SearchQuery = value;\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public get FilteredGroups(): RegistrationGroup[] {\n const q = this.SearchQuery.trim().toLowerCase();\n if (!q) return this.Groups;\n return this.Groups\n .map(g => ({\n ...g,\n expanded: true,\n registrations: g.registrations.filter(r => {\n const sub = r.SubClass?.name?.toLowerCase() ?? '';\n const key = r.Key?.toLowerCase() ?? '';\n return g.baseClassName.toLowerCase().includes(q) || sub.includes(q) || key.includes(q);\n })\n }))\n .filter(g => g.registrations.length > 0);\n }\n\n public IsConflictRow(group: RegistrationGroup, reg: ClassRegistration): boolean {\n if (!group.hasOverrides) return false;\n const sameKey = group.registrations.filter(r => (r.Key ?? '') === (reg.Key ?? ''));\n return sameKey.length > 1;\n }\n\n public IsWinningRow(group: RegistrationGroup, reg: ClassRegistration): boolean {\n const sameKey = group.registrations.filter(r => (r.Key ?? '') === (reg.Key ?? ''));\n if (sameKey.length === 1) return false;\n const max = Math.max(...sameKey.map(r => r.Priority));\n // If multiple share max priority, the LAST registered wins (matches ClassFactory behavior).\n const top = sameKey.filter(r => r.Priority === max);\n return top[top.length - 1] === reg;\n }\n\n public async OnCopy(): Promise<void> {\n const payload = {\n stats: this.Stats,\n groups: this.FilteredGroups.map(g => ({\n baseClass: g.baseClassName,\n count: g.count,\n registrations: g.registrations.map(r => ({\n key: r.Key,\n subClass: r.SubClass?.name ?? '(anonymous)',\n priority: r.Priority\n }))\n }))\n };\n try {\n await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));\n this.CopyConfirmed = true;\n this.cdr.markForCheck();\n setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);\n } catch {\n // clipboard unavailable\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public TrackByBase = (_i: number, g: RegistrationGroup) => g.baseClassName;\n public TrackByReg = (_i: number, r: ClassRegistration) => `${r.SubClass?.name ?? ''}|${r.Key ?? ''}|${r.Priority}`;\n\n // ========================================\n // AI AGENT CONTEXT & CLIENT TOOLS\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.\n // The Class Registry is a read-only browser of the ClassFactory's\n // @RegisterClass registrations. The context reports registration counts and\n // the user's search/filter; the tools only search and filter that read-only\n // list. No tool reads or mutates application data or class registrations.\n // ========================================\n\n /**\n * The current base-class filter — non-empty only when the active search term\n * exactly matches a known base class name (the registry's only filter is the\n * search box). Lets the agent know the user has narrowed to one base class.\n */\n private get activeBaseClassFilter(): string {\n const q = this.SearchQuery.trim();\n if (!q) return '';\n const match = this.Groups.find(g => g.baseClassName.toLowerCase() === q.toLowerCase());\n return match ? match.baseClassName : '';\n }\n\n /** Publish the current Class Registry browse state to the AI agent. */\n private publishAgentContext(): void {\n const visible = this.FilteredGroups;\n const context = BuildClassRegistryAgentContext({\n TotalClassCount: this.Stats.total,\n BaseClassCount: this.Stats.baseClasses,\n OverrideCount: this.Stats.withOverrides,\n SearchTerm: this.SearchQuery,\n FilterByBase: this.activeBaseClassFilter,\n VisibleGroupCount: visible.length,\n VisibleBaseClassNames: visible.map(g => g.baseClassName),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Register the read-only client tools the AI agent can invoke against the\n * Class Registry: SearchClassRegistry, FilterByBaseClass, ClearClassRegistryFilters.\n */\n private registerAgentClientTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchClassRegistry',\n Description: 'Search the class registry by base class, subclass, or key. Pass an empty string to clear the search.',\n ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },\n Handler: async (params: Record<string, unknown>) => this.toolSearch(params),\n },\n {\n Name: 'FilterByBaseClass',\n Description: 'Narrow the registry to a single base class by its exact name (e.g. \"BaseEntity\").',\n ParameterSchema: { type: 'object', properties: { baseClass: { type: 'string' } }, required: ['baseClass'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByBaseClass(params),\n },\n {\n Name: 'ClearClassRegistryFilters',\n Description: 'Clear the class registry search / filter so all registrations are shown.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.OnSearchChange('');\n this.cdr.markForCheck();\n return { Success: true };\n },\n },\n ]);\n }\n\n /** Apply (or clear, on empty string) the registry search query. */\n private toolSearch(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['query'], 'query');\n if (!validated.ok) {\n return validated.result;\n }\n this.OnSearchChange(validated.value);\n this.cdr.markForCheck();\n return { Success: true };\n }\n\n /** Narrow to a single base class by exact name (case-insensitive). */\n private toolFilterByBaseClass(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['baseClass'], 'baseClass');\n if (!validated.ok) {\n return validated.result;\n }\n const name = validated.value.trim();\n if (name.length === 0) {\n return { Success: false, ErrorMessage: 'baseClass must be a non-empty class name.' };\n }\n const match = this.Groups.find(g => g.baseClassName.toLowerCase() === name.toLowerCase());\n if (!match) {\n return { Success: false, ErrorMessage: `No base class named \"${name}\" is registered.` };\n }\n this.OnSearchChange(match.baseClassName);\n this.cdr.markForCheck();\n return { Success: true };\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Class registry inspector\"\n Title=\"Class Registry\"\n Subtitle=\"Every class registered with @RegisterClass\">\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"ExpandAll()\" title=\"Expand all groups\">\n <i class=\"fa-solid fa-expand\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Expand</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"CollapseAll()\" title=\"Collapse all groups\">\n <i class=\"fa-solid fa-compress\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Collapse</span>\n </button>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy as JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">{{ CopyConfirmed ? 'Copied' : 'Copy' }}</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"cr-stats-row\">\n <div class=\"cr-stat\">\n <div class=\"cr-stat__value\">{{ Stats.total }}</div>\n <div class=\"cr-stat__label\">Total registrations</div>\n </div>\n <div class=\"cr-stat\">\n <div class=\"cr-stat__value\">{{ Stats.baseClasses }}</div>\n <div class=\"cr-stat__label\">Base classes</div>\n </div>\n <div class=\"cr-stat\" [class.cr-stat--warn]=\"Stats.withOverrides > 0\">\n <div class=\"cr-stat__value\">{{ Stats.withOverrides }}</div>\n <div class=\"cr-stat__label\">With overrides</div>\n </div>\n <div class=\"cr-stat cr-stat--inline\">\n <div class=\"cr-search-wrap\">\n <i class=\"fa-solid fa-search cr-search-icon\"></i>\n <input type=\"search\"\n class=\"cr-search\"\n placeholder=\"Search base class, subclass, or key…\"\n [value]=\"SearchQuery\"\n (input)=\"OnSearchChange($any($event.target).value)\" />\n @if (SearchQuery) {\n <button class=\"cr-search-clear\" (click)=\"OnSearchChange('')\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div class=\"cr-groups\">\n @for (group of FilteredGroups; track TrackByBase($index, group)) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"group.expanded\" (ExpandedChange)=\"OnGroupExpandedChange(group, $event)\">\n <ng-template mjAccordionTitle>\n <span class=\"cr-group-name\">{{ group.baseClassName }}</span>\n <span class=\"cr-group-meta\">\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.count }}</span>\n @if (group.uniqueKeys !== group.count) {\n <span class=\"mj-accordion-badge mj-accordion-badge--info\">{{ group.uniqueKeys }} keys</span>\n }\n @if (group.hasOverrides) {\n <span class=\"mj-accordion-badge mj-accordion-badge--warning\">\n <i class=\"fa-solid fa-bolt\"></i> overrides\n </span>\n }\n </span>\n </ng-template>\n <ng-template mjAccordionBody>\n <table class=\"cr-table\">\n <thead>\n <tr>\n <th class=\"cr-th-key\">Key</th>\n <th class=\"cr-th-class\">Subclass</th>\n <th class=\"cr-th-prio\">Priority</th>\n <th class=\"cr-th-status\"></th>\n </tr>\n </thead>\n <tbody>\n @for (reg of group.registrations; track TrackByReg($index, reg)) {\n <tr [class.cr-row--conflict]=\"IsConflictRow(group, reg)\"\n [class.cr-row--winning]=\"IsWinningRow(group, reg)\">\n <td class=\"cr-td-key\">\n @if (reg.Key) {\n <code>{{ reg.Key }}</code>\n } @else {\n <span class=\"cr-td-empty\">(no key)</span>\n }\n </td>\n <td class=\"cr-td-class\">{{ reg.SubClass.name || '(anonymous)' }}</td>\n <td class=\"cr-td-prio\">{{ reg.Priority }}</td>\n <td class=\"cr-td-status\">\n @if (IsWinningRow(group, reg)) {\n <span class=\"cr-status cr-status--win\" title=\"Highest priority among same-key registrations\">\n <i class=\"fa-solid fa-crown\"></i> winner\n </span>\n } @else if (IsConflictRow(group, reg)) {\n <span class=\"cr-status cr-status--shadowed\" title=\"Outranked by another registration with the same key\">\n shadowed\n </span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </ng-template>\n </mj-accordion-panel>\n }\n @if (FilteredGroups.length === 0) {\n <mj-empty-state class=\"cr-empty\" Variant=\"no-results\" Icon=\"fa-solid fa-magnifying-glass\"\n [Title]=\"'No registrations match “' + SearchQuery + '”'\" />\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"class-registry.component.js","sourceRoot":"","sources":["../../src/DevTools/class-registry.component.ts","../../src/DevTools/class-registry.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass, MJGlobal } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { BuildClassRegistryAgentContext } from './dev-tools-agent-context';\nimport { AgentToolResult, ValidateStringParam } from '../shared/agent-tool-validation';\n\n/** Local mirror of MJGlobal's ClassRegistration shape (avoids importing the type). */\ninterface ClassRegistration {\n BaseClass: { name?: string };\n SubClass: { name?: string };\n Key: string | null;\n Priority: number;\n}\n\ninterface RegistrationGroup {\n baseClassName: string;\n count: number;\n registrations: ClassRegistration[];\n expanded: boolean;\n /** Number of distinct keys (some keys can have multiple registrations at different priorities). */\n uniqueKeys: number;\n /** True when at least one key in this group has multiple registrations (priority resolution applies). */\n hasOverrides: boolean;\n}\n\n/**\n * Class Registry Browser — read-only inspector of every `@RegisterClass`\n * registration tracked by `MJGlobal.Instance.ClassFactory`. Groups by base\n * class, surfaces priority/override conflicts, supports search + copy.\n */\n@RegisterClass(BaseResourceComponent, 'ClassRegistryInspector')\n@Component({\n standalone: false,\n selector: 'mj-class-registry-inspector',\n templateUrl: './class-registry.component.html',\n styleUrls: ['./inspector-shared.css', './class-registry.component.css']\n})\nexport class ClassRegistryInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public Groups: RegistrationGroup[] = [];\n public Stats = { total: 0, baseClasses: 0, withOverrides: 0 };\n public SearchQuery = '';\n public CopyConfirmed = false;\n public LastRefreshed = new Date();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n const prefs = DevToolsPrefs.Get<{ search?: string; expanded?: string[] }>('classRegistry');\n if (prefs?.search) this.SearchQuery = prefs.search;\n this.Refresh();\n // Restore expansion after groups are built\n if (prefs?.expanded) {\n for (const g of this.Groups) {\n g.expanded = prefs.expanded.includes(g.baseClassName);\n }\n }\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish initial agent context + register the read-only client tools.\n // Re-emit happens on every search / filter change (OnSearchChange, the tools).\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n super.ngOnDestroy();\n }\n\n public PersistPrefs(): void {\n this.savePrefs();\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save('classRegistry', {\n search: this.SearchQuery,\n expanded: this.Groups.filter(g => g.expanded).map(g => g.baseClassName)\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Class Registry'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-cubes'; }\n\n public Refresh(): void {\n const factory = MJGlobal.Instance.ClassFactory as unknown as { _registrations: ClassRegistration[] };\n const all = factory._registrations ?? [];\n\n // Group by base class name\n const byBase = new Map<string, ClassRegistration[]>();\n for (const reg of all) {\n const baseName = reg.BaseClass?.name ?? '(unknown)';\n const arr = byBase.get(baseName) ?? [];\n arr.push(reg);\n byBase.set(baseName, arr);\n }\n\n // Build groups\n const groups: RegistrationGroup[] = [];\n for (const [baseClassName, registrations] of byBase) {\n const keyCounts = new Map<string, number>();\n for (const r of registrations) {\n const k = r.Key ?? '';\n keyCounts.set(k, (keyCounts.get(k) ?? 0) + 1);\n }\n let hasOverrides = false;\n for (const c of keyCounts.values()) {\n if (c > 1) { hasOverrides = true; break; }\n }\n groups.push({\n baseClassName,\n count: registrations.length,\n registrations: registrations.sort((a, b) => {\n const ak = a.Key ?? '';\n const bk = b.Key ?? '';\n if (ak !== bk) return ak.localeCompare(bk);\n return b.Priority - a.Priority;\n }),\n expanded: false,\n uniqueKeys: keyCounts.size,\n hasOverrides\n });\n }\n\n this.Groups = groups.sort((a, b) => b.count - a.count);\n\n this.Stats = {\n total: all.length,\n baseClasses: byBase.size,\n withOverrides: groups.filter(g => g.hasOverrides).length\n };\n\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n /** @deprecated Use {@link Refresh}. */\n public refresh(): void {\n return this.Refresh();\n }\n\n public OnGroupExpandedChange(group: RegistrationGroup, expanded: boolean): void {\n group.expanded = expanded;\n this.savePrefs();\n }\n\n public ExpandAll(): void {\n for (const g of this.FilteredGroups) g.expanded = true;\n this.savePrefs();\n }\n\n public CollapseAll(): void {\n for (const g of this.Groups) g.expanded = false;\n this.savePrefs();\n }\n\n public OnSearchChange(value: string): void {\n this.SearchQuery = value;\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public get FilteredGroups(): RegistrationGroup[] {\n const q = this.SearchQuery.trim().toLowerCase();\n if (!q) return this.Groups;\n return this.Groups\n .map(g => ({\n ...g,\n expanded: true,\n registrations: g.registrations.filter(r => {\n const sub = r.SubClass?.name?.toLowerCase() ?? '';\n const key = r.Key?.toLowerCase() ?? '';\n return g.baseClassName.toLowerCase().includes(q) || sub.includes(q) || key.includes(q);\n })\n }))\n .filter(g => g.registrations.length > 0);\n }\n\n public IsConflictRow(group: RegistrationGroup, reg: ClassRegistration): boolean {\n if (!group.hasOverrides) return false;\n const sameKey = group.registrations.filter(r => (r.Key ?? '') === (reg.Key ?? ''));\n return sameKey.length > 1;\n }\n\n public IsWinningRow(group: RegistrationGroup, reg: ClassRegistration): boolean {\n const sameKey = group.registrations.filter(r => (r.Key ?? '') === (reg.Key ?? ''));\n if (sameKey.length === 1) return false;\n const max = Math.max(...sameKey.map(r => r.Priority));\n // If multiple share max priority, the LAST registered wins (matches ClassFactory behavior).\n const top = sameKey.filter(r => r.Priority === max);\n return top[top.length - 1] === reg;\n }\n\n public async OnCopy(): Promise<void> {\n const payload = {\n stats: this.Stats,\n groups: this.FilteredGroups.map(g => ({\n baseClass: g.baseClassName,\n count: g.count,\n registrations: g.registrations.map(r => ({\n key: r.Key,\n subClass: r.SubClass?.name ?? '(anonymous)',\n priority: r.Priority\n }))\n }))\n };\n try {\n await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));\n this.CopyConfirmed = true;\n this.cdr.markForCheck();\n setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);\n } catch {\n // clipboard unavailable\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public TrackByBase = (_i: number, g: RegistrationGroup) => g.baseClassName;\n public TrackByReg = (_i: number, r: ClassRegistration) => `${r.SubClass?.name ?? ''}|${r.Key ?? ''}|${r.Priority}`;\n\n // ========================================\n // AI AGENT CONTEXT & CLIENT TOOLS\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.\n // The Class Registry is a read-only browser of the ClassFactory's\n // @RegisterClass registrations. The context reports registration counts and\n // the user's search/filter; the tools only search and filter that read-only\n // list. No tool reads or mutates application data or class registrations.\n // ========================================\n\n /**\n * The current base-class filter — non-empty only when the active search term\n * exactly matches a known base class name (the registry's only filter is the\n * search box). Lets the agent know the user has narrowed to one base class.\n */\n private get activeBaseClassFilter(): string {\n const q = this.SearchQuery.trim();\n if (!q) return '';\n const match = this.Groups.find(g => g.baseClassName.toLowerCase() === q.toLowerCase());\n return match ? match.baseClassName : '';\n }\n\n /** Publish the current Class Registry browse state to the AI agent. */\n private publishAgentContext(): void {\n const visible = this.FilteredGroups;\n const context = BuildClassRegistryAgentContext({\n TotalClassCount: this.Stats.total,\n BaseClassCount: this.Stats.baseClasses,\n OverrideCount: this.Stats.withOverrides,\n SearchTerm: this.SearchQuery,\n FilterByBase: this.activeBaseClassFilter,\n VisibleGroupCount: visible.length,\n VisibleBaseClassNames: visible.map(g => g.baseClassName),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Register the read-only client tools the AI agent can invoke against the\n * Class Registry: SearchClassRegistry, FilterByBaseClass, ClearClassRegistryFilters.\n */\n private registerAgentClientTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchClassRegistry',\n Description: 'Search the class registry by base class, subclass, or key. Pass an empty string to clear the search.',\n ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },\n Handler: async (params: Record<string, unknown>) => this.toolSearch(params),\n },\n {\n Name: 'FilterByBaseClass',\n Description: 'Narrow the registry to a single base class by its exact name (e.g. \"BaseEntity\").',\n ParameterSchema: { type: 'object', properties: { baseClass: { type: 'string' } }, required: ['baseClass'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByBaseClass(params),\n },\n {\n Name: 'ClearClassRegistryFilters',\n Description: 'Clear the class registry search / filter so all registrations are shown.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.OnSearchChange('');\n this.cdr.markForCheck();\n return { Success: true };\n },\n },\n ]);\n }\n\n /** Apply (or clear, on empty string) the registry search query. */\n private toolSearch(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['query'], 'query');\n if (!validated.ok) {\n return validated.result;\n }\n this.OnSearchChange(validated.value);\n this.cdr.markForCheck();\n return { Success: true };\n }\n\n /** Narrow to a single base class by exact name (case-insensitive). */\n private toolFilterByBaseClass(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['baseClass'], 'baseClass');\n if (!validated.ok) {\n return validated.result;\n }\n const name = validated.value.trim();\n if (name.length === 0) {\n return { Success: false, ErrorMessage: 'baseClass must be a non-empty class name.' };\n }\n const match = this.Groups.find(g => g.baseClassName.toLowerCase() === name.toLowerCase());\n if (!match) {\n return { Success: false, ErrorMessage: `No base class named \"${name}\" is registered.` };\n }\n this.OnSearchChange(match.baseClassName);\n this.cdr.markForCheck();\n return { Success: true };\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Class registry inspector\"\n Title=\"Class Registry\"\n Subtitle=\"Every class registered with @RegisterClass\">\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"ExpandAll()\" title=\"Expand all groups\">\n <i class=\"fa-solid fa-expand\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Expand</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"CollapseAll()\" title=\"Collapse all groups\">\n <i class=\"fa-solid fa-compress\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Collapse</span>\n </button>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy as JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">{{ CopyConfirmed ? 'Copied' : 'Copy' }}</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"cr-stats-row\">\n <div class=\"cr-stat\">\n <div class=\"cr-stat__value\">{{ Stats.total }}</div>\n <div class=\"cr-stat__label\">Total registrations</div>\n </div>\n <div class=\"cr-stat\">\n <div class=\"cr-stat__value\">{{ Stats.baseClasses }}</div>\n <div class=\"cr-stat__label\">Base classes</div>\n </div>\n <div class=\"cr-stat\" [class.cr-stat--warn]=\"Stats.withOverrides > 0\">\n <div class=\"cr-stat__value\">{{ Stats.withOverrides }}</div>\n <div class=\"cr-stat__label\">With overrides</div>\n </div>\n <div class=\"cr-stat cr-stat--inline\">\n <div class=\"cr-search-wrap\">\n <i class=\"fa-solid fa-search cr-search-icon\"></i>\n <input type=\"search\"\n class=\"cr-search\"\n placeholder=\"Search base class, subclass, or key…\"\n [value]=\"SearchQuery\"\n (input)=\"OnSearchChange($any($event.target).value)\" />\n @if (SearchQuery) {\n <button class=\"cr-search-clear\" (click)=\"OnSearchChange('')\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div class=\"cr-groups\">\n @for (group of FilteredGroups; track TrackByBase($index, group)) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"group.expanded\" (ExpandedChange)=\"OnGroupExpandedChange(group, $event)\">\n <ng-template mjAccordionTitle>\n <span class=\"cr-group-name\">{{ group.baseClassName }}</span>\n <span class=\"cr-group-meta\">\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.count }}</span>\n @if (group.uniqueKeys !== group.count) {\n <span class=\"mj-accordion-badge mj-accordion-badge--info\">{{ group.uniqueKeys }} keys</span>\n }\n @if (group.hasOverrides) {\n <span class=\"mj-accordion-badge mj-accordion-badge--warning\">\n <i class=\"fa-solid fa-bolt\"></i> overrides\n </span>\n }\n </span>\n </ng-template>\n <ng-template mjAccordionBody>\n <table class=\"cr-table\">\n <thead>\n <tr>\n <th class=\"cr-th-key\">Key</th>\n <th class=\"cr-th-class\">Subclass</th>\n <th class=\"cr-th-prio\">Priority</th>\n <th class=\"cr-th-status\"></th>\n </tr>\n </thead>\n <tbody>\n @for (reg of group.registrations; track TrackByReg($index, reg)) {\n <tr [class.cr-row--conflict]=\"IsConflictRow(group, reg)\"\n [class.cr-row--winning]=\"IsWinningRow(group, reg)\">\n <td class=\"cr-td-key\">\n @if (reg.Key) {\n <code>{{ reg.Key }}</code>\n } @else {\n <span class=\"cr-td-empty\">(no key)</span>\n }\n </td>\n <td class=\"cr-td-class\">{{ reg.SubClass.name || '(anonymous)' }}</td>\n <td class=\"cr-td-prio\">{{ reg.Priority }}</td>\n <td class=\"cr-td-status\">\n @if (IsWinningRow(group, reg)) {\n <span class=\"cr-status cr-status--win\" title=\"Highest priority among same-key registrations\">\n <i class=\"fa-solid fa-crown\"></i> winner\n </span>\n } @else if (IsConflictRow(group, reg)) {\n <span class=\"cr-status cr-status--shadowed\" title=\"Outranked by another registration with the same key\">\n shadowed\n </span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </ng-template>\n </mj-accordion-panel>\n }\n @if (FilteredGroups.length === 0) {\n <mj-empty-state class=\"cr-empty\" Variant=\"no-results\" Icon=\"fa-solid fa-magnifying-glass\"\n [Title]=\"'No registrations match “' + SearchQuery + '”'\" />\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-monitor.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/event-monitor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAgBlE,UAAU,QAAQ;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAC7D,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9B;;;;GAIG;AACH,qBAOa,qBAAsB,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAuB5F,OAAO,CAAC,GAAG;IArBvB,SAAgB,SAAS,OAAO;IACzB,MAAM,EAAE,QAAQ,EAAE,CAAM;IACxB,MAAM,UAAS;IACf,UAAU,UAAQ;IAClB,MAAM,SAAM;IACZ,UAAU,SAAM;IAChB,eAAe,SAAM;IACrB,UAAU,SAAM;IAChB,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAM;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,KAAK;;;;MAA0C;IAC/C,SAAS,OAAc;IACvB,SAAS,EAAE,SAAS,CAAU;IAC9B,OAAO,EAAE,OAAO,CAAU;IAEjC,OAAO,CAAC,GAAG,CAAC,CAAe;IAC3B,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,SAAS,CAAC,CAAiC;gBAE/B,GAAG,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"event-monitor.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/event-monitor.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -234,6 +234,7 @@ let EventMonitorComponent = class EventMonitorComponent extends BaseResourceComp
|
|
|
234
234
|
this.cdr = cdr;
|
|
235
235
|
}
|
|
236
236
|
ngOnInit() {
|
|
237
|
+
super.ngOnInit();
|
|
237
238
|
this.loadPrefs();
|
|
238
239
|
this.subscribe();
|
|
239
240
|
this.rateTimer = setInterval(() => this.tickRate(), 500);
|
|
@@ -251,6 +252,7 @@ let EventMonitorComponent = class EventMonitorComponent extends BaseResourceComp
|
|
|
251
252
|
this.sub?.unsubscribe();
|
|
252
253
|
if (this.rateTimer)
|
|
253
254
|
clearInterval(this.rateTimer);
|
|
255
|
+
super.ngOnDestroy();
|
|
254
256
|
}
|
|
255
257
|
loadPrefs() {
|
|
256
258
|
const p = DevToolsPrefs.Get('eventMonitor');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-monitor.component.js","sourceRoot":"","sources":["../../src/DevTools/event-monitor.component.ts","../../src/DevTools/event-monitor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass, MJGlobal, MJEvent } from '@memberjunction/global';\nimport { Subscription } from 'rxjs';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { BuildEventMonitorAgentContext } from './dev-tools-agent-context';\nimport { AgentToolResult, ValidateStringParam, ValidateEnumParam } from '../shared/agent-tool-validation';\n\ninterface EventMonitorPrefs {\n filter?: string;\n typeFilter?: string;\n componentFilter?: string;\n codeFilter?: string;\n sortField?: SortField;\n sortDir?: SortDir;\n}\n\ninterface EventRow {\n seq: number;\n timestamp: Date;\n type: string;\n eventCode?: string;\n componentName: string;\n summary: string;\n args: unknown;\n expanded: boolean;\n /** True when args is null/undefined/empty — used to render a clean empty-state on expand. */\n hasPayload: boolean;\n}\n\ntype SortField = 'time' | 'type' | 'eventCode' | 'component';\ntype SortDir = 'asc' | 'desc';\n\n/**\n * Event Monitor — live tail of `MJGlobal.Instance.GetEventListener()`.\n * Captures events into a ring buffer (configurable cap) with filtering,\n * pause/resume, click-to-expand-payload, copy.\n */\n@RegisterClass(BaseResourceComponent, 'EventMonitorInspector')\n@Component({\n standalone: false,\n selector: 'mj-event-monitor',\n templateUrl: './event-monitor.component.html',\n styleUrls: ['./inspector-shared.css', './event-monitor.component.css']\n})\nexport class EventMonitorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public readonly MaxEvents = 500;\n public Events: EventRow[] = [];\n public Paused = false;\n public AutoScroll = true;\n public Filter = '';\n public TypeFilter = ''; // '' = all\n public ComponentFilter = ''; // '' = all\n public CodeFilter = ''; // '' = all\n public KnownTypes: string[] = [];\n public KnownComponents: string[] = [];\n public KnownCodes: string[] = [];\n public Stats = { captured: 0, perSecond: 0, kept: 0 };\n public StartedAt = new Date();\n public SortField: SortField = 'time';\n public SortDir: SortDir = 'desc';\n\n private sub?: Subscription;\n private seq = 0;\n private rateBucket: number[] = []; // event timestamps within last 1s\n private rateTimer?: ReturnType<typeof setInterval>;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadPrefs();\n this.subscribe();\n this.rateTimer = setInterval(() => this.tickRate(), 500);\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish the initial agent context and register the client tools the AI\n // agent can invoke against this surface. Ongoing re-emit happens in the\n // user-action methods (pause/clear/filter/sort) and in tickRate (live metrics).\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n public ngOnDestroy(): void {\n this.savePrefs();\n this.sub?.unsubscribe();\n if (this.rateTimer) clearInterval(this.rateTimer);\n }\n\n private loadPrefs(): void {\n const p = DevToolsPrefs.Get<EventMonitorPrefs>('eventMonitor');\n if (!p) return;\n this.Filter = p.filter ?? '';\n this.TypeFilter = p.typeFilter ?? '';\n this.ComponentFilter = p.componentFilter ?? '';\n this.CodeFilter = p.codeFilter ?? '';\n this.SortField = p.sortField ?? 'time';\n this.SortDir = p.sortDir ?? 'desc';\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save<EventMonitorPrefs>('eventMonitor', {\n filter: this.Filter,\n typeFilter: this.TypeFilter,\n componentFilter: this.ComponentFilter,\n codeFilter: this.CodeFilter,\n sortField: this.SortField,\n sortDir: this.SortDir\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Event Monitor'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-bolt'; }\n\n public TogglePause(): void {\n this.Paused = !this.Paused;\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n public ToggleAutoScroll(): void {\n this.AutoScroll = !this.AutoScroll;\n }\n\n public Clear(): void {\n this.Events = [];\n this.seq = 0;\n this.Stats.kept = 0;\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n public ToggleRow(row: EventRow): void {\n row.expanded = !row.expanded;\n }\n\n public OnTypeFilterClick(type: string): void {\n this.TypeFilter = this.TypeFilter === type ? '' : type;\n this.publishAgentContext();\n }\n\n public OnSortClick(field: SortField): void {\n if (this.SortField === field) {\n this.SortDir = this.SortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDir = field === 'time' ? 'desc' : 'asc';\n }\n this.savePrefs();\n this.publishAgentContext();\n }\n\n /** Public so the template can call on every ngModelChange (filters, selects). */\n public PersistPrefs(): void {\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public async OnCopyRow(row: EventRow): Promise<void> {\n const payload = {\n timestamp: row.timestamp.toISOString(),\n type: row.type,\n eventCode: row.eventCode,\n component: row.componentName,\n args: row.args\n };\n try {\n await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));\n } catch { /* clipboard unavailable */ }\n }\n\n /** Empty-state presentation for the event list — varies by capture state. */\n public get EmptyVariant(): 'empty' | 'warning' | 'no-results' {\n if (this.Stats.captured === 0) return 'empty';\n return this.Paused ? 'warning' : 'no-results';\n }\n public get EmptyIcon(): string {\n if (this.Stats.captured === 0) return 'fa-solid fa-radio';\n return this.Paused ? 'fa-solid fa-pause' : 'fa-solid fa-filter';\n }\n public get EmptyTitle(): string {\n if (this.Stats.captured === 0) return 'Listening for events…';\n return this.Paused ? 'Capture is paused' : 'No events match your filter';\n }\n public get EmptyMessage(): string {\n if (this.Stats.captured === 0) return 'Trigger an action — saves, navigation, AI events all show up here.';\n if (this.Paused) return `${this.Stats.captured} events fired since you paused. Click Resume to start collecting again.`;\n return `${this.Stats.kept} events in buffer · clear filters to see them.`;\n }\n\n public get FilteredEvents(): EventRow[] {\n let list = this.Events;\n if (this.TypeFilter) list = list.filter(e => e.type === this.TypeFilter);\n if (this.ComponentFilter) list = list.filter(e => e.componentName === this.ComponentFilter);\n if (this.CodeFilter) list = list.filter(e => (e.eventCode ?? '') === this.CodeFilter);\n\n const q = this.Filter.trim().toLowerCase();\n if (q) {\n list = list.filter(e =>\n e.type.toLowerCase().includes(q) ||\n e.componentName.toLowerCase().includes(q) ||\n e.summary.toLowerCase().includes(q) ||\n (e.eventCode && e.eventCode.toLowerCase().includes(q))\n );\n }\n\n // Sort (always returns a new array — preserves the natural seq order otherwise)\n const dir = this.SortDir === 'asc' ? 1 : -1;\n const sorted = [...list].sort((a, b) => {\n switch (this.SortField) {\n case 'time': return (a.seq - b.seq) * dir;\n case 'type': return a.type.localeCompare(b.type) * dir;\n case 'eventCode': return (a.eventCode ?? '').localeCompare(b.eventCode ?? '') * dir;\n case 'component': return a.componentName.localeCompare(b.componentName) * dir;\n default: return 0;\n }\n });\n return sorted;\n }\n\n public ClearFilters(): void {\n this.Filter = '';\n this.TypeFilter = '';\n this.ComponentFilter = '';\n this.CodeFilter = '';\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public get HasActiveFilters(): boolean {\n return !!(this.Filter || this.TypeFilter || this.ComponentFilter || this.CodeFilter);\n }\n\n public get UptimeLabel(): string {\n const ms = Date.now() - this.StartedAt.getTime();\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const remainder = s % 60;\n return m > 0 ? `${m}m ${remainder}s` : `${s}s`;\n }\n\n public TrackBySeq = (_i: number, e: EventRow) => e.seq;\n\n // ---------- private ----------\n\n private subscribe(): void {\n try {\n // withReplay = true so we get historical events that were emitted\n // before this component mounted (within MJGlobal's replay buffer).\n this.sub = MJGlobal.Instance.GetEventListener(true).subscribe((evt: MJEvent) => {\n this.handleEvent(evt);\n });\n } catch {\n // Listener unavailable; silent (rare)\n }\n }\n\n private handleEvent(evt: MJEvent): void {\n this.Stats.captured++;\n this.rateBucket.push(Date.now());\n\n if (this.Paused) return;\n\n const type = String(evt.event ?? 'Unknown');\n if (!this.KnownTypes.includes(type)) {\n this.KnownTypes = [...this.KnownTypes, type].sort();\n }\n\n const componentName = (evt.component as { constructor?: { name?: string } } | null | undefined)?.constructor?.name ?? '(no component)';\n if (!this.KnownComponents.includes(componentName)) {\n this.KnownComponents = [...this.KnownComponents, componentName].sort();\n }\n const code = evt.eventCode;\n if (code && !this.KnownCodes.includes(code)) {\n this.KnownCodes = [...this.KnownCodes, code].sort();\n }\n\n const hasPayload = this.computeHasPayload(evt.args);\n\n const row: EventRow = {\n seq: ++this.seq,\n timestamp: new Date(),\n type,\n eventCode: code,\n componentName,\n summary: hasPayload ? this.summarizeArgs(evt.args) : '—',\n args: evt.args,\n expanded: false,\n hasPayload\n };\n\n this.Events = [row, ...this.Events];\n if (this.Events.length > this.MaxEvents) {\n this.Events = this.Events.slice(0, this.MaxEvents);\n }\n this.Stats.kept = this.Events.length;\n this.cdr.markForCheck();\n }\n\n private computeHasPayload(args: unknown): boolean {\n if (args === null || args === undefined) return false;\n if (typeof args === 'string') return args.length > 0;\n if (Array.isArray(args)) return args.length > 0;\n if (typeof args === 'object') return Object.keys(args as Record<string, unknown>).length > 0;\n return true; // numbers, booleans count as payload\n }\n\n private tickRate(): void {\n const cutoff = Date.now() - 1000;\n this.rateBucket = this.rateBucket.filter(t => t >= cutoff);\n this.Stats.perSecond = this.rateBucket.length;\n this.cdr.markForCheck();\n // Keep the agent's view of live metrics (event count / rate) current.\n this.publishAgentContext();\n }\n\n private summarizeArgs(args: unknown): string {\n if (args === null || args === undefined) return '—';\n if (typeof args === 'string') return args.length > 80 ? args.slice(0, 77) + '…' : args;\n if (typeof args === 'number' || typeof args === 'boolean') return String(args);\n if (Array.isArray(args)) return `[ ${args.length} item${args.length === 1 ? '' : 's'} ]`;\n if (typeof args === 'object') {\n const keys = Object.keys(args as Record<string, unknown>);\n if (keys.length === 0) return '{ }';\n return `{ ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', …' : ''} }`;\n }\n return String(args);\n }\n\n // ========================================\n // AI AGENT CONTEXT & CLIENT TOOLS\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.\n // The Event Monitor is a live tail of MJGlobal's event bus. The context and\n // tools below report/control only the monitor's own capture state — event\n // counts, live rate, pause flag, the user's filters and sort. No tool reads\n // or mutates application data; the surface is a read-only diagnostic with\n // capture controls scoped entirely to this inspector's in-memory ring buffer.\n // ========================================\n\n /** Publish the current Event Monitor capture state to the AI agent. */\n private publishAgentContext(): void {\n const filtered = this.FilteredEvents;\n const context = BuildEventMonitorAgentContext({\n EventCount: this.Stats.captured,\n BufferedCount: this.Stats.kept,\n EventsPerSecond: this.Stats.perSecond,\n Paused: this.Paused,\n TextFilter: this.Filter,\n TypeFilter: this.TypeFilter,\n ComponentFilter: this.ComponentFilter,\n CodeFilter: this.CodeFilter,\n SortField: this.SortField,\n SortDirection: this.SortDir,\n FilteredCount: filtered.length,\n KnownTypes: this.KnownTypes,\n KnownComponents: this.KnownComponents,\n KnownCodes: this.KnownCodes,\n // Secret-free summaries of the most-recent visible events. `summary` is\n // already a redacted payload-shape preview (keys/length, never values).\n RecentEvents: filtered.slice(0, 25).map(e => ({\n Type: e.type,\n Component: e.componentName,\n Summary: e.summary,\n })),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Register the client tools the AI agent can invoke against the Event Monitor.\n * All operate on the inspector's own capture state — no application mutation.\n * Tools: PauseEventMonitor / ResumeEventMonitor, ClearEventLog,\n * FilterEventsByType, FilterEventsByComponent, ClearEventFilters,\n * SetEventMonitorSort.\n */\n private registerAgentClientTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'PauseEventMonitor',\n Description: 'Pause live event capture (events keep counting but are not added to the log).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (!this.Paused) this.TogglePause();\n return { Success: true };\n },\n },\n {\n Name: 'ResumeEventMonitor',\n Description: 'Resume live event capture after it was paused.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (this.Paused) this.TogglePause();\n return { Success: true };\n },\n },\n {\n Name: 'ClearEventLog',\n Description: 'Clear all events currently held in the Event Monitor buffer.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.Clear();\n return { Success: true };\n },\n },\n {\n Name: 'FilterEventsByType',\n Description: 'Filter the event log to a single event type. Pass an empty string to clear the type filter.',\n ParameterSchema: { type: 'object', properties: { type: { type: 'string' } }, required: ['type'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByType(params),\n },\n {\n Name: 'FilterEventsByComponent',\n Description: 'Filter the event log to a single emitting component name. Pass an empty string to clear the component filter.',\n ParameterSchema: { type: 'object', properties: { component: { type: 'string' } }, required: ['component'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByComponent(params),\n },\n {\n Name: 'ClearEventFilters',\n Description: 'Clear all active Event Monitor filters (text, type, component, code) so every captured event is shown.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ClearFilters();\n this.cdr.markForCheck();\n return { Success: true };\n },\n },\n {\n Name: 'SetEventMonitorSort',\n Description: 'Set the event log sort field (time | type | eventCode | component) and direction (asc | desc).',\n ParameterSchema: {\n type: 'object',\n properties: {\n field: { type: 'string', enum: ['time', 'type', 'eventCode', 'component'] },\n direction: { type: 'string', enum: ['asc', 'desc'] },\n },\n required: ['field', 'direction'],\n },\n Handler: async (params: Record<string, unknown>) => this.toolSetSort(params),\n },\n ]);\n }\n\n /** Apply (or clear, on empty string) the event-type filter. */\n private toolFilterByType(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['type'], 'type');\n if (!validated.ok) {\n return validated.result;\n }\n this.TypeFilter = validated.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n\n /** Apply (or clear, on empty string) the component-name filter. */\n private toolFilterByComponent(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['component'], 'component');\n if (!validated.ok) {\n return validated.result;\n }\n this.ComponentFilter = validated.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n\n /** Set the sort field + direction from validated enum params. */\n private toolSetSort(params: Record<string, unknown>): AgentToolResult {\n const field = ValidateEnumParam<SortField>(params['field'], ['time', 'type', 'eventCode', 'component'], 'field');\n if (!field.ok) {\n return field.result;\n }\n const dir = ValidateEnumParam<SortDir>(params['direction'], ['asc', 'desc'], 'direction');\n if (!dir.ok) {\n return dir.result;\n }\n this.SortField = field.value;\n this.SortDir = dir.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Event monitor\"\n Title=\"Event Monitor\"\n Subtitle=\"Live tail of MJGlobal events with filter and pause\">\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n (click)=\"TogglePause()\"\n [title]=\"Paused ? 'Resume capture' : 'Pause capture'\">\n @if (Paused) {\n <i class=\"fa-solid fa-play\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Resume</span>\n } @else {\n <i class=\"fa-solid fa-pause\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Pause</span>\n }\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"Clear()\" title=\"Clear all captured events\">\n <i class=\"fa-solid fa-broom\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Clear</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"em-stats\">\n <div class=\"em-stat\">\n <i class=\"em-pulse\" [class.em-pulse--paused]=\"Paused\"></i>\n <div>\n <div class=\"em-stat-value\">{{ Paused ? 'PAUSED' : 'LIVE' }}</div>\n <div class=\"em-stat-label\">{{ Paused ? 'Capture suspended' : 'Capturing events' }}</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.captured }}</div>\n <div class=\"em-stat-label\">Total captured</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.kept }} / {{ MaxEvents }}</div>\n <div class=\"em-stat-label\">In buffer</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.perSecond }}/s</div>\n <div class=\"em-stat-label\">Last second</div>\n </div>\n </div>\n <div class=\"em-stat em-stat--right\">\n <div>\n <div class=\"em-stat-value em-stat-value--small\">{{ UptimeLabel }}</div>\n <div class=\"em-stat-label\">Watching for</div>\n </div>\n </div>\n </div>\n\n <div class=\"em-toolbar\">\n <div class=\"em-search-wrap\">\n <i class=\"fa-solid fa-search em-search-icon\"></i>\n <input type=\"search\"\n class=\"em-search\"\n placeholder=\"Filter by type, component, payload…\"\n [(ngModel)]=\"Filter\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (Filter) {\n <button class=\"em-search-clear\" (click)=\"Filter = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Type</label>\n <select class=\"em-select\" [(ngModel)]=\"TypeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All types ({{ KnownTypes.length }})</option>\n @for (t of KnownTypes; track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Component</label>\n <select class=\"em-select\" [(ngModel)]=\"ComponentFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All components ({{ KnownComponents.length }})</option>\n @for (c of KnownComponents; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n\n @if (KnownCodes.length > 0) {\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Code</label>\n <select class=\"em-select\" [(ngModel)]=\"CodeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All codes ({{ KnownCodes.length }})</option>\n @for (c of KnownCodes; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n }\n\n @if (HasActiveFilters) {\n <button class=\"em-clear-filters\" type=\"button\" (click)=\"ClearFilters()\" title=\"Clear all filters\">\n <i class=\"fa-solid fa-xmark\"></i> Clear filters\n </button>\n }\n </div>\n\n <div class=\"em-list\">\n <div class=\"em-table-head\">\n <button type=\"button\"\n class=\"em-th em-th--time\"\n [class.em-th--sorted]=\"SortField === 'time'\"\n (click)=\"OnSortClick('time')\">\n Time\n @if (SortField === 'time') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--type\"\n [class.em-th--sorted]=\"SortField === 'type'\"\n (click)=\"OnSortClick('type')\">\n Type\n @if (SortField === 'type') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--code\"\n [class.em-th--sorted]=\"SortField === 'eventCode'\"\n (click)=\"OnSortClick('eventCode')\">\n Code\n @if (SortField === 'eventCode') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--component\"\n [class.em-th--sorted]=\"SortField === 'component'\"\n (click)=\"OnSortClick('component')\">\n Component\n @if (SortField === 'component') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <span class=\"em-th em-th--summary\">Summary</span>\n <span class=\"em-th em-th--actions\"></span>\n </div>\n\n @if (FilteredEvents.length === 0) {\n <mj-empty-state [Variant]=\"EmptyVariant\" [Icon]=\"EmptyIcon\"\n [Title]=\"EmptyTitle\" [Message]=\"EmptyMessage\" />\n } @else {\n @for (evt of FilteredEvents; track TrackBySeq($index, evt)) {\n <div class=\"em-row\" [class.em-row--expanded]=\"evt.expanded\">\n <div class=\"em-row-head\" (click)=\"ToggleRow(evt)\">\n <i class=\"em-row-chev fa-solid fa-chevron-right\"\n [class.em-row-chev--down]=\"evt.expanded\"></i>\n <span class=\"em-row-time\">{{ evt.timestamp | date:'HH:mm:ss.SSS' }}</span>\n <span class=\"em-row-type\" [attr.data-type]=\"evt.type\">{{ evt.type }}</span>\n <span class=\"em-row-code\">{{ evt.eventCode || '—' }}</span>\n <span class=\"em-row-component\" [title]=\"evt.componentName\">{{ evt.componentName }}</span>\n <span class=\"em-row-summary\" [class.em-row-summary--empty]=\"!evt.hasPayload\">{{ evt.summary }}</span>\n <button class=\"em-row-copy\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); OnCopyRow(evt)\"\n title=\"Copy as JSON\">\n <i class=\"fa-solid fa-clipboard\"></i>\n </button>\n </div>\n @if (evt.expanded) {\n @if (evt.hasPayload) {\n <pre class=\"em-row-payload\"><code>{{ evt.args | json }}</code></pre>\n } @else {\n <div class=\"em-row-no-payload\">\n <i class=\"fa-regular fa-circle\"></i>\n <span>This event has no payload.</span>\n </div>\n }\n }\n </div>\n }\n }\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"event-monitor.component.js","sourceRoot":"","sources":["../../src/DevTools/event-monitor.component.ts","../../src/DevTools/event-monitor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass, MJGlobal, MJEvent } from '@memberjunction/global';\nimport { Subscription } from 'rxjs';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { BuildEventMonitorAgentContext } from './dev-tools-agent-context';\nimport { AgentToolResult, ValidateStringParam, ValidateEnumParam } from '../shared/agent-tool-validation';\n\ninterface EventMonitorPrefs {\n filter?: string;\n typeFilter?: string;\n componentFilter?: string;\n codeFilter?: string;\n sortField?: SortField;\n sortDir?: SortDir;\n}\n\ninterface EventRow {\n seq: number;\n timestamp: Date;\n type: string;\n eventCode?: string;\n componentName: string;\n summary: string;\n args: unknown;\n expanded: boolean;\n /** True when args is null/undefined/empty — used to render a clean empty-state on expand. */\n hasPayload: boolean;\n}\n\ntype SortField = 'time' | 'type' | 'eventCode' | 'component';\ntype SortDir = 'asc' | 'desc';\n\n/**\n * Event Monitor — live tail of `MJGlobal.Instance.GetEventListener()`.\n * Captures events into a ring buffer (configurable cap) with filtering,\n * pause/resume, click-to-expand-payload, copy.\n */\n@RegisterClass(BaseResourceComponent, 'EventMonitorInspector')\n@Component({\n standalone: false,\n selector: 'mj-event-monitor',\n templateUrl: './event-monitor.component.html',\n styleUrls: ['./inspector-shared.css', './event-monitor.component.css']\n})\nexport class EventMonitorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public readonly MaxEvents = 500;\n public Events: EventRow[] = [];\n public Paused = false;\n public AutoScroll = true;\n public Filter = '';\n public TypeFilter = ''; // '' = all\n public ComponentFilter = ''; // '' = all\n public CodeFilter = ''; // '' = all\n public KnownTypes: string[] = [];\n public KnownComponents: string[] = [];\n public KnownCodes: string[] = [];\n public Stats = { captured: 0, perSecond: 0, kept: 0 };\n public StartedAt = new Date();\n public SortField: SortField = 'time';\n public SortDir: SortDir = 'desc';\n\n private sub?: Subscription;\n private seq = 0;\n private rateBucket: number[] = []; // event timestamps within last 1s\n private rateTimer?: ReturnType<typeof setInterval>;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.loadPrefs();\n this.subscribe();\n this.rateTimer = setInterval(() => this.tickRate(), 500);\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish the initial agent context and register the client tools the AI\n // agent can invoke against this surface. Ongoing re-emit happens in the\n // user-action methods (pause/clear/filter/sort) and in tickRate (live metrics).\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n this.sub?.unsubscribe();\n if (this.rateTimer) clearInterval(this.rateTimer);\n super.ngOnDestroy();\n }\n\n private loadPrefs(): void {\n const p = DevToolsPrefs.Get<EventMonitorPrefs>('eventMonitor');\n if (!p) return;\n this.Filter = p.filter ?? '';\n this.TypeFilter = p.typeFilter ?? '';\n this.ComponentFilter = p.componentFilter ?? '';\n this.CodeFilter = p.codeFilter ?? '';\n this.SortField = p.sortField ?? 'time';\n this.SortDir = p.sortDir ?? 'desc';\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save<EventMonitorPrefs>('eventMonitor', {\n filter: this.Filter,\n typeFilter: this.TypeFilter,\n componentFilter: this.ComponentFilter,\n codeFilter: this.CodeFilter,\n sortField: this.SortField,\n sortDir: this.SortDir\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Event Monitor'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-bolt'; }\n\n public TogglePause(): void {\n this.Paused = !this.Paused;\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n public ToggleAutoScroll(): void {\n this.AutoScroll = !this.AutoScroll;\n }\n\n public Clear(): void {\n this.Events = [];\n this.seq = 0;\n this.Stats.kept = 0;\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n public ToggleRow(row: EventRow): void {\n row.expanded = !row.expanded;\n }\n\n public OnTypeFilterClick(type: string): void {\n this.TypeFilter = this.TypeFilter === type ? '' : type;\n this.publishAgentContext();\n }\n\n public OnSortClick(field: SortField): void {\n if (this.SortField === field) {\n this.SortDir = this.SortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDir = field === 'time' ? 'desc' : 'asc';\n }\n this.savePrefs();\n this.publishAgentContext();\n }\n\n /** Public so the template can call on every ngModelChange (filters, selects). */\n public PersistPrefs(): void {\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public async OnCopyRow(row: EventRow): Promise<void> {\n const payload = {\n timestamp: row.timestamp.toISOString(),\n type: row.type,\n eventCode: row.eventCode,\n component: row.componentName,\n args: row.args\n };\n try {\n await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));\n } catch { /* clipboard unavailable */ }\n }\n\n /** Empty-state presentation for the event list — varies by capture state. */\n public get EmptyVariant(): 'empty' | 'warning' | 'no-results' {\n if (this.Stats.captured === 0) return 'empty';\n return this.Paused ? 'warning' : 'no-results';\n }\n public get EmptyIcon(): string {\n if (this.Stats.captured === 0) return 'fa-solid fa-radio';\n return this.Paused ? 'fa-solid fa-pause' : 'fa-solid fa-filter';\n }\n public get EmptyTitle(): string {\n if (this.Stats.captured === 0) return 'Listening for events…';\n return this.Paused ? 'Capture is paused' : 'No events match your filter';\n }\n public get EmptyMessage(): string {\n if (this.Stats.captured === 0) return 'Trigger an action — saves, navigation, AI events all show up here.';\n if (this.Paused) return `${this.Stats.captured} events fired since you paused. Click Resume to start collecting again.`;\n return `${this.Stats.kept} events in buffer · clear filters to see them.`;\n }\n\n public get FilteredEvents(): EventRow[] {\n let list = this.Events;\n if (this.TypeFilter) list = list.filter(e => e.type === this.TypeFilter);\n if (this.ComponentFilter) list = list.filter(e => e.componentName === this.ComponentFilter);\n if (this.CodeFilter) list = list.filter(e => (e.eventCode ?? '') === this.CodeFilter);\n\n const q = this.Filter.trim().toLowerCase();\n if (q) {\n list = list.filter(e =>\n e.type.toLowerCase().includes(q) ||\n e.componentName.toLowerCase().includes(q) ||\n e.summary.toLowerCase().includes(q) ||\n (e.eventCode && e.eventCode.toLowerCase().includes(q))\n );\n }\n\n // Sort (always returns a new array — preserves the natural seq order otherwise)\n const dir = this.SortDir === 'asc' ? 1 : -1;\n const sorted = [...list].sort((a, b) => {\n switch (this.SortField) {\n case 'time': return (a.seq - b.seq) * dir;\n case 'type': return a.type.localeCompare(b.type) * dir;\n case 'eventCode': return (a.eventCode ?? '').localeCompare(b.eventCode ?? '') * dir;\n case 'component': return a.componentName.localeCompare(b.componentName) * dir;\n default: return 0;\n }\n });\n return sorted;\n }\n\n public ClearFilters(): void {\n this.Filter = '';\n this.TypeFilter = '';\n this.ComponentFilter = '';\n this.CodeFilter = '';\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public get HasActiveFilters(): boolean {\n return !!(this.Filter || this.TypeFilter || this.ComponentFilter || this.CodeFilter);\n }\n\n public get UptimeLabel(): string {\n const ms = Date.now() - this.StartedAt.getTime();\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const remainder = s % 60;\n return m > 0 ? `${m}m ${remainder}s` : `${s}s`;\n }\n\n public TrackBySeq = (_i: number, e: EventRow) => e.seq;\n\n // ---------- private ----------\n\n private subscribe(): void {\n try {\n // withReplay = true so we get historical events that were emitted\n // before this component mounted (within MJGlobal's replay buffer).\n this.sub = MJGlobal.Instance.GetEventListener(true).subscribe((evt: MJEvent) => {\n this.handleEvent(evt);\n });\n } catch {\n // Listener unavailable; silent (rare)\n }\n }\n\n private handleEvent(evt: MJEvent): void {\n this.Stats.captured++;\n this.rateBucket.push(Date.now());\n\n if (this.Paused) return;\n\n const type = String(evt.event ?? 'Unknown');\n if (!this.KnownTypes.includes(type)) {\n this.KnownTypes = [...this.KnownTypes, type].sort();\n }\n\n const componentName = (evt.component as { constructor?: { name?: string } } | null | undefined)?.constructor?.name ?? '(no component)';\n if (!this.KnownComponents.includes(componentName)) {\n this.KnownComponents = [...this.KnownComponents, componentName].sort();\n }\n const code = evt.eventCode;\n if (code && !this.KnownCodes.includes(code)) {\n this.KnownCodes = [...this.KnownCodes, code].sort();\n }\n\n const hasPayload = this.computeHasPayload(evt.args);\n\n const row: EventRow = {\n seq: ++this.seq,\n timestamp: new Date(),\n type,\n eventCode: code,\n componentName,\n summary: hasPayload ? this.summarizeArgs(evt.args) : '—',\n args: evt.args,\n expanded: false,\n hasPayload\n };\n\n this.Events = [row, ...this.Events];\n if (this.Events.length > this.MaxEvents) {\n this.Events = this.Events.slice(0, this.MaxEvents);\n }\n this.Stats.kept = this.Events.length;\n this.cdr.markForCheck();\n }\n\n private computeHasPayload(args: unknown): boolean {\n if (args === null || args === undefined) return false;\n if (typeof args === 'string') return args.length > 0;\n if (Array.isArray(args)) return args.length > 0;\n if (typeof args === 'object') return Object.keys(args as Record<string, unknown>).length > 0;\n return true; // numbers, booleans count as payload\n }\n\n private tickRate(): void {\n const cutoff = Date.now() - 1000;\n this.rateBucket = this.rateBucket.filter(t => t >= cutoff);\n this.Stats.perSecond = this.rateBucket.length;\n this.cdr.markForCheck();\n // Keep the agent's view of live metrics (event count / rate) current.\n this.publishAgentContext();\n }\n\n private summarizeArgs(args: unknown): string {\n if (args === null || args === undefined) return '—';\n if (typeof args === 'string') return args.length > 80 ? args.slice(0, 77) + '…' : args;\n if (typeof args === 'number' || typeof args === 'boolean') return String(args);\n if (Array.isArray(args)) return `[ ${args.length} item${args.length === 1 ? '' : 's'} ]`;\n if (typeof args === 'object') {\n const keys = Object.keys(args as Record<string, unknown>);\n if (keys.length === 0) return '{ }';\n return `{ ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', …' : ''} }`;\n }\n return String(args);\n }\n\n // ========================================\n // AI AGENT CONTEXT & CLIENT TOOLS\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.\n // The Event Monitor is a live tail of MJGlobal's event bus. The context and\n // tools below report/control only the monitor's own capture state — event\n // counts, live rate, pause flag, the user's filters and sort. No tool reads\n // or mutates application data; the surface is a read-only diagnostic with\n // capture controls scoped entirely to this inspector's in-memory ring buffer.\n // ========================================\n\n /** Publish the current Event Monitor capture state to the AI agent. */\n private publishAgentContext(): void {\n const filtered = this.FilteredEvents;\n const context = BuildEventMonitorAgentContext({\n EventCount: this.Stats.captured,\n BufferedCount: this.Stats.kept,\n EventsPerSecond: this.Stats.perSecond,\n Paused: this.Paused,\n TextFilter: this.Filter,\n TypeFilter: this.TypeFilter,\n ComponentFilter: this.ComponentFilter,\n CodeFilter: this.CodeFilter,\n SortField: this.SortField,\n SortDirection: this.SortDir,\n FilteredCount: filtered.length,\n KnownTypes: this.KnownTypes,\n KnownComponents: this.KnownComponents,\n KnownCodes: this.KnownCodes,\n // Secret-free summaries of the most-recent visible events. `summary` is\n // already a redacted payload-shape preview (keys/length, never values).\n RecentEvents: filtered.slice(0, 25).map(e => ({\n Type: e.type,\n Component: e.componentName,\n Summary: e.summary,\n })),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Register the client tools the AI agent can invoke against the Event Monitor.\n * All operate on the inspector's own capture state — no application mutation.\n * Tools: PauseEventMonitor / ResumeEventMonitor, ClearEventLog,\n * FilterEventsByType, FilterEventsByComponent, ClearEventFilters,\n * SetEventMonitorSort.\n */\n private registerAgentClientTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'PauseEventMonitor',\n Description: 'Pause live event capture (events keep counting but are not added to the log).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (!this.Paused) this.TogglePause();\n return { Success: true };\n },\n },\n {\n Name: 'ResumeEventMonitor',\n Description: 'Resume live event capture after it was paused.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (this.Paused) this.TogglePause();\n return { Success: true };\n },\n },\n {\n Name: 'ClearEventLog',\n Description: 'Clear all events currently held in the Event Monitor buffer.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.Clear();\n return { Success: true };\n },\n },\n {\n Name: 'FilterEventsByType',\n Description: 'Filter the event log to a single event type. Pass an empty string to clear the type filter.',\n ParameterSchema: { type: 'object', properties: { type: { type: 'string' } }, required: ['type'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByType(params),\n },\n {\n Name: 'FilterEventsByComponent',\n Description: 'Filter the event log to a single emitting component name. Pass an empty string to clear the component filter.',\n ParameterSchema: { type: 'object', properties: { component: { type: 'string' } }, required: ['component'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByComponent(params),\n },\n {\n Name: 'ClearEventFilters',\n Description: 'Clear all active Event Monitor filters (text, type, component, code) so every captured event is shown.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ClearFilters();\n this.cdr.markForCheck();\n return { Success: true };\n },\n },\n {\n Name: 'SetEventMonitorSort',\n Description: 'Set the event log sort field (time | type | eventCode | component) and direction (asc | desc).',\n ParameterSchema: {\n type: 'object',\n properties: {\n field: { type: 'string', enum: ['time', 'type', 'eventCode', 'component'] },\n direction: { type: 'string', enum: ['asc', 'desc'] },\n },\n required: ['field', 'direction'],\n },\n Handler: async (params: Record<string, unknown>) => this.toolSetSort(params),\n },\n ]);\n }\n\n /** Apply (or clear, on empty string) the event-type filter. */\n private toolFilterByType(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['type'], 'type');\n if (!validated.ok) {\n return validated.result;\n }\n this.TypeFilter = validated.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n\n /** Apply (or clear, on empty string) the component-name filter. */\n private toolFilterByComponent(params: Record<string, unknown>): AgentToolResult {\n const validated = ValidateStringParam(params['component'], 'component');\n if (!validated.ok) {\n return validated.result;\n }\n this.ComponentFilter = validated.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n\n /** Set the sort field + direction from validated enum params. */\n private toolSetSort(params: Record<string, unknown>): AgentToolResult {\n const field = ValidateEnumParam<SortField>(params['field'], ['time', 'type', 'eventCode', 'component'], 'field');\n if (!field.ok) {\n return field.result;\n }\n const dir = ValidateEnumParam<SortDir>(params['direction'], ['asc', 'desc'], 'direction');\n if (!dir.ok) {\n return dir.result;\n }\n this.SortField = field.value;\n this.SortDir = dir.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Event monitor\"\n Title=\"Event Monitor\"\n Subtitle=\"Live tail of MJGlobal events with filter and pause\">\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n (click)=\"TogglePause()\"\n [title]=\"Paused ? 'Resume capture' : 'Pause capture'\">\n @if (Paused) {\n <i class=\"fa-solid fa-play\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Resume</span>\n } @else {\n <i class=\"fa-solid fa-pause\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Pause</span>\n }\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"Clear()\" title=\"Clear all captured events\">\n <i class=\"fa-solid fa-broom\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Clear</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"em-stats\">\n <div class=\"em-stat\">\n <i class=\"em-pulse\" [class.em-pulse--paused]=\"Paused\"></i>\n <div>\n <div class=\"em-stat-value\">{{ Paused ? 'PAUSED' : 'LIVE' }}</div>\n <div class=\"em-stat-label\">{{ Paused ? 'Capture suspended' : 'Capturing events' }}</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.captured }}</div>\n <div class=\"em-stat-label\">Total captured</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.kept }} / {{ MaxEvents }}</div>\n <div class=\"em-stat-label\">In buffer</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.perSecond }}/s</div>\n <div class=\"em-stat-label\">Last second</div>\n </div>\n </div>\n <div class=\"em-stat em-stat--right\">\n <div>\n <div class=\"em-stat-value em-stat-value--small\">{{ UptimeLabel }}</div>\n <div class=\"em-stat-label\">Watching for</div>\n </div>\n </div>\n </div>\n\n <div class=\"em-toolbar\">\n <div class=\"em-search-wrap\">\n <i class=\"fa-solid fa-search em-search-icon\"></i>\n <input type=\"search\"\n class=\"em-search\"\n placeholder=\"Filter by type, component, payload…\"\n [(ngModel)]=\"Filter\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (Filter) {\n <button class=\"em-search-clear\" (click)=\"Filter = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Type</label>\n <select class=\"em-select\" [(ngModel)]=\"TypeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All types ({{ KnownTypes.length }})</option>\n @for (t of KnownTypes; track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Component</label>\n <select class=\"em-select\" [(ngModel)]=\"ComponentFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All components ({{ KnownComponents.length }})</option>\n @for (c of KnownComponents; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n\n @if (KnownCodes.length > 0) {\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Code</label>\n <select class=\"em-select\" [(ngModel)]=\"CodeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All codes ({{ KnownCodes.length }})</option>\n @for (c of KnownCodes; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n }\n\n @if (HasActiveFilters) {\n <button class=\"em-clear-filters\" type=\"button\" (click)=\"ClearFilters()\" title=\"Clear all filters\">\n <i class=\"fa-solid fa-xmark\"></i> Clear filters\n </button>\n }\n </div>\n\n <div class=\"em-list\">\n <div class=\"em-table-head\">\n <button type=\"button\"\n class=\"em-th em-th--time\"\n [class.em-th--sorted]=\"SortField === 'time'\"\n (click)=\"OnSortClick('time')\">\n Time\n @if (SortField === 'time') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--type\"\n [class.em-th--sorted]=\"SortField === 'type'\"\n (click)=\"OnSortClick('type')\">\n Type\n @if (SortField === 'type') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--code\"\n [class.em-th--sorted]=\"SortField === 'eventCode'\"\n (click)=\"OnSortClick('eventCode')\">\n Code\n @if (SortField === 'eventCode') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--component\"\n [class.em-th--sorted]=\"SortField === 'component'\"\n (click)=\"OnSortClick('component')\">\n Component\n @if (SortField === 'component') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <span class=\"em-th em-th--summary\">Summary</span>\n <span class=\"em-th em-th--actions\"></span>\n </div>\n\n @if (FilteredEvents.length === 0) {\n <mj-empty-state [Variant]=\"EmptyVariant\" [Icon]=\"EmptyIcon\"\n [Title]=\"EmptyTitle\" [Message]=\"EmptyMessage\" />\n } @else {\n @for (evt of FilteredEvents; track TrackBySeq($index, evt)) {\n <div class=\"em-row\" [class.em-row--expanded]=\"evt.expanded\">\n <div class=\"em-row-head\" (click)=\"ToggleRow(evt)\">\n <i class=\"em-row-chev fa-solid fa-chevron-right\"\n [class.em-row-chev--down]=\"evt.expanded\"></i>\n <span class=\"em-row-time\">{{ evt.timestamp | date:'HH:mm:ss.SSS' }}</span>\n <span class=\"em-row-type\" [attr.data-type]=\"evt.type\">{{ evt.type }}</span>\n <span class=\"em-row-code\">{{ evt.eventCode || '—' }}</span>\n <span class=\"em-row-component\" [title]=\"evt.componentName\">{{ evt.componentName }}</span>\n <span class=\"em-row-summary\" [class.em-row-summary--empty]=\"!evt.hasPayload\">{{ evt.summary }}</span>\n <button class=\"em-row-copy\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); OnCopyRow(evt)\"\n title=\"Copy as JSON\">\n <i class=\"fa-solid fa-clipboard\"></i>\n </button>\n </div>\n @if (evt.expanded) {\n @if (evt.hasPayload) {\n <pre class=\"em-row-payload\"><code>{{ evt.args | json }}</code></pre>\n } @else {\n <div class=\"em-row-no-payload\">\n <i class=\"fa-regular fa-circle\"></i>\n <span>This event has no payload.</span>\n </div>\n }\n }\n </div>\n }\n }\n </div>\n</div>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-console.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"graphql-console.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts"],"names":[],"mappings":"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"}
|