@memberjunction/ng-dashboards 6.2.0-edge.4 → 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.
Files changed (87) hide show
  1. package/dist/AI/components/vectors/sensitive-fields.d.ts +53 -0
  2. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -0
  3. package/dist/AI/components/vectors/sensitive-fields.js +226 -0
  4. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -0
  5. package/dist/AI/components/vectors/vector-document-rules.d.ts +126 -0
  6. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -0
  7. package/dist/AI/components/vectors/vector-document-rules.js +168 -0
  8. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -0
  9. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +49 -0
  10. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/vectors/vector-management-resource.component.js +428 -230
  12. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  13. package/dist/Communication/communication-agent-context.d.ts +11 -1
  14. package/dist/Communication/communication-agent-context.d.ts.map +1 -1
  15. package/dist/Communication/communication-agent-context.js +15 -0
  16. package/dist/Communication/communication-agent-context.js.map +1 -1
  17. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  18. package/dist/Communication/communication-dashboard.component.js +5 -0
  19. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  20. package/dist/Communication/communication-providers-resource.component.d.ts +27 -1
  21. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  22. package/dist/Communication/communication-providers-resource.component.js +722 -78
  23. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  24. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +25 -0
  25. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  26. package/dist/DataExplorer/data-explorer-dashboard.component.js +74 -5
  27. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  28. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  29. package/dist/DevTools/app-state-inspector.component.js +1 -0
  30. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  31. package/dist/DevTools/class-registry.component.d.ts.map +1 -1
  32. package/dist/DevTools/class-registry.component.js +1 -0
  33. package/dist/DevTools/class-registry.component.js.map +1 -1
  34. package/dist/DevTools/event-monitor.component.d.ts.map +1 -1
  35. package/dist/DevTools/event-monitor.component.js +2 -0
  36. package/dist/DevTools/event-monitor.component.js.map +1 -1
  37. package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
  38. package/dist/DevTools/graphql-console.component.js.map +1 -1
  39. package/dist/DevTools/grid-width-lab.component.d.ts.map +1 -1
  40. package/dist/DevTools/grid-width-lab.component.js +1 -0
  41. package/dist/DevTools/grid-width-lab.component.js.map +1 -1
  42. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  43. package/dist/DevTools/layout-inspector.component.js +1 -0
  44. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  45. package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -1
  46. package/dist/DevTools/lazy-module-status.component.js +1 -0
  47. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  48. package/dist/DevTools/settings-explorer.component.d.ts.map +1 -1
  49. package/dist/DevTools/settings-explorer.component.js +1 -0
  50. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  51. package/dist/DevTools/tab-strip-lab.component.d.ts.map +1 -1
  52. package/dist/DevTools/tab-strip-lab.component.js +1 -0
  53. package/dist/DevTools/tab-strip-lab.component.js.map +1 -1
  54. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +5 -0
  55. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  56. package/dist/EntityAdmin/entity-admin-dashboard.component.js +8 -5
  57. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  58. package/dist/Integration/components/overview/overview.component.js +2 -2
  59. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +2 -2
  60. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  61. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -1
  62. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
  63. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +24 -2
  64. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
  65. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +16 -2
  66. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
  67. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +87 -33
  68. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  69. package/dist/LoginStudio/login-studio-inspector.component.d.ts +130 -0
  70. package/dist/LoginStudio/login-studio-inspector.component.d.ts.map +1 -0
  71. package/dist/LoginStudio/login-studio-inspector.component.js +781 -0
  72. package/dist/LoginStudio/login-studio-inspector.component.js.map +1 -0
  73. package/dist/LoginStudio/login-studio-resource.component.d.ts +153 -0
  74. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -0
  75. package/dist/LoginStudio/login-studio-resource.component.js +857 -0
  76. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -0
  77. package/dist/Workflows/components/workflow-runs-resource.component.js +4 -4
  78. package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
  79. package/dist/core-dashboards.module.d.ts +2 -1
  80. package/dist/core-dashboards.module.d.ts.map +1 -1
  81. package/dist/core-dashboards.module.js +11 -3
  82. package/dist/core-dashboards.module.js.map +1 -1
  83. package/dist/public-api.d.ts +1 -0
  84. package/dist/public-api.d.ts.map +1 -1
  85. package/dist/public-api.js +1 -0
  86. package/dist/public-api.js.map +1 -1
  87. package/package.json +72 -69
@@ -1 +1 @@
1
- {"version":3,"file":"app-state-inspector.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/app-state-inspector.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;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAI7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;;AAEjE,UAAU,gBAAgB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAOa,0BAA2B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAkBzG,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAlBZ,QAAQ,EAAE,gBAAgB,EAAE,CAOjC;IAEK,aAAa,SAAU;IACvB,SAAS,SAAQ;IACjB,WAAW,SAAM;IACjB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAGtB,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,oBAAoB;IAKlC,QAAQ,IAAI,IAAI;IAShB,eAAe,IAAI,IAAI;IAMd,WAAW,IAAI,IAAI;IAKb,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7D,2EAA2E;IAC3E,IAAW,UAAU,IAAI,SAAS,EAAE,CAMnC;IAED,0CAA0C;IAC1C,IAAW,UAAU,IAAI,SAAS,EAAE,CAEnC;IAED,sEAAsE;IAC/D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOrC,2CAA2C;IACpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAO/C,OAAO,IAAI,IAAI;IAOtB,uCAAuC;IAChC,OAAO,IAAI,IAAI;IAIT,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,UAAU,IAAI,IAAI;IAUzB,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAID,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAmBrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;yCA/QhB,0BAA0B;2CAA1B,0BAA0B;CAwRtC"}
1
+ {"version":3,"file":"app-state-inspector.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/app-state-inspector.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;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAI7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;;AAEjE,UAAU,gBAAgB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAOa,0BAA2B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAkBzG,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAlBZ,QAAQ,EAAE,gBAAgB,EAAE,CAOjC;IAEK,aAAa,SAAU;IACvB,SAAS,SAAQ;IACjB,WAAW,SAAM;IACjB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAGtB,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,oBAAoB;IAKzB,QAAQ,IAAI,IAAI;IAUzB,eAAe,IAAI,IAAI;IAMd,WAAW,IAAI,IAAI;IAKb,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7D,2EAA2E;IAC3E,IAAW,UAAU,IAAI,SAAS,EAAE,CAMnC;IAED,0CAA0C;IAC1C,IAAW,UAAU,IAAI,SAAS,EAAE,CAEnC;IAED,sEAAsE;IAC/D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOrC,2CAA2C;IACpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAO/C,OAAO,IAAI,IAAI;IAOtB,uCAAuC;IAChC,OAAO,IAAI,IAAI;IAIT,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,UAAU,IAAI,IAAI;IAUzB,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAID,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAmBrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;yCAhRhB,0BAA0B;2CAA1B,0BAA0B;CAyRtC"}
@@ -45,6 +45,7 @@ let AppStateInspectorComponent = class AppStateInspectorComponent extends BaseRe
45
45
  this.devMode = devMode;
46
46
  }
47
47
  ngOnInit() {
48
+ super.ngOnInit();
48
49
  const p = DevToolsPrefs.Get('appStateInspector');
49
50
  if (p?.activeSection && this.Sections.some(s => s.id === p.activeSection)) {
50
51
  this.ActiveSection = p.activeSection;
@@ -1 +1 @@
1
- {"version":3,"file":"app-state-inspector.component.js","sourceRoot":"","sources":["../../src/DevTools/app-state-inspector.component.ts","../../src/DevTools/app-state-inspector.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 } from '@memberjunction/global';\nimport { TabConfig } from '@memberjunction/ng-ui-components';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { BuildAppStateInspectorAgentContext } from './dev-tools-agent-context';\nimport { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { WorkspaceStateManager } from '@memberjunction/ng-base-application';\nimport { DeveloperModeService } from '@memberjunction/ng-shared';\n\ninterface InspectorSection {\n id: string;\n label: string;\n icon: string;\n enabled: boolean;\n description?: string;\n}\n\n/**\n * App State Inspector — read-only structured view of the Explorer's runtime\n * state. Replaces the legacy \"Inspect App State\" user-menu item which only\n * dumped to console. Lives in the Admin app's dev tools area.\n */\n@RegisterClass(BaseResourceComponent, 'AppStateInspector')\n@Component({\n standalone: false,\n selector: 'mj-app-state-inspector',\n templateUrl: './app-state-inspector.component.html',\n styleUrls: ['./inspector-shared.css']\n})\nexport class AppStateInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public Sections: InspectorSection[] = [\n { id: 'user', label: 'Current User', icon: 'fa-solid fa-user', enabled: true, description: 'Identity, roles, email' },\n { id: 'provider', label: 'Provider', icon: 'fa-solid fa-plug', enabled: true, description: 'API URL, entities loaded' },\n { id: 'workspace',label: 'Workspace', icon: 'fa-solid fa-table-columns', enabled: true, description: 'Tabs, layout, active state' },\n { id: 'app', label: 'Active Application', icon: 'fa-solid fa-th-large', enabled: true, description: 'Current app + nav items' },\n { id: 'dev', label: 'Developer Mode', icon: 'fa-solid fa-code', enabled: true, description: 'Dev mode flag, eligibility' },\n { id: 'browser', label: 'Browser & Session', icon: 'fa-solid fa-window-maximize',enabled: true, description: 'User agent, viewport, URL' }\n ];\n\n public ActiveSection = 'user';\n public StateJson = '{}';\n public SearchQuery = '';\n public CopyConfirmed = false;\n public LastRefreshed = new Date();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private workspace: WorkspaceStateManager,\n private devMode: DeveloperModeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const p = DevToolsPrefs.Get<{ activeSection?: string }>('appStateInspector');\n if (p?.activeSection && this.Sections.some(s => s.id === p.activeSection)) {\n this.ActiveSection = p.activeSection;\n }\n this.Refresh();\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish initial agent context. Re-emit happens in refresh() (section change).\n // 🔒 METADATA-ONLY surface — NO client tools are registered (see SAFETY note below).\n this.publishAgentContext();\n }\n\n public override ngOnDestroy(): void {\n DevToolsPrefs.Save('appStateInspector', { activeSection: this.ActiveSection });\n super.ngOnDestroy();\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'App State Inspector'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-magnifying-glass-chart'; }\n\n /** Sections rendered as horizontal tabs in the chrome's [toolbar] slot. */\n public get TabsConfig(): TabConfig[] {\n return this.Sections.map(s => ({\n key: s.id,\n label: s.label,\n icon: s.icon\n }));\n }\n\n /** @deprecated Use {@link TabsConfig}. */\n public get tabsConfig(): TabConfig[] {\n return this.TabsConfig;\n }\n\n /** Adapter for `<mj-tab-nav>`'s string-typed `(TabChange)` output. */\n public OnTabChange(key: string): void {\n const section = this.Sections.find(s => s.id === key);\n if (section) {\n this.OnSectionClick(section);\n }\n }\n\n /** @deprecated Use {@link OnTabChange}. */\n public onTabChange(key: string): void {\n return this.OnTabChange(key);\n }\n\n public OnSectionClick(section: InspectorSection): void {\n if (this.ActiveSection === section.id) return;\n this.ActiveSection = section.id;\n DevToolsPrefs.Save('appStateInspector', { activeSection: this.ActiveSection });\n this.Refresh();\n }\n\n public Refresh(): void {\n this.StateJson = JSON.stringify(this.computeSectionData(this.ActiveSection), this.jsonReplacer, 2);\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n /** @deprecated Use {@link Refresh}. */\n public refresh(): void {\n return this.Refresh();\n }\n\n public async OnCopy(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.StateJson);\n this.CopyConfirmed = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.CopyConfirmed = false;\n this.cdr.markForCheck();\n }, 1800);\n } catch {\n // clipboard unavailable\n }\n }\n\n public OnDownload(): void {\n const blob = new Blob([this.StateJson], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `mj-app-state-${this.ActiveSection}-${this.timestampSlug()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public get SectionLabel(): string {\n return this.Sections.find(s => s.id === this.ActiveSection)?.label ?? '';\n }\n\n // ---------- private ----------\n\n private computeSectionData(section: string): unknown {\n switch (section) {\n case 'user': return this.userData();\n case 'provider': return this.providerData();\n case 'workspace': return this.workspaceData();\n case 'app': return this.appData();\n case 'dev': return this.devData();\n case 'browser': return this.browserData();\n default: return {};\n }\n }\n\n private userData(): unknown {\n const user = this.ProviderToUse?.CurrentUser;\n if (!user) return { error: 'No current user' };\n return {\n ID: user.ID,\n Name: user.Name,\n FirstName: user.FirstName,\n LastName: user.LastName,\n Email: user.Email,\n Type: user.Type,\n IsActive: user.IsActive,\n LinkedRecordType: user.LinkedRecordType,\n CreatedAt: user.__mj_CreatedAt,\n Roles: (user.UserRoles ?? []).map(r => ({ Role: r.Role, RoleID: r.RoleID }))\n };\n }\n\n private providerData(): unknown {\n const provider = this.ProviderToUse;\n if (!provider) return { error: 'No provider' };\n const data: Record<string, unknown> = {\n type: provider.constructor.name,\n EntitiesCount: provider.Entities?.length ?? 0,\n ApplicationsCount: provider.Applications?.length ?? 0,\n QueriesCount: provider.Queries?.length ?? 0,\n RolesCount: provider.Roles?.length ?? 0\n };\n if (provider instanceof GraphQLDataProvider) {\n data.URL = provider.ConfigData?.URL;\n data.WSURL = provider.ConfigData?.WSURL;\n }\n return data;\n }\n\n private workspaceData(): unknown {\n const config = this.workspace.GetConfiguration();\n return config;\n }\n\n private appData(): unknown {\n const config = this.workspace.GetConfiguration();\n if (!config) return { error: 'No workspace configuration' };\n const activeTab = config.tabs?.find(t => t.id === config.activeTabId);\n return {\n ActiveTabId: config.activeTabId,\n ActiveTab: activeTab,\n TabCount: config.tabs?.length ?? 0\n };\n }\n\n private devData(): unknown {\n return {\n IsEnabled: this.devMode.IsEnabled,\n IsDeveloper: this.devMode.IsDeveloper,\n EligibleRoles: ['Developer', 'Admin', 'System Administrator', 'Integration']\n };\n }\n\n private browserData(): unknown {\n return {\n UserAgent: navigator.userAgent,\n Language: navigator.language,\n Languages: navigator.languages,\n Platform: navigator.platform,\n Online: navigator.onLine,\n Viewport: { width: window.innerWidth, height: window.innerHeight, devicePixelRatio: window.devicePixelRatio },\n URL: window.location.href,\n Origin: window.location.origin,\n Path: window.location.pathname + window.location.search,\n Memory: this.readMemory()\n };\n }\n\n private jsonReplacer(_key: string, value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (value instanceof Map) return Object.fromEntries(value.entries());\n if (value instanceof Set) return Array.from(value);\n if (typeof value === 'function') return `[Function ${(value as { name: string }).name || 'anonymous'}]`;\n return value;\n }\n\n private readMemory(): { usedJSHeapSize: number; totalJSHeapSize: number } | undefined {\n const memory = (performance as Performance & {\n memory?: { usedJSHeapSize: number; totalJSHeapSize: number };\n }).memory;\n if (!memory) return undefined;\n return { usedJSHeapSize: memory.usedJSHeapSize, totalJSHeapSize: memory.totalJSHeapSize };\n }\n\n private timestampSlug(): string {\n const d = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n }\n\n // ========================================\n // AI AGENT CONTEXT (METADATA-ONLY)\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: METADATA-ONLY.\n // The App State Inspector renders the Explorer's runtime state — which can\n // include auth/session details, provider URLs, and user PII. We therefore\n // expose to the AI agent ONLY metadata ABOUT the state (its serialized size,\n // the number of top-level keys in the active section, and the section label)\n // — NEVER the state VALUES themselves. For the same reason, NO client tools\n // are registered here: there is no value-returning operation the agent may\n // invoke against this surface.\n // ========================================\n\n /**\n * Publish METADATA-ONLY context for the App State Inspector. Reports the\n * size of the active section's serialized JSON, its top-level key count, the\n * section label/ids, and the top-level KEY NAMES (structural identifiers like\n * \"Email\"/\"Roles\" — never their values). See SAFETY BOUNDARY above.\n */\n private publishAgentContext(): void {\n const context = BuildAppStateInspectorAgentContext({\n StateSize: this.StateJson.length,\n KeyCount: this.activeSectionKeys().length,\n ActiveSection: this.ActiveSection,\n ActiveSectionLabel: this.SectionLabel,\n SectionIds: this.Sections.map(s => s.id),\n // 🔒 KEY NAMES only — never values.\n TopLevelKeys: this.activeSectionKeys(),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Top-level KEY NAMES of the active section's data — METADATA ONLY, never\n * any value. For an array, returns the numeric indices as strings.\n */\n private activeSectionKeys(): string[] {\n const data = this.computeSectionData(this.ActiveSection);\n if (data && typeof data === 'object') {\n return Array.isArray(data)\n ? data.map((_, i) => String(i))\n : Object.keys(data as Record<string, unknown>);\n }\n return [];\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"App State inspector\"\n Title=\"App State Inspector\"\n Subtitle=\"Read-only snapshot of Explorer runtime state\">\n <div actions>\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 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 <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnDownload()\" title=\"Download as JSON\" aria-label=\"Download as JSON\">\n <i class=\"fa-solid fa-download\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div toolbar>\n <mj-tab-nav\n [Tabs]=\"tabsConfig\"\n [ActiveKey]=\"ActiveSection\"\n (TabChange)=\"onTabChange($event)\">\n </mj-tab-nav>\n </div>\n </mj-page-header-interior>\n\n <div class=\"mj-inspector__content\">\n <div class=\"mj-inspector__content-head\">\n <h4 class=\"mj-inspector__content-title\">{{ SectionLabel }}</h4>\n <span class=\"mj-inspector__content-meta\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n <div class=\"mj-inspector__editor\">\n <mj-code-editor\n [(ngModel)]=\"StateJson\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"app-state-inspector.component.js","sourceRoot":"","sources":["../../src/DevTools/app-state-inspector.component.ts","../../src/DevTools/app-state-inspector.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 } from '@memberjunction/global';\nimport { TabConfig } from '@memberjunction/ng-ui-components';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { BuildAppStateInspectorAgentContext } from './dev-tools-agent-context';\nimport { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { WorkspaceStateManager } from '@memberjunction/ng-base-application';\nimport { DeveloperModeService } from '@memberjunction/ng-shared';\n\ninterface InspectorSection {\n id: string;\n label: string;\n icon: string;\n enabled: boolean;\n description?: string;\n}\n\n/**\n * App State Inspector — read-only structured view of the Explorer's runtime\n * state. Replaces the legacy \"Inspect App State\" user-menu item which only\n * dumped to console. Lives in the Admin app's dev tools area.\n */\n@RegisterClass(BaseResourceComponent, 'AppStateInspector')\n@Component({\n standalone: false,\n selector: 'mj-app-state-inspector',\n templateUrl: './app-state-inspector.component.html',\n styleUrls: ['./inspector-shared.css']\n})\nexport class AppStateInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public Sections: InspectorSection[] = [\n { id: 'user', label: 'Current User', icon: 'fa-solid fa-user', enabled: true, description: 'Identity, roles, email' },\n { id: 'provider', label: 'Provider', icon: 'fa-solid fa-plug', enabled: true, description: 'API URL, entities loaded' },\n { id: 'workspace',label: 'Workspace', icon: 'fa-solid fa-table-columns', enabled: true, description: 'Tabs, layout, active state' },\n { id: 'app', label: 'Active Application', icon: 'fa-solid fa-th-large', enabled: true, description: 'Current app + nav items' },\n { id: 'dev', label: 'Developer Mode', icon: 'fa-solid fa-code', enabled: true, description: 'Dev mode flag, eligibility' },\n { id: 'browser', label: 'Browser & Session', icon: 'fa-solid fa-window-maximize',enabled: true, description: 'User agent, viewport, URL' }\n ];\n\n public ActiveSection = 'user';\n public StateJson = '{}';\n public SearchQuery = '';\n public CopyConfirmed = false;\n public LastRefreshed = new Date();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private workspace: WorkspaceStateManager,\n private devMode: DeveloperModeService\n ) {\n super();\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n const p = DevToolsPrefs.Get<{ activeSection?: string }>('appStateInspector');\n if (p?.activeSection && this.Sections.some(s => s.id === p.activeSection)) {\n this.ActiveSection = p.activeSection;\n }\n this.Refresh();\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish initial agent context. Re-emit happens in refresh() (section change).\n // 🔒 METADATA-ONLY surface — NO client tools are registered (see SAFETY note below).\n this.publishAgentContext();\n }\n\n public override ngOnDestroy(): void {\n DevToolsPrefs.Save('appStateInspector', { activeSection: this.ActiveSection });\n super.ngOnDestroy();\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'App State Inspector'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-magnifying-glass-chart'; }\n\n /** Sections rendered as horizontal tabs in the chrome's [toolbar] slot. */\n public get TabsConfig(): TabConfig[] {\n return this.Sections.map(s => ({\n key: s.id,\n label: s.label,\n icon: s.icon\n }));\n }\n\n /** @deprecated Use {@link TabsConfig}. */\n public get tabsConfig(): TabConfig[] {\n return this.TabsConfig;\n }\n\n /** Adapter for `<mj-tab-nav>`'s string-typed `(TabChange)` output. */\n public OnTabChange(key: string): void {\n const section = this.Sections.find(s => s.id === key);\n if (section) {\n this.OnSectionClick(section);\n }\n }\n\n /** @deprecated Use {@link OnTabChange}. */\n public onTabChange(key: string): void {\n return this.OnTabChange(key);\n }\n\n public OnSectionClick(section: InspectorSection): void {\n if (this.ActiveSection === section.id) return;\n this.ActiveSection = section.id;\n DevToolsPrefs.Save('appStateInspector', { activeSection: this.ActiveSection });\n this.Refresh();\n }\n\n public Refresh(): void {\n this.StateJson = JSON.stringify(this.computeSectionData(this.ActiveSection), this.jsonReplacer, 2);\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n /** @deprecated Use {@link Refresh}. */\n public refresh(): void {\n return this.Refresh();\n }\n\n public async OnCopy(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.StateJson);\n this.CopyConfirmed = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.CopyConfirmed = false;\n this.cdr.markForCheck();\n }, 1800);\n } catch {\n // clipboard unavailable\n }\n }\n\n public OnDownload(): void {\n const blob = new Blob([this.StateJson], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `mj-app-state-${this.ActiveSection}-${this.timestampSlug()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public get SectionLabel(): string {\n return this.Sections.find(s => s.id === this.ActiveSection)?.label ?? '';\n }\n\n // ---------- private ----------\n\n private computeSectionData(section: string): unknown {\n switch (section) {\n case 'user': return this.userData();\n case 'provider': return this.providerData();\n case 'workspace': return this.workspaceData();\n case 'app': return this.appData();\n case 'dev': return this.devData();\n case 'browser': return this.browserData();\n default: return {};\n }\n }\n\n private userData(): unknown {\n const user = this.ProviderToUse?.CurrentUser;\n if (!user) return { error: 'No current user' };\n return {\n ID: user.ID,\n Name: user.Name,\n FirstName: user.FirstName,\n LastName: user.LastName,\n Email: user.Email,\n Type: user.Type,\n IsActive: user.IsActive,\n LinkedRecordType: user.LinkedRecordType,\n CreatedAt: user.__mj_CreatedAt,\n Roles: (user.UserRoles ?? []).map(r => ({ Role: r.Role, RoleID: r.RoleID }))\n };\n }\n\n private providerData(): unknown {\n const provider = this.ProviderToUse;\n if (!provider) return { error: 'No provider' };\n const data: Record<string, unknown> = {\n type: provider.constructor.name,\n EntitiesCount: provider.Entities?.length ?? 0,\n ApplicationsCount: provider.Applications?.length ?? 0,\n QueriesCount: provider.Queries?.length ?? 0,\n RolesCount: provider.Roles?.length ?? 0\n };\n if (provider instanceof GraphQLDataProvider) {\n data.URL = provider.ConfigData?.URL;\n data.WSURL = provider.ConfigData?.WSURL;\n }\n return data;\n }\n\n private workspaceData(): unknown {\n const config = this.workspace.GetConfiguration();\n return config;\n }\n\n private appData(): unknown {\n const config = this.workspace.GetConfiguration();\n if (!config) return { error: 'No workspace configuration' };\n const activeTab = config.tabs?.find(t => t.id === config.activeTabId);\n return {\n ActiveTabId: config.activeTabId,\n ActiveTab: activeTab,\n TabCount: config.tabs?.length ?? 0\n };\n }\n\n private devData(): unknown {\n return {\n IsEnabled: this.devMode.IsEnabled,\n IsDeveloper: this.devMode.IsDeveloper,\n EligibleRoles: ['Developer', 'Admin', 'System Administrator', 'Integration']\n };\n }\n\n private browserData(): unknown {\n return {\n UserAgent: navigator.userAgent,\n Language: navigator.language,\n Languages: navigator.languages,\n Platform: navigator.platform,\n Online: navigator.onLine,\n Viewport: { width: window.innerWidth, height: window.innerHeight, devicePixelRatio: window.devicePixelRatio },\n URL: window.location.href,\n Origin: window.location.origin,\n Path: window.location.pathname + window.location.search,\n Memory: this.readMemory()\n };\n }\n\n private jsonReplacer(_key: string, value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (value instanceof Map) return Object.fromEntries(value.entries());\n if (value instanceof Set) return Array.from(value);\n if (typeof value === 'function') return `[Function ${(value as { name: string }).name || 'anonymous'}]`;\n return value;\n }\n\n private readMemory(): { usedJSHeapSize: number; totalJSHeapSize: number } | undefined {\n const memory = (performance as Performance & {\n memory?: { usedJSHeapSize: number; totalJSHeapSize: number };\n }).memory;\n if (!memory) return undefined;\n return { usedJSHeapSize: memory.usedJSHeapSize, totalJSHeapSize: memory.totalJSHeapSize };\n }\n\n private timestampSlug(): string {\n const d = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n }\n\n // ========================================\n // AI AGENT CONTEXT (METADATA-ONLY)\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: METADATA-ONLY.\n // The App State Inspector renders the Explorer's runtime state — which can\n // include auth/session details, provider URLs, and user PII. We therefore\n // expose to the AI agent ONLY metadata ABOUT the state (its serialized size,\n // the number of top-level keys in the active section, and the section label)\n // — NEVER the state VALUES themselves. For the same reason, NO client tools\n // are registered here: there is no value-returning operation the agent may\n // invoke against this surface.\n // ========================================\n\n /**\n * Publish METADATA-ONLY context for the App State Inspector. Reports the\n * size of the active section's serialized JSON, its top-level key count, the\n * section label/ids, and the top-level KEY NAMES (structural identifiers like\n * \"Email\"/\"Roles\" — never their values). See SAFETY BOUNDARY above.\n */\n private publishAgentContext(): void {\n const context = BuildAppStateInspectorAgentContext({\n StateSize: this.StateJson.length,\n KeyCount: this.activeSectionKeys().length,\n ActiveSection: this.ActiveSection,\n ActiveSectionLabel: this.SectionLabel,\n SectionIds: this.Sections.map(s => s.id),\n // 🔒 KEY NAMES only — never values.\n TopLevelKeys: this.activeSectionKeys(),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Top-level KEY NAMES of the active section's data — METADATA ONLY, never\n * any value. For an array, returns the numeric indices as strings.\n */\n private activeSectionKeys(): string[] {\n const data = this.computeSectionData(this.ActiveSection);\n if (data && typeof data === 'object') {\n return Array.isArray(data)\n ? data.map((_, i) => String(i))\n : Object.keys(data as Record<string, unknown>);\n }\n return [];\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"App State inspector\"\n Title=\"App State Inspector\"\n Subtitle=\"Read-only snapshot of Explorer runtime state\">\n <div actions>\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 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 <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnDownload()\" title=\"Download as JSON\" aria-label=\"Download as JSON\">\n <i class=\"fa-solid fa-download\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div toolbar>\n <mj-tab-nav\n [Tabs]=\"tabsConfig\"\n [ActiveKey]=\"ActiveSection\"\n (TabChange)=\"onTabChange($event)\">\n </mj-tab-nav>\n </div>\n </mj-page-header-interior>\n\n <div class=\"mj-inspector__content\">\n <div class=\"mj-inspector__content-head\">\n <h4 class=\"mj-inspector__content-title\">{{ SectionLabel }}</h4>\n <span class=\"mj-inspector__content-meta\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n <div class=\"mj-inspector__editor\">\n <mj-code-editor\n [(ngModel)]=\"StateJson\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n</div>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"class-registry.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/class-registry.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;;AAMlE,sFAAsF;AACtF,UAAU,iBAAiB;IACvB,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,iBAAiB;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAOa,+BAAgC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAQtG,OAAO,CAAC,GAAG;IANhB,MAAM,EAAE,iBAAiB,EAAE,CAAM;IACjC,KAAK;;;;MAAkD;IACvD,WAAW,SAAM;IACjB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAEd,GAAG,EAAE,iBAAiB;IAInC,QAAQ,IAAI,IAAI;IAahB,eAAe,IAAI,IAAI;IAOd,WAAW,IAAI,IAAI;IAK5B,YAAY,IAAI,IAAI;IAI3B,OAAO,CAAC,SAAS;IAOK,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtD,OAAO,IAAI,IAAI;IAoDtB,uCAAuC;IAChC,OAAO,IAAI,IAAI;IAIf,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKxE,SAAS,IAAI,IAAI;IAKjB,WAAW,IAAI,IAAI;IAKnB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1C,IAAW,cAAc,IAAI,iBAAiB,EAAE,CAc/C;IAEM,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO;IAMxE,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO;IASjE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBpC,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAEM,WAAW,GAAI,IAAI,MAAM,EAAE,GAAG,iBAAiB,YAAqB;IACpE,UAAU,GAAI,IAAI,MAAM,EAAE,GAAG,iBAAiB,YAA8D;IAYnH;;;;OAIG;IACH,OAAO,KAAK,qBAAqB,GAKhC;IAED,uEAAuE;IACvE,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA2BhC,mEAAmE;IACnE,OAAO,CAAC,UAAU;IAUlB,sEAAsE;IACtE,OAAO,CAAC,qBAAqB;yCA9QpB,+BAA+B;2CAA/B,+BAA+B;CA+R3C"}
1
+ {"version":3,"file":"class-registry.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/class-registry.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;;AAMlE,sFAAsF;AACtF,UAAU,iBAAiB;IACvB,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,iBAAiB;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAOa,+BAAgC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAQtG,OAAO,CAAC,GAAG;IANhB,MAAM,EAAE,iBAAiB,EAAE,CAAM;IACjC,KAAK;;;;MAAkD;IACvD,WAAW,SAAM;IACjB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAEd,GAAG,EAAE,iBAAiB;IAI1B,QAAQ,IAAI,IAAI;IAczB,eAAe,IAAI,IAAI;IAOd,WAAW,IAAI,IAAI;IAK5B,YAAY,IAAI,IAAI;IAI3B,OAAO,CAAC,SAAS;IAOK,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtD,OAAO,IAAI,IAAI;IAoDtB,uCAAuC;IAChC,OAAO,IAAI,IAAI;IAIf,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKxE,SAAS,IAAI,IAAI;IAKjB,WAAW,IAAI,IAAI;IAKnB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1C,IAAW,cAAc,IAAI,iBAAiB,EAAE,CAc/C;IAEM,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO;IAMxE,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO;IASjE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBpC,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAEM,WAAW,GAAI,IAAI,MAAM,EAAE,GAAG,iBAAiB,YAAqB;IACpE,UAAU,GAAI,IAAI,MAAM,EAAE,GAAG,iBAAiB,YAA8D;IAYnH;;;;OAIG;IACH,OAAO,KAAK,qBAAqB,GAKhC;IAED,uEAAuE;IACvE,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA2BhC,mEAAmE;IACnE,OAAO,CAAC,UAAU;IAUlB,sEAAsE;IACtE,OAAO,CAAC,qBAAqB;yCA/QpB,+BAA+B;2CAA/B,+BAA+B;CAgS3C"}
@@ -160,6 +160,7 @@ let ClassRegistryInspectorComponent = class ClassRegistryInspectorComponent exte
160
160
  this.cdr = cdr;
161
161
  }
162
162
  ngOnInit() {
163
+ super.ngOnInit();
163
164
  const prefs = DevToolsPrefs.Get('classRegistry');
164
165
  if (prefs?.search)
165
166
  this.SearchQuery = prefs.search;
@@ -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":"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"}
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');