From cf5dfd712717ba23583ace52009ce3aba8b0c6e6 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Tue, 26 May 2026 18:44:57 -0700 Subject: [PATCH] fix: address review findings (#2868) --- .../settings/AgentSkillSetupPanel.test.tsx | 68 +++++++++++++++ .../settings/AgentSkillSetupPanel.tsx | 83 +++++++++---------- 2 files changed, 105 insertions(+), 46 deletions(-) create mode 100644 src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx diff --git a/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx b/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx new file mode 100644 index 00000000000..1e1b4428fd4 --- /dev/null +++ b/src/renderer/src/components/settings/AgentSkillSetupPanel.test.tsx @@ -0,0 +1,68 @@ +import { renderToStaticMarkup } from 'react-dom/server' +import type { ComponentProps } from 'react' +import { describe, expect, it, vi } from 'vitest' +import { AgentSkillSetupPanel } from './AgentSkillSetupPanel' + +function renderPanel(overrides: Partial> = {}): string { + return renderToStaticMarkup( + + ) +} + +function buttonLabels(html: string): string[] { + return Array.from(html.matchAll(/]*>([\s\S]*?)<\/button>/g), ([, content]) => + content + .replace(/<[^>]*>/g, '') + .replace(/\s+/g, ' ') + .trim() + ) +} + +function buttonMarkupByLabel(html: string, label: string): string | undefined { + return Array.from(html.matchAll(/]*>[\s\S]*?<\/button>/g), ([button]) => button).find( + (button) => buttonLabels(button).includes(label) + ) +} + +describe('AgentSkillSetupPanel', () => { + it('keeps the install action visible after the skill is detected', () => { + const html = renderPanel({ installed: true }) + + expect(html).toContain('Installed') + expect(buttonLabels(html)).toContain('Install') + expect(buttonLabels(html)).toContain('Re-check') + }) + + it('hides only re-check when installed re-checks are disabled', () => { + const html = renderPanel({ installed: true, showRecheckWhenInstalled: false }) + + expect(html).toContain('Installed') + expect(buttonLabels(html)).toContain('Install') + expect(buttonLabels(html)).not.toContain('Re-check') + }) + + it('keeps re-check visible before install when installed re-checks are disabled', () => { + const html = renderPanel({ installed: false, showRecheckWhenInstalled: false }) + + expect(buttonLabels(html)).toContain('Install') + expect(buttonLabels(html)).toContain('Re-check') + }) + + it('keeps install visible but disabled when parent setup is disabled', () => { + const html = renderPanel({ installDisabled: true }) + + expect(buttonMarkupByLabel(html, 'Install')).toContain('disabled=""') + }) +}) diff --git a/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx b/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx index be3de086e88..41ce7ab62e4 100644 --- a/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx +++ b/src/renderer/src/components/settings/AgentSkillSetupPanel.tsx @@ -54,12 +54,6 @@ export function AgentSkillSetupPanel({ const [terminalOpen, setTerminalOpen] = useState(false) const [preInstallNoticeVisible, setPreInstallNoticeVisible] = useState(Boolean(preInstallNotice)) - useEffect(() => { - if (installed) { - setTerminalOpen(false) - } - }, [installed]) - useEffect(() => { if (!preInstallNotice) { setPreInstallNoticeVisible(false) @@ -99,45 +93,42 @@ export function AgentSkillSetupPanel({ setPreInstallNoticeVisible(true) } } - const actionRow = - !installed || showRecheckWhenInstalled ? ( -
- {!installed ? ( - - ) : null} - {!installed || showRecheckWhenInstalled ? ( - - ) : null} -
- ) : null + const actionRow = ( +
+ + {!installed || showRecheckWhenInstalled ? ( + + ) : null} +
+ ) return (
- {!installed && terminalOpen ? ( + {terminalOpen ? (