Skip to content

Conversation

@roaga
Copy link
Member

@roaga roaga commented Dec 9, 2025

Adds UI to support the new explorer-backed Autofix agent. Controlled by explorer FF and a new one. Should preserve old UI as is if not behind the flags.
image
image

Have tickets for follow up work like backrgound agents, better code changes display, and better suspect commit card.

Backend: #104615
Part of AIML-2004 and AIML-1732

@linear
Copy link

linear bot commented Dec 9, 2025

@github-actions github-actions bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Dec 9, 2025
Copy link
Member

@aliu39 aliu39 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one sec doing a last safety check of prod seer drawer changes

aiConfig: ReturnType<typeof useAiConfig>;
}

function LegacySeerDrawer({group, project, event, aiConfig}: LegacySeerDrawerProps) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how about ProdSeerDrawer? may not be legacy/deprecated for a while

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well both are in prod no

Comment on lines 122 to 126
const {runState} = useExplorerAutofix(group.id, {enabled: isExplorerEnabled});
const explorerArtifacts = useMemo(
() => (isExplorerEnabled ? getArtifactsFromBlocks(runState?.blocks ?? []) : {}),
[isExplorerEnabled, runState?.blocks]
);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const {runState} = useExplorerAutofix(group.id, {enabled: isExplorerEnabled});
const explorerArtifacts = useMemo(
() => (isExplorerEnabled ? getArtifactsFromBlocks(runState?.blocks ?? []) : {}),
[isExplorerEnabled, runState?.blocks]
);
const {runState: explorerRunState} = useExplorerAutofix(group.id, {enabled: isExplorerEnabled});
const explorerArtifacts = useMemo(
() => (isExplorerEnabled ? getArtifactsFromBlocks(explorerRunState?.blocks ?? []) : {}),
[isExplorerEnabled, explorerRunState?.blocks]
);

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lg, esp if the current view has jest tests - let's do some sanity checks for prod (non explorer version) after deployed

roaga added a commit that referenced this pull request Dec 12, 2025
Runs Autofix's 3 steps and 2 more based on the Seer Explorer Client
rather than calling it's own Seer agent. Supports both manual runs and
automation runs.

Controlled by the seer explorer feature flag and a new one, so we can
start with internal testing for now.

Does not support automation or manual handoff to 3rd party agents
currently, but i have a ticket to add that back along with other
improvements (e.g. suspect commit artifact will need improvement too)

Frontend: #104618
Part of AIML-2004
@roaga roaga marked this pull request as ready for review December 12, 2025 13:56
@roaga roaga requested review from a team as code owners December 12, 2025 13:56
@roaga roaga merged commit 30bda03 into master Dec 12, 2025
48 checks passed
@roaga roaga deleted the autofix/migrate-to-explorer-fe branch December 12, 2025 13:59
}

return t('Fix with Seer');
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Missing status handling for awaiting user input

The getButtonText function handles 'processing', 'completed', and 'error' statuses but does not handle 'awaiting_user_input'. When the run status is 'awaiting_user_input', the function falls through to return "Fix with Seer" which is misleading since a run already exists and is waiting for user input. The legacy SeerSectionCtaButton handles this case explicitly by returning "Waiting for Your Input".

Fix in Cursor Fix in Web

</Flex>
</Flex>
)}
</Container>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Layout issue with PR button outside flex container

When hasCodeChanges && onCreatePR is true, the "Create Pull Request" button is rendered as a direct child of the Container outside of any Flex layout. The subsequent content (the Flex column with step buttons or chat options) is rendered as a sibling. This means there's no gap or spacing between the PR button and the rest of the content, resulting in a broken layout when both elements are visible.

Fix in Cursor Fix in Web

hasGithubIntegration={aiConfig.hasGithubIntegration}
project={project}
/>
<ExplorerAutofixStart onStartRootCause={handleStartRootCause} />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Missing loading prop prevents button disable feedback

The ExplorerAutofixStart component receives an isLoading prop that disables the button and shows "Starting..." text, but the drawer passes only onStartRootCause without the loading state. The hook provides isPolling which becomes true when startStep is called. Without passing this, users can click the "Find Root Cause" button multiple times before the API responds, potentially triggering duplicate requests, and they won't see visual feedback that the action is in progress.

Fix in Cursor Fix in Web

@github-actions github-actions bot locked and limited conversation to collaborators Dec 28, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Scope: Frontend Automatically applied to PRs that change frontend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants