fix(desktop): remove superseded built-in agents (#1929)

Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
This commit is contained in:
Wes
2026-07-15 17:09:25 -07:00
committed by GitHub
co-authored by Pinky
parent 3e90dd5dd8
commit dbf2cfc21e
4 changed files with 21 additions and 212 deletions
File diff suppressed because one or more lines are too long
@@ -39,27 +39,11 @@ fn merge_personas_adds_missing_built_ins() {
assert!(records
.iter()
.any(|record| record.id == "builtin:fizz" && record.runtime.is_none()));
assert!(records
.iter()
.any(|record| record.id == "builtin:product-strategist" && !record.is_active));
let display_names: Vec<&str> = records
.iter()
.map(|record| record.display_name.as_str())
.collect();
assert_eq!(
display_names,
vec![
"Fizz",
"Honey",
"Bumble",
"Product Strategist",
"Implementation Partner",
"QA Reviewer",
"Work Coordinator",
"Support Guide",
"Experiment Designer"
]
);
assert_eq!(display_names, vec!["Fizz", "Honey", "Bumble"]);
let active_ids: Vec<&str> = records
.iter()
.filter(|record| record.is_active)
+8 -53
View File
@@ -1861,46 +1861,10 @@ function resetMockManagedAgents(config?: E2eConfig) {
syncMockRelayAgentsFromManagedAgents();
}
const BUILT_IN_PERSONA_AVATAR_URLS = {
productStrategist:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgcng9IjMyIiBmaWxsPSIjMmY2ZjczIi8+PGNpcmNsZSBjeD0iOTYiIGN5PSIzMiIgcj0iMTYiIGZpbGw9IiNkZmY3ZjQiIGZpbGwtb3BhY2l0eT0iLjI4Ii8+PHBhdGggZD0iTTI0IDk0YzE0LTI1IDI3LTM3IDQwLTM3czI2IDEyIDQwIDM3IiBmaWxsPSJub25lIiBzdHJva2U9IiNkZmY3ZjQiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHRleHQgeD0iNjQiIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzNCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2RmZjdmNCI+UFM8L3RleHQ+PC9zdmc+",
implementationPartner:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgcng9IjMyIiBmaWxsPSIjNmY0ZTlhIi8+PGNpcmNsZSBjeD0iOTYiIGN5PSIzMiIgcj0iMTYiIGZpbGw9IiNmMGU4ZmYiIGZpbGwtb3BhY2l0eT0iLjI4Ii8+PHBhdGggZD0iTTI0IDk0YzE0LTI1IDI3LTM3IDQwLTM3czI2IDEyIDQwIDM3IiBmaWxsPSJub25lIiBzdHJva2U9IiNmMGU4ZmYiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHRleHQgeD0iNjQiIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzNCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2YwZThmZiI+SVA8L3RleHQ+PC9zdmc+",
qaReviewer:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgcng9IjMyIiBmaWxsPSIjOWE1YTFmIi8+PGNpcmNsZSBjeD0iOTYiIGN5PSIzMiIgcj0iMTYiIGZpbGw9IiNmZmYwZGMiIGZpbGwtb3BhY2l0eT0iLjI4Ii8+PHBhdGggZD0iTTI0IDk0YzE0LTI1IDI3LTM3IDQwLTM3czI2IDEyIDQwIDM3IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYwZGMiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHRleHQgeD0iNjQiIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzNCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2ZmZjBkYyI+UUE8L3RleHQ+PC9zdmc+",
workCoordinator:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgcng9IjMyIiBmaWxsPSIjMzQ1ZjhjIi8+PGNpcmNsZSBjeD0iOTYiIGN5PSIzMiIgcj0iMTYiIGZpbGw9IiNlM2YwZmYiIGZpbGwtb3BhY2l0eT0iLjI4Ii8+PHBhdGggZD0iTTI0IDk0YzE0LTI1IDI3LTM3IDQwLTM3czI2IDEyIDQwIDM3IiBmaWxsPSJub25lIiBzdHJva2U9IiNlM2YwZmYiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHRleHQgeD0iNjQiIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzNCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2UzZjBmZiI+V0M8L3RleHQ+PC9zdmc+",
supportGuide:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgcng9IjMyIiBmaWxsPSIjNmE3MDMxIi8+PGNpcmNsZSBjeD0iOTYiIGN5PSIzMiIgcj0iMTYiIGZpbGw9IiNmMmY2ZDciIGZpbGwtb3BhY2l0eT0iLjI4Ii8+PHBhdGggZD0iTTI0IDk0YzE0LTI1IDI3LTM3IDQwLTM3czI2IDEyIDQwIDM3IiBmaWxsPSJub25lIiBzdHJva2U9IiNmMmY2ZDciIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHRleHQgeD0iNjQiIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzNCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2YyZjZkNyI+U0c8L3RleHQ+PC9zdmc+",
experimentDesigner:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgcng9IjMyIiBmaWxsPSIjOGIzZjVlIi8+PGNpcmNsZSBjeD0iOTYiIGN5PSIzMiIgcj0iMTYiIGZpbGw9IiNmZmU3ZjAiIGZpbGwtb3BhY2l0eT0iLjI4Ii8+PHBhdGggZD0iTTI0IDk0YzE0LTI1IDI3LTM3IDQwLTM3czI2IDEyIDQwIDM3IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmU3ZjAiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHRleHQgeD0iNjQiIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzNCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2ZmZTdmMCI+RUQ8L3RleHQ+PC9zdmc+",
} as const;
function resetMockPersonas(config?: E2eConfig) {
const now = new Date().toISOString();
const activePersonaIds = new Set(config?.mock?.activePersonaIds ?? []);
const builtInPersonas = [
{
id: "builtin:product-strategist",
display_name: "Product Strategist",
avatar_url: BUILT_IN_PERSONA_AVATAR_URLS.productStrategist,
system_prompt:
"You are a product strategy agent. You help turn broad ideas into clear product and design direction.\n\n# Focus\n\nClarify the goal, identify the audience, and call out the tradeoffs that matter.",
},
{
id: "builtin:implementation-partner",
display_name: "Implementation Partner",
avatar_url: BUILT_IN_PERSONA_AVATAR_URLS.implementationPartner,
system_prompt:
"You are an implementation partner agent. You help turn scoped plans into working changes.\n\n# Focus\n\nPrefer small, direct edits that follow the existing codebase.",
},
{
id: "builtin:qa-reviewer",
display_name: "QA Reviewer",
avatar_url: BUILT_IN_PERSONA_AVATAR_URLS.qaReviewer,
system_prompt:
"You are a QA reviewer agent. You look for the ways a change might break.\n\n# Focus\n\nInspect state transitions, empty states, permissions, accessibility, and failure paths.",
},
{
id: "builtin:fizz",
display_name: "Fizz",
@@ -1908,25 +1872,16 @@ function resetMockPersonas(config?: E2eConfig) {
system_prompt: "You are Fizz.",
},
{
id: "builtin:work-coordinator",
display_name: "Work Coordinator",
avatar_url: BUILT_IN_PERSONA_AVATAR_URLS.workCoordinator,
system_prompt:
"You are a work coordination agent. You keep multi-step work organized and grounded.\n\n# Focus\n\nTrack goals, dependencies, and follow-ups.",
id: "builtin:honey",
display_name: "Honey",
avatar_url: null,
system_prompt: "You are Honey.",
},
{
id: "builtin:support-guide",
display_name: "Support Guide",
avatar_url: BUILT_IN_PERSONA_AVATAR_URLS.supportGuide,
system_prompt:
"You are a support and onboarding agent. You help people feel oriented quickly.\n\n# Focus\n\nExplain unfamiliar flows plainly, surface the next useful step, and keep guidance reassuring without becoming verbose.",
},
{
id: "builtin:experiment-designer",
display_name: "Experiment Designer",
avatar_url: BUILT_IN_PERSONA_AVATAR_URLS.experimentDesigner,
system_prompt:
"You are an experiment design agent. You help turn uncertainty into experiments.\n\n# Focus\n\nBreak big questions into small trials, name what would prove or disprove an idea, and keep momentum through ambiguity.",
id: "builtin:bumble",
display_name: "Bumble",
avatar_url: null,
system_prompt: "You are Bumble.",
},
];
mockPersonas = builtInPersonas.map((persona) => ({
+12 -15
View File
@@ -164,25 +164,22 @@ test("built-in personas are used from the catalog dialog", async ({ page }) => {
await expect(page.getByTestId("persona-catalog-dialog")).toContainText(
"Fizz",
);
const previewPersonas = [
["builtin:product-strategist", "Product Strategist"],
["builtin:implementation-partner", "Implementation Partner"],
["builtin:qa-reviewer", "QA Reviewer"],
["builtin:work-coordinator", "Work Coordinator"],
["builtin:support-guide", "Support Guide"],
["builtin:experiment-designer", "Experiment Designer"],
] as const;
for (const [, personaName] of previewPersonas) {
for (const personaName of ["Fizz", "Honey", "Bumble"]) {
await expect(page.getByTestId("persona-catalog-dialog")).toContainText(
personaName,
);
}
for (const [personaId, personaName] of previewPersonas) {
await expect(
page
.getByTestId(`persona-catalog-list-item-${personaId}`)
.getByRole("img", { name: `${personaName} avatar` }),
).toHaveAttribute("src", /.+/);
for (const retiredPersonaName of [
"Product Strategist",
"Implementation Partner",
"QA Reviewer",
"Work Coordinator",
"Support Guide",
"Experiment Designer",
]) {
await expect(page.getByTestId("persona-catalog-dialog")).not.toContainText(
retiredPersonaName,
);
}
await expect(page.getByTestId("persona-catalog-dialog-header")).toBeVisible();
await expect(