mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-19 09:50:15 +01:00
🔐 feat: Granular Role-based Permissions + Entra ID Group Discovery (#7804)
WIP: pre-granular-permissions commit
feat: Add category and support contact fields to Agent schema and UI components
Revert "feat: Add category and support contact fields to Agent schema and UI components"
This reverts commit c43a52b4c9.
Fix: Update import for renderHook in useAgentCategories.spec.tsx
fix: Update icon rendering in AgentCategoryDisplay tests to use empty spans
refactor: Improve category synchronization logic and clean up AgentConfig component
refactor: Remove unused UI flow translations from translation.json
feat: agent marketplace features
🔐 feat: Granular Role-based Permissions + Entra ID Group Discovery (#7804)
This commit is contained in:
parent
aa42759ffd
commit
66bd419baa
147 changed files with 17564 additions and 645 deletions
|
|
@ -13,6 +13,7 @@ import {
|
|||
} from '~/utils';
|
||||
import { useFileMapContext, useAgentPanelContext } from '~/Providers';
|
||||
import useAgentCapabilities from '~/hooks/Agents/useAgentCapabilities';
|
||||
import AgentCategorySelector from './AgentCategorySelector';
|
||||
import Action from '~/components/SidePanel/Builder/Action';
|
||||
import { ToolSelectDialog } from '~/components/Tools';
|
||||
import { useGetAgentFiles } from '~/data-provider';
|
||||
|
|
@ -243,6 +244,13 @@ export default function AgentConfig({ createMutation }: Pick<AgentPanelProps, 'c
|
|||
)}
|
||||
/>
|
||||
</div>
|
||||
{/* Category */}
|
||||
<div className="mb-4">
|
||||
<label className={labelClass} htmlFor="category-selector">
|
||||
{localize('com_ui_category')} <span className="text-red-500">*</span>
|
||||
</label>
|
||||
<AgentCategorySelector className="w-full" />
|
||||
</div>
|
||||
{/* Instructions */}
|
||||
<Instructions />
|
||||
{/* Model and Provider */}
|
||||
|
|
@ -362,6 +370,93 @@ export default function AgentConfig({ createMutation }: Pick<AgentPanelProps, 'c
|
|||
</div>
|
||||
{/* MCP Section */}
|
||||
{/* <MCPSection /> */}
|
||||
|
||||
{/* Support Contact (Optional) */}
|
||||
<div className="mb-4">
|
||||
<div className="mb-1.5 flex items-center gap-2">
|
||||
<span>
|
||||
<label className="text-token-text-primary block font-medium">
|
||||
{localize('com_ui_support_contact')}
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
<div className="space-y-3">
|
||||
{/* Support Contact Name */}
|
||||
<div className="flex flex-col">
|
||||
<label
|
||||
className="mb-1 flex items-center justify-between"
|
||||
htmlFor="support-contact-name"
|
||||
>
|
||||
<span className="text-sm">{localize('com_ui_support_contact_name')}</span>
|
||||
</label>
|
||||
<Controller
|
||||
name="support_contact.name"
|
||||
control={control}
|
||||
rules={{
|
||||
minLength: {
|
||||
value: 3,
|
||||
message: localize('com_ui_support_contact_name_min_length', { minLength: 3 }),
|
||||
},
|
||||
}}
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<>
|
||||
<input
|
||||
{...field}
|
||||
value={field.value ?? ''}
|
||||
className={cn(inputClass, error ? 'border-2 border-red-500' : '')}
|
||||
id="support-contact-name"
|
||||
type="text"
|
||||
placeholder={localize('com_ui_support_contact_name_placeholder')}
|
||||
aria-label="Support contact name"
|
||||
/>
|
||||
{error && (
|
||||
<span className="text-sm text-red-500 transition duration-300 ease-in-out">
|
||||
{error.message}
|
||||
</span>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
{/* Support Contact Email */}
|
||||
<div className="flex flex-col">
|
||||
<label
|
||||
className="mb-1 flex items-center justify-between"
|
||||
htmlFor="support-contact-email"
|
||||
>
|
||||
<span className="text-sm">{localize('com_ui_support_contact_email')}</span>
|
||||
</label>
|
||||
<Controller
|
||||
name="support_contact.email"
|
||||
control={control}
|
||||
rules={{
|
||||
pattern: {
|
||||
value: /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/,
|
||||
message: localize('com_ui_support_contact_email_invalid'),
|
||||
},
|
||||
}}
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<>
|
||||
<input
|
||||
{...field}
|
||||
value={field.value ?? ''}
|
||||
className={cn(inputClass, error ? 'border-2 border-red-500' : '')}
|
||||
id="support-contact-email"
|
||||
type="email"
|
||||
placeholder={localize('com_ui_support_contact_email_placeholder')}
|
||||
aria-label="Support contact email"
|
||||
/>
|
||||
{error && (
|
||||
<span className="text-sm text-red-500 transition duration-300 ease-in-out">
|
||||
{error.message}
|
||||
</span>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ToolSelectDialog
|
||||
isOpen={showToolDialog}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue