Skip to content

feat(stage-ui,server): use optimistic request for provider catalog#951

Merged
nekomeowww merged 8 commits intomainfrom
dev/use-optimistic
Jan 16, 2026
Merged

feat(stage-ui,server): use optimistic request for provider catalog#951
nekomeowww merged 8 commits intomainfrom
dev/use-optimistic

Conversation

@luoling8192
Copy link
Member

No description provided.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @luoling8192, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the user experience in the stage-ui by implementing optimistic updates for provider catalog operations. Users will now experience immediate feedback when performing actions like adding, removing, or modifying provider configurations, as the UI state is updated instantly before server confirmation. This change improves perceived performance and responsiveness, with robust rollback mechanisms in place for handling server-side failures.

Highlights

  • New useOptimistic Composable: Introduced a new Vue composable, useOptimistic, designed to facilitate optimistic UI updates with automatic rollback capabilities on action failure, integrating with useAsyncState for loading and error tracking.
  • Optimistic Provider Catalog Operations: Implemented optimistic updates for addProvider, removeProvider, and commitProviderConfig functions within the provider-catalog store, providing immediate UI feedback for these actions.
  • Backend Schema Alignment: Modified the CreateProviderConfigSchema and CreateCharacterSchema to include an optional id field, allowing the client to provide IDs for new resources, which is crucial for optimistic creation flows.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 14, 2026

⏳ Approval required for deploying to Cloudflare Workers (Preview) for stage-web.

Name Link
🔭 Waiting for approval For maintainers, approve here

Hey, @nekomeowww, @sumimakito, @luoling8192, @LemonNekoGH, kindly take some time to review and approve this deployment when you are available. Thank you! 🙏

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a useOptimistic composable to provide a better user experience with optimistic UI updates, and refactors the provider catalog management to use it. This is a great improvement for perceived performance.

I've found a couple of high-severity issues:

  1. In the new useOptimistic composable, there's a potential bug where the result of an asynchronous action can be lost if an onSuccess handler isn't provided.
  2. In the provider-catalog store, when adding a new provider, if the server returns a different ID than the temporary one created on the client, the temporary entry is not cleaned up, leading to data inconsistencies.

I've provided detailed comments and code suggestions to address these points. Besides these, the changes are well-implemented and the new tests for useOptimistic are comprehensive.

@nekomeowww nekomeowww changed the title feat(stage-ui, server): use optimistic request for provider catalog feat(stage-ui,server): use optimistic request for provider catalog Jan 14, 2026
* A wrapper for performing optimistic updates with automatic rollback.
* Integrates with useAsyncState for loading/error tracking.
*/
export function useOptimistic<T, R = T>(options: UseOptimisticOptions<T, R>) {
Copy link
Member

Choose a reason for hiding this comment

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

Pehaps... useMutateOptimistic? Or useOptimisticMutate?

Copy link
Member Author

Choose a reason for hiding this comment

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

Could you explain why should we use mutate?

Copy link
Member

Choose a reason for hiding this comment

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

Copy link
Member Author

Choose a reason for hiding this comment

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

However, what inspired me is this React implementation, https://react.dev/reference/react/useOptimistic

Copy link
Member

Choose a reason for hiding this comment

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

Then should we divide this into two composables?

@nekomeowww nekomeowww merged commit 4292535 into main Jan 16, 2026
9 checks passed
@nekomeowww nekomeowww deleted the dev/use-optimistic branch January 16, 2026 16:17
Joker-of-Gotham pushed a commit to Joker-of-Gotham/airi that referenced this pull request Jan 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants