@memberjunction/ng-dashboards 5.46.0 → 5.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +15 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +45 -35
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +7 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +4 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +39 -30
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +14 -12
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +6 -1
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +11 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +27 -2
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +33 -0
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +69 -2
- package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-compare.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-compare.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-home.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-home.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-operate-dialog.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-operate-dialog.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +306 -297
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.js +15 -9
- package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +115 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +119 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.d.ts +36 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.d.ts.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.js +52 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.js.map +1 -0
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js +133 -56
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +50 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +591 -165
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.d.ts +17 -0
- package/dist/PredictiveStudio/resources/ps-resource-base.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js +27 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +11 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +199 -99
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/package.json +59 -59
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps-models-resource.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/resources/ps-models-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { PSResourceBase } from './ps-resource-base';\nimport { PSPanelKey } from '../predictive-studio.types';\nimport { MODELS_SECTIONS, PSSection, sectionGroups, sectionsInGroup, sectionLabel, sectionIcon, hasSection } from '../predictive-studio.nav';\n\n/**\n * **Models** — the trained-model lifecycle door (one of Predictive Studio's three consolidated nav\n * items, alongside `Predictions` and `Studio`). Hosts the registry + production section panels\n * (`ps-registry`, `ps-production`) behind an internal left-nav. The active section round-trips through\n * the `section` query param, so the `Overview` panel's cross-door \"view in production\" links (and any\n * deep link) can land directly on the right section. No docked copilot here — these are read/manage\n * surfaces; model creation + the Model Dev Agent live in the `Studio` and `Predictions` doors.\n */\n@RegisterClass(BaseResourceComponent, 'PredictiveStudioModelsResource')\n@Component({\n standalone: false,\n selector: 'mj-ps-models-resource',\n template: `\n <mj-page-header-interior [Title]=\"activeLabel\"\n Subtitle=\"Versioned trained models and what's live in production\">\n </mj-page-header-interior>\n <mj-page-body-interior>\n @if (isLoading) {\n <mj-loading text=\"Loading Models…\" size=\"medium\"></mj-loading>\n } @else {\n <div class=\"ps-models-host\" data-testid=\"ps-models-shell\">\n <aside class=\"ps-leftnav\">\n @for (group of groups; track group) {\n @if (group) { <div class=\"ps-nav-group\">{{ group }}</div> }\n @for (item of itemsForGroup(group); track item.key) {\n <button class=\"ps-nav-item\" [class.active]=\"activeSection === item.key\"\n [attr.data-testid]=\"'ps-nav-' + item.key\" (click)=\"selectSection(item.key)\">\n <i [class]=\"item.icon\"></i> <span>{{ item.label }}</span>\n </button>\n }\n }\n </aside>\n\n <section class=\"ps-content\" [attr.data-testid]=\"'ps-panel-' + activeSection\">\n @switch (activeSection) {\n @case ('registry') { <ps-registry [engine]=\"engine\" [provider]=\"ProviderToUse\" [currentUser]=\"ProviderToUse.CurrentUser\"></ps-registry> }\n @case ('production') { <ps-production [engine]=\"engine\"></ps-production> }\n }\n </section>\n </div>\n }\n </mj-page-body-interior>\n `,\n styles: [\n `\n :host { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; }\n .ps-models-host { display: flex; flex: 1; min-height: 0; overflow: hidden; }\n .ps-leftnav { width: 210px; flex: none; border-right: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card); overflow-y: auto; padding: 10px 8px; display: flex; flex-direction: column; gap: 2px; }\n .ps-nav-group { font-size: var(--mj-text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--mj-text-muted); padding: 12px 10px 4px; }\n .ps-nav-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border: none; background: transparent; border-radius: var(--mj-radius-md); cursor: pointer; color: var(--mj-text-secondary); font-size: var(--mj-text-sm); font-weight: 500; transition: background .12s, color .12s; }\n .ps-nav-item i { width: 18px; text-align: center; color: var(--mj-text-muted); }\n .ps-nav-item:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .ps-nav-item.active { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); font-weight: 600; }\n .ps-nav-item.active i { color: var(--mj-brand-primary); }\n .ps-content { flex: 1; min-width: 0; overflow-y: auto; padding: 8px 14px 24px; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PSModelsResourceComponent extends PSResourceBase {\n protected readonly SectionKey = 'models';\n protected readonly SectionLabel = 'Models';\n protected readonly SectionIcon = 'fa-solid fa-cubes';\n\n private readonly cdrLocal = inject(ChangeDetectorRef);\n\n public activeSection: PSPanelKey = 'registry';\n public readonly sections: readonly PSSection[] = MODELS_SECTIONS;\n\n override ngOnInit(): void {\n super.ngOnInit();\n const initial = this.GetQueryParams()['section'] as PSPanelKey | undefined;\n if (initial && hasSection(this.sections, initial)) this.activeSection = initial;\n }\n\n protected override OnQueryParamsChanged(params: Record<string, string>, _source: 'popstate' | 'deeplink'): void {\n const next = params['section'] as PSPanelKey | undefined;\n if (next && next !== this.activeSection && hasSection(this.sections, next)) {\n this.activeSection = next;\n this.cdrLocal.detectChanges();\n }\n }\n\n protected override extraAgentContext(): Record<string, unknown> {\n return { ActiveSection: sectionLabel(this.sections, this.activeSection) };\n }\n\n public get groups(): string[] { return sectionGroups(this.sections); }\n public itemsForGroup(group: string): PSSection[] { return sectionsInGroup(this.sections, group); }\n public get activeLabel(): string { return sectionLabel(this.sections, this.activeSection); }\n public get activeIcon(): string { return sectionIcon(this.sections, this.activeSection); }\n\n public selectSection(key: PSPanelKey): void {\n if (this.activeSection === key) return;\n this.activeSection = key;\n this.UpdateQueryParams({ section: key });\n this.publishAgentContext();\n this.cdrLocal.detectChanges();\n }\n}\n\n/** Tree-shaking prevention — called from the subpath module so the @RegisterClass survives bundling. */\nexport function LoadPSModelsResource(): void {\n // intentionally empty\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ps-models-resource.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/resources/ps-models-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { PSResourceBase } from './ps-resource-base';\nimport { PSPanelKey } from '../predictive-studio.types';\nimport { MODELS_SECTIONS, PSSection, sectionGroups, sectionsInGroup, sectionLabel, hasSection } from '../predictive-studio.nav';\nimport { buildModelsAgentContext, resolvePSRecord, buildPSNotFoundError } from '../predictive-studio-agent-context';\nimport { validateStringParam } from '../../shared/agent-tool-validation';\n\n/**\n * **Models** — the trained-model lifecycle door (one of Predictive Studio's three consolidated nav\n * items, alongside `Predictions` and `Studio`). Hosts the registry + production section panels\n * (`ps-registry`, `ps-production`) behind an internal left-nav. The active section round-trips through\n * the `section` query param, so the `Overview` panel's cross-door \"view in production\" links (and any\n * deep link) can land directly on the right section. No docked copilot here — these are read/manage\n * surfaces; model creation + the Model Dev Agent live in the `Studio` and `Predictions` doors.\n */\n@RegisterClass(BaseResourceComponent, 'PredictiveStudioModelsResource')\n@Component({\n standalone: false,\n selector: 'mj-ps-models-resource',\n template: `\n <mj-page-header-interior [Title]=\"activeLabel\" [Subtitle]=\"activeSubtitle\">\n </mj-page-header-interior>\n <mj-page-body-interior [Flex]=\"true\" [Padding]=\"false\">\n @if (isLoading) {\n <mj-loading text=\"Loading Models…\" size=\"medium\"></mj-loading>\n } @else if (loadError) {\n <div class=\"ps-load-error\" data-testid=\"ps-load-error\" role=\"alert\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"ps-load-error-text\">\n <strong>Couldn't load {{ sectionTitle }}</strong>\n <span class=\"ps-load-error-detail\">{{ loadError }}</span>\n </div>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"retryLoad()\"><i class=\"fa-solid fa-rotate-right\"></i> Try again</button>\n </div>\n } @else {\n <div class=\"ps-models-host\" data-testid=\"ps-models-shell\">\n <aside class=\"ps-leftnav\">\n @for (group of groups; track group) {\n @if (group) { <div class=\"ps-nav-group\">{{ group }}</div> }\n @for (item of itemsForGroup(group); track item.key) {\n <button class=\"ps-nav-item\" [class.active]=\"activeSection === item.key\"\n [attr.data-testid]=\"'ps-nav-' + item.key\" (click)=\"selectSection(item.key)\">\n <i [class]=\"item.icon\"></i> <span>{{ item.label }}</span>\n </button>\n }\n }\n </aside>\n\n <section class=\"ps-content\" [class.fill]=\"activeSection === 'registry'\" [attr.data-testid]=\"'ps-panel-' + activeSection\">\n @switch (activeSection) {\n @case ('registry') { <ps-registry [engine]=\"engine\" [provider]=\"ProviderToUse\" [currentUser]=\"ProviderToUse.CurrentUser\"></ps-registry> }\n @case ('production') { <ps-production [engine]=\"engine\"></ps-production> }\n }\n </section>\n </div>\n }\n </mj-page-body-interior>\n `,\n styles: [\n `\n :host { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; }\n .ps-models-host { display: flex; flex: 1; min-height: 0; overflow: hidden; }\n .ps-leftnav { width: 210px; flex: none; border-right: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card); overflow-y: auto; padding: 10px 8px; display: flex; flex-direction: column; gap: 2px; }\n .ps-nav-group { font-size: var(--mj-text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--mj-text-muted); padding: 12px 10px 4px; }\n .ps-nav-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border: none; background: transparent; border-radius: var(--mj-radius-md); cursor: pointer; color: var(--mj-text-secondary); font-size: var(--mj-text-sm); font-weight: 500; transition: background .12s, color .12s; }\n .ps-nav-item i { width: 18px; text-align: center; color: var(--mj-text-muted); }\n .ps-nav-item:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .ps-nav-item.active { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); font-weight: 600; }\n .ps-nav-item.active i { color: var(--mj-brand-primary); }\n .ps-content { flex: 1; min-width: 0; overflow-y: auto; padding: 8px 14px 24px; }\n /* Fill mode (registry): the section stops page-scrolling so the panel's inner\n columns (model list / detail) can each own their scrollbar. */\n .ps-content.fill { overflow: hidden; display: flex; flex-direction: column; padding-bottom: 14px; }\n .ps-content.fill > * { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n .ps-load-error { display: flex; align-items: center; gap: 14px; max-width: 620px; margin: 32px auto; padding: 18px 20px; border: 1px solid var(--mj-status-error-border); background: var(--mj-status-error-bg); border-radius: var(--mj-radius-lg); }\n .ps-load-error > i { font-size: 24px; color: var(--mj-status-error); }\n .ps-load-error-text { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n .ps-load-error-text strong { color: var(--mj-text-primary); }\n .ps-load-error-detail { color: var(--mj-text-secondary); font-size: var(--mj-text-sm); word-break: break-word; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PSModelsResourceComponent extends PSResourceBase {\n protected readonly SectionKey = 'models';\n protected readonly SectionLabel = 'Models';\n protected readonly SectionIcon = 'fa-solid fa-cubes';\n\n private readonly cdrLocal = inject(ChangeDetectorRef);\n\n public activeSection: PSPanelKey = 'registry';\n public readonly sections: readonly PSSection[] = MODELS_SECTIONS;\n\n override ngOnInit(): void {\n super.ngOnInit();\n const initial = this.GetQueryParams()['section'] as PSPanelKey | undefined;\n if (initial && hasSection(this.sections, initial)) this.activeSection = initial;\n }\n\n protected override OnQueryParamsChanged(params: Record<string, string>, _source: 'popstate' | 'deeplink'): void {\n const next = params['section'] as PSPanelKey | undefined;\n if (next && next !== this.activeSection && hasSection(this.sections, next)) {\n this.activeSection = next;\n this.cdrLocal.detectChanges();\n }\n }\n\n /** Deep agent context for the Models door: active section + trained-model lifecycle counts. */\n protected override extraAgentContext(): Record<string, unknown> {\n const models = this.engine.Models;\n return buildModelsAgentContext({\n ActiveSection: this.activeSection,\n ActiveSectionLabel: this.activeLabel,\n SectionLabels: this.sections.map((s) => s.label),\n TotalModelCount: models.length,\n PublishedModelCount: this.engine.PublishedModels.length,\n DraftModelCount: models.filter((m) => m.Status === 'Draft').length,\n ProductionModelCount: models.filter((m) => this.engine.RecordProcessIDsForModel(m.ID).length > 0).length,\n });\n }\n\n /**\n * 🔒 Read/navigate-only agent tool for the Models door: switch the active section (Model Registry ↔\n * Models in Production). NO promote/retire/delete/score tool is exposed — model lifecycle changes stay\n * behind the user's own clicks.\n */\n protected override registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SwitchModelsSection',\n Description: 'Switch the Models door to a section. Pass the section key or label (see SectionLabels): Model Registry or Models in Production.',\n ParameterSchema: { type: 'object', properties: { section: { type: 'string', description: 'The section key or label to switch to' } } },\n Handler: async (params: Record<string, unknown>) => {\n const check = validateStringParam(params['section'], 'section');\n if (!check.ok) return check.result;\n const candidates = this.sections.map((s) => ({ ID: s.key, Name: s.label }));\n const match = resolvePSRecord(check.value, candidates);\n if (!match) return { Success: false, ErrorMessage: buildPSNotFoundError(check.value, candidates, 'section') };\n this.selectSection(match.ID as PSPanelKey);\n return { Success: true, Data: { activeSection: match.Name } };\n },\n },\n ]);\n }\n\n public get groups(): string[] { return sectionGroups(this.sections); }\n public itemsForGroup(group: string): PSSection[] { return sectionsInGroup(this.sections, group); }\n public get activeLabel(): string { return sectionLabel(this.sections, this.activeSection); }\n\n /** Section-specific subtitle for the interior header. */\n public get activeSubtitle(): string {\n const map: Record<string, string> = {\n registry: 'Versioned trained models, their metrics, and lineage.',\n production: \"What's scoring live, and its recent runs.\",\n };\n return map[this.activeSection] ?? '';\n }\n\n public selectSection(key: PSPanelKey): void {\n if (this.activeSection === key) return;\n this.activeSection = key;\n this.UpdateQueryParams({ section: key });\n this.publishAgentContext();\n this.cdrLocal.detectChanges();\n }\n}\n\n/** Tree-shaking prevention — called from the subpath module so the @RegisterClass survives bundling. */\nexport function LoadPSModelsResource(): void {\n // intentionally empty\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import { MJConversationEntity } from '@memberjunction/core-entities';
|
|
|
3
3
|
import { PSResourceBase } from './ps-resource-base';
|
|
4
4
|
import { type BusinessPredictionCard } from '../business-predictions.view-models';
|
|
5
5
|
import { type AtRiskRow } from '../at-risk.view-models';
|
|
6
|
+
import { type PSCapabilityCard } from '../predictive-studio-copilot.view-models';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
/**
|
|
8
9
|
* **Predictions** — the business-user home for Predictive Studio (`option-b-refined` mockup). Reframes
|
|
@@ -38,21 +39,69 @@ export declare class PSPredictionsResourceComponent extends PSResourceBase {
|
|
|
38
39
|
drivers: string[];
|
|
39
40
|
/** Whether the at-risk list is loading for the open prediction. */
|
|
40
41
|
atRiskLoading: boolean;
|
|
42
|
+
/** Set when the at-risk load fails — the workspace shows a "couldn't load" banner with retry instead of the misleading no-results empty state. */
|
|
43
|
+
atRiskError: string | null;
|
|
44
|
+
/** "Send to a list" in-flight guard + last-result message (P1 #4). */
|
|
45
|
+
creatingList: boolean;
|
|
46
|
+
listResult: string | null;
|
|
47
|
+
/** Capability cards for the first-run intro (what PS can do), shown when the catalog is empty. */
|
|
48
|
+
readonly capabilityCards: readonly PSCapabilityCard[];
|
|
41
49
|
/** The business catalog cards, most-trustworthy first, derived from the engine's published models. */
|
|
42
50
|
get cards(): BusinessPredictionCard[];
|
|
43
51
|
dots(c: BusinessPredictionCard): number;
|
|
44
52
|
evidence(): string;
|
|
53
|
+
/** Deep agent context for the Predictions door: catalog counts + names, and (in workspace) the selection + at-risk breakdown. */
|
|
54
|
+
protected extraAgentContext(): Record<string, unknown>;
|
|
55
|
+
/**
|
|
56
|
+
* 🔒 Read/navigate-only agent tools for the Predictions door: open a (trust-cleared) prediction, go back
|
|
57
|
+
* to the catalog, review the call list, export the at-risk list (CSV — read-only, mirrors Data Explorer's
|
|
58
|
+
* ExportView), and open the "+ New prediction" co-pilot. **DELIBERATELY NOT exposed:** "Save scores to
|
|
59
|
+
* records", "Send to a list" (both WRITE records), and any train/publish/delete — those stay behind the
|
|
60
|
+
* user's clicks and the approve-gated builder.
|
|
61
|
+
*/
|
|
62
|
+
protected registerAgentTools(): void;
|
|
45
63
|
open(c: BusinessPredictionCard): void;
|
|
46
64
|
/** Load the open prediction's plain-language drivers + its latest run's ranked at-risk rows. */
|
|
47
65
|
private loadAtRisk;
|
|
66
|
+
/** Retry loading the open prediction's at-risk list after a failure — bound to the at-risk error banner. */
|
|
67
|
+
retryAtRisk(): void;
|
|
68
|
+
/**
|
|
69
|
+
* P1 #3 — resolve the raw record ids in the at-risk list to human labels (member name/email) from the
|
|
70
|
+
* model's target entity, so the list reads like a call sheet instead of a column of UUIDs. Resolves the
|
|
71
|
+
* top-risk rows (capped) to keep the lookup light; unresolved rows fall back to their id in the template.
|
|
72
|
+
*/
|
|
73
|
+
/** Resolve a model's scored target entity (id + name) via its pipeline — the model row itself only carries PipelineID. */
|
|
74
|
+
private targetEntityForModel;
|
|
75
|
+
private resolveAtRiskLabels;
|
|
48
76
|
backToCatalog(): void;
|
|
49
77
|
/** "Review the call list" — scroll the ranked at-risk list into view. */
|
|
50
78
|
scrollToList(): void;
|
|
51
|
-
/** "Save scores"
|
|
79
|
+
/** "Save scores" — still routed conversationally through the co-pilot (needs a designated write-back column). */
|
|
52
80
|
askAgentTo(prompt: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* P1 #4 — "Send to a list" as a one-click server action (no agent sentence to parse): create an MJ List
|
|
83
|
+
* over the model's target entity and add the at-risk members (high/medium band, capped) so a team can
|
|
84
|
+
* act on it immediately (outreach campaign, tasks, etc.).
|
|
85
|
+
*/
|
|
86
|
+
sendToList(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Quote one CSV cell: RFC-4180 double-quote escaping (handles commas/quotes/newlines in labels) plus a
|
|
89
|
+
* leading `'` on formula-starting characters (`=`, `+`, `-`, `@`) so a hostile label can't execute as an
|
|
90
|
+
* Excel/Sheets formula on open.
|
|
91
|
+
*/
|
|
92
|
+
private csvCell;
|
|
53
93
|
/** "Share / export" — download the at-risk list as a CSV (dependency-free). */
|
|
54
94
|
exportList(): void;
|
|
95
|
+
/** "+ New prediction" — open the co-pilot to a clean chat (Sonar-style); the user describes their goal and the agent drives the build. */
|
|
55
96
|
newPrediction(): void;
|
|
97
|
+
/**
|
|
98
|
+
* "Improve this" on a blocked (not-trustworthy-enough) prediction — turns the trust dead-end into a next
|
|
99
|
+
* step by opening the co-pilot seeded with the model's name + why it's held, so the agent proposes concrete
|
|
100
|
+
* ways to make it reliable and can rebuild it.
|
|
101
|
+
*/
|
|
102
|
+
improvePrediction(c: BusinessPredictionCard): void;
|
|
103
|
+
/** Open the "+ New prediction" co-pilot (clean chat) — used by the read-only `OpenNewPredictionCopilot` agent tool. */
|
|
104
|
+
openNewPredictionCopilot(): void;
|
|
56
105
|
closeChat(): void;
|
|
57
106
|
/**
|
|
58
107
|
* The chat-area created its backing conversation after the user's first message — capture the live
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps-predictions-resource.component.d.ts","sourceRoot":"","sources":["../../../src/PredictiveStudio/resources/ps-predictions-resource.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"ps-predictions-resource.component.d.ts","sourceRoot":"","sources":["../../../src/PredictiveStudio/resources/ps-predictions-resource.component.ts"],"names":[],"mappings":"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"}
|