File size: 1,491 Bytes
0964fe7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import {
environmentForResourceAttrs,
type GroupingCandidateIncident,
type GroupingNewIssue,
} from "./domain.js";
export function buildInitialUserMessage(input: {
projectName: string;
newIssue: GroupingNewIssue;
candidates: GroupingCandidateIncident[];
}): string {
const services = Array.from(
new Set(input.candidates.map((candidate) => candidate.service).filter(Boolean)),
).sort();
const environments = Array.from(
new Set(
input.candidates
.map((candidate) =>
environmentForResourceAttrs(candidate.representative?.resourceAttrs),
)
.filter((env): env is string => !!env),
),
).sort();
return [
`Project: ${input.projectName}`,
"",
"New issue to classify:",
JSON.stringify(input.newIssue, null, 2),
"",
"Open incident candidate index:",
JSON.stringify(
{
count: input.candidates.length,
services,
environments,
newestCandidates: input.candidates.slice(0, 5).map((candidate) => ({
id: candidate.id,
title: candidate.title,
service: candidate.service,
issueCount: candidate.issueCount,
lastSeen: candidate.lastSeen,
environment: environmentForResourceAttrs(candidate.representative?.resourceAttrs),
})),
},
null,
2,
),
"",
"Use list_incident_titles/list_incident_facets to orient, then search and inspect plausible join targets.",
].join("\n");
}
|