mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
perf(site/src/pages/AgentsPage): combine array iterations (#25614)
This commit is contained in:
@@ -32,13 +32,13 @@ const buildOrderedMessageIDs = (
|
||||
// still exists in a later page). The Map-based messagesByID
|
||||
// already deduplicates, but orderedMessageIDs must match.
|
||||
const seen = new Set<number>();
|
||||
return sorted
|
||||
.map((message) => message.id)
|
||||
.filter((id) => {
|
||||
if (seen.has(id)) return false;
|
||||
seen.add(id);
|
||||
return true;
|
||||
});
|
||||
const orderedMessageIDs: number[] = [];
|
||||
for (const message of sorted) {
|
||||
if (seen.has(message.id)) continue;
|
||||
seen.add(message.id);
|
||||
orderedMessageIDs.push(message.id);
|
||||
}
|
||||
return orderedMessageIDs;
|
||||
};
|
||||
|
||||
const mapsEqualByRef = <K, V>(left: Map<K, V>, right: Map<K, V>): boolean => {
|
||||
|
||||
@@ -78,13 +78,17 @@ const MCPIcon: FC<{ iconUrl: string; name: string; className?: string }> = ({
|
||||
export const getDefaultMCPSelection = (
|
||||
servers: readonly TypesGen.MCPServerConfig[],
|
||||
): string[] => {
|
||||
return servers
|
||||
.filter(
|
||||
(s) =>
|
||||
s.enabled &&
|
||||
(s.availability === "force_on" || s.availability === "default_on"),
|
||||
)
|
||||
.map((s) => s.id);
|
||||
const ids: string[] = [];
|
||||
for (const server of servers) {
|
||||
if (
|
||||
server.enabled &&
|
||||
(server.availability === "force_on" ||
|
||||
server.availability === "default_on")
|
||||
) {
|
||||
ids.push(server.id);
|
||||
}
|
||||
}
|
||||
return ids;
|
||||
};
|
||||
|
||||
/** localStorage key for persisting the user's MCP server selection. */
|
||||
@@ -113,13 +117,15 @@ export const mcpSelectionStorageKey = "agents.selected-mcp-server-ids";
|
||||
if (!Array.isArray(parsed)) {
|
||||
return null;
|
||||
}
|
||||
const enabledIds = new Set(
|
||||
servers.filter((s) => s.enabled).map((s) => s.id),
|
||||
);
|
||||
// Always include force_on servers even if the user didn't save them.
|
||||
const forceOnIds = servers
|
||||
.filter((s) => s.enabled && s.availability === "force_on")
|
||||
.map((s) => s.id);
|
||||
const enabledIds = new Set<string>();
|
||||
const forceOnIds: string[] = [];
|
||||
for (const server of servers) {
|
||||
if (!server.enabled) continue;
|
||||
enabledIds.add(server.id);
|
||||
if (server.availability === "force_on") {
|
||||
forceOnIds.push(server.id);
|
||||
}
|
||||
}
|
||||
const restored = parsed.filter(
|
||||
(id): id is string => typeof id === "string" && enabledIds.has(id),
|
||||
);
|
||||
|
||||
@@ -41,12 +41,13 @@ export const getQueuedMessageInfo = (
|
||||
): QueuedMessageInfo => {
|
||||
const { content } = message;
|
||||
const fileBlocks = content.filter((p) => p.type === "file");
|
||||
const rawText = content
|
||||
.filter((p) => p.type === "text")
|
||||
.map((p) => p.text)
|
||||
.filter((t): t is string => Boolean(t?.trim()))
|
||||
.join(" ")
|
||||
.trim();
|
||||
const textParts: string[] = [];
|
||||
for (const part of content) {
|
||||
if (part.type === "text" && part.text?.trim()) {
|
||||
textParts.push(part.text);
|
||||
}
|
||||
}
|
||||
const rawText = textParts.join(" ").trim();
|
||||
|
||||
if (rawText) {
|
||||
return {
|
||||
|
||||
@@ -60,22 +60,24 @@ export const filterPersonalSkills = (
|
||||
return skills.toSorted((a, b) => a.name.localeCompare(b.name, "en-US"));
|
||||
}
|
||||
|
||||
return skills
|
||||
.map((skill, index): RankedPersonalSkill => {
|
||||
const name = skill.name.toLocaleLowerCase("en-US");
|
||||
const description = skill.description.toLocaleLowerCase("en-US");
|
||||
let rank = Number.POSITIVE_INFINITY;
|
||||
if (name.startsWith(normalizedQuery)) {
|
||||
rank = 0;
|
||||
} else if (name.includes(normalizedQuery)) {
|
||||
rank = 1;
|
||||
} else if (description.includes(normalizedQuery)) {
|
||||
rank = 2;
|
||||
}
|
||||
const rankedSkills: RankedPersonalSkill[] = [];
|
||||
for (const [index, skill] of skills.entries()) {
|
||||
const name = skill.name.toLocaleLowerCase("en-US");
|
||||
const description = skill.description.toLocaleLowerCase("en-US");
|
||||
let rank: number | undefined;
|
||||
if (name.startsWith(normalizedQuery)) {
|
||||
rank = 0;
|
||||
} else if (name.includes(normalizedQuery)) {
|
||||
rank = 1;
|
||||
} else if (description.includes(normalizedQuery)) {
|
||||
rank = 2;
|
||||
}
|
||||
if (rank !== undefined) {
|
||||
rankedSkills.push({ skill, rank, index });
|
||||
}
|
||||
}
|
||||
|
||||
return { skill, rank, index };
|
||||
})
|
||||
.filter(({ rank }) => Number.isFinite(rank))
|
||||
return rankedSkills
|
||||
.toSorted((a, b) => {
|
||||
if (a.rank !== b.rank) {
|
||||
return a.rank - b.rank;
|
||||
|
||||
Reference in New Issue
Block a user