Repository: appsmithorg/appsmith
Pull request #40214: chore: Enable templates for agents
Author: login: jsartisan
Labels: name: skip-changelog
description: Adding this label to a PR prevents it from being listed in the changelog
name: ok-to-test
description: Required label for CI
Created: 2025-04-11T05:23:11Z | Merged: 2025-04-15T06:16:26Z

/ok-to-test tags="@tag.Templates"
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Improved template filtering logic to display relevant templates based on the AI agent flow.
	- Enhanced template selection process with conditional logic based on the AI agent flow status.
	- Incorporated feature flag data into the test setup for the TemplateFilters component.
- **Bug Fixes**
	- Updated rendering logic to ensure the HorizontalLine and building blocks section are only displayed when applicable.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/14462054954>
> Commit: 4df9dc98f5f53c5c9ec5d908f4969aae73b4a290
> <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=14462054954&attempt=1" target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Templates`
> Spec:
> <hr>Tue, 15 Apr 2025 05:56:58 UTC
<!-- end of auto-generated comment: Cypress test results  -->



Diff:
diff --git a/app/client/src/pages/Templates/TemplateContent/index.tsx b/app/client/src/pages/Templates/TemplateContent/index.tsx
index 2c1ec360754a..30dfc7b7bad4 100644
--- a/app/client/src/pages/Templates/TemplateContent/index.tsx
+++ b/app/client/src/pages/Templates/TemplateContent/index.tsx
@@ -83,8 +83,8 @@ function TemplateList(props: TemplateListProps) {
           </TemplateGrid>
         </>
       )}
-      {showHorizontalLine && <HorizontalLine />}
-      {showBuildingBlocksSection && (
+      {showHorizontalLine && buildingBlocks.length > 0 && <HorizontalLine />}
+      {showBuildingBlocksSection && buildingBlocks.length > 0 && (
         <>
           <SubheadingText kind="heading-m">
             {createMessage(ADD_PAGE_FROM_TEMPLATE_MODAL.buildingBlocksTitle)}
@@ -123,14 +123,9 @@ export function TemplateContent(props: TemplateContentProps) {
   const isLoading = isFetchingApplications || isFetchingTemplates;
 
   const filterWithAllowPageImport = props.filterWithAllowPageImport || false;
-  const templates = useSelector(getSearchedTemplateList)
-    .filter((template) =>
-      filterWithAllowPageImport ? !!template.allowPageImport : true,
-    )
-    // We are using AI Agent template for creating ai agent app,
-    // so we are not showing it in the templates list.
-    // TODO: Once we have a new entity for ai agent, we need to remove this filter.
-    .filter((template) => template.title !== "AI Agent");
+  const templates = useSelector(getSearchedTemplateList).filter((template) =>
+    filterWithAllowPageImport ? !!template.allowPageImport : true,
+  );
 
   if (isLoading) {
     return <LoadingScreen text="Loading templates" />;
diff --git a/app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx b/app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx
index 776b04a0e6bf..b8180f306f98 100644
--- a/app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx
+++ b/app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx
@@ -12,6 +12,7 @@ import {
   unitTestMockTemplate,
   unitTestMockTemplateAllFilters,
 } from "../test_config";
+import { DEFAULT_FEATURE_FLAG_VALUE } from "ee/entities/FeatureFlag";
 
 const mockStore = configureStore([]);
 
@@ -36,6 +37,13 @@ describe("<TemplateFilters />", () => {
           templateSearchQuery: "",
           templates: [unitTestMockTemplate],
         },
+        users: {
+          featureFlag: {
+            data: DEFAULT_FEATURE_FLAG_VALUE,
+            overriddenFlags: {},
+            isFetching: false,
+          },
+        },
       },
     });
   });
diff --git a/app/client/src/selectors/templatesSelectors.tsx b/app/client/src/selectors/templatesSelectors.tsx
index fd322ce96619..b0d7abfaa560 100644
--- a/app/client/src/selectors/templatesSelectors.tsx
+++ b/app/client/src/selectors/templatesSelectors.tsx
@@ -15,6 +15,7 @@ import type { Filter } from "pages/Templates/TemplateFilters";
 import { TEMPLATE_BUILDING_BLOCKS_FILTER_FUNCTION_VALUE } from "pages/Templates/constants";
 import { createSelector } from "reselect";
 import type { WidgetCardProps } from "widgets/BaseWidget";
+import { getIsAiAgentFlowEnabled } from "ee/selectors/aiAgentSelectors";
 
 const fuzzySearchOptions = {
   keys: ["title", "id", "datasources", "widgets"],
@@ -24,8 +25,33 @@ const fuzzySearchOptions = {
   distance: 100,
 };
 
-export const getTemplatesSelector = (state: AppState) =>
-  state.ui.templates.templates;
+const AGENT_TEMPLATES_USE_CASE = "Agent";
+const AGENT_TEMPLATES_TITLE = "AI Agent";
+
+export const getTemplatesSelector = createSelector(
+  (state: AppState) => state.ui.templates.templates,
+  getIsAiAgentFlowEnabled,
+  (templates, isAiAgentFlowEnabled) => {
+    // For agents, we only show the templates that have the use case "Agent".
+    // The "Agent" use case acts as a filter for use to just show the templates
+    // that are relevant to agents.
+    return (
+      templates
+        .filter((template) => {
+          if (isAiAgentFlowEnabled) {
+            return template.useCases.includes(AGENT_TEMPLATES_USE_CASE);
+          }
+
+          return true;
+        })
+        // We are using AI Agent template for creating ai agent app,
+        // so we are not showing it in the templates list.
+        // TODO: Once we have a new entity for ai agent, we need to remove this filter.
+        .filter((template) => template.title !== AGENT_TEMPLATES_TITLE)
+    );
+  },
+);
+
 export const isImportingTemplateSelector = (state: AppState) =>
   state.ui.templates.isImportingTemplate;
 export const isImportingTemplateToAppSelector = (state: AppState) =>


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 953a7166fb72a72323b2e121c29a9d394814eaf5 and 5ecbe77f931ed9a9827675340779c346ad126c38.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `app/client/src/pages/Templates/TemplateContent/index.tsx` (2 hunks)

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (5)</summary>

* GitHub Check: client-build / client-build
* GitHub Check: client-lint / client-lint
* GitHub Check: client-check-cyclic-deps / check-cyclic-dependencies
* GitHub Check: client-unit-tests / client-unit-tests
* GitHub Check: client-prettier / prettier-check

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>app/client/src/pages/Templates/TemplateContent/index.tsx (2)</summary>

`120-121`: **Good practice using constants for string values.**

Using constants for string values improves maintainability and reduces the risk of typos.

---

`146-146`: **Good practice replacing string literal with constant.**

Properly utilizing the newly defined constant `AGENT_TEMPLATES_TITLE` instead of the string literal.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-11T05:25:25Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>♻️ Duplicate comments (1)</summary><blockquote>

<details>
<summary>app/client/src/selectors/templatesSelectors.tsx (1)</summary><blockquote>

`18-18`: **Import for feature flag selector added.**

This correctly implements the missing import that was flagged in a previous review.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro (Legacy)**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 4247afec4588ab22423967e3e5ad06b2a3d2faef and 7a34b9e8195061e10805aa53dd660b85ec500556.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `app/client/src/pages/Templates/TemplateContent/index.tsx` (2 hunks)
* `app/client/src/selectors/templatesSelectors.tsx` (2 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (2)</summary>

<details>
<summary>app/client/src/pages/Templates/TemplateContent/index.tsx (1)</summary><blockquote>

<details>
<summary>app/client/src/selectors/templatesSelectors.tsx (1)</summary>

* `getSearchedTemplateList` (175-187)

</details>

</blockquote></details>
<details>
<summary>app/client/src/selectors/templatesSelectors.tsx (2)</summary><blockquote>

<details>
<summary>app/client/src/ce/reducers/index.tsx (1)</summary>

* `AppState` (98-191)

</details>
<details>
<summary>app/client/src/ce/selectors/aiAgentSelectors.ts (1)</summary>

* `getIsAiAgentFlowEnabled` (9-11)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (5)</summary>

* GitHub Check: client-lint / client-lint
* GitHub Check: client-unit-tests / client-unit-tests
* GitHub Check: client-check-cyclic-deps / check-cyclic-dependencies
* GitHub Check: client-build / client-build
* GitHub Check: client-prettier / prettier-check

</details>

<details>
<summary>🔇 Additional comments (3)</summary><blockquote>

<details>
<summary>app/client/src/pages/Templates/TemplateContent/index.tsx (2)</summary>

`87-87`: **Added additional check for empty building blocks.**

This change enhances the rendering logic to only display the building blocks section when there are actually building blocks available. This prevents rendering an empty section when no building blocks exist.

---

`126-128`: **Simplified template filtering logic.**

The filtering logic has been streamlined to depend solely on the `filterWithAllowPageImport` flag. This simplification is connected to the new filtering mechanism implemented in the `getTemplatesSelector` function in the templatesSelectors.tsx file.

</details>
<details>
<summary>app/client/src/selectors/templatesSelectors.tsx (1)</summary>

`28-29`: **Constants added for agent-related template filtering.**

Good practice to define these as constants rather than hardcoding the strings in the filter logic.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-11T14:07:07Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx (1)</summary><blockquote>

`40-46`: **Good addition of feature flag data to the mock store.**

Adding the feature flag data to the mock store helps test the component's behavior with different feature flag configurations. This is a necessary update to support the template filtering changes related to AI agents.


However, I note that `license_ai_agent_enabled` is set to `false` in the default values. If you're testing functionality that depends on this flag being enabled, consider adding a test case that overrides this flag to `true`.

```typescript
// Example of a potential additional test case
it("displays AI agent templates when license_ai_agent_enabled is true", () => {
  store = mockStore({
    // ...existing mock store setup
    ui: {
      // ...existing ui setup
      users: {
        featureFlag: {
          data: DEFAULT_FEATURE_FLAG_VALUE,
          overriddenFlags: { license_ai_agent_enabled: true },
          isFetching: false,
        },
      },
    },
  });
  
  // Test that agent templates are displayed
});
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro (Legacy)**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 7a34b9e8195061e10805aa53dd660b85ec500556 and 35ab1cd0ae6a12a3055f51d26fcd589955200f48.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `app/client/src/pages/Templates/TemplateContent/index.tsx` (1 hunks)
* `app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx` (2 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* app/client/src/pages/Templates/TemplateContent/index.tsx

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (1)</summary>

<details>
<summary>app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx (1)</summary><blockquote>

<details>
<summary>app/client/src/ce/entities/FeatureFlag.ts (1)</summary>

* `DEFAULT_FEATURE_FLAG_VALUE` (67-109)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (5)</summary>

* GitHub Check: client-lint / client-lint
* GitHub Check: client-unit-tests / client-unit-tests
* GitHub Check: client-check-cyclic-deps / check-cyclic-dependencies
* GitHub Check: client-build / client-build
* GitHub Check: client-prettier / prettier-check

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>app/client/src/pages/Templates/TemplateFilters/TemplateFilter.test.tsx (1)</summary>

`15-15`: **Appropriate import added for feature flags.**

The import of `DEFAULT_FEATURE_FLAG_VALUE` is necessary to set up the mock Redux store with feature flag data for testing.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T12:18:20Z
user: login: hetunandu
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-15T05:27:08Z

Review comments:
diff_hunk: @@ -127,10 +130,20 @@ export function TemplateContent(props: TemplateContentProps) {
     .filter((template) =>
       filterWithAllowPageImport ? !!template.allowPageImport : true,
     )
+    // For agents, we only show the templates that have the use case "Agent".
+    // The "Agent" use case acts as a filter for use to just show the templates
+    // that are relevant to agents.
+    .filter((template) => {
+      if (isAiAgentFlowEnabled) {
+        return template.useCases.includes(AGENT_TEMPLATES_USE_CASE);
+      }
+
+      return true;
+    })
path: app/client/src/pages/Templates/TemplateContent/index.tsx
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Undefined variable issue: `isAiAgentFlowEnabled` is not declared.**

The variable `isAiAgentFlowEnabled` is used but not imported or declared anywhere in this file. This will cause a runtime error.


```diff
+ import { isAiAgentFlowEnabled } from "selectors/featureFlagsSelectors";
// or declare it properly where needed
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
import { isAiAgentFlowEnabled } from "selectors/featureFlagsSelectors";
  
// Other imports and code...

// For agents, we only show the templates that have the use case "Agent".
// The "Agent" use case acts as a filter for use to just show the templates
// that are relevant to agents.
.filter((template) => {
  if (isAiAgentFlowEnabled) {
    return template.useCases.includes(AGENT_TEMPLATES_USE_CASE);
  }

  return true;
})
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-11T05:25:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -24,8 +25,33 @@ const fuzzySearchOptions = {
   distance: 100,
 };
 
-export const getTemplatesSelector = (state: AppState) =>
-  state.ui.templates.templates;
+const AGENT_TEMPLATES_USE_CASE = "Agent";
+const AGENT_TEMPLATES_TITLE = "AI Agent";
+
+export const getTemplatesSelector = createSelector(
+  (state: AppState) => state.ui.templates.templates,
+  getIsAiAgentFlowEnabled,
+  (templates, isAiAgentFlowEnabled) => {
+    // For agents, we only show the templates that have the use case "Agent".
+    // The "Agent" use case acts as a filter for use to just show the templates
+    // that are relevant to agents.
+    return (
+      templates
+        .filter((template) => {
+          if (isAiAgentFlowEnabled) {
+            return template.useCases.includes(AGENT_TEMPLATES_USE_CASE);
+          }
+
+          return true;
+        })
+        // We are using AI Agent template for creating ai agent app,
+        // so we are not showing it in the templates list.
+        // TODO: Once we have a new entity for ai agent, we need to remove this filter.
+        .filter((template) => template.title !== AGENT_TEMPLATES_TITLE)
+    );
+  },
+);
path: app/client/src/selectors/templatesSelectors.tsx
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**New selector function for template filtering based on AI agent flow.**

This selector implements a centralized filtering mechanism that:
1. Shows only Agent-related templates when AI agent flow is enabled
2. Always excludes the "AI Agent" template regardless of feature flag status

The comments explain the filtering logic well, including the TODO note about future refactoring once a new entity for AI agents is implemented.


---

🏁 Script executed:

```shell
#!/bin/bash
# Verify that all template references in the codebase now use the new selector

# Check if there are any direct accesses to state.ui.templates.templates that should use getTemplatesSelector instead
rg -t tsx -t ts "state\.ui\.templates\.templates" --no-filename | grep -v "getTemplatesSelector"
```

Length of output: 124

---

**Selector Verification Update – Revised Verification Command**

The new selector function in **app/client/src/selectors/templatesSelectors.tsx** (lines 31–53) correctly implements:
- Filtering for Agent-specific templates when AI agent flow is enabled.
- Consistently excluding the "AI Agent" template.

Since the previous verification command failed due to file type issues with TSX files, please re-run the revised script above. If no output is produced, it confirms that all references to `state.ui.templates.templates` are appropriately routed through `getTemplatesSelector`.



---

🏁 Script executed:

```shell

#!/bin/bash
# Revised check: search TS and TSX files for direct references to "state.ui.templates.templates"
# that are not using "getTemplatesSelector".
rg -g "*.tsx" -g "*.ts" "state\.ui\.templates\.templates" --no-filename | grep -v "getTemplatesSelector"
```

Length of output: 541

---



</details>

**Attention: Inconsistent Selector Usage Detected**

The new selector in **app/client/src/selectors/templatesSelectors.tsx** (lines 31–53) correctly encapsulates the filtering logic for Agent-related templates when AI agent flow is enabled and consistently excludes the "AI Agent" template. However, our verification reveals several direct references to `state.ui.templates.templates` in other parts of the codebase, including:

- Direct access for reading the array and its length (e.g., `(state: AppState) => state.ui.templates.templates.length`)
- References used for operations like `.find()` and `.filter()`
- Other usages where state is directly manipulated (e.g., `state.ui.templates.templatesModal`)

**Action Items:**
- **Review** each of the direct references above and determine if they should be updated to use `getTemplatesSelector` for consistent filtering logic.
- **Refactor** the areas where direct state access bypasses the centralized selector, ensuring unified behavior across the application.

Please address these discrepancies to maintain consistency and ensure that the new centralized filtering is fully leveraged.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-11T14:07:06Z
author_association: CONTRIBUTOR

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-04-11T05:23:18Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough
The changes simplify the template filtering logic in the `TemplateContent` component by removing the exclusion of templates titled "AI Agent." The filtering now checks the presence of elements in the `buildingBlocks` array. Additionally, a new selector function, `getTemplatesSelector`, has been introduced in the `templatesSelectors.tsx` file, which utilizes `createSelector` to filter templates based on the AI agent flow status and includes constants for use case and title. The test setup for the `<TemplateFilters />` component has also been enhanced with feature flag data.

## Changes
| File                                            | Change Summary                                                                                                                                                                         |
|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| app/.../Templates/TemplateContent/index.tsx     | Simplified filtering logic by checking if the `buildingBlocks` array has elements; removed exclusion of templates titled "AI Agent."                                                  |
| app/.../selectors/templatesSelectors.tsx        | Introduced `getTemplatesSelector` using `createSelector` for filtering templates based on AI agent flow; added constants `AGENT_TEMPLATES_USE_CASE` and `AGENT_TEMPLATES_TITLE`.      |
| app/.../Templates/TemplateFilters/TemplateFilter.test.tsx | Enhanced test setup by adding `users` object with feature flag data to the mock Redux store, including `DEFAULT_FEATURE_FLAG_VALUE`.                                                |

## Suggested reviewers
- ankitakinger
- hetunandu

## Poem
> In the code where templates reside,  
> Building blocks gather, side by side.  
> Filters refined, with logic so bright,  
> AI agents now dance in the light.  
> Simplified paths, a coder's delight!  
> ✨🚀

<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro (Legacy)**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between bbe7fca70dd7090095d53fbd317504d1ba400aad and 4df9dc98f5f53c5c9ec5d908f4969aae73b4a290.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `app/client/src/pages/Templates/TemplateContent/index.tsx` (2 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* app/client/src/pages/Templates/TemplateContent/index.tsx

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (4)</summary>

* GitHub Check: client-unit-tests / client-unit-tests
* GitHub Check: client-check-cyclic-deps / check-cyclic-dependencies
* GitHub Check: client-build / client-build
* GitHub Check: client-prettier / prettier-check

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=appsmithorg/appsmith&utm_content=40214):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-15T05:33:48Z
body: Whoops! Looks like you're using an outdated method of running the Cypress suite. 
Please check this <a href="https://www.notion.so/appsmith/Changes-to-triggering-Cypress-tests-in-PRs-9c14598a1dd94d13a17610e1473e514f" target="_blank">doc</a> to learn how to correct this!
author_association: NONE