hermes-agent/website/docusaurus.config.ts
Teknium fb40a768fc
feat(docs): add /docs/plugins catalog page fed by plugin-catalog/ extractor
- website/scripts/extract-plugins.py: reads plugin-catalog/*.yaml (+removed.yaml),
  emits static/api/plugins.json + plugins-meta.json; degrades to an empty
  catalog with exit 0 when plugin-catalog/ does not exist yet
- website/src/pages/plugins/: catalog page with search, tier tabs
  (All/Official/Community), capability chips, pinned-SHA repo links,
  copyable install commands, and an empty-state submission CTA
- cross-nav between Skills Hub and Plugin Catalog pages + navbar item
- user docs: user-guide/features/plugin-catalog.md (trust model, install,
  submission checklist, custom git-URL contrast), registered in sidebars.ts
- wired into deploy-site.yml and prebuild.mjs; artifacts gitignored
- tests: tests/website/test_extract_plugins.py
2026-07-22 07:28:53 -07:00

220 lines
6.4 KiB
TypeScript

import {themes as prismThemes} from 'prism-react-renderer';
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
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',
[
require.resolve('@easyops-cn/docusaurus-search-local'),
/** @type {import("@easyops-cn/docusaurus-search-local").PluginOptions} */
({
hashed: true,
language: ['en', 'zh'],
indexBlog: false,
docsRouteBasePath: '/',
// Disabled: appends ?_highlight=... to URLs (before the #anchor),
// which makes copy/pasted doc links ugly. Ctrl+F on the page is fine.
highlightSearchTermsOnTargetPage: false,
// Exclude the auto-generated per-skill catalog pages from search.
// There are hundreds of them and they dominate results for generic
// terms, drowning out the real user-guide / reference docs.
// The two human-written catalog indexes (reference/skills-catalog,
// reference/optional-skills-catalog) remain indexed.
//
// Note: ignoreFiles matches `route` (baseUrl stripped, no leading
// slash). With baseUrl '/docs/', `/docs/user-guide/skills/bundled/x`
// becomes 'user-guide/skills/bundled/x'.
ignoreFiles: [
/^user-guide\/skills\/bundled\//,
/^user-guide\/skills\/optional\//,
],
// Exact-or-prefix matching only (default is edit distance 1).
// With fuzzy distance 1, "keet" matched "meetings"/"keep" (one
// edit away after stemming), and multi-word typo queries against
// our ~14 MB index could stall the single-threaded search worker
// for 25s+, backing up every subsequent keystroke's search until
// the bar appeared dead. Distance 0 keeps "word or its extension"
// semantics (keet -> keet*) and removes the pathological scans.
fuzzyMatchingDistance: 0,
}),
],
],
plugins: [
[
'@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',
},
],
},
],
],
presets: [
[
'classic',
{
docs: {
routeBasePath: '/', // Docs at the root of /docs/
sidebarPath: './sidebars.ts',
editUrl: 'https://github.com/NousResearch/hermes-agent/edit/main/website/',
},
blog: false,
theme: {
customCss: './src/css/custom.css',
},
} satisfies Preset.Options,
],
],
themeConfig: {
image: 'img/hermes-agent-banner.png',
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;