Skip to content

feat(artifact-apps): automatic marketplace catalog, restore, and shared-view guards - #16019

Open
romy651 wants to merge 20 commits into
LibreChat-AI:devfrom
fdj-united:feat/artifact-apps-release
Open

romy651 wants to merge 20 commits into
LibreChat-AI:devfrom
fdj-united:feat/artifact-apps-release

Conversation

@romy651

@romy651 romy651 commented Sep 16, 2026 •

Copy link
Copy Markdown

Summary

This PR turns generated artifacts into reusable Artifact Apps.

When LibreChat creates an artifact in a conversation, it is automatically saved to the Artifacts catalog. Users can browse their artifacts, open them again, share them, and manage them without a separate publish step.

User workflow

flowchart TD
    A["1. Create an artifact in a chat"] --> B["2. Automatically saved to Artifacts"]
    B --> C["3. Browse Personal, Shared, or All"]
    C --> D["Open in the source chat or standalone"]
    C --> E["Share with people or everyone"]
    C --> F["Delete"]
    F --> G["Restore from the source chat"]
Loading

What is included

  • Automatic registration and versioning of generated artifacts—no manual publishing step.
  • An Artifacts catalog with Personal, Shared, and All views, search, pagination, pinning, list/grid layouts, and thumbnail previews.
  • Standalone artifact links and ACL-based sharing with people or everyone.
  • Safe deletion and restoration. Deleting the source conversation does not delete the saved artifact.
  • Owner-only controls are hidden when someone opens an artifact through a shared conversation.
  • Durable snapshots, concurrency-safe synchronization, and retry support for transient failures.

Related work and acknowledgements

This work builds on the Artifact Apps foundation introduced in #14306 by @dsheine, which established standalone artifact publishing, versioning, and sharing.

It also incorporates the direction and authorization coverage from #14616 by @danny-avila, which rebased that work and strengthened its access-control tests.

Testing

Automated coverage includes artifact synchronization and versioning, access control, catalog pagination and search, thumbnail validation, sharing, deletion, restoration, and shared-conversation behavior.

Manual workflow:

  1. Generate an artifact and confirm it appears in Personal.
  2. Open it from the catalog and confirm the source conversation and artifact panel open.
  3. Share it and confirm it appears in Shared for the recipient.
  4. Delete it, reopen it from the source chat, and restore it.
  5. Delete the source conversation and confirm the saved artifact remains available in the standalone view.
  6. Open a shared conversation and confirm owner-only share/sync controls are not shown.

Change type

  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented in complex areas of the code
  • I have made corresponding documentation changes
  • My changes generate no new warnings
  • I have added tests covering the feature and its fixes

@github-actions
github-actions Bot changed the base branch from main to dev September 16, 2026 15:59
@github-actions

Copy link
Copy Markdown
Contributor

👋 Thanks for the contribution! LibreChat merges all changes into dev first — main only moves at release time — so this pull request's base branch was switched from main to dev automatically.

Nothing is needed from you; your commits, reviews and discussion are unchanged. If the diff now shows files you did not touch, rebase onto dev:

git remote add upstream https://github.com/danny-avila/LibreChat.git
git fetch upstream dev
git rebase upstream/dev
git push --force-with-lease

Maintainers: apply the target: main label and restore the base branch if this one genuinely belongs on main.

@romy651
romy651 marked this pull request as draft September 16, 2026 16:01
@romy651
romy651 force-pushed the feat/artifact-apps-release branch from 8ff4b39 to b152f9d Compare September 16, 2026 16:27
Romuald Wandji and others added 3 commits September 18, 2026 11:35
…ries

Resolve basedOnVersionNumber once when a snapshot is captured and persist it
with the request, instead of re-deriving it at send time. Re-deriving let
stale queued content borrow a fresher version's baseline and defeat the
server's conflict check, silently overwriting edits from another tab/device.

- Confirmed absence (404) is now baseline 0, distinct from unresolved.
- An unresolved baseline is recovered by Worker.tsx before ever sending
  (queue.ts: recordArtifactSyncBaseline), never sent as an unchecked write.
- useWithdrawArtifactVersionMutation also invalidates the catalog list and
  source-keyed detail cache, previously left showing the withdrawn version.
@romy651

romy651 commented Sep 19, 2026

Copy link
Copy Markdown
Author

Hi @danny-avila, I need your review on this

@codegraph-librechat codegraph-librechat Bot added the 🗺️ Chat Features codegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9) label Oct 3, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🗺️ Chat Features codegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9) 🛡️ security review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants