Files
hermes-agent/website/docusaurus.config.ts
teknium1 845fee6cf4 feat(website): a page for every catalog plugin and every author
/docs/plugins/<name> and /docs/plugins/by/<maintainer> are generated at
build time by a small Docusaurus plugin (website/plugins/plugin-catalog-pages)
from the same plugins.json the grid fetches, so a merged catalog PR is the
only way a page appears or changes.

Plugin page: full description with the Disclosure sentence pulled into a
callout, pinned commit / version / platforms / requires facts, tools, hooks
and env chips, Desktop install button + CLI command, repository and reviewed
source links, optional screenshots gallery, optional README rendered from the
PINNED commit (fetched at build, allowlisted HTML, raw HTML dropped, relative
links and images resolved against the pinned tree), and a "More by this
author" shelf. Author page: everything a maintainer has in the catalog with
total stars and a profile link when all repos share one owner.

Cards on the grid link through: the title is a link and a card click opens
the page (the Desktop picker embed keeps expanding in place). The shared
vocabulary (entry type, tier/category taxonomy, link builders) moved to
src/components/PluginCatalog/catalog.ts so the three surfaces cannot drift.
Docs: field table and catalog README describe screenshots:/readme: and the
pages.
2026-09-20 20:43:13 -07:00

217 lines
6.3 KiB
TypeScript

import {themes as prismThemes} from 'prism-react-renderer';
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
import relativeDocLinks from './src/remark/relativeDocLinks';
const config: Config = {
title: 'Hermes Agent',
tagline: 'The self-improving AI agent',
favicon: 'img/favicon.ico',
url: 'https://hermes-agent.nousresearch.com',
baseUrl: '/docs/',
organizationName: 'NousResearch',
projectName: 'hermes-agent',
onBrokenLinks: 'warn',
markdown: {
mermaid: true,
hooks: {
onBrokenMarkdownLinks: 'warn',
},
},
i18n: {
defaultLocale: 'en',
locales: ['en', 'zh-Hans'],
localeConfigs: {
en: {
label: 'English',
},
'zh-Hans': {
label: '简体中文',
htmlLang: 'zh-Hans',
},
},
},
themes: [
'@docusaurus/theme-mermaid',
],
plugins: [
// Static /plugins/<name> and /plugins/by/<author> pages generated from the catalog JSON.
'./plugins/plugin-catalog-pages',
[
'@docusaurus/plugin-client-redirects',
{
// Static-host redirects for renamed doc pages (GitHub Pages can't
// do server-side redirects). Paths are relative to baseUrl (/docs/).
redirects: [
{
// Renamed in #44470 (Automation Blueprints terminology rebrand)
from: '/guides/automation-templates',
to: '/guides/automation-blueprints',
},
{
// Moved when the Plugins subcategory was created under
// Developer Guide > Extending (docs restructure, July 2026)
from: '/guides/build-a-hermes-plugin',
to: '/developer-guide/plugins',
},
{
// Users guess these short paths from abbreviated links and hit
// raw 404s (consumer-onboarding audit finding #1, Aug 2026).
from: '/quickstart',
to: '/getting-started/quickstart',
},
{
from: '/installation',
to: '/getting-started/installation',
},
],
},
],
],
presets: [
[
'classic',
{
docs: {
routeBasePath: '/', // Docs at the root of /docs/
sidebarPath: './sidebars.ts',
editUrl: 'https://github.com/NousResearch/hermes-agent/edit/main/website/',
// Relative `.md` links (readable on GitHub, #114428) must also resolve
// across the zh-Hans fallback boundary; see src/remark/relativeDocLinks.js.
beforeDefaultRemarkPlugins: [[relativeDocLinks, {siteDir: __dirname}]],
},
blog: false,
theme: {
customCss: './src/css/custom.css',
},
} satisfies Preset.Options,
],
],
themeConfig: {
image: 'img/hermes-agent-banner.png',
// Algolia DocSearch (replaces @easyops-cn/docusaurus-search-local).
// The local plugin shipped a ~16 MB client-side lunr index that every
// visitor downloaded and hydrated before their first result; DocSearch
// answers from Algolia's servers with no client index at all. These are
// public search-only credentials — safe to commit (the admin key is not
// in the repo). Index is populated by the Algolia Crawler configured at
// crawler.algolia.com; contextualSearch scopes results to the active
// locale via the docusaurus_tag/lang facets the crawler records carry.
algolia: {
appId: '2JLBVEYZN5',
apiKey: '8fda2a49223ce185ac30c2dbf6898a07',
indexName: 'hermes docs',
contextualSearch: true,
},
colorMode: {
defaultMode: 'dark',
respectPrefersColorScheme: true,
},
docs: {
sidebar: {
hideable: true,
autoCollapseCategories: true,
},
},
navbar: {
title: 'Hermes Agent',
logo: {
alt: 'Hermes Agent',
src: 'img/logo.png',
},
items: [
{
type: 'docSidebar',
sidebarId: 'docs',
position: 'left',
label: 'Docs',
},
{
to: '/skills',
label: 'Skills',
position: 'left',
},
{
to: '/plugins',
label: 'Plugins',
position: 'left',
},
{
href: 'https://hermes-agent.nousresearch.com/',
label: 'Download',
position: 'left',
},
{
type: 'localeDropdown',
position: 'right',
},
{
href: 'https://hermes-agent.nousresearch.com',
label: 'Home',
position: 'right',
},
{
href: 'https://github.com/NousResearch/hermes-agent',
label: 'GitHub',
position: 'right',
},
{
href: 'https://discord.gg/NousResearch',
label: 'Discord',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{ label: 'Getting Started', to: '/getting-started/quickstart' },
{ label: 'User Guide', to: '/user-guide/cli' },
{ label: 'Developer Guide', to: '/developer-guide/architecture' },
{ label: 'Reference', to: '/reference/cli-commands' },
],
},
{
title: 'Community',
items: [
{ label: 'Discord', href: 'https://discord.gg/NousResearch' },
{ label: 'GitHub Issues', href: 'https://github.com/NousResearch/hermes-agent/issues' },
{ label: 'Skills Hub', href: 'https://agentskills.io' },
],
},
{
title: 'More',
items: [
{ label: 'Desktop Download', href: 'https://hermes-agent.nousresearch.com/' },
{ label: 'GitHub', href: 'https://github.com/NousResearch/hermes-agent' },
{ label: 'Nous Research', href: 'https://nousresearch.com' },
],
},
],
copyright: `Built by <a href="https://nousresearch.com">Nous Research</a> · MIT License · ${new Date().getFullYear()}`,
},
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
additionalLanguages: ['bash', 'yaml', 'json', 'python', 'toml'],
},
mermaid: {
theme: {light: 'neutral', dark: 'dark'},
},
} satisfies Preset.ThemeConfig,
};
export default config;