Skip to content

feat: workflow agent node permissions tab#16092

Merged
abdulrahmancodes merged 56 commits intomainfrom
feat/workflow-agent-node-permissions-tab
Nov 27, 2025
Merged

feat: workflow agent node permissions tab#16092
abdulrahmancodes merged 56 commits intomainfrom
feat/workflow-agent-node-permissions-tab

Conversation

@abdulrahmancodes
Copy link
Copy Markdown
Contributor

No description provided.

- Introduced `WorkflowAiAgentPermissionsTab` and `WorkflowAiAgentPromptTab` components for managing AI agent settings.
- Updated `WorkflowEditActionAiAgent` to include tab navigation between prompt and permissions.
- Added constants for tab identifiers in `WorkflowAiAgentTabs` and component ID in `WorkflowAiAgentTabListComponentId`.
- Enhanced UI with styled tab list for better user experience.
- Introduced a new component `WorkflowAiAgentPermissionsTab1` for managing AI agent permissions.
- Implemented a user interface with styled components for displaying and selecting object permissions.
- Integrated search functionality and CRUD permission options for enhanced user experience.
- Added an optional `className` prop to the `WorkflowStepBody` component for improved styling flexibility.
- Updated the component to apply the `className` to the styled container, allowing for better customization in various contexts.
- Introduced several new components for managing AI agent permissions, including `WorkflowAiAgentPermissionsTab`, `WorkflowAiAgentPermissionsCrudList`, `WorkflowAiAgentPermissionsObjectsList`, `WorkflowAiAgentPermissionsObjectRow`, and `WorkflowAiAgentPermissionsPermissionRow`.
- Implemented styled components for improved UI consistency and user experience.
- Added functionality for displaying, adding, and deleting permissions, along with a search feature for object metadata.
- Enhanced the overall structure and organization of the permissions management interface.
- Refactored the `WorkflowEditActionAiAgent` component to integrate role-based permissions management.
- Added state management for permissions tab view modes and implemented role detail navigation.
- Enhanced footer actions based on the current tab and permissions state, improving user interaction.
- Updated styling for the permissions step body for better UI consistency.
- Replaced local state management with Recoil for view mode in `WorkflowAiAgentPermissionsTab`.
- Removed unnecessary props and functions related to view mode change.
- Introduced a new state file for managing permissions view modes, enhancing code organization and maintainability.
- Updated related components to utilize the new state management approach, improving overall functionality.
…ment

- Integrated snackbar notifications for user feedback on permission updates.
- Simplified permission handling logic by consolidating permission updates into a single object.
- Improved state management for view modes and object permissions, enhancing code clarity and maintainability.
- Updated UI interactions for better user experience when managing permissions.
- Deleted the `workflowAiAgentPermissionsViewModeComponentState.ts` file as part of the ongoing refactor for permission management.
- This change simplifies the state management by removing unused state definitions, contributing to improved code clarity and maintainability.
- Added `showDeleteButton` and `alwaysShowGranted` props to `WorkflowAiAgentPermissionsPermissionRow` for improved permission display logic.
- Updated `WorkflowAiAgentPermissionsCrudList` to utilize the new props, enhancing user interaction by controlling the visibility of delete actions and permission states.
- Improved code clarity and maintainability by refining component interfaces.
- Replaced the view mode state management in `WorkflowAiAgentPermissionsTab` with new Recoil states for selected object ID and adding permissions, enhancing clarity and maintainability.
- Introduced a new hook, `useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose`, to reset permissions state when the command menu closes, improving user experience.
- Updated `WorkflowEditActionAiAgent` to utilize the new permissions state management, streamlining the component's logic and interactions.
- Removed the obsolete `workflowAiAgentPermissionsViewModeFamilyState` to simplify state management.
…onsTab

- Introduced a new constant, `CRUD_PERMISSION_ORDER`, to define the order of CRUD permissions for better organization.
- Updated the existing permissions handling to sort permissions based on the defined order and object label, enhancing clarity in the permissions display.
- Removed redundant comments and improved code readability by streamlining the permissions mapping logic.
- Introduced a new Recoil state, `workflowAiAgentActionAgentState`, to manage agent data more effectively within the `WorkflowAiAgentPermissionsTab` and `WorkflowEditActionAiAgent` components.
- Updated the `useResetWorkflowAiAgentPermissionsStateOnCommandMenuClose` hook to reset the agent state upon closing the command menu, improving state management consistency.
- Replaced direct queries for agent data with Recoil state management, streamlining data handling and enhancing performance.
- Adjusted the loading state handling in `WorkflowAiAgentPermissionsTab` to utilize the new agent loading state, improving user experience during data fetching.
- Removed the redundant `hasAnyPermission` check, streamlining the logic for adding object permissions.
- Directly pushed updated permissions to `allObjectPermissions`, enhancing code clarity and maintainability.
- Improved overall readability by reducing unnecessary conditional statements in the permissions management logic.
…ion and Code Clarity

- Replaced hardcoded "CRUD" label with localized string using Lingui for better internationalization support.
- Removed the unused `onDeletePermission` prop from `WorkflowAiAgentPermissionsCrudList` to simplify the component interface.
- Streamlined the `onAdd` function for adding permissions, enhancing code readability.
…Handling

- Introduced the new `WorkflowAiAgentPermissionList` component to encapsulate the logic for displaying and managing permissions.
- Refactored `WorkflowAiAgentPermissionsTab` to utilize the new component, simplifying the permissions display and enhancing code clarity.
- Removed redundant permission handling logic from `WorkflowAiAgentPermissionsTab`, improving maintainability and readability.
- Added a new constants file for CRUD permissions to streamline permission management across components.
…ntPermissionActions Hook

- Refactored `WorkflowAiAgentPermissionsTab` to utilize the new `useWorkflowAiAgentPermissionActions` hook, streamlining permission management logic.
- Removed redundant permission handling code from `WorkflowAiAgentPermissionsTab`, enhancing clarity and maintainability.
- Consolidated permission addition and deletion logic within the new hook, improving code organization and readability.
- Updated imports and cleaned up unused variables to further enhance code quality.
- Introduced `useActionRolePermissionFlagConfig` and `useSettingsRolePermissionFlagConfig` hooks to manage role-based permissions for actions and settings.
- Each hook returns a filtered list of permissions based on feature flags, enhancing modularity and reusability.
- Integrated icons and localized descriptions for improved user experience and clarity in permission management.
… Management

- Added functionality to handle permission flags within the `useWorkflowAiAgentPermissionActions` hook, including methods for adding and deleting permission flags.
- Integrated new hooks for role permission flag configuration to streamline permission management.
- Improved code organization by utilizing `useMemo` for permission flag label mapping, enhancing performance and readability.
- Updated the hook's parameters to include permission flag keys, allowing for more flexible permission handling.
…FlagRow Components

- Introduced `WorkflowAiAgentPermissionsFlagList` and `WorkflowAiAgentPermissionsFlagRow` components to manage and display permission flags within the AI agent workflow.
- Enhanced `StyledRow` in `WorkflowAiAgentPermissions.styles.ts` to support disabled states, improving user experience by visually indicating interactivity.
- Updated `WorkflowAiAgentPermissionsTab` to integrate the new flag list components, allowing for better organization and management of settings and action permissions.
- Refactored permission handling logic to utilize the new components, enhancing code clarity and maintainability.
- Replaced direct permission handling logic in `SettingsRolePermissionsSettingsSection` and `SettingsRolePermissionsToolSection` with the new `useSettingsRolePermissionFlagConfig` and `useActionRolePermissionFlagConfig` hooks for improved modularity and reusability.
- Removed unused imports and redundant code, enhancing clarity and maintainability.
- Streamlined the configuration of settings and action permissions, improving overall code organization.
…for Improved Logic and Readability

- Simplified permission handling logic in `WorkflowAiAgentPermissionsTab` by introducing new boolean flags for better readability and maintainability.
- Enhanced conditional rendering for displaying permission lists and CRUD operations based on the agent's state.
- Removed unnecessary console log from `WorkflowEditActionAiAgent`, cleaning up the code.
- Improved overall code organization and clarity by consolidating related logic into descriptive variables.
…issionFlagConfig Hook

- Cleaned up imports in `SettingsRolePermissionsSettingsSection` by removing unnecessary lines for improved clarity.
- Removed an empty line in `useActionRolePermissionFlagConfig` to enhance code cleanliness.
- These changes contribute to better organization and maintainability of the codebase.
…Tab for Improved Logic and Clarity

- Simplified the rendering logic in `WorkflowAiAgentPermissionList` by consolidating the display of permissions into a single list, enhancing readability.
- Introduced a new utility function `filterBySearchQuery` in `WorkflowAiAgentPermissionsTab` to streamline the filtering of permissions and object metadata based on search queries.
- Improved overall code organization and maintainability by removing redundant filtering logic and utilizing the new utility function for better clarity.
- Replaced the Button component with CmdEnterActionButton for improved user interaction in the footer actions.
- Simplified the logic for rendering footer actions based on the current tab and permission state, enhancing clarity and maintainability.
- Removed unnecessary code and imports to streamline the component structure.
- Deleted the `WorkflowAiAgentPermissionsTab1` component to improve code organization and reduce complexity.
- This removal contributes to a cleaner structure by eliminating unused files and enhancing maintainability.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Nov 26, 2025

🚀 Preview Environment Ready!

Your preview environment is available at: http://bore.pub:33548

This environment will automatically shut down when the PR is closed or after 5 hours.

- Introduced a new method in `AgentRoleService` to delete agent-only roles if they are not assigned elsewhere, enhancing role management.
- Integrated this logic into `WorkflowVersionStepOperationsWorkspaceService` to ensure roles are cleaned up when agents are deleted.
- Updated module imports to include necessary entities for role management, improving overall functionality and maintainability.
- Added tests to verify the new role deletion logic, ensuring robustness and correctness in workflow operations.
…issionsTab

- Introduced a new utility function `getFilteredPermissions` to streamline the filtering of permissions based on search queries and enabled status.
- Updated `WorkflowAiAgentPermissionsTab` to utilize this new function, reducing redundancy and improving code clarity.
- Enhanced overall maintainability by consolidating permission filtering logic into a dedicated utility.
- Adjusted the formatting of import statements in `agent-role.service.ts` for better readability.
- This change enhances the overall organization of the code, contributing to improved maintainability.
- Simplified the logic for displaying the CRUD list by removing the dependency on the `workflowAiAgentPermissionsIsAddingPermission` state.
- Updated the conditions for rendering the CRUD list to enhance clarity and maintainability.
- These changes improve the overall functionality of the permissions tab by ensuring a more straightforward representation of the selected object state.
- Added logic to identify if a step is of type 'AI_AGENT' within the useDeleteStep hook.
- Integrated a reset of the AI agent permissions state when an AI agent step is deleted, improving state management.
- Updated imports to include necessary hooks and utilities for enhanced functionality and maintainability.
- Added a styled delete button to the permissions rows, improving user interaction for deleting permissions.
- Implemented hover effects to reveal the delete button, enhancing the UI experience.
- Updated related components to utilize the new delete button styling and functionality, ensuring consistency across the permissions tab.
- Refactored the permission handling logic to accommodate the new delete button integration, improving overall maintainability.
… Safety

- Updated the `refetchAgent` function to return a more specific type, improving type safety in the `WorkflowAiAgentPermissionsTab` component.
- Adjusted the `refetchAgentAndRoles` function to return the refetched agent, ensuring better state management and clarity in the permissions handling logic.
- Refactored the `useWorkflowAiAgentPermissionActions` hook to utilize the updated type definitions, enhancing maintainability and readability of the code.
- These changes contribute to a more robust and type-safe implementation of the AI agent permissions functionality.
- Simplified the assignment of `currentTabId` by removing unnecessary type casting, enhancing code clarity.
- This change contributes to a more streamlined implementation of the Workflow AI Agent action component.
- Updated imports in multiple components to utilize the new `WorkflowAiAgentPermissionsStyles` file, ensuring consistent styling across the permissions UI.
- Refactored the delete button implementation for improved readability and maintainability.
- These changes enhance the overall user experience and maintainability of the AI agent permissions components.
@abdulrahmancodes abdulrahmancodes marked this pull request as ready for review November 26, 2025 20:05
Comment on lines +307 to +315

const { refetchedAgent } = await refetchAgentAndRoles();
if (
!hadRoleBefore &&
isDefined(refetchedAgent) &&
isDefined(setWorkflowAiAgentActionAgent)
) {
setWorkflowAiAgentActionAgent(refetchedAgent);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Bug: UI state for AI agent permissions is not consistently updated after permission operations.
Severity: HIGH | Confidence: High

🔍 Detailed Analysis

After permission operations such as adding/deleting permissions or permission flags, the refetchedAgent data returned by refetchAgentAndRoles() is frequently discarded or only conditionally applied. This prevents the workflowAiAgentActionAgentState from being consistently updated with the latest server data, causing the UI to display stale agent roles and permissions to the user.

💡 Suggested Fix

Ensure the refetchedAgent returned from refetchAgentAndRoles() is consistently used to update workflowAiAgentActionAgentState in handleAddPermission, handleDeletePermission, handleAddPermissionFlag, and handleDeletePermissionFlag.

🤖 Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.

Location:
packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts#L307-L315

Potential issue: After permission operations such as adding/deleting permissions or
permission flags, the `refetchedAgent` data returned by `refetchAgentAndRoles()` is
frequently discarded or only conditionally applied. This prevents the
`workflowAiAgentActionAgentState` from being consistently updated with the latest server
data, causing the UI to display stale agent roles and permissions to the user.

Did we get this right? 👍 / 👎 to inform future reviews.
Reference ID: 3887265

…s Components

- Standardized the formatting of the delete button implementation in both `WorkflowAiAgentPermissionsFlagRow` and `WorkflowAiAgentPermissionsPermissionRow` components for improved readability.
- These changes enhance code consistency and maintainability across the permissions UI.
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Nov 26, 2025

Greptile Overview

Greptile Summary

Adds a Permissions tab to the AI Agent workflow node, enabling granular control over agent permissions including CRUD operations on objects and action/settings flags. The implementation refactors existing role permission configuration hooks for reuse and adds comprehensive backend cleanup logic to delete agents and their associated roles when workflow steps are removed.

Key Changes

  • New tabbed interface (Prompt/Permissions) for AI agent configuration in workflow builder
  • Auto-creation of agent-specific roles with configurable object permissions and permission flags
  • Backend cleanup ensures agents and unused agent-only roles are deleted when workflow steps are removed
  • Extracted permission configuration hooks (useActionRolePermissionFlagConfig, useSettingsRolePermissionFlagConfig) for code reuse
  • Added comprehensive tests for AI agent step deletion and role cleanup

Issues Found

  • Critical logic bug in useWorkflowAiAgentPermissionActions.ts:136-143 where adding read-only permission could erase existing update/delete permissions

Confidence Score: 3/5

  • Safe to merge after fixing the critical permission logic bug
  • Score reflects a well-structured feature with good test coverage and proper cleanup logic, but contains a critical bug in permission handling that could cause data loss (existing permissions being overwritten). The auto-read logic when adding update/delete permissions is correct, but the reverse case is broken.
  • packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts requires immediate attention for permission logic fix

Important Files Changed

File Analysis

Filename Score Overview
packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts 2/5 New hook managing agent permissions with critical auto-read logic bug when adding update/delete permissions
packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx 4/5 New permissions tab component with search and filtering functionality for AI agent permissions
packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowEditActionAiAgent.tsx 4/5 Refactored to add tabbed interface with Prompt and Permissions tabs for AI agent configuration
packages/twenty-server/src/modules/workflow/workflow-builder/workflow-version-step/workflow-version-step-operations.workspace-service.ts 4/5 Enhanced AI agent step deletion to clean up associated agent and agent-only roles properly
packages/twenty-server/src/engine/metadata-modules/ai-agent-role/ai-agent-role.service.ts 5/5 New service for managing AI agent role assignments with cleanup of unused agent-only roles

Sequence Diagram

sequenceDiagram
    participant User
    participant WorkflowEditActionAiAgent
    participant WorkflowAiAgentPermissionsTab
    participant useWorkflowAiAgentPermissionActions
    participant Backend
    participant AiAgentRoleService

    User->>WorkflowEditActionAiAgent: Open AI Agent Step
    WorkflowEditActionAiAgent->>Backend: useFindOneAgentQuery(agentId)
    Backend-->>WorkflowEditActionAiAgent: Agent data with roleId
    
    User->>WorkflowEditActionAiAgent: Click Permissions Tab
    WorkflowEditActionAiAgent->>WorkflowAiAgentPermissionsTab: Render tab
    WorkflowAiAgentPermissionsTab->>Backend: useGetRolesQuery()
    Backend-->>WorkflowAiAgentPermissionsTab: Role with permissions
    
    User->>WorkflowAiAgentPermissionsTab: Click Add Permission
    WorkflowAiAgentPermissionsTab->>WorkflowAiAgentPermissionsTab: Show object/permission selector
    
    User->>WorkflowAiAgentPermissionsTab: Select object and permission
    WorkflowAiAgentPermissionsTab->>useWorkflowAiAgentPermissionActions: handleAddPermission()
    
    alt No roleId exists
        useWorkflowAiAgentPermissionActions->>Backend: createRole()
        Backend-->>useWorkflowAiAgentPermissionActions: New role created
        useWorkflowAiAgentPermissionActions->>Backend: assignRoleToAgent()
        Backend-->>useWorkflowAiAgentPermissionActions: Role assigned
    end
    
    useWorkflowAiAgentPermissionActions->>Backend: upsertObjectPermissions()
    Backend-->>useWorkflowAiAgentPermissionActions: Permissions updated
    useWorkflowAiAgentPermissionActions->>Backend: refetchAgentAndRoles()
    Backend-->>useWorkflowAiAgentPermissionActions: Updated data
    WorkflowAiAgentPermissionsTab->>WorkflowAiAgentPermissionsTab: Show updated permissions
    
    User->>WorkflowAiAgentPermissionsTab: Delete permission
    WorkflowAiAgentPermissionsTab->>useWorkflowAiAgentPermissionActions: handleDeletePermission()
    useWorkflowAiAgentPermissionActions->>Backend: upsertObjectPermissions()
    Backend-->>useWorkflowAiAgentPermissionActions: Permissions updated
    
    User->>WorkflowEditActionAiAgent: Delete AI Agent Step
    WorkflowEditActionAiAgent->>Backend: deleteWorkflowVersionStep()
    Backend->>Backend: runWorkflowVersionStepDeletionSideEffects()
    Backend->>Backend: Delete agent from agentRepository
    Backend->>AiAgentRoleService: deleteAgentOnlyRoleIfUnused()
    
    alt Role is agent-only and unused
        AiAgentRoleService->>Backend: Delete role
    end
    
    Backend-->>WorkflowEditActionAiAgent: Step and agent deleted
Loading

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

32 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

Comment on lines +136 to +143
permissionKey === 'canReadObjectRecords'
? true
: (objectPermission?.canReadObjectRecords ??
(permissionKey === 'canUpdateObjectRecords' ||
permissionKey === 'canSoftDeleteObjectRecords' ||
permissionKey === 'canDestroyObjectRecords'
? true
: false)),
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.

logic: Logic automatically enables read when adding update/delete, but doesn't preserve existing read permission when adding read-only access.

When adding canReadObjectRecords, if other permissions (update/delete) already exist, they'll be lost because the logic defaults them to false. The auto-read logic should apply bidirectionally:

  • Adding update/delete should auto-enable read (current behavior)
  • Adding read should preserve existing update/delete permissions
Suggested change
permissionKey === 'canReadObjectRecords'
? true
: (objectPermission?.canReadObjectRecords ??
(permissionKey === 'canUpdateObjectRecords' ||
permissionKey === 'canSoftDeleteObjectRecords' ||
permissionKey === 'canDestroyObjectRecords'
? true
: false)),
canReadObjectRecords:
permissionKey === 'canReadObjectRecords'
? true
: (objectPermission?.canReadObjectRecords ??
(permissionKey === 'canUpdateObjectRecords' ||
permissionKey === 'canSoftDeleteObjectRecords' ||
permissionKey === 'canDestroyObjectRecords'
? true
: false)),
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts
Line: 136:143

Comment:
**logic:** Logic automatically enables read when adding update/delete, but doesn't preserve existing read permission when adding read-only access.

When adding `canReadObjectRecords`, if other permissions (update/delete) already exist, they'll be lost because the logic defaults them to `false`. The auto-read logic should apply bidirectionally:
- Adding update/delete should auto-enable read (current behavior)
- Adding read should preserve existing update/delete permissions

```suggestion
      canReadObjectRecords:
        permissionKey === 'canReadObjectRecords'
          ? true
          : (objectPermission?.canReadObjectRecords ??
            (permissionKey === 'canUpdateObjectRecords' ||
            permissionKey === 'canSoftDeleteObjectRecords' ||
            permissionKey === 'canDestroyObjectRecords'
              ? true
              : false)),
```

How can I resolve this? If you propose a fix, please make it concise.

- Introduced a new test file for the useDeleteStep hook, ensuring proper functionality for deleting steps and cleaning up dependencies.
- Implemented mock functions to simulate workflow version retrieval and step deletion, enhancing test coverage and reliability.
- These tests contribute to improved maintainability and confidence in the useDeleteStep hook's behavior within the workflow management system.
…oved assignment capability handling

- Replaced inline permission configuration logic with `useSettingsRolePermissionFlagConfig` hook in `SettingsRolePermissionsSettingsSection` and `WorkflowAiAgentPermissionsTab`.
- Enhanced the hook to accept assignment capabilities, allowing for more granular permission filtering based on user roles.
- Removed unused imports and streamlined the code for better readability and maintainability.
…ment capabilities

- Updated `useActionRolePermissionFlagConfig` to accept assignment capabilities, enhancing permission filtering based on user roles.
- Streamlined permission configuration in `SettingsRolePermissionsToolSection` and `useWorkflowAiAgentPermissionActions` to leverage the new hook.
- Removed redundant code and imports for improved readability and maintainability.
…sTab to include assignment capabilities

- Updated `useActionRolePermissionFlagConfig` in `WorkflowAiAgentPermissionsTab` to accept assignment capabilities, improving permission handling for agent assignments.
- This change aligns with recent refactors to streamline role permissions management across the application.
…iently

- Updated the `WorkflowEditActionAiAgent` component to store the response from `updateAgent` calls, improving state management.
- Removed redundant `refetchQueries` parameter, streamlining the update process.
- Enhanced type safety for `currentTabId` by explicitly casting `activeTabId` to `WorkflowAiAgentTabId`.
…ntPermissionsTab` for cleaner code structure and improved readability.
Copy link
Copy Markdown
Member

@FelixMalfait FelixMalfait left a comment

Choose a reason for hiding this comment

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

Discussed in Discord. Great work!

- Added functionality to view agent and role details in the WorkflowStepFooter component.
- Introduced new menu items for "View Agent" and "View Role" based on the presence of agent and role IDs.
- Improved code structure by incorporating additional imports and hooks for better state management.
@abdulrahmancodes abdulrahmancodes merged commit a343bc1 into main Nov 27, 2025
68 checks passed
@abdulrahmancodes abdulrahmancodes deleted the feat/workflow-agent-node-permissions-tab branch November 27, 2025 21:27
@github-actions
Copy link
Copy Markdown
Contributor

Thanks @abdulrahmancodes for your contribution!
This marks your 83rd PR on the repo. You're top 1% of all our contributors 🎉
See contributor page - Share on LinkedIn - Share on Twitter

Contributions

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