@anyshift/backstage-plugin-anyshift 0.1.0-beta.16 → 0.1.0-beta.18
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/components/ask/askPresenters.esm.js +38 -9
- package/dist/components/ask/askPresenters.esm.js.map +1 -1
- package/dist/components/entity/AnyshiftEntityContent.esm.js +2 -2
- package/dist/components/entity/AnyshiftEntityContent.esm.js.map +1 -1
- package/dist/components/entity/DatadogLiveSignal.esm.js +85 -23
- package/dist/components/entity/DatadogLiveSignal.esm.js.map +1 -1
- package/dist/components/entity/SectionPresenters.esm.js +1 -1
- package/dist/components/entity/SectionPresenters.esm.js.map +1 -1
- package/dist/components/explorer/DatadogOperationsRadar.esm.js +92 -31
- package/dist/components/explorer/DatadogOperationsRadar.esm.js.map +1 -1
- package/dist/package.json.esm.js +1 -1
- package/package.json +1 -1
|
@@ -516,16 +516,22 @@ function presentAskResult(result) {
|
|
|
516
516
|
}))
|
|
517
517
|
};
|
|
518
518
|
case "alerts": {
|
|
519
|
-
const
|
|
520
|
-
|
|
521
|
-
label: item.monitor,
|
|
519
|
+
const rows = isNormalizedAlertsAskResult(result) ? result.alerts.items.filter((item) => item.status === "firing").slice(0, MAX_ROWS).map((item) => ({
|
|
520
|
+
label: item.title,
|
|
522
521
|
value: 1,
|
|
523
|
-
detail: [
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
522
|
+
detail: [
|
|
523
|
+
readableLabel(item.provider),
|
|
524
|
+
readableLabel(item.severity),
|
|
525
|
+
item.providerStatus,
|
|
526
|
+
item.service?.name
|
|
527
|
+
].filter(Boolean).join(" \xB7 "),
|
|
528
|
+
timestamp: item.observedAt ?? item.updatedAt
|
|
527
529
|
})) : [];
|
|
528
|
-
return {
|
|
530
|
+
return {
|
|
531
|
+
kind: "ranking",
|
|
532
|
+
rows,
|
|
533
|
+
...isNormalizedAlertsAskResult(result) ? { alertEvidence: alertEvidencePresentation(result) } : {}
|
|
534
|
+
};
|
|
529
535
|
}
|
|
530
536
|
case "resolve": {
|
|
531
537
|
const candidates = result.resolve?.candidates ?? [];
|
|
@@ -613,6 +619,22 @@ function presentAskResult(result) {
|
|
|
613
619
|
return assertNever(result);
|
|
614
620
|
}
|
|
615
621
|
}
|
|
622
|
+
function isNormalizedAlertsAskResult(result) {
|
|
623
|
+
return result.intent === "alerts" && result.alerts !== null && result.alerts !== void 0 && "items" in result.alerts && Array.isArray(result.alerts.items);
|
|
624
|
+
}
|
|
625
|
+
function alertEvidencePresentation(result) {
|
|
626
|
+
const coverage = result.alerts.providers.flatMap(
|
|
627
|
+
(provider) => provider.status === "available" ? [] : [
|
|
628
|
+
`${readableLabel(provider.provider)} alert coverage is ${provider.status}.`
|
|
629
|
+
]
|
|
630
|
+
);
|
|
631
|
+
const warnings = result.alerts.warnings.map((warning) => warning.message);
|
|
632
|
+
return {
|
|
633
|
+
partial: result.alerts.partial,
|
|
634
|
+
coverage,
|
|
635
|
+
warnings
|
|
636
|
+
};
|
|
637
|
+
}
|
|
616
638
|
const AskResultPresenter = ({
|
|
617
639
|
result,
|
|
618
640
|
effectiveQuestion,
|
|
@@ -742,7 +764,14 @@ const Presentation = ({
|
|
|
742
764
|
case "coverage":
|
|
743
765
|
return /* @__PURE__ */ jsx(EvidenceSection, { title: "Coverage evidence", children: /* @__PURE__ */ jsx(CoverageTable, { rows: presentation.rows }) });
|
|
744
766
|
case "ranking":
|
|
745
|
-
return /* @__PURE__ */
|
|
767
|
+
return /* @__PURE__ */ jsxs(EvidenceSection, { title: "Ranking", children: [
|
|
768
|
+
presentation.alertEvidence && /* @__PURE__ */ jsxs(Box, { mb: 1, children: [
|
|
769
|
+
presentation.alertEvidence.partial && /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "error", children: "Alert coverage is partial." }),
|
|
770
|
+
presentation.alertEvidence.coverage.map((message) => /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "textSecondary", children: message }, message)),
|
|
771
|
+
presentation.alertEvidence.warnings.map((message) => /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "textSecondary", children: message }, message))
|
|
772
|
+
] }),
|
|
773
|
+
/* @__PURE__ */ jsx(RankingTable, { rows: presentation.rows })
|
|
774
|
+
] });
|
|
746
775
|
case "candidates":
|
|
747
776
|
return /* @__PURE__ */ jsx(EvidenceSection, { title: "Choose a resource", children: /* @__PURE__ */ jsx(Box, { display: "flex", flexWrap: "wrap", gridGap: 8, children: presentation.candidates.map((candidate) => {
|
|
748
777
|
const question = questionForCandidate(candidate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"askPresenters.esm.js","sources":["../../../src/components/ask/askPresenters.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@material-ui/core';\nimport type { ReactNode } from 'react';\nimport type { AskResult } from '@anyshift/backstage-plugin-anyshift-common';\nimport {\n ImpactPresenter,\n TimelinePresenter,\n} from '../entity/SectionPresenters';\nimport { ArchitectureDiagram } from '../entity/MermaidArchitecture';\n\nconst MAX_ROWS = 10;\nconst MAX_GRAPH_NODES = 30;\nconst MAX_GRAPH_EDGES = 50;\nconst MAX_GRAPH_EDGE_SCAN = 200;\nconst MAX_DETAIL_ITEMS = 3;\n\ntype GraphNodes = NonNullable<AskResult['nodes']>;\ntype GraphEdges = NonNullable<AskResult['edges']>;\ntype AskResultFor<I extends AskResult['intent']> = Extract<\n AskResult,\n { intent: I }\n>;\ntype ResolveResult = Extract<AskResult, { intent: 'resolve' }>['resolve'];\n\nexport type ResolveCandidate = NonNullable<ResolveResult>['candidates'][number];\n\nexport interface TimelineItem {\n id: string;\n type: string;\n timestamp?: string | null;\n target?: string | null;\n namespace?: string | null;\n summary?: string | null;\n}\n\nexport interface EvidenceRow {\n label: string;\n value?: string | number;\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface ImpactSummaryMetric {\n label: string;\n total: number;\n}\n\nexport interface ResourceRow {\n name: string;\n namespace?: string | null;\n type?: string | null;\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface CoverageRow {\n name: string;\n namespace?: string | null;\n status: 'covered' | 'gap' | 'unknown';\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface RankingRow {\n label: string;\n value: number;\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface SummaryMetric {\n label: string;\n value: string | number;\n}\n\nexport interface EvidenceTime {\n label: string;\n timestamp?: string | null;\n}\n\nexport type AskPresentation =\n | { kind: 'graph'; nodes: GraphNodes; edges: GraphEdges }\n | { kind: 'timeline'; items: TimelineItem[] }\n | { kind: 'impact'; rows: EvidenceRow[]; summary?: ImpactSummaryMetric }\n | { kind: 'inventory'; rows: ResourceRow[]; total?: number }\n | { kind: 'coverage'; rows: CoverageRow[] }\n | { kind: 'ranking'; rows: RankingRow[] }\n | { kind: 'candidates'; candidates: ResolveCandidate[] }\n | { kind: 'summary'; counts: SummaryMetric[]; timestamps: EvidenceTime[] };\n\nexport interface AskResultPresenterProps {\n result: AskResult;\n effectiveQuestion: string;\n answeredAt: string;\n onQuestion?: (question: string) => void;\n}\n\nexport function presentAskResult(result: AskResult): AskPresentation {\n switch (result.intent) {\n case 'connections':\n case 'topology':\n return graphPresentation(result.nodes, result.edges, {\n nodes: [],\n edges: [],\n });\n case 'blast':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromBlast(result),\n );\n case 'spof':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromSpof(result),\n );\n case 'path':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromPath(result),\n );\n case 'cascade':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromCascade(result),\n );\n case 'servicetree':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromServiceTree(result),\n );\n case 'calls':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromCalls(result),\n );\n case 'flow':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromFlow(result),\n );\n\n case 'events':\n return {\n kind: 'timeline',\n items: timelineFromEvents(result.events?.recent ?? []),\n };\n case 'deployments':\n return {\n kind: 'timeline',\n items: (result.deployments?.recent ?? [])\n .slice(0, MAX_ROWS)\n .map((item, index) => ({\n id: `${item.ts}-${index}`,\n type: 'Deployment',\n timestamp: item.ts,\n target: item.target,\n namespace: item.namespace,\n summary: deploymentSummary(item.images),\n })),\n };\n case 'cloudevents':\n return {\n kind: 'timeline',\n items: (result.cloudEvents?.items ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n id: item.id,\n type: item.type,\n timestamp: item.timestamp,\n target: item.target.name ?? item.target.id,\n summary: item.summary,\n })),\n };\n case 'deliveryevents':\n return {\n kind: 'timeline',\n items: (result.deliveryEvents?.items ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n id: item.id,\n type: item.type,\n timestamp: item.timestamp,\n target: item.target.name ?? item.target.id,\n summary: item.summary,\n })),\n };\n case 'audit':\n return {\n kind: 'timeline',\n items: timelineFromEvents(result.audit?.recent ?? []),\n };\n case 'nodes':\n return {\n kind: 'timeline',\n items: timelineFromEvents(result.nodeEvents?.recent ?? []),\n };\n\n case 'impact':\n return {\n kind: 'impact',\n summary: result.impact\n ? { label: 'Affected resources', total: result.impact.total }\n : undefined,\n rows: (result.impact?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n label: item.name ?? item.id ?? item.hashedID,\n value: `${item.pathCount} ${item.pathCount === 1 ? 'path' : 'paths'}`,\n detail: [\n item.kind ? readableLabel(item.kind) : undefined,\n `depth ${item.depth}`,\n ]\n .filter(Boolean)\n .join(' · '),\n })),\n };\n case 'alertimpact': {\n const evidence = result.alertImpact;\n const rows: EvidenceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.monitors, item => ({\n label: item.name,\n value: 'Monitor',\n detail: item.service,\n }));\n appendMapped(rows, evidence.slos, item => ({\n label: item.name,\n value: 'SLO',\n detail: item.service,\n }));\n }\n return {\n kind: 'impact',\n summary: evidence\n ? {\n label: 'Affected resources',\n total: evidence.workloads + evidence.services,\n }\n : undefined,\n rows,\n };\n }\n case 'deployimpact': {\n const evidence = result.deployImpact;\n const rows = evidence\n ? evidence.recent.length > 0\n ? evidence.recent\n .slice(0, MAX_ROWS)\n .map(item => eventEvidenceRow(item))\n : evidence.ranking.slice(0, MAX_ROWS).map(item => ({\n label: item.deployed,\n value: `${item.fallout} correlated failures`,\n detail: `${item.rollouts} rollouts`,\n }))\n : [];\n return { kind: 'impact', rows };\n }\n case 'incident': {\n const evidence = result.incident;\n const events = evidence\n ? evidence.rootCauses.length > 0\n ? evidence.rootCauses\n : evidence.chain\n : [];\n return {\n kind: 'impact',\n rows: events.slice(0, MAX_ROWS).map(item => eventEvidenceRow(item)),\n };\n }\n case 'failures':\n return {\n kind: 'impact',\n rows: (result.failures?.recent ?? [])\n .slice(0, MAX_ROWS)\n .map(item => eventEvidenceRow(item)),\n };\n case 'commoncause': {\n const evidence = result.commonCause;\n const rows: EvidenceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.byNode, item => causeRow(item, 'Node'));\n appendMapped(rows, evidence.byWorkload, item =>\n causeRow(item, 'Workload'),\n );\n appendMapped(rows, evidence.byDatastore, item =>\n causeRow(item, 'Datastore'),\n );\n appendMapped(rows, evidence.byExternal, item =>\n causeRow(item, 'External'),\n );\n }\n return { kind: 'impact', rows };\n }\n case 'alertcause':\n return {\n kind: 'impact',\n rows: (result.alertCause?.changes ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n label: item.target ?? result.alertCause?.workload ?? 'Change',\n value: item.type,\n detail: item.summary,\n timestamp: item.ts,\n })),\n };\n\n case 'inventory': {\n const evidence = result.inventory;\n return {\n kind: 'inventory',\n total: evidence?.total,\n rows: (evidence?.sample ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n type: evidence?.type,\n detail: item.resourceId ?? item.externalId,\n })),\n };\n }\n case 'cloudresources': {\n const evidence = result.cloudResources;\n return {\n kind: 'inventory',\n total: evidence?.counts.total,\n rows: (evidence?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name ?? item.id ?? item.hashedID,\n namespace: item.region ?? item.scope,\n type: item.kind ?? `${item.provider} resource`,\n detail: `${readableLabel(item.freshness)} · ${readableLabel(\n item.provenance.status,\n )}`,\n timestamp: item.observedAt,\n })),\n };\n }\n case 'storage': {\n const evidence = result.storage;\n const rows: ResourceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.claims, item => ({\n name: item.pvc,\n namespace: item.pvcNamespace,\n type: 'Persistent volume claim',\n detail: item.storageClass,\n }));\n appendMapped(rows, evidence.orphanPvs, item => ({\n name: item.name,\n type: 'Orphan persistent volume',\n detail: item.storageClass,\n }));\n appendMapped(rows, evidence.unclaimedPvcs, item => ({\n name: item.name,\n namespace: item.namespace,\n type: 'Unclaimed persistent volume claim',\n detail: item.storageClass,\n }));\n appendMapped(rows, evidence.classes, item => ({\n name: item.name,\n type: 'Storage class',\n detail: `${item.pvs} PVs · ${item.pvcs} PVCs`,\n }));\n }\n return {\n kind: 'inventory',\n total: evidence\n ? evidence.claims.length +\n evidence.orphanPvs.length +\n evidence.unclaimedPvcs.length +\n evidence.classes.length\n : 0,\n rows,\n };\n }\n case 'image': {\n const evidence = result.image;\n const rows: ResourceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.ranking, item => ({\n name: item.image,\n type: 'Container image',\n detail: `${item.containers} containers · ${item.pods} pods`,\n }));\n appendMapped(rows, evidence.byImage?.workloads ?? [], item => ({\n name: item.name,\n namespace: item.namespace,\n type: item.kind ?? 'Workload',\n }));\n appendMapped(rows, evidence.workload?.containers ?? [], item => ({\n name: item.image,\n type: item.isInit ? 'Init container' : 'Container',\n detail: item.name,\n }));\n appendMapped(rows, evidence.hygiene?.items ?? [], item => ({\n name: item.workload,\n namespace: item.namespace,\n type: evidence.hygiene?.kind,\n detail: item.image,\n }));\n }\n return {\n kind: 'inventory',\n total: evidence\n ? evidence.ranking.length +\n (evidence.byImage?.workloads.length ?? 0) +\n (evidence.workload?.containers.length ?? 0) +\n (evidence.hygiene?.items.length ?? 0)\n : 0,\n rows,\n };\n }\n case 'datastore': {\n const evidence = result.dataStore;\n const rows = evidence?.target\n ? [\n {\n name: evidence.target.name,\n type: 'Datastore',\n detail: `${evidence.target.services} services`,\n },\n ]\n : (evidence?.ranking ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n type: 'Datastore',\n detail: `${item.services} services`,\n }));\n return {\n kind: 'inventory',\n total: evidence?.target ? 1 : evidence?.ranking.length ?? 0,\n rows,\n };\n }\n case 'monitor': {\n const evidence = result.monitor;\n const rows: ResourceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.monitors, name => ({\n name,\n type: 'Monitor',\n }));\n appendMapped(rows, evidence.slos, name => ({ name, type: 'SLO' }));\n appendMapped(rows, evidence.workloads, item => ({\n name: item.name,\n namespace: item.namespace,\n type: item.type ?? 'Workload',\n }));\n }\n return {\n kind: 'inventory',\n total: evidence\n ? evidence.monitors.length +\n evidence.slos.length +\n evidence.workloads.length\n : 0,\n rows,\n };\n }\n case 'slo': {\n const evidence = result.slo;\n const rows = evidence?.target\n ? [\n {\n name: evidence.target.name,\n type: 'SLO',\n detail: evidence.target.status,\n },\n ]\n : (evidence?.ranking ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n type: 'SLO',\n detail: item.status,\n }));\n return {\n kind: 'inventory',\n total: evidence?.target ? 1 : evidence?.ranking.length ?? 0,\n rows,\n };\n }\n\n case 'coverage':\n return {\n kind: 'coverage',\n rows: (result.coverage?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap',\n detail: item.kind,\n })),\n };\n case 'graphcoverage':\n return {\n kind: 'coverage',\n rows: (result.graphCoverage?.sources ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n name: readableLabel(item.source),\n status: item.status === 'observed' ? 'covered' : 'gap',\n detail: `${item.nodes} nodes · ${item.relationships} relationships · ${item.events} events`,\n })),\n };\n case 'orphans':\n return {\n kind: 'coverage',\n rows: (result.orphans?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap',\n detail: result.orphans?.kind,\n })),\n };\n case 'netpol': {\n const evidence = result.netpol;\n const rows: CoverageRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.uncovered, item => ({\n name: item.namespace,\n status: 'gap' as const,\n detail: `${item.pods} pods`,\n }));\n appendMapped(rows, evidence.policies, item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'covered' as const,\n detail: boundedJoinedList(item.policyTypes),\n }));\n appendMapped(rows, evidence.reachers, item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'unknown' as const,\n detail: item.type,\n }));\n }\n return { kind: 'coverage', rows };\n }\n case 'pdb':\n return {\n kind: 'coverage',\n rows: (result.pdb?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap',\n detail: item.kind,\n })),\n };\n case 'gitops': {\n const evidence = result.gitops;\n const rows: CoverageRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.drift, item => ({\n name: item.name,\n status:\n item.syncStatus === 'Synced'\n ? 'covered'\n : item.syncStatus\n ? 'gap'\n : ('unknown' as CoverageRow['status']),\n detail: item.syncStatus ?? item.healthStatus,\n }));\n appendMapped(rows, evidence.unmanaged, item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap' as const,\n detail: item.kind,\n }));\n if (evidence.owner) {\n appendMapped(rows, [evidence.owner], owner => ({\n name: owner.workload,\n namespace: owner.namespace,\n status: (owner.application\n ? 'covered'\n : 'unknown') as CoverageRow['status'],\n detail: owner.application,\n }));\n }\n }\n return { kind: 'coverage', rows };\n }\n case 'iac':\n return {\n kind: 'coverage',\n rows: (result.iac?.resources ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.terraform.address,\n status:\n item.status === 'managed'\n ? 'covered'\n : item.status === 'ambiguous' || item.status === 'stale'\n ? 'unknown'\n : 'gap',\n detail: readableLabel(item.status),\n timestamp:\n item.directClouds[0]?.observedAt ??\n item.clouds[0]?.observedAt ??\n null,\n })),\n };\n case 'iacdrift':\n return {\n kind: 'coverage',\n rows: (result.iacDrift?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.terraform.address,\n status:\n item.status === 'in_sync'\n ? 'covered'\n : item.status === 'drifted'\n ? 'gap'\n : 'unknown',\n detail: readableLabel(item.reason),\n timestamp: item.cloud?.observedAt,\n })),\n };\n\n case 'hotspots':\n return {\n kind: 'ranking',\n rows: (result.hotspots?.ranking ?? []).slice(0, MAX_ROWS).map(item => ({\n label: item.key,\n value: item.total,\n detail: item.namespace,\n })),\n };\n case 'scaling': {\n const evidence = result.scaling;\n const rows: RankingRow[] = evidence?.target\n ? evidence.target.hpas.slice(0, MAX_ROWS).map(item => ({\n label: item.name,\n value: item.maxReplicas ?? item.minReplicas ?? 0,\n detail: item.namespace,\n }))\n : (evidence?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n label: item.name,\n value: item.maxReplicas ?? item.replicas ?? 0,\n detail: item.namespace,\n }));\n return { kind: 'ranking', rows };\n }\n case 'priority': {\n const evidence = result.priority;\n const rows: RankingRow[] = [];\n if (evidence?.kind === 'nopriority') {\n appendMapped(rows, evidence.nopriority, item => ({\n label: item.name,\n value: item.pods,\n detail: item.namespace,\n }));\n } else if (evidence) {\n appendMapped(rows, evidence.ladder, item => ({\n label: item.name,\n value: item.value,\n detail: `${item.pods} pods`,\n }));\n appendMapped(rows, evidence.classes, item => ({\n label: item.name,\n value: item.value,\n detail: `${item.pods} pods`,\n }));\n }\n return { kind: 'ranking', rows };\n }\n case 'alertnoise':\n return {\n kind: 'ranking',\n rows: (result.alertNoise?.monitors ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n label: item.name,\n value: item.fires,\n detail: `${readableLabel(item.noiseKind)} · ${\n item.recovers\n } recoveries`,\n })),\n };\n case 'alerts': {\n const evidence = result.alerts;\n const rows: RankingRow[] = evidence\n ? evidence.firing.length > 0\n ? evidence.firing.slice(0, MAX_ROWS).map(item => ({\n label: item.monitor,\n value: 1,\n detail: [item.state, item.service, item.workload]\n .filter(Boolean)\n .join(' · '),\n }))\n : evidence.byState.slice(0, MAX_ROWS).map(item => ({\n label: item.state,\n value: item.count,\n }))\n : [];\n return { kind: 'ranking', rows };\n }\n\n case 'resolve': {\n const candidates = result.resolve?.candidates ?? [];\n return candidates.length > 1\n ? {\n kind: 'candidates',\n candidates: candidates.slice(0, MAX_ROWS),\n }\n : summaryPresentation([\n { label: 'Candidates', value: candidates.length },\n ]);\n }\n case 'externaldep': {\n const evidence = result.externalDep;\n return summaryPresentation([\n { label: 'Ranked dependencies', value: evidence?.ranking.length ?? 0 },\n { label: 'Affected services', value: evidence?.target?.services ?? 0 },\n ]);\n }\n case 'provenance': {\n const evidence = result.provenance;\n return summaryPresentation([\n { label: 'Provenance paths', value: evidence?.total ?? 0 },\n { label: 'Releases', value: evidence?.items.length ?? 0 },\n ]);\n }\n case 'ownership': {\n const evidence = result.ownership;\n return summaryPresentation([\n { label: 'Owners', value: evidence?.total ?? 0 },\n {\n label: 'People',\n value:\n evidence?.items.reduce(\n (total, item) => total + item.people.length,\n 0,\n ) ?? 0,\n },\n ]);\n }\n case 'access': {\n const evidence = result.access;\n return summaryPresentation([\n {\n label: 'Service accounts',\n value: evidence?.serviceAccounts.length ?? 0,\n },\n { label: 'Roles', value: evidence?.roles.length ?? 0 },\n { label: 'Subjects', value: evidence?.subjects.length ?? 0 },\n {\n label: 'Privileged subjects',\n value: evidence?.privileged.length ?? 0,\n },\n ]);\n }\n case 'exposure': {\n const evidence = result.exposure;\n return summaryPresentation([\n { label: 'Services', value: evidence?.services.length ?? 0 },\n { label: 'Ingresses', value: evidence?.ingresses.length ?? 0 },\n ]);\n }\n case 'tenancy': {\n const evidence = result.tenancy;\n return summaryPresentation([\n { label: 'Nodes', value: evidence?.nodes.length ?? 0 },\n { label: 'Own pods', value: evidence?.ownPods ?? 0 },\n { label: 'Neighbors', value: evidence?.neighbors.length ?? 0 },\n ]);\n }\n case 'sharedconfig': {\n const evidence = result.sharedConfig;\n return summaryPresentation([\n { label: 'Config maps', value: evidence?.configmaps.length ?? 0 },\n { label: 'Own pods', value: evidence?.ownPods ?? 0 },\n { label: 'Sibling workloads', value: evidence?.siblings.length ?? 0 },\n ]);\n }\n case 'alertrules': {\n const evidence = result.alertRules;\n return summaryPresentation([\n { label: 'Coverage gaps', value: evidence?.coverage.length ?? 0 },\n { label: 'Rules', value: evidence?.inventory.length ?? 0 },\n { label: 'Target rules', value: evidence?.target?.rules.length ?? 0 },\n ]);\n }\n default:\n return assertNever(result);\n }\n}\n\nexport const AskResultPresenter = ({\n result,\n effectiveQuestion,\n answeredAt,\n onQuestion,\n}: AskResultPresenterProps) => {\n const presentation = presentAskResult(result);\n const timestamps = evidenceTimes(presentation);\n\n return (\n <Box aria-label=\"Anyshift answer\">\n <Box display=\"flex\" flexWrap=\"wrap\" alignItems=\"center\" gridGap={8}>\n <Chip\n size=\"small\"\n color=\"primary\"\n label={`Intent · ${INTENT_LABELS[result.intent]}`}\n />\n <Typography variant=\"caption\" color=\"textSecondary\" title={answeredAt}>\n Answered just now\n {typeof result.elapsedMs === 'number'\n ? ` · Graph API ${result.elapsedMs} ms`\n : ''}\n </Typography>\n </Box>\n\n <Box mt={2} mb={2}>\n <Typography variant=\"body1\">{result.summary}</Typography>\n </Box>\n\n <Presentation presentation={presentation} onQuestion={onQuestion} />\n\n <Disclosure title=\"How this was interpreted\">\n <Typography variant=\"body2\">{effectiveQuestion}</Typography>\n </Disclosure>\n\n <Disclosure title=\"Supporting evidence and timestamps\">\n <Box component=\"dl\" m={0}>\n {timestamps.map((item, index) => (\n <Box\n key={`${item.label}-${index}`}\n display=\"flex\"\n justifyContent=\"space-between\"\n gridGap={16}\n py={0.5}\n >\n <Typography component=\"dt\" variant=\"body2\">\n {item.label}\n </Typography>\n <Typography\n component=\"dd\"\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ margin: 0 }}\n >\n <EvidenceTimestamp timestamp={item.timestamp} />\n </Typography>\n </Box>\n ))}\n </Box>\n </Disclosure>\n </Box>\n );\n};\n\nconst Presentation = ({\n presentation,\n onQuestion,\n}: {\n presentation: AskPresentation;\n onQuestion?: (question: string) => void;\n}) => {\n switch (presentation.kind) {\n case 'graph':\n return (\n <EvidenceSection title=\"Dependency evidence\">\n <Box display=\"flex\" flexWrap=\"wrap\" gridGap={8} mb={1}>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${presentation.nodes.length} nodes`}\n />\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${presentation.edges.length} ${\n presentation.edges.length === 1 ? 'relation' : 'relations'\n }`}\n />\n </Box>\n {presentation.nodes.length > 0 ? (\n <ArchitectureDiagram\n graph={{\n nodes: presentation.nodes,\n edges: presentation.edges,\n }}\n view=\"context\"\n />\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n case 'timeline':\n return (\n <EvidenceSection title=\"Change timeline\">\n {presentation.items.length > 0 ? (\n <TimelinePresenter\n data={{\n recent: presentation.items.map(item => ({\n id: item.id,\n ts: item.timestamp,\n type: item.type,\n target: item.target,\n namespace: item.namespace,\n summary: item.summary,\n })),\n }}\n showEvidence={false}\n />\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n case 'impact':\n return (\n <EvidenceSection title=\"Impact evidence\">\n {presentation.rows.length > 0 ? (\n <>\n <ImpactPresenter\n data={{\n affected: presentation.rows.map(row => ({ name: row.label })),\n }}\n showEvidence={false}\n summaryMetric={presentation.summary ?? false}\n />\n <EvidenceDetails rows={presentation.rows} />\n </>\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n case 'inventory':\n return (\n <EvidenceSection title=\"Resources\">\n {typeof presentation.total === 'number' && (\n <Typography variant=\"subtitle2\">\n {presentation.total} total\n </Typography>\n )}\n <ResourceTable rows={presentation.rows} />\n </EvidenceSection>\n );\n case 'coverage':\n return (\n <EvidenceSection title=\"Coverage evidence\">\n <CoverageTable rows={presentation.rows} />\n </EvidenceSection>\n );\n case 'ranking':\n return (\n <EvidenceSection title=\"Ranking\">\n <RankingTable rows={presentation.rows} />\n </EvidenceSection>\n );\n case 'candidates':\n return (\n <EvidenceSection title=\"Choose a resource\">\n <Box display=\"flex\" flexWrap=\"wrap\" gridGap={8}>\n {presentation.candidates.map(candidate => {\n const question = questionForCandidate(candidate);\n return (\n <button\n key={candidate.id}\n type=\"button\"\n onClick={() => onQuestion?.(question)}\n style={{\n border: '1px solid currentColor',\n borderRadius: 16,\n background: 'transparent',\n cursor: 'pointer',\n padding: '4px 12px',\n }}\n >\n {candidateLabel(candidate)}\n </button>\n );\n })}\n </Box>\n </EvidenceSection>\n );\n case 'summary':\n return (\n <EvidenceSection title=\"Known counts\">\n {presentation.counts.length > 0 ? (\n <Grid container spacing={2}>\n {presentation.counts.map(metric => (\n <Grid item xs={6} sm={4} key={metric.label}>\n <Typography variant=\"h6\">{metric.value}</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {metric.label}\n </Typography>\n </Grid>\n ))}\n </Grid>\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n default:\n return assertNever(presentation);\n }\n};\n\nconst EvidenceSection = ({\n title,\n children,\n}: {\n title: string;\n children: ReactNode;\n}) => (\n <Box mb={2}>\n <Typography component=\"h3\" variant=\"subtitle1\" gutterBottom>\n {title}\n </Typography>\n {children}\n </Box>\n);\n\nconst Disclosure = ({\n title,\n children,\n}: {\n title: string;\n children: ReactNode;\n}) => (\n <details style={{ marginTop: 12 }}>\n <summary style={{ cursor: 'pointer', fontWeight: 500 }}>{title}</summary>\n <Box mt={1}>{children}</Box>\n </details>\n);\n\nconst EvidenceDetails = ({ rows }: { rows: EvidenceRow[] }) => (\n <Box component=\"ul\" m={0} mt={1} pl={2}>\n {rows.map((row, index) => (\n <li key={`${row.label}-${index}`}>\n <Typography variant=\"body2\">\n {row.label}\n {row.value !== undefined ? ` · ${row.value}` : ''}\n {row.detail ? ` · ${row.detail}` : ''}\n </Typography>\n </li>\n ))}\n </Box>\n);\n\nconst ResourceTable = ({ rows }: { rows: ResourceRow[] }) =>\n rows.length > 0 ? (\n <Table size=\"small\" aria-label=\"Ask resources\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Type</TableCell>\n <TableCell>Namespace / region</TableCell>\n <TableCell>Detail</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={`${row.name}-${index}`}>\n <TableCell>{row.name}</TableCell>\n <TableCell>{row.type || 'Unknown'}</TableCell>\n <TableCell>{row.namespace || 'Unknown'}</TableCell>\n <TableCell>{row.detail || 'Unknown'}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyEvidence />\n );\n\nconst CoverageTable = ({ rows }: { rows: CoverageRow[] }) =>\n rows.length > 0 ? (\n <Table size=\"small\" aria-label=\"Ask coverage evidence\">\n <TableHead>\n <TableRow>\n <TableCell>Resource</TableCell>\n <TableCell>Status</TableCell>\n <TableCell>Evidence</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={`${row.name}-${index}`}>\n <TableCell>\n {row.name}\n {row.namespace ? ` · ${row.namespace}` : ''}\n </TableCell>\n <TableCell>{readableLabel(row.status)}</TableCell>\n <TableCell>{row.detail || 'Unknown'}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyEvidence />\n );\n\nconst RankingTable = ({ rows }: { rows: RankingRow[] }) =>\n rows.length > 0 ? (\n <Table size=\"small\" aria-label=\"Ask ranking\">\n <TableHead>\n <TableRow>\n <TableCell>Resource</TableCell>\n <TableCell align=\"right\">Count</TableCell>\n <TableCell>Detail</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={`${row.label}-${index}`}>\n <TableCell>{row.label}</TableCell>\n <TableCell align=\"right\">{row.value}</TableCell>\n <TableCell>{row.detail || 'Unknown'}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyEvidence />\n );\n\nconst EmptyEvidence = () => (\n <Typography variant=\"body2\" color=\"textSecondary\">\n The connected graph does not currently contain enough typed evidence.\n </Typography>\n);\n\nconst EvidenceTimestamp = ({ timestamp }: { timestamp?: string | null }) => {\n if (!timestamp) return <>Unknown</>;\n const parsed = Date.parse(timestamp);\n return Number.isNaN(parsed) ? (\n <>Unknown</>\n ) : (\n <time dateTime={timestamp}>{new Date(parsed).toLocaleString()}</time>\n );\n};\n\nfunction graphPresentation(\n nodes: AskResult['nodes'],\n edges: AskResult['edges'],\n fallback: { nodes: GraphNodes; edges: GraphEdges },\n): AskPresentation {\n const selectedNodes = (nodes?.length ? nodes : fallback.nodes).slice(\n 0,\n MAX_GRAPH_NODES,\n );\n const visibleIds = new Set(selectedNodes.map(node => node.id));\n const edgeSource = nodes?.length ? edges ?? [] : fallback.edges;\n const selectedEdges: GraphEdges = [];\n for (\n let index = 0;\n index < edgeSource.length &&\n index < MAX_GRAPH_EDGE_SCAN &&\n selectedEdges.length < MAX_GRAPH_EDGES;\n index += 1\n ) {\n const edge = edgeSource[index];\n if (visibleIds.has(edge.from) && visibleIds.has(edge.to)) {\n selectedEdges.push(edge);\n }\n }\n return { kind: 'graph', nodes: selectedNodes, edges: selectedEdges };\n}\n\nfunction graphFromBlast(result: AskResultFor<'blast'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const root = result.resolved\n ? graphNode(\n result.resolved.name,\n result.resolved.type ?? 'resource',\n null,\n result.resolved.hashedID,\n )\n : undefined;\n const dependencies: GraphNodes = [];\n if (result.blastRadius) {\n appendMapped(dependencies, result.blastRadius.workloads, item =>\n graphNode(item.name, 'workload', item.namespace),\n );\n appendMapped(dependencies, result.blastRadius.services, item =>\n graphNode(item.name, 'service', item.namespace),\n );\n }\n return {\n nodes: root ? [root, ...dependencies] : dependencies,\n edges: root\n ? dependencies.map(item => graphEdge(root.id, item.id, 'AFFECTS'))\n : [],\n };\n}\n\nfunction graphFromSpof(result: AskResultFor<'spof'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n return {\n nodes: (result.spof?.items ?? [])\n .slice(0, MAX_ROWS)\n .map(item =>\n graphNode(item.name, result.spof?.kind ?? 'resource', item.namespace),\n ),\n edges: [],\n };\n}\n\nfunction graphFromPath(result: AskResultFor<'path'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const nodes = (result.path?.chain ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.name, item.type ?? 'resource', item.namespace));\n return {\n nodes,\n edges: nodes\n .slice(1)\n .map((node, index) =>\n graphEdge(\n nodes[index].id,\n node.id,\n result.path?.rels[index] ?? 'DEPENDS_ON',\n ),\n ),\n };\n}\n\nfunction graphFromCascade(result: AskResultFor<'cascade'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const rootValue = result.cascade?.root;\n const root = rootValue?.target\n ? graphNode(\n rootValue.target,\n rootValue.kind ?? 'event target',\n rootValue.namespace,\n )\n : undefined;\n const steps = (result.cascade?.steps ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.resource, 'affected resource', item.namespace));\n return {\n nodes: root ? [root, ...steps] : steps,\n edges: root\n ? steps.map(item => graphEdge(root.id, item.id, 'PROPAGATED_TO'))\n : [],\n };\n}\n\nfunction graphFromServiceTree(result: AskResultFor<'servicetree'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const target = result.serviceTree?.target;\n if (!target) {\n return {\n nodes: (result.serviceTree?.ranking ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n ...graphNode(item.name, 'service footprint', null),\n image: `${item.footprint} resources · ${item.serviceCount} services · ${item.leafCount} leaves`,\n })),\n edges: [],\n };\n }\n const root = graphNode(target.name, 'service', null);\n const dependencies: GraphNodes = [];\n appendMapped(dependencies, target.services, name =>\n graphNode(name, 'service', null),\n );\n appendMapped(dependencies, target.datastores, name =>\n graphNode(name, 'datastore', null),\n );\n appendMapped(dependencies, target.externals, name =>\n graphNode(name, 'external', null),\n );\n return {\n nodes: [root, ...dependencies],\n edges: dependencies.map(item => graphEdge(root.id, item.id, 'DEPENDS_ON')),\n };\n}\n\nfunction graphFromCalls(result: AskResultFor<'calls'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const target = result.calls?.target;\n if (!target) {\n return {\n nodes: (result.calls?.ranking ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.name, 'service', null)),\n edges: [],\n };\n }\n const root = graphNode(target.name, 'service', null);\n const callers = target.callers\n .slice(0, MAX_ROWS)\n .map(name => graphNode(name, 'service', null));\n const callees = target.callees\n .slice(0, Math.max(0, MAX_ROWS - callers.length))\n .map(name => graphNode(name, 'service', null));\n return {\n nodes: [root, ...callers, ...callees],\n edges: [\n ...callers.map(item => graphEdge(item.id, root.id, 'CALLS')),\n ...callees.map(item => graphEdge(root.id, item.id, 'CALLS')),\n ],\n };\n}\n\nfunction graphFromFlow(result: AskResultFor<'flow'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const target = result.flow?.target;\n if (!target) {\n return {\n nodes: (result.flow?.ranking ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.name, 'stream', null)),\n edges: [],\n };\n }\n const root = graphNode(target.name, 'stream', null);\n const producers = target.producers\n .slice(0, MAX_ROWS)\n .map(name => graphNode(name, 'service', null));\n const consumers = target.consumers\n .slice(0, Math.max(0, MAX_ROWS - producers.length))\n .map(name => graphNode(name, 'service', null));\n return {\n nodes: [root, ...producers, ...consumers],\n edges: [\n ...producers.map(item => graphEdge(item.id, root.id, 'PRODUCES')),\n ...consumers.map(item => graphEdge(root.id, item.id, 'CONSUMED_BY')),\n ],\n };\n}\n\nfunction graphNode(\n name: string,\n type: string,\n namespace: string | null,\n id = `${type}:${namespace ?? '_'}:${name}`,\n): GraphNodes[number] {\n return { id, anyshiftID: null, name, type, namespace };\n}\n\nfunction graphEdge(from: string, to: string, type: string): GraphEdges[number] {\n return {\n from,\n to,\n type,\n direction: 'downstream',\n semantic: 'dependency',\n impact: true,\n };\n}\n\nfunction timelineFromEvents(\n events: Array<{\n ts: string;\n type: string;\n summary: string | null;\n target: string | null;\n namespace: string | null;\n }>,\n): TimelineItem[] {\n return events.slice(0, MAX_ROWS).map((item, index) => ({\n id: `${item.ts}-${item.type}-${index}`,\n type: item.type,\n timestamp: item.ts,\n target: item.target,\n namespace: item.namespace,\n summary: item.summary,\n }));\n}\n\nfunction deploymentSummary(\n images: Array<{ from: string | null; to: string | null }>,\n): string | undefined {\n const visibleImages = images.slice(0, MAX_DETAIL_ITEMS);\n const changes = visibleImages.flatMap(image => {\n if (image.from && image.to) return [`${image.from} → ${image.to}`];\n if (image.to) return [`Deployed ${image.to}`];\n return [];\n });\n if (changes.length === 0) return undefined;\n const remaining = images.length - visibleImages.length;\n const suffix =\n remaining > 0\n ? ` · ${remaining} more image ${remaining === 1 ? 'change' : 'changes'}`\n : '';\n return `${changes.join(', ')}${suffix}`;\n}\n\nfunction eventEvidenceRow(item: {\n ts: string;\n type: string;\n summary: string | null;\n target: string | null;\n namespace: string | null;\n}): EvidenceRow {\n return {\n label: item.target ?? readableLabel(item.type),\n value: readableLabel(item.type),\n detail: item.summary ?? item.namespace,\n timestamp: item.ts,\n };\n}\n\nfunction causeRow(\n item: { name: string; namespace: string | null; affected: number },\n kind: string,\n): EvidenceRow {\n return {\n label: item.name,\n value: `${item.affected} affected`,\n detail: item.namespace ? `${kind} · ${item.namespace}` : kind,\n };\n}\n\nfunction appendMapped<T, U>(\n target: U[],\n source: readonly T[],\n mapper: (item: T) => U,\n limit = MAX_ROWS,\n): void {\n const remaining = Math.max(0, limit - target.length);\n if (remaining === 0) return;\n target.push(...source.slice(0, remaining).map(mapper));\n}\n\nfunction boundedJoinedList(items: readonly string[]): string {\n const visible = items.slice(0, MAX_DETAIL_ITEMS);\n const remaining = items.length - visible.length;\n return `${visible.join(', ')}${remaining > 0 ? `, +${remaining} more` : ''}`;\n}\n\nfunction summaryPresentation(counts: SummaryMetric[]): AskPresentation {\n return { kind: 'summary', counts, timestamps: [] };\n}\n\nfunction evidenceTimes(presentation: AskPresentation): EvidenceTime[] {\n let timestamps: EvidenceTime[];\n switch (presentation.kind) {\n case 'graph':\n timestamps = [{ label: 'Graph evidence', timestamp: null }];\n break;\n case 'timeline':\n timestamps = presentation.items.map(item => ({\n label: item.target ?? item.type,\n timestamp: item.timestamp,\n }));\n break;\n case 'impact':\n timestamps = presentation.rows.map(row => ({\n label: row.label,\n timestamp: row.timestamp,\n }));\n break;\n case 'inventory':\n timestamps = presentation.rows.map(row => ({\n label: row.name,\n timestamp: row.timestamp,\n }));\n break;\n case 'coverage':\n timestamps = presentation.rows.map(row => ({\n label: row.name,\n timestamp: row.timestamp,\n }));\n break;\n case 'ranking':\n timestamps = presentation.rows.map(row => ({\n label: row.label,\n timestamp: row.timestamp,\n }));\n break;\n case 'candidates':\n timestamps = [{ label: 'Resolution evidence', timestamp: null }];\n break;\n case 'summary':\n timestamps = presentation.timestamps;\n break;\n default:\n return assertNever(presentation);\n }\n return timestamps.length > 0\n ? timestamps.slice(0, MAX_ROWS)\n : [{ label: 'Evidence timestamp', timestamp: null }];\n}\n\nfunction candidateLabel(candidate: ResolveCandidate): string {\n return [\n candidate.name,\n candidate.type ? readableLabel(candidate.type) : 'type unknown',\n candidate.namespace ?? 'namespace unknown',\n ].join(' · ');\n}\n\nfunction questionForCandidate(candidate: ResolveCandidate): string {\n const type = candidate.type?.trim().toLocaleLowerCase();\n const typedName = type ? `${type} ${candidate.name}` : candidate.name;\n const namespace = candidate.namespace\n ? ` in namespace ${candidate.namespace}`\n : '';\n return `What depends on ${typedName}${namespace}?`;\n}\n\nfunction readableLabel(value: string): string {\n const normalized = value.replace(/[_-]+/g, ' ');\n return normalized.charAt(0).toLocaleUpperCase() + normalized.slice(1);\n}\n\nfunction assertNever(value: never): never {\n throw new Error(\n `Unsupported Ask presentation discriminant: ${String(value)}`,\n );\n}\n\nconst INTENT_LABELS: Record<AskResult['intent'], string> = {\n resolve: 'Resolve',\n connections: 'Connections',\n inventory: 'Inventory',\n events: 'Events',\n cloudevents: 'Cloud events',\n cloudresources: 'Cloud resources',\n deliveryevents: 'Delivery events',\n provenance: 'Provenance',\n ownership: 'Ownership',\n graphcoverage: 'Graph coverage',\n hotspots: 'Hotspots',\n incident: 'Incident',\n failures: 'Failures',\n deployments: 'Deployments',\n audit: 'Audit',\n nodes: 'Node events',\n deployimpact: 'Deployment impact',\n commoncause: 'Common cause',\n blast: 'Blast radius',\n impact: 'Impact',\n spof: 'Single points of failure',\n path: 'Dependency path',\n cascade: 'Cascade',\n alertimpact: 'Alert impact',\n monitor: 'Monitor',\n datastore: 'Datastore',\n flow: 'Flow',\n externaldep: 'External dependency',\n alerts: 'Alerts',\n alertnoise: 'Alert noise',\n calls: 'Service calls',\n servicetree: 'Service tree',\n alertcause: 'Alert cause',\n access: 'Access',\n exposure: 'Exposure',\n orphans: 'Orphans',\n coverage: 'Coverage',\n slo: 'SLO',\n tenancy: 'Tenancy',\n sharedconfig: 'Shared configuration',\n alertrules: 'Alert rules',\n gitops: 'GitOps',\n image: 'Images',\n netpol: 'Network policy',\n storage: 'Storage',\n pdb: 'Pod disruption budget',\n scaling: 'Scaling',\n topology: 'Topology',\n priority: 'Priority',\n iac: 'Infrastructure as code',\n iacdrift: 'Infrastructure drift',\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"askPresenters.esm.js","sources":["../../../src/components/ask/askPresenters.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@material-ui/core';\nimport type { ReactNode } from 'react';\nimport type {\n AskResult,\n BackstageAskResult,\n NormalizedAlertsAskResult,\n} from '@anyshift/backstage-plugin-anyshift-common';\nimport {\n ImpactPresenter,\n TimelinePresenter,\n} from '../entity/SectionPresenters';\nimport { ArchitectureDiagram } from '../entity/MermaidArchitecture';\n\nconst MAX_ROWS = 10;\nconst MAX_GRAPH_NODES = 30;\nconst MAX_GRAPH_EDGES = 50;\nconst MAX_GRAPH_EDGE_SCAN = 200;\nconst MAX_DETAIL_ITEMS = 3;\n\ntype GraphNodes = NonNullable<AskResult['nodes']>;\ntype GraphEdges = NonNullable<AskResult['edges']>;\ntype AskResultFor<I extends AskResult['intent']> = Extract<\n AskResult,\n { intent: I }\n>;\ntype ResolveResult = Extract<AskResult, { intent: 'resolve' }>['resolve'];\n\nexport type ResolveCandidate = NonNullable<ResolveResult>['candidates'][number];\n\nexport interface TimelineItem {\n id: string;\n type: string;\n timestamp?: string | null;\n target?: string | null;\n namespace?: string | null;\n summary?: string | null;\n}\n\nexport interface EvidenceRow {\n label: string;\n value?: string | number;\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface ImpactSummaryMetric {\n label: string;\n total: number;\n}\n\nexport interface ResourceRow {\n name: string;\n namespace?: string | null;\n type?: string | null;\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface CoverageRow {\n name: string;\n namespace?: string | null;\n status: 'covered' | 'gap' | 'unknown';\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface RankingRow {\n label: string;\n value: number;\n detail?: string | null;\n timestamp?: string | null;\n}\n\nexport interface SummaryMetric {\n label: string;\n value: string | number;\n}\n\nexport interface EvidenceTime {\n label: string;\n timestamp?: string | null;\n}\n\ninterface AlertEvidencePresentation {\n partial: boolean;\n coverage: string[];\n warnings: string[];\n}\n\nexport type AskPresentation =\n | { kind: 'graph'; nodes: GraphNodes; edges: GraphEdges }\n | { kind: 'timeline'; items: TimelineItem[] }\n | { kind: 'impact'; rows: EvidenceRow[]; summary?: ImpactSummaryMetric }\n | { kind: 'inventory'; rows: ResourceRow[]; total?: number }\n | { kind: 'coverage'; rows: CoverageRow[] }\n | {\n kind: 'ranking';\n rows: RankingRow[];\n alertEvidence?: AlertEvidencePresentation;\n }\n | { kind: 'candidates'; candidates: ResolveCandidate[] }\n | { kind: 'summary'; counts: SummaryMetric[]; timestamps: EvidenceTime[] };\n\nexport interface AskResultPresenterProps {\n result: BackstageAskResult;\n effectiveQuestion: string;\n answeredAt: string;\n onQuestion?: (question: string) => void;\n}\n\nexport function presentAskResult(result: BackstageAskResult): AskPresentation {\n switch (result.intent) {\n case 'connections':\n case 'topology':\n return graphPresentation(result.nodes, result.edges, {\n nodes: [],\n edges: [],\n });\n case 'blast':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromBlast(result),\n );\n case 'spof':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromSpof(result),\n );\n case 'path':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromPath(result),\n );\n case 'cascade':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromCascade(result),\n );\n case 'servicetree':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromServiceTree(result),\n );\n case 'calls':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromCalls(result),\n );\n case 'flow':\n return graphPresentation(\n result.nodes,\n result.edges,\n graphFromFlow(result),\n );\n\n case 'events':\n return {\n kind: 'timeline',\n items: timelineFromEvents(result.events?.recent ?? []),\n };\n case 'deployments':\n return {\n kind: 'timeline',\n items: (result.deployments?.recent ?? [])\n .slice(0, MAX_ROWS)\n .map((item, index) => ({\n id: `${item.ts}-${index}`,\n type: 'Deployment',\n timestamp: item.ts,\n target: item.target,\n namespace: item.namespace,\n summary: deploymentSummary(item.images),\n })),\n };\n case 'cloudevents':\n return {\n kind: 'timeline',\n items: (result.cloudEvents?.items ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n id: item.id,\n type: item.type,\n timestamp: item.timestamp,\n target: item.target.name ?? item.target.id,\n summary: item.summary,\n })),\n };\n case 'deliveryevents':\n return {\n kind: 'timeline',\n items: (result.deliveryEvents?.items ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n id: item.id,\n type: item.type,\n timestamp: item.timestamp,\n target: item.target.name ?? item.target.id,\n summary: item.summary,\n })),\n };\n case 'audit':\n return {\n kind: 'timeline',\n items: timelineFromEvents(result.audit?.recent ?? []),\n };\n case 'nodes':\n return {\n kind: 'timeline',\n items: timelineFromEvents(result.nodeEvents?.recent ?? []),\n };\n\n case 'impact':\n return {\n kind: 'impact',\n summary: result.impact\n ? { label: 'Affected resources', total: result.impact.total }\n : undefined,\n rows: (result.impact?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n label: item.name ?? item.id ?? item.hashedID,\n value: `${item.pathCount} ${item.pathCount === 1 ? 'path' : 'paths'}`,\n detail: [\n item.kind ? readableLabel(item.kind) : undefined,\n `depth ${item.depth}`,\n ]\n .filter(Boolean)\n .join(' · '),\n })),\n };\n case 'alertimpact': {\n const evidence = result.alertImpact;\n const rows: EvidenceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.monitors, item => ({\n label: item.name,\n value: 'Monitor',\n detail: item.service,\n }));\n appendMapped(rows, evidence.slos, item => ({\n label: item.name,\n value: 'SLO',\n detail: item.service,\n }));\n }\n return {\n kind: 'impact',\n summary: evidence\n ? {\n label: 'Affected resources',\n total: evidence.workloads + evidence.services,\n }\n : undefined,\n rows,\n };\n }\n case 'deployimpact': {\n const evidence = result.deployImpact;\n const rows = evidence\n ? evidence.recent.length > 0\n ? evidence.recent\n .slice(0, MAX_ROWS)\n .map(item => eventEvidenceRow(item))\n : evidence.ranking.slice(0, MAX_ROWS).map(item => ({\n label: item.deployed,\n value: `${item.fallout} correlated failures`,\n detail: `${item.rollouts} rollouts`,\n }))\n : [];\n return { kind: 'impact', rows };\n }\n case 'incident': {\n const evidence = result.incident;\n const events = evidence\n ? evidence.rootCauses.length > 0\n ? evidence.rootCauses\n : evidence.chain\n : [];\n return {\n kind: 'impact',\n rows: events.slice(0, MAX_ROWS).map(item => eventEvidenceRow(item)),\n };\n }\n case 'failures':\n return {\n kind: 'impact',\n rows: (result.failures?.recent ?? [])\n .slice(0, MAX_ROWS)\n .map(item => eventEvidenceRow(item)),\n };\n case 'commoncause': {\n const evidence = result.commonCause;\n const rows: EvidenceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.byNode, item => causeRow(item, 'Node'));\n appendMapped(rows, evidence.byWorkload, item =>\n causeRow(item, 'Workload'),\n );\n appendMapped(rows, evidence.byDatastore, item =>\n causeRow(item, 'Datastore'),\n );\n appendMapped(rows, evidence.byExternal, item =>\n causeRow(item, 'External'),\n );\n }\n return { kind: 'impact', rows };\n }\n case 'alertcause':\n return {\n kind: 'impact',\n rows: (result.alertCause?.changes ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n label: item.target ?? result.alertCause?.workload ?? 'Change',\n value: item.type,\n detail: item.summary,\n timestamp: item.ts,\n })),\n };\n\n case 'inventory': {\n const evidence = result.inventory;\n return {\n kind: 'inventory',\n total: evidence?.total,\n rows: (evidence?.sample ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n type: evidence?.type,\n detail: item.resourceId ?? item.externalId,\n })),\n };\n }\n case 'cloudresources': {\n const evidence = result.cloudResources;\n return {\n kind: 'inventory',\n total: evidence?.counts.total,\n rows: (evidence?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name ?? item.id ?? item.hashedID,\n namespace: item.region ?? item.scope,\n type: item.kind ?? `${item.provider} resource`,\n detail: `${readableLabel(item.freshness)} · ${readableLabel(\n item.provenance.status,\n )}`,\n timestamp: item.observedAt,\n })),\n };\n }\n case 'storage': {\n const evidence = result.storage;\n const rows: ResourceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.claims, item => ({\n name: item.pvc,\n namespace: item.pvcNamespace,\n type: 'Persistent volume claim',\n detail: item.storageClass,\n }));\n appendMapped(rows, evidence.orphanPvs, item => ({\n name: item.name,\n type: 'Orphan persistent volume',\n detail: item.storageClass,\n }));\n appendMapped(rows, evidence.unclaimedPvcs, item => ({\n name: item.name,\n namespace: item.namespace,\n type: 'Unclaimed persistent volume claim',\n detail: item.storageClass,\n }));\n appendMapped(rows, evidence.classes, item => ({\n name: item.name,\n type: 'Storage class',\n detail: `${item.pvs} PVs · ${item.pvcs} PVCs`,\n }));\n }\n return {\n kind: 'inventory',\n total: evidence\n ? evidence.claims.length +\n evidence.orphanPvs.length +\n evidence.unclaimedPvcs.length +\n evidence.classes.length\n : 0,\n rows,\n };\n }\n case 'image': {\n const evidence = result.image;\n const rows: ResourceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.ranking, item => ({\n name: item.image,\n type: 'Container image',\n detail: `${item.containers} containers · ${item.pods} pods`,\n }));\n appendMapped(rows, evidence.byImage?.workloads ?? [], item => ({\n name: item.name,\n namespace: item.namespace,\n type: item.kind ?? 'Workload',\n }));\n appendMapped(rows, evidence.workload?.containers ?? [], item => ({\n name: item.image,\n type: item.isInit ? 'Init container' : 'Container',\n detail: item.name,\n }));\n appendMapped(rows, evidence.hygiene?.items ?? [], item => ({\n name: item.workload,\n namespace: item.namespace,\n type: evidence.hygiene?.kind,\n detail: item.image,\n }));\n }\n return {\n kind: 'inventory',\n total: evidence\n ? evidence.ranking.length +\n (evidence.byImage?.workloads.length ?? 0) +\n (evidence.workload?.containers.length ?? 0) +\n (evidence.hygiene?.items.length ?? 0)\n : 0,\n rows,\n };\n }\n case 'datastore': {\n const evidence = result.dataStore;\n const rows = evidence?.target\n ? [\n {\n name: evidence.target.name,\n type: 'Datastore',\n detail: `${evidence.target.services} services`,\n },\n ]\n : (evidence?.ranking ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n type: 'Datastore',\n detail: `${item.services} services`,\n }));\n return {\n kind: 'inventory',\n total: evidence?.target ? 1 : evidence?.ranking.length ?? 0,\n rows,\n };\n }\n case 'monitor': {\n const evidence = result.monitor;\n const rows: ResourceRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.monitors, name => ({\n name,\n type: 'Monitor',\n }));\n appendMapped(rows, evidence.slos, name => ({ name, type: 'SLO' }));\n appendMapped(rows, evidence.workloads, item => ({\n name: item.name,\n namespace: item.namespace,\n type: item.type ?? 'Workload',\n }));\n }\n return {\n kind: 'inventory',\n total: evidence\n ? evidence.monitors.length +\n evidence.slos.length +\n evidence.workloads.length\n : 0,\n rows,\n };\n }\n case 'slo': {\n const evidence = result.slo;\n const rows = evidence?.target\n ? [\n {\n name: evidence.target.name,\n type: 'SLO',\n detail: evidence.target.status,\n },\n ]\n : (evidence?.ranking ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n type: 'SLO',\n detail: item.status,\n }));\n return {\n kind: 'inventory',\n total: evidence?.target ? 1 : evidence?.ranking.length ?? 0,\n rows,\n };\n }\n\n case 'coverage':\n return {\n kind: 'coverage',\n rows: (result.coverage?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap',\n detail: item.kind,\n })),\n };\n case 'graphcoverage':\n return {\n kind: 'coverage',\n rows: (result.graphCoverage?.sources ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n name: readableLabel(item.source),\n status: item.status === 'observed' ? 'covered' : 'gap',\n detail: `${item.nodes} nodes · ${item.relationships} relationships · ${item.events} events`,\n })),\n };\n case 'orphans':\n return {\n kind: 'coverage',\n rows: (result.orphans?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap',\n detail: result.orphans?.kind,\n })),\n };\n case 'netpol': {\n const evidence = result.netpol;\n const rows: CoverageRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.uncovered, item => ({\n name: item.namespace,\n status: 'gap' as const,\n detail: `${item.pods} pods`,\n }));\n appendMapped(rows, evidence.policies, item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'covered' as const,\n detail: boundedJoinedList(item.policyTypes),\n }));\n appendMapped(rows, evidence.reachers, item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'unknown' as const,\n detail: item.type,\n }));\n }\n return { kind: 'coverage', rows };\n }\n case 'pdb':\n return {\n kind: 'coverage',\n rows: (result.pdb?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap',\n detail: item.kind,\n })),\n };\n case 'gitops': {\n const evidence = result.gitops;\n const rows: CoverageRow[] = [];\n if (evidence) {\n appendMapped(rows, evidence.drift, item => ({\n name: item.name,\n status:\n item.syncStatus === 'Synced'\n ? 'covered'\n : item.syncStatus\n ? 'gap'\n : ('unknown' as CoverageRow['status']),\n detail: item.syncStatus ?? item.healthStatus,\n }));\n appendMapped(rows, evidence.unmanaged, item => ({\n name: item.name,\n namespace: item.namespace,\n status: 'gap' as const,\n detail: item.kind,\n }));\n if (evidence.owner) {\n appendMapped(rows, [evidence.owner], owner => ({\n name: owner.workload,\n namespace: owner.namespace,\n status: (owner.application\n ? 'covered'\n : 'unknown') as CoverageRow['status'],\n detail: owner.application,\n }));\n }\n }\n return { kind: 'coverage', rows };\n }\n case 'iac':\n return {\n kind: 'coverage',\n rows: (result.iac?.resources ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.terraform.address,\n status:\n item.status === 'managed'\n ? 'covered'\n : item.status === 'ambiguous' || item.status === 'stale'\n ? 'unknown'\n : 'gap',\n detail: readableLabel(item.status),\n timestamp:\n item.directClouds[0]?.observedAt ??\n item.clouds[0]?.observedAt ??\n null,\n })),\n };\n case 'iacdrift':\n return {\n kind: 'coverage',\n rows: (result.iacDrift?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n name: item.terraform.address,\n status:\n item.status === 'in_sync'\n ? 'covered'\n : item.status === 'drifted'\n ? 'gap'\n : 'unknown',\n detail: readableLabel(item.reason),\n timestamp: item.cloud?.observedAt,\n })),\n };\n\n case 'hotspots':\n return {\n kind: 'ranking',\n rows: (result.hotspots?.ranking ?? []).slice(0, MAX_ROWS).map(item => ({\n label: item.key,\n value: item.total,\n detail: item.namespace,\n })),\n };\n case 'scaling': {\n const evidence = result.scaling;\n const rows: RankingRow[] = evidence?.target\n ? evidence.target.hpas.slice(0, MAX_ROWS).map(item => ({\n label: item.name,\n value: item.maxReplicas ?? item.minReplicas ?? 0,\n detail: item.namespace,\n }))\n : (evidence?.items ?? []).slice(0, MAX_ROWS).map(item => ({\n label: item.name,\n value: item.maxReplicas ?? item.replicas ?? 0,\n detail: item.namespace,\n }));\n return { kind: 'ranking', rows };\n }\n case 'priority': {\n const evidence = result.priority;\n const rows: RankingRow[] = [];\n if (evidence?.kind === 'nopriority') {\n appendMapped(rows, evidence.nopriority, item => ({\n label: item.name,\n value: item.pods,\n detail: item.namespace,\n }));\n } else if (evidence) {\n appendMapped(rows, evidence.ladder, item => ({\n label: item.name,\n value: item.value,\n detail: `${item.pods} pods`,\n }));\n appendMapped(rows, evidence.classes, item => ({\n label: item.name,\n value: item.value,\n detail: `${item.pods} pods`,\n }));\n }\n return { kind: 'ranking', rows };\n }\n case 'alertnoise':\n return {\n kind: 'ranking',\n rows: (result.alertNoise?.monitors ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n label: item.name,\n value: item.fires,\n detail: `${readableLabel(item.noiseKind)} · ${\n item.recovers\n } recoveries`,\n })),\n };\n case 'alerts': {\n const rows: RankingRow[] = isNormalizedAlertsAskResult(result)\n ? result.alerts.items\n .filter(item => item.status === 'firing')\n .slice(0, MAX_ROWS)\n .map(item => ({\n label: item.title,\n value: 1,\n detail: [\n readableLabel(item.provider),\n readableLabel(item.severity),\n item.providerStatus,\n item.service?.name,\n ]\n .filter(Boolean)\n .join(' · '),\n timestamp: item.observedAt ?? item.updatedAt,\n }))\n : [];\n return {\n kind: 'ranking',\n rows,\n ...(isNormalizedAlertsAskResult(result)\n ? { alertEvidence: alertEvidencePresentation(result) }\n : {}),\n };\n }\n\n case 'resolve': {\n const candidates = result.resolve?.candidates ?? [];\n return candidates.length > 1\n ? {\n kind: 'candidates',\n candidates: candidates.slice(0, MAX_ROWS),\n }\n : summaryPresentation([\n { label: 'Candidates', value: candidates.length },\n ]);\n }\n case 'externaldep': {\n const evidence = result.externalDep;\n return summaryPresentation([\n { label: 'Ranked dependencies', value: evidence?.ranking.length ?? 0 },\n { label: 'Affected services', value: evidence?.target?.services ?? 0 },\n ]);\n }\n case 'provenance': {\n const evidence = result.provenance;\n return summaryPresentation([\n { label: 'Provenance paths', value: evidence?.total ?? 0 },\n { label: 'Releases', value: evidence?.items.length ?? 0 },\n ]);\n }\n case 'ownership': {\n const evidence = result.ownership;\n return summaryPresentation([\n { label: 'Owners', value: evidence?.total ?? 0 },\n {\n label: 'People',\n value:\n evidence?.items.reduce(\n (total, item) => total + item.people.length,\n 0,\n ) ?? 0,\n },\n ]);\n }\n case 'access': {\n const evidence = result.access;\n return summaryPresentation([\n {\n label: 'Service accounts',\n value: evidence?.serviceAccounts.length ?? 0,\n },\n { label: 'Roles', value: evidence?.roles.length ?? 0 },\n { label: 'Subjects', value: evidence?.subjects.length ?? 0 },\n {\n label: 'Privileged subjects',\n value: evidence?.privileged.length ?? 0,\n },\n ]);\n }\n case 'exposure': {\n const evidence = result.exposure;\n return summaryPresentation([\n { label: 'Services', value: evidence?.services.length ?? 0 },\n { label: 'Ingresses', value: evidence?.ingresses.length ?? 0 },\n ]);\n }\n case 'tenancy': {\n const evidence = result.tenancy;\n return summaryPresentation([\n { label: 'Nodes', value: evidence?.nodes.length ?? 0 },\n { label: 'Own pods', value: evidence?.ownPods ?? 0 },\n { label: 'Neighbors', value: evidence?.neighbors.length ?? 0 },\n ]);\n }\n case 'sharedconfig': {\n const evidence = result.sharedConfig;\n return summaryPresentation([\n { label: 'Config maps', value: evidence?.configmaps.length ?? 0 },\n { label: 'Own pods', value: evidence?.ownPods ?? 0 },\n { label: 'Sibling workloads', value: evidence?.siblings.length ?? 0 },\n ]);\n }\n case 'alertrules': {\n const evidence = result.alertRules;\n return summaryPresentation([\n { label: 'Coverage gaps', value: evidence?.coverage.length ?? 0 },\n { label: 'Rules', value: evidence?.inventory.length ?? 0 },\n { label: 'Target rules', value: evidence?.target?.rules.length ?? 0 },\n ]);\n }\n default:\n return assertNever(result);\n }\n}\n\nfunction isNormalizedAlertsAskResult(\n result: BackstageAskResult,\n): result is NormalizedAlertsAskResult {\n return (\n result.intent === 'alerts' &&\n result.alerts !== null &&\n result.alerts !== undefined &&\n 'items' in result.alerts &&\n Array.isArray(result.alerts.items)\n );\n}\n\nfunction alertEvidencePresentation(\n result: NormalizedAlertsAskResult,\n): AlertEvidencePresentation {\n const coverage = result.alerts.providers.flatMap(provider =>\n provider.status === 'available'\n ? []\n : [\n `${readableLabel(provider.provider)} alert coverage is ${\n provider.status\n }.`,\n ],\n );\n const warnings = result.alerts.warnings.map(warning => warning.message);\n return {\n partial: result.alerts.partial,\n coverage,\n warnings,\n };\n}\n\nexport const AskResultPresenter = ({\n result,\n effectiveQuestion,\n answeredAt,\n onQuestion,\n}: AskResultPresenterProps) => {\n const presentation = presentAskResult(result);\n const timestamps = evidenceTimes(presentation);\n\n return (\n <Box aria-label=\"Anyshift answer\">\n <Box display=\"flex\" flexWrap=\"wrap\" alignItems=\"center\" gridGap={8}>\n <Chip\n size=\"small\"\n color=\"primary\"\n label={`Intent · ${INTENT_LABELS[result.intent]}`}\n />\n <Typography variant=\"caption\" color=\"textSecondary\" title={answeredAt}>\n Answered just now\n {typeof result.elapsedMs === 'number'\n ? ` · Graph API ${result.elapsedMs} ms`\n : ''}\n </Typography>\n </Box>\n\n <Box mt={2} mb={2}>\n <Typography variant=\"body1\">{result.summary}</Typography>\n </Box>\n\n <Presentation presentation={presentation} onQuestion={onQuestion} />\n\n <Disclosure title=\"How this was interpreted\">\n <Typography variant=\"body2\">{effectiveQuestion}</Typography>\n </Disclosure>\n\n <Disclosure title=\"Supporting evidence and timestamps\">\n <Box component=\"dl\" m={0}>\n {timestamps.map((item, index) => (\n <Box\n key={`${item.label}-${index}`}\n display=\"flex\"\n justifyContent=\"space-between\"\n gridGap={16}\n py={0.5}\n >\n <Typography component=\"dt\" variant=\"body2\">\n {item.label}\n </Typography>\n <Typography\n component=\"dd\"\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ margin: 0 }}\n >\n <EvidenceTimestamp timestamp={item.timestamp} />\n </Typography>\n </Box>\n ))}\n </Box>\n </Disclosure>\n </Box>\n );\n};\n\nconst Presentation = ({\n presentation,\n onQuestion,\n}: {\n presentation: AskPresentation;\n onQuestion?: (question: string) => void;\n}) => {\n switch (presentation.kind) {\n case 'graph':\n return (\n <EvidenceSection title=\"Dependency evidence\">\n <Box display=\"flex\" flexWrap=\"wrap\" gridGap={8} mb={1}>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${presentation.nodes.length} nodes`}\n />\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${presentation.edges.length} ${\n presentation.edges.length === 1 ? 'relation' : 'relations'\n }`}\n />\n </Box>\n {presentation.nodes.length > 0 ? (\n <ArchitectureDiagram\n graph={{\n nodes: presentation.nodes,\n edges: presentation.edges,\n }}\n view=\"context\"\n />\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n case 'timeline':\n return (\n <EvidenceSection title=\"Change timeline\">\n {presentation.items.length > 0 ? (\n <TimelinePresenter\n data={{\n recent: presentation.items.map(item => ({\n id: item.id,\n ts: item.timestamp,\n type: item.type,\n target: item.target,\n namespace: item.namespace,\n summary: item.summary,\n })),\n }}\n showEvidence={false}\n />\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n case 'impact':\n return (\n <EvidenceSection title=\"Impact evidence\">\n {presentation.rows.length > 0 ? (\n <>\n <ImpactPresenter\n data={{\n affected: presentation.rows.map(row => ({ name: row.label })),\n }}\n showEvidence={false}\n summaryMetric={presentation.summary ?? false}\n />\n <EvidenceDetails rows={presentation.rows} />\n </>\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n case 'inventory':\n return (\n <EvidenceSection title=\"Resources\">\n {typeof presentation.total === 'number' && (\n <Typography variant=\"subtitle2\">\n {presentation.total} total\n </Typography>\n )}\n <ResourceTable rows={presentation.rows} />\n </EvidenceSection>\n );\n case 'coverage':\n return (\n <EvidenceSection title=\"Coverage evidence\">\n <CoverageTable rows={presentation.rows} />\n </EvidenceSection>\n );\n case 'ranking':\n return (\n <EvidenceSection title=\"Ranking\">\n {presentation.alertEvidence && (\n <Box mb={1}>\n {presentation.alertEvidence.partial && (\n <Typography variant=\"body2\" color=\"error\">\n Alert coverage is partial.\n </Typography>\n )}\n {presentation.alertEvidence.coverage.map(message => (\n <Typography key={message} variant=\"body2\" color=\"textSecondary\">\n {message}\n </Typography>\n ))}\n {presentation.alertEvidence.warnings.map(message => (\n <Typography key={message} variant=\"body2\" color=\"textSecondary\">\n {message}\n </Typography>\n ))}\n </Box>\n )}\n <RankingTable rows={presentation.rows} />\n </EvidenceSection>\n );\n case 'candidates':\n return (\n <EvidenceSection title=\"Choose a resource\">\n <Box display=\"flex\" flexWrap=\"wrap\" gridGap={8}>\n {presentation.candidates.map(candidate => {\n const question = questionForCandidate(candidate);\n return (\n <button\n key={candidate.id}\n type=\"button\"\n onClick={() => onQuestion?.(question)}\n style={{\n border: '1px solid currentColor',\n borderRadius: 16,\n background: 'transparent',\n cursor: 'pointer',\n padding: '4px 12px',\n }}\n >\n {candidateLabel(candidate)}\n </button>\n );\n })}\n </Box>\n </EvidenceSection>\n );\n case 'summary':\n return (\n <EvidenceSection title=\"Known counts\">\n {presentation.counts.length > 0 ? (\n <Grid container spacing={2}>\n {presentation.counts.map(metric => (\n <Grid item xs={6} sm={4} key={metric.label}>\n <Typography variant=\"h6\">{metric.value}</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {metric.label}\n </Typography>\n </Grid>\n ))}\n </Grid>\n ) : (\n <EmptyEvidence />\n )}\n </EvidenceSection>\n );\n default:\n return assertNever(presentation);\n }\n};\n\nconst EvidenceSection = ({\n title,\n children,\n}: {\n title: string;\n children: ReactNode;\n}) => (\n <Box mb={2}>\n <Typography component=\"h3\" variant=\"subtitle1\" gutterBottom>\n {title}\n </Typography>\n {children}\n </Box>\n);\n\nconst Disclosure = ({\n title,\n children,\n}: {\n title: string;\n children: ReactNode;\n}) => (\n <details style={{ marginTop: 12 }}>\n <summary style={{ cursor: 'pointer', fontWeight: 500 }}>{title}</summary>\n <Box mt={1}>{children}</Box>\n </details>\n);\n\nconst EvidenceDetails = ({ rows }: { rows: EvidenceRow[] }) => (\n <Box component=\"ul\" m={0} mt={1} pl={2}>\n {rows.map((row, index) => (\n <li key={`${row.label}-${index}`}>\n <Typography variant=\"body2\">\n {row.label}\n {row.value !== undefined ? ` · ${row.value}` : ''}\n {row.detail ? ` · ${row.detail}` : ''}\n </Typography>\n </li>\n ))}\n </Box>\n);\n\nconst ResourceTable = ({ rows }: { rows: ResourceRow[] }) =>\n rows.length > 0 ? (\n <Table size=\"small\" aria-label=\"Ask resources\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Type</TableCell>\n <TableCell>Namespace / region</TableCell>\n <TableCell>Detail</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={`${row.name}-${index}`}>\n <TableCell>{row.name}</TableCell>\n <TableCell>{row.type || 'Unknown'}</TableCell>\n <TableCell>{row.namespace || 'Unknown'}</TableCell>\n <TableCell>{row.detail || 'Unknown'}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyEvidence />\n );\n\nconst CoverageTable = ({ rows }: { rows: CoverageRow[] }) =>\n rows.length > 0 ? (\n <Table size=\"small\" aria-label=\"Ask coverage evidence\">\n <TableHead>\n <TableRow>\n <TableCell>Resource</TableCell>\n <TableCell>Status</TableCell>\n <TableCell>Evidence</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={`${row.name}-${index}`}>\n <TableCell>\n {row.name}\n {row.namespace ? ` · ${row.namespace}` : ''}\n </TableCell>\n <TableCell>{readableLabel(row.status)}</TableCell>\n <TableCell>{row.detail || 'Unknown'}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyEvidence />\n );\n\nconst RankingTable = ({ rows }: { rows: RankingRow[] }) =>\n rows.length > 0 ? (\n <Table size=\"small\" aria-label=\"Ask ranking\">\n <TableHead>\n <TableRow>\n <TableCell>Resource</TableCell>\n <TableCell align=\"right\">Count</TableCell>\n <TableCell>Detail</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row, index) => (\n <TableRow key={`${row.label}-${index}`}>\n <TableCell>{row.label}</TableCell>\n <TableCell align=\"right\">{row.value}</TableCell>\n <TableCell>{row.detail || 'Unknown'}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyEvidence />\n );\n\nconst EmptyEvidence = () => (\n <Typography variant=\"body2\" color=\"textSecondary\">\n The connected graph does not currently contain enough typed evidence.\n </Typography>\n);\n\nconst EvidenceTimestamp = ({ timestamp }: { timestamp?: string | null }) => {\n if (!timestamp) return <>Unknown</>;\n const parsed = Date.parse(timestamp);\n return Number.isNaN(parsed) ? (\n <>Unknown</>\n ) : (\n <time dateTime={timestamp}>{new Date(parsed).toLocaleString()}</time>\n );\n};\n\nfunction graphPresentation(\n nodes: AskResult['nodes'],\n edges: AskResult['edges'],\n fallback: { nodes: GraphNodes; edges: GraphEdges },\n): AskPresentation {\n const selectedNodes = (nodes?.length ? nodes : fallback.nodes).slice(\n 0,\n MAX_GRAPH_NODES,\n );\n const visibleIds = new Set(selectedNodes.map(node => node.id));\n const edgeSource = nodes?.length ? edges ?? [] : fallback.edges;\n const selectedEdges: GraphEdges = [];\n for (\n let index = 0;\n index < edgeSource.length &&\n index < MAX_GRAPH_EDGE_SCAN &&\n selectedEdges.length < MAX_GRAPH_EDGES;\n index += 1\n ) {\n const edge = edgeSource[index];\n if (visibleIds.has(edge.from) && visibleIds.has(edge.to)) {\n selectedEdges.push(edge);\n }\n }\n return { kind: 'graph', nodes: selectedNodes, edges: selectedEdges };\n}\n\nfunction graphFromBlast(result: AskResultFor<'blast'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const root = result.resolved\n ? graphNode(\n result.resolved.name,\n result.resolved.type ?? 'resource',\n null,\n result.resolved.hashedID,\n )\n : undefined;\n const dependencies: GraphNodes = [];\n if (result.blastRadius) {\n appendMapped(dependencies, result.blastRadius.workloads, item =>\n graphNode(item.name, 'workload', item.namespace),\n );\n appendMapped(dependencies, result.blastRadius.services, item =>\n graphNode(item.name, 'service', item.namespace),\n );\n }\n return {\n nodes: root ? [root, ...dependencies] : dependencies,\n edges: root\n ? dependencies.map(item => graphEdge(root.id, item.id, 'AFFECTS'))\n : [],\n };\n}\n\nfunction graphFromSpof(result: AskResultFor<'spof'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n return {\n nodes: (result.spof?.items ?? [])\n .slice(0, MAX_ROWS)\n .map(item =>\n graphNode(item.name, result.spof?.kind ?? 'resource', item.namespace),\n ),\n edges: [],\n };\n}\n\nfunction graphFromPath(result: AskResultFor<'path'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const nodes = (result.path?.chain ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.name, item.type ?? 'resource', item.namespace));\n return {\n nodes,\n edges: nodes\n .slice(1)\n .map((node, index) =>\n graphEdge(\n nodes[index].id,\n node.id,\n result.path?.rels[index] ?? 'DEPENDS_ON',\n ),\n ),\n };\n}\n\nfunction graphFromCascade(result: AskResultFor<'cascade'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const rootValue = result.cascade?.root;\n const root = rootValue?.target\n ? graphNode(\n rootValue.target,\n rootValue.kind ?? 'event target',\n rootValue.namespace,\n )\n : undefined;\n const steps = (result.cascade?.steps ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.resource, 'affected resource', item.namespace));\n return {\n nodes: root ? [root, ...steps] : steps,\n edges: root\n ? steps.map(item => graphEdge(root.id, item.id, 'PROPAGATED_TO'))\n : [],\n };\n}\n\nfunction graphFromServiceTree(result: AskResultFor<'servicetree'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const target = result.serviceTree?.target;\n if (!target) {\n return {\n nodes: (result.serviceTree?.ranking ?? [])\n .slice(0, MAX_ROWS)\n .map(item => ({\n ...graphNode(item.name, 'service footprint', null),\n image: `${item.footprint} resources · ${item.serviceCount} services · ${item.leafCount} leaves`,\n })),\n edges: [],\n };\n }\n const root = graphNode(target.name, 'service', null);\n const dependencies: GraphNodes = [];\n appendMapped(dependencies, target.services, name =>\n graphNode(name, 'service', null),\n );\n appendMapped(dependencies, target.datastores, name =>\n graphNode(name, 'datastore', null),\n );\n appendMapped(dependencies, target.externals, name =>\n graphNode(name, 'external', null),\n );\n return {\n nodes: [root, ...dependencies],\n edges: dependencies.map(item => graphEdge(root.id, item.id, 'DEPENDS_ON')),\n };\n}\n\nfunction graphFromCalls(result: AskResultFor<'calls'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const target = result.calls?.target;\n if (!target) {\n return {\n nodes: (result.calls?.ranking ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.name, 'service', null)),\n edges: [],\n };\n }\n const root = graphNode(target.name, 'service', null);\n const callers = target.callers\n .slice(0, MAX_ROWS)\n .map(name => graphNode(name, 'service', null));\n const callees = target.callees\n .slice(0, Math.max(0, MAX_ROWS - callers.length))\n .map(name => graphNode(name, 'service', null));\n return {\n nodes: [root, ...callers, ...callees],\n edges: [\n ...callers.map(item => graphEdge(item.id, root.id, 'CALLS')),\n ...callees.map(item => graphEdge(root.id, item.id, 'CALLS')),\n ],\n };\n}\n\nfunction graphFromFlow(result: AskResultFor<'flow'>): {\n nodes: GraphNodes;\n edges: GraphEdges;\n} {\n const target = result.flow?.target;\n if (!target) {\n return {\n nodes: (result.flow?.ranking ?? [])\n .slice(0, MAX_ROWS)\n .map(item => graphNode(item.name, 'stream', null)),\n edges: [],\n };\n }\n const root = graphNode(target.name, 'stream', null);\n const producers = target.producers\n .slice(0, MAX_ROWS)\n .map(name => graphNode(name, 'service', null));\n const consumers = target.consumers\n .slice(0, Math.max(0, MAX_ROWS - producers.length))\n .map(name => graphNode(name, 'service', null));\n return {\n nodes: [root, ...producers, ...consumers],\n edges: [\n ...producers.map(item => graphEdge(item.id, root.id, 'PRODUCES')),\n ...consumers.map(item => graphEdge(root.id, item.id, 'CONSUMED_BY')),\n ],\n };\n}\n\nfunction graphNode(\n name: string,\n type: string,\n namespace: string | null,\n id = `${type}:${namespace ?? '_'}:${name}`,\n): GraphNodes[number] {\n return { id, anyshiftID: null, name, type, namespace };\n}\n\nfunction graphEdge(from: string, to: string, type: string): GraphEdges[number] {\n return {\n from,\n to,\n type,\n direction: 'downstream',\n semantic: 'dependency',\n impact: true,\n };\n}\n\nfunction timelineFromEvents(\n events: Array<{\n ts: string;\n type: string;\n summary: string | null;\n target: string | null;\n namespace: string | null;\n }>,\n): TimelineItem[] {\n return events.slice(0, MAX_ROWS).map((item, index) => ({\n id: `${item.ts}-${item.type}-${index}`,\n type: item.type,\n timestamp: item.ts,\n target: item.target,\n namespace: item.namespace,\n summary: item.summary,\n }));\n}\n\nfunction deploymentSummary(\n images: Array<{ from: string | null; to: string | null }>,\n): string | undefined {\n const visibleImages = images.slice(0, MAX_DETAIL_ITEMS);\n const changes = visibleImages.flatMap(image => {\n if (image.from && image.to) return [`${image.from} → ${image.to}`];\n if (image.to) return [`Deployed ${image.to}`];\n return [];\n });\n if (changes.length === 0) return undefined;\n const remaining = images.length - visibleImages.length;\n const suffix =\n remaining > 0\n ? ` · ${remaining} more image ${remaining === 1 ? 'change' : 'changes'}`\n : '';\n return `${changes.join(', ')}${suffix}`;\n}\n\nfunction eventEvidenceRow(item: {\n ts: string;\n type: string;\n summary: string | null;\n target: string | null;\n namespace: string | null;\n}): EvidenceRow {\n return {\n label: item.target ?? readableLabel(item.type),\n value: readableLabel(item.type),\n detail: item.summary ?? item.namespace,\n timestamp: item.ts,\n };\n}\n\nfunction causeRow(\n item: { name: string; namespace: string | null; affected: number },\n kind: string,\n): EvidenceRow {\n return {\n label: item.name,\n value: `${item.affected} affected`,\n detail: item.namespace ? `${kind} · ${item.namespace}` : kind,\n };\n}\n\nfunction appendMapped<T, U>(\n target: U[],\n source: readonly T[],\n mapper: (item: T) => U,\n limit = MAX_ROWS,\n): void {\n const remaining = Math.max(0, limit - target.length);\n if (remaining === 0) return;\n target.push(...source.slice(0, remaining).map(mapper));\n}\n\nfunction boundedJoinedList(items: readonly string[]): string {\n const visible = items.slice(0, MAX_DETAIL_ITEMS);\n const remaining = items.length - visible.length;\n return `${visible.join(', ')}${remaining > 0 ? `, +${remaining} more` : ''}`;\n}\n\nfunction summaryPresentation(counts: SummaryMetric[]): AskPresentation {\n return { kind: 'summary', counts, timestamps: [] };\n}\n\nfunction evidenceTimes(presentation: AskPresentation): EvidenceTime[] {\n let timestamps: EvidenceTime[];\n switch (presentation.kind) {\n case 'graph':\n timestamps = [{ label: 'Graph evidence', timestamp: null }];\n break;\n case 'timeline':\n timestamps = presentation.items.map(item => ({\n label: item.target ?? item.type,\n timestamp: item.timestamp,\n }));\n break;\n case 'impact':\n timestamps = presentation.rows.map(row => ({\n label: row.label,\n timestamp: row.timestamp,\n }));\n break;\n case 'inventory':\n timestamps = presentation.rows.map(row => ({\n label: row.name,\n timestamp: row.timestamp,\n }));\n break;\n case 'coverage':\n timestamps = presentation.rows.map(row => ({\n label: row.name,\n timestamp: row.timestamp,\n }));\n break;\n case 'ranking':\n timestamps = presentation.rows.map(row => ({\n label: row.label,\n timestamp: row.timestamp,\n }));\n break;\n case 'candidates':\n timestamps = [{ label: 'Resolution evidence', timestamp: null }];\n break;\n case 'summary':\n timestamps = presentation.timestamps;\n break;\n default:\n return assertNever(presentation);\n }\n return timestamps.length > 0\n ? timestamps.slice(0, MAX_ROWS)\n : [{ label: 'Evidence timestamp', timestamp: null }];\n}\n\nfunction candidateLabel(candidate: ResolveCandidate): string {\n return [\n candidate.name,\n candidate.type ? readableLabel(candidate.type) : 'type unknown',\n candidate.namespace ?? 'namespace unknown',\n ].join(' · ');\n}\n\nfunction questionForCandidate(candidate: ResolveCandidate): string {\n const type = candidate.type?.trim().toLocaleLowerCase();\n const typedName = type ? `${type} ${candidate.name}` : candidate.name;\n const namespace = candidate.namespace\n ? ` in namespace ${candidate.namespace}`\n : '';\n return `What depends on ${typedName}${namespace}?`;\n}\n\nfunction readableLabel(value: string): string {\n const normalized = value.replace(/[_-]+/g, ' ');\n return normalized.charAt(0).toLocaleUpperCase() + normalized.slice(1);\n}\n\nfunction assertNever(value: never): never {\n throw new Error(\n `Unsupported Ask presentation discriminant: ${String(value)}`,\n );\n}\n\nconst INTENT_LABELS: Record<AskResult['intent'], string> = {\n resolve: 'Resolve',\n connections: 'Connections',\n inventory: 'Inventory',\n events: 'Events',\n cloudevents: 'Cloud events',\n cloudresources: 'Cloud resources',\n deliveryevents: 'Delivery events',\n provenance: 'Provenance',\n ownership: 'Ownership',\n graphcoverage: 'Graph coverage',\n hotspots: 'Hotspots',\n incident: 'Incident',\n failures: 'Failures',\n deployments: 'Deployments',\n audit: 'Audit',\n nodes: 'Node events',\n deployimpact: 'Deployment impact',\n commoncause: 'Common cause',\n blast: 'Blast radius',\n impact: 'Impact',\n spof: 'Single points of failure',\n path: 'Dependency path',\n cascade: 'Cascade',\n alertimpact: 'Alert impact',\n monitor: 'Monitor',\n datastore: 'Datastore',\n flow: 'Flow',\n externaldep: 'External dependency',\n alerts: 'Alerts',\n alertnoise: 'Alert noise',\n calls: 'Service calls',\n servicetree: 'Service tree',\n alertcause: 'Alert cause',\n access: 'Access',\n exposure: 'Exposure',\n orphans: 'Orphans',\n coverage: 'Coverage',\n slo: 'SLO',\n tenancy: 'Tenancy',\n sharedconfig: 'Shared configuration',\n alertrules: 'Alert rules',\n gitops: 'GitOps',\n image: 'Images',\n netpol: 'Network policy',\n storage: 'Storage',\n pdb: 'Pod disruption budget',\n scaling: 'Scaling',\n topology: 'Topology',\n priority: 'Priority',\n iac: 'Infrastructure as code',\n iacdrift: 'Infrastructure drift',\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
|
3
3
|
import { Typography, Box, Chip, Button, CircularProgress, Grid } from '@material-ui/core';
|
|
4
4
|
import { Progress } from '@backstage/core-components';
|
|
5
5
|
import { useApi, useApiHolder } from '@backstage/frontend-plugin-api';
|
|
6
|
-
import { ANYSHIFT_KIND_ANNOTATION, ANYSHIFT_CONFIGURATION_ENDPOINTS_ANNOTATION, ANYSHIFT_CONFIGURATION_DEPENDENCIES_ANNOTATION, ANYSHIFT_RUNTIME_RESOURCE_ID_ANNOTATION } from '@anyshift/backstage-plugin-anyshift-common';
|
|
6
|
+
import { ANYSHIFT_KIND_ANNOTATION, ANYSHIFT_CONFIGURATION_ENDPOINTS_ANNOTATION, ANYSHIFT_CONFIGURATION_DEPENDENCIES_ANNOTATION, ANYSHIFT_RUNTIME_RESOURCE_ID_ANNOTATION, ANYSHIFT_RESOURCE_ID_ANNOTATION } from '@anyshift/backstage-plugin-anyshift-common';
|
|
7
7
|
import { useEntity, catalogApiRef } from '@backstage/plugin-catalog-react';
|
|
8
8
|
import { anyshiftApiRef } from '../../api/AnyshiftApi.esm.js';
|
|
9
9
|
import { AskAnyshiftCard } from '../ask/AskAnyshiftCard.esm.js';
|
|
@@ -27,7 +27,7 @@ const ServiceAnyshiftEntityContent = () => {
|
|
|
27
27
|
const namespace = entity.metadata.namespace;
|
|
28
28
|
const configurationEndpoints = annotations[ANYSHIFT_CONFIGURATION_ENDPOINTS_ANNOTATION];
|
|
29
29
|
const configurationDependencies = annotations[ANYSHIFT_CONFIGURATION_DEPENDENCIES_ANNOTATION];
|
|
30
|
-
const configurationTarget = annotations[ANYSHIFT_RUNTIME_RESOURCE_ID_ANNOTATION];
|
|
30
|
+
const configurationTarget = annotations[ANYSHIFT_RUNTIME_RESOURCE_ID_ANNOTATION] ?? annotations[ANYSHIFT_RESOURCE_ID_ANNOTATION];
|
|
31
31
|
const [brief, setBrief] = useState();
|
|
32
32
|
const [catalogEntities, setCatalogEntities] = useState([]);
|
|
33
33
|
const [capabilities, setCapabilities] = useState({
|