mirror of
https://github.com/LibreChat-AI/librechat.ai.git
synced 2026-03-27 10:48:32 +07:00
* chore: update GitHub Actions workflow to use latest action version for improved stability * chore: update roadmap references and enhance documentation for AWS Bedrock inference profiles - Updated footer menu and card icons to reflect the 2026 roadmap. - Adjusted default values in changelog and configuration documentation for `maxRecursionLimit`. - Added comprehensive documentation for AWS Bedrock inference profiles, including setup, configuration, and examples. - Introduced Agents API documentation for programmatic access to LibreChat agents. - Enhanced existing documentation for clarity and consistency across various sections. * feat: release Config v1.3.4 with new features and updates - Introduced `create` field in `interface.prompts` and `interface.agents` for enhanced user control. - Added `interface.remoteAgents` configuration for managing remote agent permissions. - Updated `endpoints.bedrock` with `models` and `inferenceProfiles` for better customization. - Included Moonshot as a known endpoint for AI integration. - Introduced new agent capabilities: `deferred_tools` and `programmatic_tools`. - Removed deprecated `forcePrompt` setting from configurations. - Updated default model lists and added support for new models. - Enhanced `modelSpecs` with `artifacts` field and `effort` parameter for Anthropic models. * refactor: update BlogHeader to use usePathname for route handling - Replaced useRouter with usePathname for improved routing in BlogHeader component. - Simplified page retrieval logic by directly using pathname for matching routes. * feat: add changelog for v0.8.3-rc1 release with new features and fixes - Introduced several enhancements including event-driven lazy tool loading, token usage tracking, and programmatic tool calling UI. - Added support for new models and providers, including Claude Opus 4.6 and Moonshot. - Implemented various bug fixes and improvements for better user experience and performance. * chore: nextjs artifact * first draft roadmap * feat: enhance BlogPage with Open Graph image support and layout improvements - Added support for Open Graph images in blog entries to improve visual presentation. - Refactored article layout for better structure and readability, including adjustments to the display of metadata and content. - Updated styles for improved user experience during hover interactions. * feat: enhance BlogPage with date formatting and layout adjustments - Added a new dateFormatted field to entries for improved date display. - Implemented a date formatter for consistent date presentation. - Refactored article layout to use a grid system for better responsiveness. - Updated styles for article links and metadata for enhanced user experience. * feat: add responsive image sizes to BlogPage for improved layout - Included sizes attribute for Open Graph images to enhance responsiveness on different screen sizes. * feat: update feature titles and descriptions for clarity - Changed titles for "Forking Messages and Conversations" to "Forking Chats" and "Memory" to "User Memory" for better alignment with functionality. - Updated descriptions for "Message Search" and "Upload as Text" to enhance understanding of features. * chore: update configuration version to 1.3.4 across multiple documentation files - Updated the version number in `librechat.yaml` examples to reflect the latest release (1.3.4) in various configuration and feature documentation files. * feat: enhance User Memory documentation for clarity and detail - Updated the description to clarify that User Memory is a key/value store that operates on every chat request. - Added a callout to distinguish between key/value storage and conversation memory. - Expanded on the functionality of the memory agent, including its execution process and user control features. - Introduced a section on future improvements for the memory agent's efficiency and relevance. * feat: update title and description for NGINX documentation - Changed the title from "Secure Deployment with Nginx" to "NGINX" for brevity. - Updated the description to provide a clearer overview of the guide's purpose in securing LibreChat deployment with Nginx as a reverse proxy and HTTPS. * feat: update 2026 roadmap with key accomplishments and future plans - Celebrated LibreChat's 3rd anniversary with a summary of achievements from 2025, including growth in GitHub stars and community engagement. - Clarified the timeline for open-sourcing the Code Interpreter API by the end of Q1. - Revised notes on the v1 Admin Panel's core capabilities and community-driven items for better clarity and detail. * feat: enhance blog and author components with Open Graph image support - Added optional `ogImagePosition` field to blog entries for better image placement control. - Updated BlogPage and individual post pages to utilize the new `ogImagePosition` for responsive image styling. - Improved Author component to conditionally render author images based on availability. - Updated 2026 roadmap blog post with a new Open Graph image and position for enhanced visual appeal. * feat: enhance CardComponent with icon support and layout improvements - Added optional `icon` prop to CardComponent for better visual representation. - Updated CardComponent layout to include icon alongside title and children. - Improved styling for CardComponent and CardsBase for enhanced responsiveness and user experience. * feat: update 2026 roadmap with detailed focus areas and community-driven items - Added sections for Q1 and Q2 focus areas, outlining major initiatives like Dynamic Context and Admin Panel. - Enhanced clarity on community-driven items and their prioritization based on GitHub reactions. - Included hiring information to attract full-stack developers for ongoing project support. - Improved overall structure and readability of the roadmap content. * fix: improve icon styling in CardCompat component for better responsiveness - Updated icon container styling to ensure consistent height and width for SVG icons. - Enhanced layout of CardCompat to maintain visual integrity across different screen sizes. * chore: update .gitignore to include next-env.d.ts for TypeScript support * fix: correct import statement formatting in next-env.d.ts for consistency * fix: refine wording in 2026 roadmap for clarity - Updated the description of agentic workflows to emphasize a lean approach to context pulling. - Enhanced overall readability of the section on Dynamic Context. * feat: expand Admin Panel section in 2026 roadmap with detailed capabilities - Added comprehensive descriptions of the Admin Panel's core functionalities, including GUI for configuration, configuration profiles, group and role management, and access controls. - Clarified the development approach for the Admin Panel, emphasizing ongoing iteration and community involvement. - Updated note on the Admin Panel's prioritization and requirements following the ClickHouse acquisition. * feat: add TrackedLink component for enhanced analytics tracking - Introduced a new TrackedLink component that integrates Vercel analytics to track user interactions with links. - The component allows for customizable link properties while ensuring tracking of clicks with relevant metadata. - Updated CardCompat to utilize the new TrackedLink for improved user engagement tracking. * feat: enhance blog post layout and introduce TrackedAnchor component for link tracking - Wrapped the InlineTOC component in a div for improved spacing in blog posts. - Added a new TrackedAnchor component to facilitate link tracking with Vercel analytics, allowing for customizable anchor elements. - Updated mdx-components to utilize TrackedAnchor for enhanced link interaction tracking. * feat: update TrackedLink and TrackedAnchor components for external link handling - Enhanced the TrackedLink component to differentiate between internal and external links, using Next.js Link for internal navigation. - Introduced a utility function to determine if a link is external, improving tracking accuracy. - Updated TrackedAnchor to utilize the same external link handling logic for consistency in link tracking. * feat: add uncaught exception handling section to dotenv configuration documentation - Introduced a new section on uncaught exception handling, explaining how to override the default behavior to keep the app running after exceptions. - Added an option table detailing the `CONTINUE_ON_UNCAUGHT_EXCEPTION` configuration. - Included a warning callout advising against using this feature in production environments. * feat: add ESLint rule for unused variables in TypeScript - Introduced a new ESLint rule to enforce the handling of unused variables, allowing for specific patterns to be ignored. - This enhancement aims to improve code quality by ensuring that developers are alerted to potentially unnecessary variables while maintaining flexibility in naming conventions. * fix: update copyright year in LICENSE file to 2026 * feat: update footer menu link and add 2026 roadmap blog post - Changed the roadmap link in the FooterMenu component to point to the new blog post. - Introduced a new blog post detailing the 2026 roadmap for LibreChat, outlining key features and focus areas for the upcoming year. - Updated the import statement in next-env.d.ts for consistency with the new types directory. * fix: update import path in next-env.d.ts and add comment block in agents.mdx - Changed the import statement in next-env.d.ts to reference the new development types directory. - Added a comment block in agents.mdx to indicate that the Programmatic Tool Calling feature is in private beta. * fix: remove unused ESLint disable comment in context.tsx * chore: update blog
240 lines
6.1 KiB
TypeScript
240 lines
6.1 KiB
TypeScript
import defaultMdxComponents from 'fumadocs-ui/mdx'
|
|
import { Callout } from 'fumadocs-ui/components/callout'
|
|
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
|
import { Tabs } from 'fumadocs-ui/components/tabs'
|
|
import { File as FumadocsFile, Folder, Files } from 'fumadocs-ui/components/files'
|
|
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
|
|
import { OptionTable } from '@/components/table'
|
|
import { Frame } from '@/components/Frame'
|
|
import { DocsHub } from '@/components/DocsHub'
|
|
import { LocalInstallHub } from '@/components/LocalInstallHub'
|
|
import { QuickStartHub } from '@/components/QuickStartHub'
|
|
import { FeaturesHub } from '@/components/FeaturesHub'
|
|
import Carousel from '@/components/carousel/Carousel'
|
|
import { TrackedLink, TrackedAnchor } from '@/components/TrackedLink'
|
|
import type { ReactNode } from 'react'
|
|
|
|
function mapCalloutType(type?: string): 'info' | 'warn' | 'error' {
|
|
switch (type) {
|
|
case 'warning':
|
|
case 'warn':
|
|
case 'important':
|
|
case 'danger':
|
|
return 'warn'
|
|
case 'error':
|
|
case 'bug':
|
|
return 'error'
|
|
default:
|
|
return 'info'
|
|
}
|
|
}
|
|
|
|
function CalloutCompat({
|
|
children,
|
|
type,
|
|
title,
|
|
collapsible,
|
|
...props
|
|
}: {
|
|
children?: ReactNode
|
|
type?: string
|
|
title?: ReactNode
|
|
collapsible?: boolean
|
|
[key: string]: any
|
|
}) {
|
|
const mappedType = mapCalloutType(type)
|
|
|
|
if (collapsible && title) {
|
|
return (
|
|
<Accordions type="single" collapsible>
|
|
<Accordion title={typeof title === 'string' ? title : 'Details'}>
|
|
<Callout type={mappedType} {...props}>
|
|
{children}
|
|
</Callout>
|
|
</Accordion>
|
|
</Accordions>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<Callout type={mappedType} title={title} {...props}>
|
|
{children}
|
|
</Callout>
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Simple Tab/Tabs wrappers that render content directly.
|
|
* The fumadocs-mdx compiler generates tab structures that may be incomplete
|
|
* when the remarkCodeTab plugin isn't available. These wrappers render the
|
|
* content as simple divs to avoid Radix UI context errors.
|
|
*/
|
|
function TabCompat({ children, ...props }: { children?: ReactNode; [key: string]: any }) {
|
|
return <div {...props}>{children}</div>
|
|
}
|
|
|
|
function TabsCompat({
|
|
children,
|
|
items,
|
|
...props
|
|
}: {
|
|
children?: ReactNode
|
|
items?: string[]
|
|
[key: string]: any
|
|
}) {
|
|
if (items && items.length > 0) {
|
|
// Use real Fumadocs Tabs when items are provided (explicit Tabs usage)
|
|
return (
|
|
<Tabs items={items} {...props}>
|
|
{children}
|
|
</Tabs>
|
|
)
|
|
}
|
|
// Fallback: render children directly for auto-generated tab structures
|
|
return <div {...props}>{children}</div>
|
|
}
|
|
;(TabsCompat as any).Tab = TabCompat
|
|
|
|
function CardsCompat({
|
|
children,
|
|
num,
|
|
...props
|
|
}: {
|
|
children?: ReactNode
|
|
num?: number
|
|
[key: string]: any
|
|
}) {
|
|
const gridClass =
|
|
num === 2
|
|
? 'grid grid-cols-1 gap-4 sm:grid-cols-2'
|
|
: num === 4
|
|
? 'grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'
|
|
: 'grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3'
|
|
return (
|
|
<div className={gridClass} {...props}>
|
|
{children}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
function CardCompat({
|
|
children,
|
|
title,
|
|
href,
|
|
icon,
|
|
arrow,
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
image,
|
|
...props
|
|
}: {
|
|
children?: ReactNode
|
|
title?: string
|
|
href?: string
|
|
icon?: ReactNode
|
|
arrow?: boolean
|
|
image?: boolean
|
|
[key: string]: any
|
|
}) {
|
|
const content = (
|
|
<div className="flex flex-col gap-2">
|
|
{icon && <div className="[&>svg]:h-6 [&>svg]:w-6">{icon}</div>}
|
|
{title && <h3 className="font-semibold text-fd-foreground">{title}</h3>}
|
|
{children && <div className="text-sm text-fd-muted-foreground">{children}</div>}
|
|
</div>
|
|
)
|
|
|
|
if (href) {
|
|
return (
|
|
<TrackedLink
|
|
href={href}
|
|
title={title}
|
|
className="group block rounded-xl border border-fd-border bg-fd-card p-5 transition-all hover:border-fd-primary/30 hover:bg-fd-accent hover:shadow-sm"
|
|
{...props}
|
|
>
|
|
{content}
|
|
{arrow && (
|
|
<span className="mt-3 inline-block text-sm text-fd-muted-foreground transition-transform group-hover:translate-x-0.5">
|
|
→
|
|
</span>
|
|
)}
|
|
</TrackedLink>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<div className="rounded-xl border border-fd-border bg-fd-card p-5" {...props}>
|
|
{content}
|
|
</div>
|
|
)
|
|
}
|
|
const CardsWithCard = Object.assign(CardsCompat, { Card: CardCompat })
|
|
|
|
function FileTreeCompat({ children, ...props }: { children?: ReactNode; [key: string]: any }) {
|
|
return <Files {...props}>{children}</Files>
|
|
}
|
|
function FileCompat({
|
|
active,
|
|
className,
|
|
...props
|
|
}: {
|
|
active?: boolean
|
|
className?: string
|
|
name: string
|
|
icon?: ReactNode
|
|
[key: string]: any
|
|
}) {
|
|
return (
|
|
<FumadocsFile
|
|
className={
|
|
active ? `${className ?? ''} bg-fd-accent text-fd-accent-foreground`.trim() : className
|
|
}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
const FileTreeWithChildren = Object.assign(FileTreeCompat, { File: FileCompat, Folder })
|
|
|
|
function ImgCompat({ image: _, ...props }: { image?: boolean; [key: string]: any }) {
|
|
const src = typeof props.src === 'string' ? props.src : ''
|
|
const isExternal = src.startsWith('http://') || src.startsWith('https://')
|
|
if (isExternal) {
|
|
// eslint-disable-next-line @next/next/no-img-element
|
|
return <img {...props} loading="lazy" />
|
|
}
|
|
const DefaultImg = defaultMdxComponents.img
|
|
if (DefaultImg) return <DefaultImg {...props} />
|
|
// eslint-disable-next-line @next/next/no-img-element
|
|
return <img {...props} />
|
|
}
|
|
|
|
export const mdxComponents = {
|
|
...defaultMdxComponents,
|
|
a: TrackedAnchor,
|
|
img: ImgCompat,
|
|
Callout: CalloutCompat,
|
|
Steps,
|
|
Step,
|
|
Tab: TabCompat,
|
|
Tabs: TabsCompat,
|
|
Cards: CardsWithCard,
|
|
Card: CardCompat,
|
|
FileTree: FileTreeWithChildren,
|
|
File: FileCompat,
|
|
Folder,
|
|
Files,
|
|
Accordion,
|
|
Accordions,
|
|
OptionTable,
|
|
Frame,
|
|
Carousel,
|
|
DocsHub,
|
|
QuickStartHub,
|
|
FeaturesHub,
|
|
LocalInstallHub,
|
|
Button: ({ children, ...props }: { children?: ReactNode; [key: string]: any }) => (
|
|
<button className="rounded-md bg-fd-primary px-4 py-2 text-fd-primary-foreground" {...props}>
|
|
{children}
|
|
</button>
|
|
),
|
|
}
|