Skip to content

feat(intelligent-assistant): consolidate RBAC permissions into feature-linked sets - #4612

Merged
michael-valdron merged 1 commit into
redhat-developer:mainfrom
michael-valdron:feat/ia-revise-feature-permissions
Sep 8, 2026
Merged

michael-valdron merged 1 commit into
redhat-developer:mainfrom
michael-valdron:feat/ia-revise-feature-permissions

Conversation

@michael-valdron

Copy link
Copy Markdown
Member

Description

Consolidates Intelligent Assistant RBAC permissions from eight behavior-linked names into four feature-linked sets: intelligent-assistant.chat, intelligent-assistant.notebooks, intelligent-assistant.mcp.tools, and intelligent-assistant.skills. Backend routes, frontend permission checks, example RBAC policies, and documentation are updated to use the new permission names and exported constants.

Fixed

✔️ Checklist

  • A changeset describing the change and affected packages. (more info)
  • Added or Updated documentation
  • Tests for new functionality and regression tests for bug fixes
  • Screenshots attached (for UI changes)

Made with Cursor

@rhdh-gh-app

rhdh-gh-app Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

This PR includes changes that affect public-facing API. Please ensure you are adding/updating documentation for new features or behavior.

Changed Packages

Package Name Package Path Changeset Bump Current Version
@red-hat-developer-hub/backstage-plugin-intelligent-assistant-backend workspaces/intelligent-assistant/plugins/intelligent-assistant-backend major v4.2.0
@red-hat-developer-hub/backstage-plugin-intelligent-assistant-common workspaces/intelligent-assistant/plugins/intelligent-assistant-common major v4.2.0
@red-hat-developer-hub/backstage-plugin-intelligent-assistant workspaces/intelligent-assistant/plugins/intelligent-assistant major v4.2.0

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Summary by Qodo

Consolidate Intelligent Assistant RBAC into feature permissions

✨ Enhancement 📝 Documentation 🧪 Tests ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces eight behavior permissions with four feature-scoped Intelligent Assistant permissions.
• Aligns backend guards, frontend checks, policies, tests, and public API exports.
• Documents the breaking RBAC migration and major package releases.
Diagram

graph TD
  COMMON["Common Permissions"] --> BACKEND["Backend Guards"] --> ROUTES["Protected Routes"]
  COMMON --> HOOKS["Frontend Hooks"] --> UI["Feature UI"]
  DOCS["Migration Docs"] --> POLICY["RBAC Policies"] --> BACKEND
  POLICY --> HOOKS
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Retain behavior-level permissions
  • ➕ Preserves separate access, use, and management privileges.
  • ➕ Avoids breaking existing RBAC policies and public imports.
  • ➖ Maintains eight grants for four user-facing features.
  • ➖ Increases configuration complexity and risks inconsistent feature access.
2. Provide a compatibility transition
  • ➕ Allows existing policies and consumers to migrate incrementally.
  • ➕ Reduces disruption for installations upgrading between major versions.
  • ➖ Requires temporary aliases or authorization against old and new permissions.
  • ➖ Extends maintenance and makes effective authorization harder to understand.

Recommendation: Use the feature-linked model because it matches the intended feature-level authorization boundary and substantially simplifies policy administration. The major changeset appropriately signals the breaking public API and RBAC migration; a compatibility period is only preferable if consumers cannot coordinate policy updates with the major upgrade.

Files changed (17) +125 / -193

Enhancement (10) +80 / -127
notebooksRouters.tsProtect all notebook routes with one permission +12/-15

Protect all notebook routes with one permission

• Replaces separate notebook use and manage guards with the shared 'iaNotebooksPermission' across session, document, and query endpoints.

workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/src/service/notebooks/notebooksRouters.ts

router.tsApply feature permissions across backend routes +25/-28

Apply feature permissions across backend routes

• Replaces behavior-specific chat, MCP, notebook, and skills guards with four feature-level permission constants. Read, create, update, and management operations within each feature now share one authorization boundary.

workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/src/service/router.ts

permissions.tsDefine four feature-level permissions +16/-52

Define four feature-level permissions

• Replaces eight behavior-linked permission definitions with chat, notebooks, MCP tools, and skills permissions. Updates the exported permission registry accordingly.

workspaces/intelligent-assistant/plugins/intelligent-assistant-common/src/permissions.ts

LightSpeedChat.tsxShow the consolidated notebooks permission +2/-2

Show the consolidated notebooks permission

• Uses the renamed notebook permission field when rendering the missing-permission state.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/LightSpeedChat.tsx

LightspeedChatContainer.tsxGate chat UI with one permission +2/-3

Gate chat UI with one permission

• Replaces the combined chat access and use checks with a single feature permission and displays its name when access is denied.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/LightspeedChatContainer.tsx

McpServersSettings.tsxGate MCP management with the tools permission +5/-5

Gate MCP management with the tools permission

• Switches MCP settings authorization from the former manage permission to the consolidated MCP tools permission.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx

useLightspeedNotebooksPermission.tsEvaluate the feature-level notebooks permission +3/-3

Evaluate the feature-level notebooks permission

• Updates the notebook authorization hook to check and expose the consolidated notebooks permission.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/hooks/notebooks/useLightspeedNotebooksPermission.ts

useLightspeedDeletePermission.tsAuthorize chat deletion through chat access +2/-2

Authorize chat deletion through chat access

• Changes the deletion hook from the removed chat management permission to the consolidated chat permission.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/hooks/useLightspeedDeletePermission.ts

useLightspeedUpdatePermission.tsAuthorize chat updates through chat access +2/-2

Authorize chat updates through chat access

• Changes the update hook from the removed chat management permission to the consolidated chat permission.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/hooks/useLightspeedUpdatePermission.ts

useLightspeedViewPermission.tsSimplify chat feature authorization +11/-15

Simplify chat feature authorization

• Replaces separate access and use checks with one typed permission result. The hook now exposes a single permission name for denial messaging.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/hooks/useLightspeedViewPermission.ts

Tests (2) +7 / -13
LightspeedChat.test.tsxUpdate notebook permission denial coverage +1/-1

Update notebook permission denial coverage

• Adjusts the denied-notebooks mock to recognize the consolidated notebook permission name.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/tests/LightspeedChat.test.tsx

Trans.test.tsxTest singular chat permission messaging +6/-12

Test singular chat permission messaging

• Updates permission-message formatting assertions from two chat permissions to the single consolidated chat permission.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/tests/Trans.test.tsx

Documentation (3) +27 / -45
README.mdDocument feature-level backend RBAC policies +17/-22

Document feature-level backend RBAC policies

• Updates migration mappings, policy examples, and notebook endpoint requirements to use the consolidated permissions. It also documents the skills permission.

workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/README.md

report.api.mdPublish consolidated permission exports +4/-16

Publish consolidated permission exports

• Updates the generated public API report to expose four feature-level permission constants instead of eight behavior-level constants.

workspaces/intelligent-assistant/plugins/intelligent-assistant-common/report.api.md

README.mdUpdate frontend RBAC policy examples +6/-7

Update frontend RBAC policy examples

• Rewrites example role grants to use the four consolidated permissions and adds the optional skills grant.

workspaces/intelligent-assistant/plugins/intelligent-assistant/README.md

Other (2) +11 / -8
clear-owls-dance.mdDeclare breaking permission consolidation +7/-0

Declare breaking permission consolidation

• Adds a major changeset for the common, backend, and frontend packages. It describes the migration to four feature-linked permissions.

workspaces/intelligent-assistant/.changeset/clear-owls-dance.md

rbac-policy.csvConsolidate example Intelligent Assistant grants +4/-8

Consolidate example Intelligent Assistant grants

• Replaces eight role grants with the four feature-level chat, notebooks, MCP tools, and skills permissions.

workspaces/intelligent-assistant/rbac-policy.csv

@rhdh-qodo-merge

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Upgrades can revoke assistant access 🐞 Bug ≡ Correctness
Description
README.md rewrites the legacy Lightspeed migration table to the new names but never maps the
permissions shipped by the immediately preceding release, including the chat, notebook, MCP, and
skills permissions, to their replacements. When operators upgrade with their existing RBAC CSV,
backend authorization asks for unmatched names, denying those features until the policies are
manually identified and rewritten.
Code

workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/README.md[R84-87]

+| Before                     | After                             |
+| -------------------------- | --------------------------------- |
+| `lightspeed.chat.read`     | `intelligent-assistant.chat`      |
+| `lightspeed.chat.create`   | `intelligent-assistant.chat`      |
Relevance

●●● Strong

Accepted documentation omissions are fixed here; upgrade migration tables must cover all legacy
permissions.

PR-#3834

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The migration section instructs operators to update RBAC policies but lists only Lightspeed-era
names. The published changelog records the currently deployed chat, notebook, and MCP names and the
separate skills permission, while the new permission definitions and registered permission array
contain only the four consolidated names.

workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/README.md[80-92]
workspaces/intelligent-assistant/plugins/intelligent-assistant-common/CHANGELOG.md[9-48]
workspaces/intelligent-assistant/plugins/intelligent-assistant-common/CHANGELOG.md[66-68]
workspaces/intelligent-assistant/plugins/intelligent-assistant-common/src/permissions.ts[22-60]
workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/src/service/router.ts[275-278]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The RBAC migration table only maps legacy Lightspeed permissions to the new consolidated permissions. Add mappings from every permission supported by the preceding Intelligent Assistant release, including the skills permission, so existing operators can update their policies safely.

## Issue Context
The backend now registers and enforces only the four consolidated names. Existing RBAC entries using the previously published names no longer authorize requests.

## Fix Focus Areas
- workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/README.md[80-92]
- workspaces/intelligent-assistant/plugins/intelligent-assistant-common/src/permissions.ts[22-60]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Denied users see failed server settings 🐞 Bug ≡ Correctness
Description
McpServersSettings derives canManageMcp from the new iaMcpToolsPermission but still
unconditionally calls loadServers, while rendering a read-only-access alert when that permission
is denied. The backend now protects GET /mcp-servers with that same permission, so opening the
settings without it produces the load error instead of the advertised read-only server list.
Code

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx[R295-298]

+  const mcpToolsPermission = usePermission({
+    permission: iaMcpToolsPermission,
  });
-  const canManageMcp = mcpManagePermission.allowed;
+  const canManageMcp = mcpToolsPermission.allowed;
Relevance

●●● Strong

Permission-gated UI must avoid inaccessible requests; similar permission-state correctness fixes
were accepted recently.

PR-#3690
PR-#4093

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The component uses the newly consolidated permission to identify a user as unable to manage MCP
settings, but its effect always fetches the server list. The endpoint requiring that list has been
changed to require exactly the same new permission, proving that the displayed read-only branch
cannot load its data for denied users.

workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx[295-299]
workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx[391-431]
workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx[559-565]
workspaces/intelligent-assistant/plugins/intelligent-assistant-backend/src/service/router.ts[315-319]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The MCP settings page shows a read-only state to users denied the consolidated MCP-tools permission, but it still fetches the server list. The backend denies that request using the same permission, so these users see an error rather than a usable read-only view.

## Issue Context
The prior permissions separated MCP read/use access from management access. The consolidated permission intentionally gates the full feature, so a denied user should receive an explicit permission-required state and should not issue requests that require the denied permission.

## Fix Focus Areas
- workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx[295-431]
- workspaces/intelligent-assistant/plugins/intelligent-assistant/src/components/McpServersSettings.tsx[551-566]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
⚠️ Tickets: not configured — ticket URL found in PR but could not be fetched — check ticket provider credentials
✅ Compliance rules (platform): 11 rules
✅ Cross-repo context — repo relationships
  Explored: repo: redhat-developer/rhdh-local (sha: d74dcd51)
  Explored: repo: redhat-developer/rhdh (sha: ddc19bef)
Review mode: 🧠 Deep: This is a broad RBAC behavior and public-permission API migration across backend routes, frontend checks, policies, and documentation, with many independent authorization changes that could contain subtle inconsistencies.

Grey Divider

Tip of the day
💡 Did you know, you can tweak Display preferences with a live preview to see your comment before it ships

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@codecov

codecov Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 62.38%. Comparing base (8d5330e) to head (77cdab8).
⚠️ Report is 7 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4612      +/-   ##
==========================================
- Coverage   62.38%   62.38%   -0.01%     
==========================================
  Files        2607     2607              
  Lines      104791   104784       -7     
  Branches    29425    29430       +5     
==========================================
- Hits        65379    65372       -7     
  Misses      38820    38820              
  Partials      592      592              
Flag Coverage Δ *Carryforward flag
adoption-insights 84.77% <ø> (ø) Carriedforward from 8d5330e
ai-integrations 78.80% <ø> (ø) Carriedforward from 8d5330e
app-defaults 56.22% <ø> (ø) Carriedforward from 8d5330e
augment 46.67% <ø> (ø) Carriedforward from 8d5330e
boost 80.51% <ø> (ø) Carriedforward from 8d5330e
bulk-import 73.12% <ø> (ø) Carriedforward from 8d5330e
cost-management 13.35% <ø> (ø) Carriedforward from 8d5330e
dcm 73.47% <ø> (ø) Carriedforward from 8d5330e
e2e-adoption-insights 60.00% <ø> (ø) Carriedforward from 8d5330e
e2e-extensions 62.31% <ø> (ø) Carriedforward from 8d5330e
e2e-global-header 50.35% <ø> (ø) Carriedforward from 8d5330e
e2e-homepage 61.11% <ø> (ø) Carriedforward from 8d5330e
e2e-intelligent-assistant 46.90% <ø> (-0.14%) ⬇️ Carriedforward from 8d5330e
e2e-orchestrator 49.52% <ø> (ø) Carriedforward from 8d5330e
e2e-orchestrator-plugin 49.51% <ø> (ø) Carriedforward from 8d5330e
e2e-quickstart 55.21% <ø> (ø) Carriedforward from 8d5330e
e2e-scorecard 50.10% <ø> (ø) Carriedforward from 8d5330e
e2e-theme 16.36% <ø> (ø) Carriedforward from 8d5330e
extensions 57.37% <ø> (ø) Carriedforward from 8d5330e
global-floating-action-button 71.18% <ø> (ø) Carriedforward from 8d5330e
global-header 68.09% <ø> (ø) Carriedforward from 8d5330e
homepage 48.39% <ø> (ø) Carriedforward from 8d5330e
install-dynamic-plugins 71.31% <ø> (ø) Carriedforward from 8d5330e
intelligent-assistant 76.42% <100.00%> (-0.01%) ⬇️
konflux 91.98% <ø> (ø) Carriedforward from 8d5330e
lightspeed 69.02% <ø> (ø) Carriedforward from 8d5330e
mcp-integrations 84.46% <ø> (ø) Carriedforward from 8d5330e
orchestrator 71.13% <ø> (ø) Carriedforward from 8d5330e
quickstart 63.74% <ø> (ø) Carriedforward from 8d5330e
sandbox 79.56% <ø> (ø) Carriedforward from 8d5330e
scorecard 87.96% <ø> (ø) Carriedforward from 8d5330e
theme 87.91% <ø> (ø) Carriedforward from 8d5330e
translations 5.12% <ø> (ø) Carriedforward from 8d5330e
x2a 77.18% <ø> (ø) Carriedforward from 8d5330e

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8d5330e...77cdab8. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@rhdh-qodo-merge rhdh-qodo-merge Bot added documentation Improvements or additions to documentation enhancement New feature or request Tests labels Sep 8, 2026
@rhdh-qodo-merge

Copy link
Copy Markdown

Important

The /generate_labels command by Qodo is sunsetting on the 1st of October 2026 and will no longer be available. We recommend switching to the latest Qodo review capabilities. Learn more

…e-linked sets

Replace behavior-linked permission names (chat.access/use/manage,
notebooks.use/manage, mcp.tools.use/manage, skills.access) with four
feature-linked sets: intelligent-assistant.chat,
intelligent-assistant.notebooks, intelligent-assistant.mcp.tools, and
intelligent-assistant.skills. Update backend routes, frontend checks,
RBAC examples, and API reports.

Assisted-by: Auto
Signed-off-by: Michael Valdron <mvaldron@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@michael-valdron
michael-valdron force-pushed the feat/ia-revise-feature-permissions branch from 3859b08 to 77cdab8 Compare September 8, 2026 14:55
@sonarqubecloud

sonarqubecloud Bot commented Sep 8, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
3.4% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

@Jdubrick

Jdubrick commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

/fs-review

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 8, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 5:21 PM UTC · Completed 5:27 PM UTC

Commit: 77cdab8 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Cost: $1.15

@fullsend-ai-review

Copy link
Copy Markdown

Review

Verdict: Approve

This PR consolidates eight behavior-linked RBAC permissions into four feature-linked sets (intelligent-assistant.chat, intelligent-assistant.notebooks, intelligent-assistant.mcp.tools, intelligent-assistant.skills). The change is well-scoped, consistent across all layers, and correctly marked as a major version bump.

What was verified

  • Completeness: All references to the old permission constants (iaChatAccessPermission, iaChatUsePermission, iaChatManagePermission, iaMcpUsePermission, iaMcpManagePermission, iaNotebooksUsePermission, iaNotebooksManagePermission, iaSkillsAccessPermission) and their string-name equivalents are updated across backend routes, frontend hooks, components, tests, documentation, and the RBAC policy CSV. No stale references remain outside of CHANGELOG history entries (which are appropriately unchanged).
  • Backend routes (router.ts, notebooksRouters.ts): Every requirePermission() call is updated to the correct new permission constant. The mapping is consistent — all chat routes use iaChatPermission, all notebook routes use iaNotebooksPermission, all MCP routes use iaMcpToolsPermission, and the skills route uses iaSkillsPermission.
  • Frontend hooks: useLightspeedViewPermission is correctly simplified from checking two permissions (iaChatAccessPermission AND iaChatUsePermission) to a single iaChatPermission check. The return type is explicitly annotated, which is good practice. useLightspeedDeletePermission, useLightspeedUpdatePermission, and useLightspeedNotebooksPermission are all updated consistently.
  • Components: LightspeedChatContainer.tsx, LightSpeedChat.tsx, and McpServersSettings.tsx are updated to use the new permission names in UI display and permission checks.
  • Tests: LightspeedChat.test.tsx and Trans.test.tsx are updated with the new permission string names. Backend tests (router.test.ts, notebooksRouter.test.ts, permission.test.ts) use mock permission services and don't reference specific permission constants, so they don't need changes.
  • Exports: report.api.md correctly reflects the new public API surface. The index.ts uses export * from permissions.ts, so no changes are needed there.
  • Changeset: Correctly marked as major for all three packages (common, backend, frontend), which is appropriate since this removes public exported constants.
  • Documentation: Both README files (backend and frontend) are updated with new RBAC policy examples, migration table entries, and permission descriptions.

Observations

  • Migration table scope: The migration table in the backend README maps from the original lightspeed.* names directly to the new consolidated names. Users who already migrated to the intermediate names (e.g., intelligent-assistant.chat.access) will need to cross-reference the changeset description to determine the new mapping. This is acceptable for a major version bump but could be improved by adding a second migration table or a note covering the intermediate-to-new mapping.
  • MCP permission namespace change: The old MCP permissions used a non-namespaced prefix (mcp.tools.use, mcp.tools.manage) while the new one uses the project prefix (intelligent-assistant.mcp.tools). This is a good improvement for consistency.
  • Granularity trade-off: The consolidation means administrators can no longer grant read-only access to chat or notebooks without also granting write/delete access. This is an acknowledged design decision per the PR description and issue link.

@fullsend-ai-review fullsend-ai-review Bot added the ready-for-merge All reviewers approved — ready to merge label Sep 8, 2026

@Jdubrick Jdubrick left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

@michael-valdron
michael-valdron merged commit 5741af9 into redhat-developer:main Sep 8, 2026
45 of 46 checks passed
rohitkrai03 pushed a commit to rohitkrai03/rhdh-plugins that referenced this pull request Sep 10, 2026
…e-linked sets (redhat-developer#4612)

Replace behavior-linked permission names (chat.access/use/manage,
notebooks.use/manage, mcp.tools.use/manage, skills.access) with four
feature-linked sets: intelligent-assistant.chat,
intelligent-assistant.notebooks, intelligent-assistant.mcp.tools, and
intelligent-assistant.skills. Update backend routes, frontend checks,
RBAC examples, and API reports.

Assisted-by: Auto

Signed-off-by: Michael Valdron <mvaldron@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
HusneShabbir added a commit that referenced this pull request Sep 11, 2026
…tests (#4693)

Follow-up to #4612 — lock in consolidated permission names on backend
routes with authorize() contract tests, selective allow/deny coverage,
permission metadata registration, and a missing 403 for notebook-conversation-ids.

Assisted-by: Cursor

Co-authored-by: HusneShabbir <husneshabbir447@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request ready-for-merge All reviewers approved — ready to merge Tests workspace/intelligent-assistant

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants