feat: block new Appsmith AI datasource creation and show deprecation banner#42015
feat: block new Appsmith AI datasource creation and show deprecation banner#42015salevine wants to merge 4 commits into
Conversation
…banner Appsmith AI (appsmithai-plugin) is being deprecated in 2.3 to stop Appsmith-paid managed AI spend; users migrate to the BYOK OpenAI / Anthropic / Google AI datasources. Server: - New DEPRECATED_DATASOURCE_PLUGIN error (400, AE-DTS-4031). - DatasourceServiceCEImpl.create() rejects brand-new datasources whose plugin package is in getDeprecatedPluginPackageNames() (protected seam so EE can add appsmith-agent-plugin). Storage-saves for existing datasources (id present) are unaffected. - create()'s old body moved to createWithoutDeprecationCheck(); the fork service uses it so forking apps with existing Appsmith AI datasources keeps working. Import (createWithoutPermissions) is untouched and therefore exempt by construction — deliberate product decision so existing apps keep importing until the T+60 credential shutoff. Client: - Appsmith AI removed from the AI Integrations create-new list; other AI plugins remain. - New AppsmithAIDeprecationCallout (warning, kill date September 30, 2026, migration guidance incl. file-context loss, docs link) shown on the datasource editor (view + edit) and Appsmith AI query editor. Tests: 3 new DatasourceServiceTest cases (create rejected, bypass method succeeds, existing-datasource storage-save allowed); jest tests for the callout and the create-list filter. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AN5jb73MFwozkWuB4jvs6W
WalkthroughAppsmith AI is marked as deprecated across the client and server. The client adds migration callouts and removes new query paths, while the server blocks new datasource and query creation and preserves bypass paths for existing or internal flows. ChangesAppsmith AI deprecation
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Editor
participant LayoutActionServiceCEImpl
participant DatasourceServiceCEImpl
participant PluginRepository
Editor->>LayoutActionServiceCEImpl: create datasource action
LayoutActionServiceCEImpl->>DatasourceServiceCEImpl: validate query creation
DatasourceServiceCEImpl->>PluginRepository: resolve datasource plugin
PluginRepository-->>DatasourceServiceCEImpl: Appsmith AI package
DatasourceServiceCEImpl-->>Editor: DEPRECATED_PLUGIN_QUERY_CREATION
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 3❌ Failed checks (3 warnings)
✅ Passed checks (2 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
app/client/src/components/editorComponents/AppsmithAIDeprecationCallout.test.tsx (1)
36-42: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winTest the migration link interaction.
The test verifies only the label, so a no-op handler or incorrect
DocsLinkvalue would pass. MockopenDocorwindow.open, click “Learn how to migrate,” and assert thatDocsLink.APPSMITH_AI_DEPRECATIONis used.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/client/src/components/editorComponents/AppsmithAIDeprecationCallout.test.tsx` around lines 36 - 42, Extend the “renders the migration docs link” test around renderCallout to mock the documentation-opening behavior, click the “Learn how to migrate” link, and assert that it invokes openDoc or window.open with DocsLink.APPSMITH_AI_DEPRECATION. Keep the existing label assertion and verify the interaction uses the expected destination.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/client/src/constants/DocumentationLinks.ts`:
- Around line 26-28: Update the APPSMITH_AI_DEPRECATION documentation link to
the published Appsmith AI BYOK migration guide, ensuring the deprecation
banner’s “Learn how to migrate” destination provides migration guidance rather
than the general Appsmith AI reference page.
---
Nitpick comments:
In
`@app/client/src/components/editorComponents/AppsmithAIDeprecationCallout.test.tsx`:
- Around line 36-42: Extend the “renders the migration docs link” test around
renderCallout to mock the documentation-opening behavior, click the “Learn how
to migrate” link, and assert that it invokes openDoc or window.open with
DocsLink.APPSMITH_AI_DEPRECATION. Keep the existing label assertion and verify
the interaction uses the expected destination.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4d772641-0639-4b39-afc5-5790edf5f517
📒 Files selected for processing (14)
app/client/src/PluginActionEditor/components/PluginActionForm/components/UQIEditor/UQIEditorForm.tsxapp/client/src/ce/constants/messages.tsapp/client/src/components/editorComponents/AppsmithAIDeprecationCallout.test.tsxapp/client/src/components/editorComponents/AppsmithAIDeprecationCallout.tsxapp/client/src/constants/DocumentationLinks.tsapp/client/src/pages/Editor/DataSourceEditor/index.tsxapp/client/src/pages/Editor/IntegrationEditor/AIPlugins.tsxapp/client/src/pages/Editor/IntegrationEditor/__tests__/aiPlugins.test.tsxapp/server/appsmith-server/src/main/java/com/appsmith/server/datasources/base/DatasourceServiceCE.javaapp/server/appsmith-server/src/main/java/com/appsmith/server/datasources/base/DatasourceServiceCEImpl.javaapp/server/appsmith-server/src/main/java/com/appsmith/server/datasources/fork/DatasourceForkableServiceCEImpl.javaapp/server/appsmith-server/src/main/java/com/appsmith/server/exceptions/AppsmithError.javaapp/server/appsmith-server/src/main/java/com/appsmith/server/exceptions/AppsmithErrorCode.javaapp/server/appsmith-server/src/test/java/com/appsmith/server/services/DatasourceServiceTest.java
…estination The BYOK migration guide is not yet published, so the callout link still points at the Appsmith AI reference page; 'Learn how to migrate' promised guidance that page doesn't have. Relabel to 'Learn more' until the guide ships (TODO tracks restoring the label), and assert the link opens DocsLink.APPSMITH_AI_DEPRECATION on click. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WfztenqynzJcU2DZJD6nR5
… the migration guide appsmith-docs#3025 replaces the Appsmith AI reference page with a migration guide at the same URL, so the callout link label and target now match; merge that PR before or with this one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WfztenqynzJcU2DZJD6nR5
Server: new DEPRECATED_PLUGIN_QUERY_CREATION error (400, AE-DTS-4032); LayoutActionServiceCEImpl.createSingleAction runs a deprecation guard (after page-permission resolution) via the new DatasourceService.validateNewQueryCreationAllowed, which resolves saved datasources with a permission-scoped read and checks embedded payloads by pluginId so an id-less Appsmith AI datasource can't bypass the block. The createAction(dto, meta) overload used by clone/fork/import is intentionally unguarded so existing Appsmith AI queries keep working. EE extends the blocklist via the existing getDeprecatedPluginPackageNames() override. Client: Appsmith AI datasources no longer appear as query-creation sources (omnibar, query add pane, explorer files list); the New query button is hidden on the Appsmith AI datasource page and datasource card. Tests: guard blocks saved and embedded AI datasources, clone-context creation still succeeds; GlobalSearch filter covered in jest. Copy/ duplicate of an existing Appsmith AI query now fails with the same 400 by design (a copy is a new query). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WfztenqynzJcU2DZJD6nR5
|
/build-deploy-preview skip-tests=true |
|
Deploying Your Preview: https://github.com/appsmithorg/appsmith/actions/runs/29851851855. |
|
Deploy-Preview-URL: https://ce-42015.dp.appsmith.com |
Description
TL;DR: First shipping step of the Appsmith AI deprecation (release 2.3): users can no longer create new Appsmith AI (
appsmithai-plugin) datasources or new queries against existing ones — the tile is hidden in the create-new flow, query-creation affordances are hidden, and the API rejects both with a clear 400 — while existing Appsmith AI datasources and queries keep working and now show a deprecation banner with the shutdown date (September 30, 2026) and BYOK migration guidance.Appsmith pays for LLM tokens behind the managed Appsmith AI plugin (proxied through Cloud Services with Appsmith-owned credentials). Per the deprecation plan, 2.3 blocks new adoption and tells existing users to migrate to the OpenAI / Anthropic / Google AI datasources with their own API keys. Managed credentials are revoked ~60 days after GA as the hard stop.
Server
DEPRECATED_DATASOURCE_PLUGINerror (400,AE-DTS-4031) with an actionable message naming the BYOK alternatives.DatasourceServiceCEImpl.create()rejects brand-new datasources whose plugin package is ingetDeprecatedPluginPackageNames()— aprotectedmethod (CE =appsmithai-plugin) so the EE repo can extend the blocklist withappsmith-agent-pluginwithout CE changes.create()body moved to a newcreateWithoutDeprecationCheck(); the fork service now uses it.Client
AIPlugins.tsx); OpenAI / Anthropic / Google AI remain.AppsmithAIDeprecationCallout(ADSCallout, warning, non-dismissible, "Learn how to migrate" docs link) mounted on the datasource editor (view + edit) and on the Appsmith AI query editor. Copy explicitly calls out that uploaded files (file context) will not be available after the shutdown date.Explicit decisions (per product direction)
createWithoutPermissions, which never routed throughcreate(); fork usescreateWithoutDeprecationCheck.)DEPRECATED_PLUGIN_QUERY_CREATION(400,AE-DTS-4032) from a guard inLayoutActionServiceCEImpl.createSingleAction, running after page-permission resolution; saved datasources are resolved with a permission-scoped read, and embedded (id-less) payloads are checked bypluginIdso a crafted payload can't bypass the block. ThecreateAction(dto, meta)overload used by clone/fork/import is intentionally unguarded so existing Appsmith AI queries survive those flows (pinned by test). Client: Appsmith AI datasources are filtered from all query-creation lists (omnibar, query add pane, explorer files) and the New query button is hidden on the datasource page and card.Follow-ups tracked
getDeprecatedPluginPackageNames()to addappsmith-agent-plugin; EE banners for Agent/RAG surfaces.Docs: publish the BYOK migration guide and repointDone: docs: replace Appsmith AI reference with migration guide (deprecated Sept 30, 2026) appsmith-docs#3025 replaces the Appsmith AI reference page with the migration guide at the same URL, so no repoint is needed — merge that PR before or with this one.DocsLink.APPSMITH_AI_DEPRECATION.DEPRECATED_DATASOURCE_PLUGINrejections to measure migration ahead of the kill date.Tests
DatasourceServiceTest): create withappsmithai-pluginrejected;createWithoutDeprecationChecksucceeds (fork path); existing-datasource storage-save allowed. All 3 green locally with CI-equivalent env.ActionServiceCE_Test): new query on a saved Appsmith AI datasource rejected; embedded (id-less) Appsmith AI datasource payload rejected; clone-context creation on an Appsmith AI datasource succeeds. Green locally, plusCurlImporterServiceTest(32) andCreateDBTablePageSolutionTests(17) as regression checks on the guarded path.yarn check-typesand ESLint clean.Fixes #9316
Automation
/ok-to-test tags="@tag.All"
🔍 Cypress test results
Tip
🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
Workflow run: https://github.com/appsmithorg/appsmith/actions/runs/29837761810
Commit: ac8c527
Cypress dashboard.
Tags:
@tag.AllSpec:
Tue, 21 Jul 2026 15:20:02 UTC
Communication
Should the DevRel and Marketing teams inform users about this change?
🤖 Generated with Claude Code
https://claude.ai/code/session_01AN5jb73MFwozkWuB4jvs6W
Summary by CodeRabbit