Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions .agents/skills/docusaurus-config/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,31 @@ description: Use when working with docusaurus.config.js/ts files to validate or
Configuration lives in `docusaurus.config.js` or `docusaurus.config.ts` at project root.

```typescript
import {Config} from '@docusaurus/types';
import { Config } from '@docusaurus/types';

const config: Config = {
title: 'My Site', // Required
title: 'My Site', // Required
url: 'https://example.com', // Required, no trailing /
baseUrl: '/', // Required, must start and end with /
baseUrl: '/', // Required, must start and end with /

favicon: 'img/favicon.ico',
organizationName: 'my-org',
projectName: 'my-project',

presets: [['@docusaurus/preset-classic', { /* options */ }]],
themeConfig: { /* theme config */ },
customFields: { /* unknown fields go here */ }
presets: [
[
'@docusaurus/preset-classic',
{
/* options */
},
],
],
themeConfig: {
/* theme config */
},
customFields: {
/* unknown fields go here */
},
};

export default config;
Expand Down
28 changes: 26 additions & 2 deletions .agents/skills/docusaurus-config/references/detailed-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
Docusaurus configuration can be in multiple formats:

### TypeScript (Recommended)

```typescript
import {Config} from '@docusaurus/types';
import {themes as prismThemes} from 'prism-react-renderer';
import { Config } from '@docusaurus/types';
import { themes as prismThemes } from 'prism-react-renderer';

const config: Config = {
// Configuration here
Expand All @@ -17,20 +18,23 @@ export default config;
```

### JavaScript (ESM)

```javascript
export default {
// Configuration here
};
```

### JavaScript (CommonJS)

```javascript
module.exports = {
// Configuration here
};
```

### Async Configuration

```typescript
export default async function createConfig(): Promise<Config> {
// Import ESM-only packages
Expand All @@ -45,18 +49,21 @@ export default async function createConfig(): Promise<Config> {
## Required Fields

### title

- Type: `string`
- Required: Yes
- Description: Site title for metadata and browser tabs

### url

- Type: `string`
- Required: Yes
- Format: Must not end with trailing slash
- Example: `'https://example.com'`
- Description: Full URL where site will be hosted

### baseUrl

- Type: `string`
- Required: Yes
- Format: Must start and end with `/`
Expand All @@ -66,16 +73,19 @@ export default async function createConfig(): Promise<Config> {
## Common Optional Fields

### Site Metadata

- `tagline`: Short description of your site
- `favicon`: Path to favicon (relative to static folder)
- `organizationName`: GitHub org/user name (for deployment)
- `projectName`: GitHub repo name (for deployment)

### Deployment

- `deploymentBranch`: Branch for deployment (default: 'gh-pages')
- `trailingSlash`: Boolean or undefined for trailing slash handling

### Internationalization

```typescript
i18n: {
defaultLocale: 'en',
Expand All @@ -86,6 +96,7 @@ i18n: {
## Themes Configuration

### Using Presets (Recommended)

```typescript
presets: [
[
Expand All @@ -107,6 +118,7 @@ presets: [
```

### Direct Theme Configuration

```typescript
themes: ['@docusaurus/theme-classic'],
themeConfig: {
Expand All @@ -133,11 +145,13 @@ themeConfig: {
### Adding Plugins

String format (no options):

```typescript
plugins: ['@docusaurus/plugin-debug'],
```

Array format (with options):

```typescript
plugins: [
[
Expand All @@ -154,6 +168,7 @@ plugins: [
### Shorthand Notation

Official Docusaurus packages can use shorthand:

- `'classic'` → `'@docusaurus/preset-classic'`
- `'plugin-debug'` → `'@docusaurus/plugin-debug'`

Expand All @@ -172,6 +187,7 @@ customFields: {
```

Access in components:

```typescript
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';

Expand Down Expand Up @@ -214,6 +230,7 @@ When modifying config, verify:
## Common Patterns

### Multi-Instance Docs

```typescript
plugins: [
[
Expand All @@ -236,6 +253,7 @@ plugins: [
```

### Environment Variables

```typescript
const config: Config = {
url: process.env.SITE_URL || 'https://localhost:3000',
Expand All @@ -246,7 +264,9 @@ const config: Config = {
```

### Babel Customization

Create `babel.config.js`:

```javascript
module.exports = {
presets: [require.resolve('@docusaurus/babel/preset')],
Expand All @@ -261,15 +281,19 @@ module.exports = {
### Common Errors

**"url must not have a trailing slash"**

- Fix: Change `url: 'https://example.com/'` to `url: 'https://example.com'`

**"baseUrl must start and end with /"**

- Fix: Change `baseUrl: 'docs'` to `baseUrl: '/docs/'`

**"Unknown field 'myField'"**

- Fix: Move to `customFields: { myField: 'value' }`

**"Cannot find module '@docusaurus/types'"**

- Fix: Run `npm install --save-dev @docusaurus/types`

### Best Practices
Expand Down
9 changes: 6 additions & 3 deletions .agents/skills/docusaurus-documentation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ When the user asks about Docusaurus features, configuration, or best practices,
```typescript
// Use WebFetch to access Docusaurus documentation
WebFetch({
url: "https://docusaurus.io/docs/[topic]",
prompt: "What does this page say about [specific question]?"
})
url: 'https://docusaurus.io/docs/[topic]',
prompt: 'What does this page say about [specific question]?',
});
```

## Core Principles
Expand All @@ -30,20 +30,23 @@ WebFetch({
### Looking Up Configuration Options

When users ask about docusaurus.config.js settings, theming, or plugins:

1. Use WebFetch with https://docusaurus.io/docs/api/docusaurus-config
2. For specific plugins, check https://docusaurus.io/docs/api/plugins/[plugin-name]
3. For theming, use https://docusaurus.io/docs/styling-layout

### Finding Feature Documentation

For markdown features, MDX, or content creation:

- Markdown features: https://docusaurus.io/docs/markdown-features
- MDX and React: https://docusaurus.io/docs/markdown-features/react
- Docs organization: https://docusaurus.io/docs/create-doc

## Reference Files

For detailed documentation, see:

- [references/](references/) - Cached documentation and guides

## Notes
Expand Down
1 change: 1 addition & 0 deletions .agents/skills/docusaurus-plugins/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ module.exports = function remarkPlugin(options = {}) {
## Reference Files

Detailed guides for each plugin type:

- [references/remark-plugins.md](references/remark-plugins.md) - Markdown transformation
- [references/rehype-plugins.md](references/rehype-plugins.md) - HTML processing
- [references/lifecycle-plugins.md](references/lifecycle-plugins.md) - Routes, webpack, global data
Expand Down
57 changes: 12 additions & 45 deletions .agents/skills/docusaurus-plugins/references/content-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,7 @@ module.exports = function contentChangelogPlugin(context, options) {
date: entry.date,
type: entry.type,
}));
await fs.writeFile(
path.join(outDir, 'changelog.json'),
JSON.stringify(api, null, 2)
);
await fs.writeFile(path.join(outDir, 'changelog.json'), JSON.stringify(api, null, 2));
},
};
};
Expand Down Expand Up @@ -194,10 +191,7 @@ import clsx from 'clsx';

export default function ChangelogList({ entries }) {
return (
<Layout
title="Changelog"
description="Product updates and release notes"
>
<Layout title="Changelog" description="Product updates and release notes">
<div className="container margin-vert--lg">
<h1>Changelog</h1>

Expand All @@ -210,17 +204,13 @@ export default function ChangelogList({ entries }) {
</Link>

<div className="changelog-meta">
<span className={clsx('badge', `badge-${entry.type}`)}>
{entry.type}
</span>
<span className={clsx('badge', `badge-${entry.type}`)}>{entry.type}</span>
<span className="version">v{entry.version}</span>
<time>{new Date(entry.date).toLocaleDateString()}</time>
</div>
</div>

<div className="changelog-preview">
{entry.body.slice(0, 200)}...
</div>
<div className="changelog-preview">{entry.body.slice(0, 200)}...</div>
</div>
))}
</div>
Expand All @@ -241,10 +231,7 @@ import Link from '@docusaurus/Link';

export default function ChangelogEntry({ entry }) {
return (
<Layout
title={entry.title}
description={`Release notes for version ${entry.version}`}
>
<Layout title={entry.title} description={`Release notes for version ${entry.version}`}>
<div className="container margin-vert--lg">
<Link to="/changelog" className="back-link">
← Back to Changelog
Expand All @@ -259,9 +246,7 @@ export default function ChangelogEntry({ entry }) {
</div>
</header>

<MDXContent>
{entry.body}
</MDXContent>
<MDXContent>{entry.body}</MDXContent>
</article>
</div>
</Layout>
Expand Down Expand Up @@ -299,10 +284,7 @@ module.exports = function teamPlugin(context, options) {
setGlobalData({ members: content });

// Team list page
const dataPath = await createData(
'team.json',
JSON.stringify(content)
);
const dataPath = await createData('team.json', JSON.stringify(content));

addRoute({
path: '/team',
Expand All @@ -314,10 +296,7 @@ module.exports = function teamPlugin(context, options) {
// Individual member pages
await Promise.all(
content.map(async (member) => {
const memberData = await createData(
`team-${member.id}.json`,
JSON.stringify(member)
);
const memberData = await createData(`team-${member.id}.json`, JSON.stringify(member));

addRoute({
path: `/team/${member.id}`,
Expand Down Expand Up @@ -432,10 +411,7 @@ module.exports = function apiDocsPlugin(context, options) {
// Create API reference pages
await Promise.all(
content.map(async (apiItem) => {
const dataPath = await createData(
`api-${apiItem.name}.json`,
JSON.stringify(apiItem)
);
const dataPath = await createData(`api-${apiItem.name}.json`, JSON.stringify(apiItem));

addRoute({
path: `/api/${apiItem.name}`,
Expand All @@ -447,10 +423,7 @@ module.exports = function apiDocsPlugin(context, options) {
);

// Create API index page
const indexPath = await createData(
'api-index.json',
JSON.stringify(content)
);
const indexPath = await createData('api-index.json', JSON.stringify(content));

addRoute({
path: '/api',
Expand Down Expand Up @@ -558,10 +531,7 @@ export interface PluginContent {
latestVersion: string;
}

declare const plugin: (
context: LoadContext,
options: PluginOptions
) => Plugin<ChangelogEntry[]>;
declare const plugin: (context: LoadContext, options: PluginOptions) => Plugin<ChangelogEntry[]>;

export default plugin;
```
Expand Down Expand Up @@ -624,10 +594,7 @@ content.forEach((item) => {

// Create tag pages
for (const [tag, items] of tagMap) {
const dataPath = await createData(
`tag-${tag}.json`,
JSON.stringify(items)
);
const dataPath = await createData(`tag-${tag}.json`, JSON.stringify(items));

addRoute({
path: `/tags/${tag}`,
Expand Down
Loading
Loading