diff --git a/apps/landing/app/blog/page.tsx b/apps/landing/app/blog/page.tsx
index 5bfa3e4265..ef9aecc3fd 100644
--- a/apps/landing/app/blog/page.tsx
+++ b/apps/landing/app/blog/page.tsx
@@ -1,50 +1,5 @@
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@kandev/ui/card';
-import Link from 'next/link';
-
-const blogPosts = [
- {
- title: 'Introducing kandev.ai: AI-Powered Kanban for Developers',
- description: 'Learn how kandev.ai combines Kanban boards with AI agents, isolated worktrees, and Docker containers to accelerate your development workflow.',
- date: 'January 10, 2026',
- slug: 'introducing-kandev',
- author: 'Kandev Team',
- },
- {
- title: 'Running Multiple AI Agents in Parallel: Best Practices',
- description: 'Discover how to effectively manage multiple AI coding agents working simultaneously on different tasks using isolated environments and approval workflows.',
- date: 'January 5, 2026',
- slug: 'parallel-ai-agents',
- author: 'Kandev Team',
- },
-];
+import { redirect } from 'next/navigation';
export default function BlogPage() {
- return (
-
-
-
{children}
+
);
}
diff --git a/apps/landing/app/docs/page.tsx b/apps/landing/app/docs/page.tsx
index 8d9e025f3c..fdb06a91ed 100644
--- a/apps/landing/app/docs/page.tsx
+++ b/apps/landing/app/docs/page.tsx
@@ -1,149 +1,51 @@
+import { DocsShell } from '@/components/docs-shell';
+import { DocsCard } from '@/components/docs-card';
+import { DocsCode } from '@/components/docs-code';
+
export default function DocsPage() {
return (
-
-
-
Getting Started with kandev.ai
-
- kandev.ai combines Kanban task management with AI-powered development workflows. Manage tasks visually,
- execute them with AI agents in isolated environments, and ship faster with confidence.
-
-
+
+
+
+
+ kandev.ai is a WebSocket-first platform that pairs Kanban task management with AI-assisted execution.
+ Every task runs inside a dedicated git worktree and a Docker container, with approvals for sensitive
+ operations.
+
+
+
+
+ Ship in parallel without branch conflicts.
+ Keep execution auditable and reviewable.
+ Stream progress updates in real time.
+
+
+
-
-
What is kandev.ai?
-
- kandev.ai is a development tool that bridges project management and AI-assisted coding. Each task on your
- Kanban board can be executed by AI agents working in isolated git worktrees and Docker containers.
-
-
+
+ From task creation to approval, kandev.ai follows a consistent loop.
+ {`1. Create task on the board
+2. Start agent container via agentctl
+3. Initialize ACP session
+4. Stream progress over WebSocket
+5. Review and approve output`}
+
- Key Features
-
-
-
Visual Task Management
-
Organize development work with Kanban boards
-
-
-
Isolated Worktrees
-
Each task gets its own git worktree for parallel development
-
-
-
Local Docker Execution
-
AI agents run in secure Docker containers on your machine
-
-
-
Multiple AI Agents
-
Support for Claude Code, OpenAI Codex, Augment, and more
-
-
-
Approval Workflows
-
Review and approve agent changes before merging
-
-
-
Multiple Workspaces
-
Organize projects by client, team, or product
-
-
-
- How It Works
-
-
-
1
-
-
Create a Task
-
Add a task to your Kanban board with a description of what needs to be done
-
-
-
-
2
-
-
Configure Repository
-
Select a repository and base branch for the task
-
-
-
-
3
-
-
Choose AI Agent
-
Select which AI agent should work on the task
-
-
-
-
4
-
-
Isolated Environment
-
kandev creates an isolated git worktree and Docker container
-
-
-
-
5
-
-
AI Execution
-
The AI agent executes the task in the secure environment
-
-
-
-
6
-
-
Review & Approve
-
Review the changes and approve them for merging
-
-
-
-
-
-
Why kandev.ai?
-
- Traditional development workflows require constant context switching. kandev.ai eliminates this by:
-
-
-
- ✓
- Visualizing all work in progress on a single board
-
-
- ✓
- Enabling parallel development without branch conflicts
-
-
- ✓
- Automating routine tasks with AI agents
-
-
- ✓
- Maintaining security through isolated execution environments
-
-
-
-
-
-
Security & Control
-
- Every operation performed by AI agents is logged and requires approval. Agents run in isolated Docker
- containers with restricted permissions, ensuring your codebase and system remain secure.
-
-
-
-
-
Ready to Get Started?
-
- Check out our guides to install and configure kandev.ai
-
-
-
-
+
+
+ Group repositories, boards, and team settings.
+
+
+ Model your workflow with Kanban columns.
+
+
+ Define the scope, constraints, and agent requirements.
+
+
+
);
}
diff --git a/apps/landing/app/docs/quick-start/page.tsx b/apps/landing/app/docs/quick-start/page.tsx
new file mode 100644
index 0000000000..bf570d91d4
--- /dev/null
+++ b/apps/landing/app/docs/quick-start/page.tsx
@@ -0,0 +1,46 @@
+import { DocsShell } from '@/components/docs-shell';
+import { DocsCard } from '@/components/docs-card';
+import { DocsCode } from '@/components/docs-code';
+
+const steps = [
+ {
+ step: '1. Create a workspace',
+ body: 'Create a workspace for the repository you want to manage.',
+ },
+ {
+ step: '2. Add a board and task',
+ body: 'Add a board with columns, then create a task that describes the desired change.',
+ },
+ {
+ step: '3. Run an agent',
+ body: 'Start an agent from the task. The UI should stream progress updates as the agent works.',
+ },
+ {
+ step: '4. Review and merge',
+ body: 'Review the diff, approve any gated actions, and merge the worktree.',
+ },
+];
+
+export default function QuickStartDocsPage() {
+ return (
+
+
+ {steps.map((item) => (
+
+ {item.body}
+
+ ))}
+
+
+
+ {`Task: Update onboarding copy
+Constraints: Touch only apps/landing
+Acceptance: Copy updated and passes lint`}
+
+
+ );
+}
diff --git a/apps/landing/app/docs/tasks/page.tsx b/apps/landing/app/docs/tasks/page.tsx
new file mode 100644
index 0000000000..9e9874bdd5
--- /dev/null
+++ b/apps/landing/app/docs/tasks/page.tsx
@@ -0,0 +1,42 @@
+import { DocsShell } from '@/components/docs-shell';
+import { DocsCard } from '@/components/docs-card';
+import { DocsCode } from '@/components/docs-code';
+
+export default function TasksDocsPage() {
+ return (
+
+
+
+
+ Title and description
+ Priority and due date
+ Repository and base branch
+ Agent type and environment
+ Approval requirements
+
+
+
+
+ State the outcome, not the steps.
+ Call out sensitive files or commands.
+ Include acceptance criteria.
+
+
+
+
+
+ {`Title: Add changelog page
+Repo: github.com/kdlbs/kandev
+Branch: main
+Agent: augment-agent
+Goal: Replace blog with changelog
+Constraints: Keep existing navbar/footer
+Output: New route + MDX entries`}
+
+
+ );
+}
diff --git a/apps/landing/app/docs/workspaces/page.tsx b/apps/landing/app/docs/workspaces/page.tsx
new file mode 100644
index 0000000000..0090bea1d3
--- /dev/null
+++ b/apps/landing/app/docs/workspaces/page.tsx
@@ -0,0 +1,42 @@
+import { DocsShell } from '@/components/docs-shell';
+import { DocsCard } from '@/components/docs-card';
+import { DocsCode } from '@/components/docs-code';
+
+export default function WorkspacesDocsPage() {
+ return (
+
+
+
+
+ Boards that define workflow stages
+ Repositories connected to those boards
+ Default agent settings and approvals
+ Member roles and permissions
+
+
+
+
+ Use one workspace per product or client.
+ Keep board naming consistent across teams.
+ Set approvals at the workspace level.
+
+
+
+
+
+ A workspace keeps everything organized in one place.
+ {`Workspace: "Core Platform"
+Boards:
+ - Product Roadmap
+ - Incident Response
+Repositories:
+ - github.com/kdlbs/kandev
+ - github.com/kdlbs/kandev-docs`}
+
+
+ );
+}
diff --git a/apps/landing/app/docs/worktrees/page.tsx b/apps/landing/app/docs/worktrees/page.tsx
new file mode 100644
index 0000000000..4055eb9972
--- /dev/null
+++ b/apps/landing/app/docs/worktrees/page.tsx
@@ -0,0 +1,40 @@
+import { DocsShell } from '@/components/docs-shell';
+import { DocsCard } from '@/components/docs-card';
+import { DocsCode } from '@/components/docs-code';
+
+const benefits = [
+ { title: 'Parallel tasks', desc: 'Multiple agents can work without branch collisions.' },
+ { title: 'Clean diffs', desc: 'Each task produces an isolated patch.' },
+ { title: 'Fast setup', desc: 'No extra clones required.' },
+];
+
+export default function WorktreesDocsPage() {
+ return (
+
+
+ {benefits.map((item) => (
+
+ {item.desc}
+
+ ))}
+
+
+
+ {`/repos/kandev
+ /main (primary checkout)
+ /.worktrees/task-123
+ /.worktrees/task-124`}
+
+
+
+
+ When a task is completed and merged, the worktree can be safely removed without affecting the main checkout.
+
+
+
+ );
+}
diff --git a/apps/landing/components/changelog-video.tsx b/apps/landing/components/changelog-video.tsx
new file mode 100644
index 0000000000..76c3072b33
--- /dev/null
+++ b/apps/landing/components/changelog-video.tsx
@@ -0,0 +1,28 @@
+import type { HTMLAttributes } from 'react';
+
+type ChangelogVideoProps = {
+ src: string;
+ poster?: string;
+ caption?: string;
+} & HTMLAttributes
;
+
+export function ChangelogVideo({ src, poster, caption, className, ...props }: ChangelogVideoProps) {
+ return (
+
+
+ {caption ? (
+ {caption}
+ ) : null}
+
+ );
+}
diff --git a/apps/landing/components/docs-card.tsx b/apps/landing/components/docs-card.tsx
new file mode 100644
index 0000000000..6e79e5a0a2
--- /dev/null
+++ b/apps/landing/components/docs-card.tsx
@@ -0,0 +1,26 @@
+import type { ReactNode } from 'react';
+
+export function DocsCard({
+ title,
+ children,
+ variant = 'default',
+}: {
+ title: string;
+ children: ReactNode;
+ variant?: 'default' | 'accent' | 'muted';
+}) {
+ const base =
+ 'rounded-2xl border border-border/60 bg-card/50 p-6 shadow-[0_12px_40px_-28px_rgba(37,99,235,0.5)] backdrop-blur';
+ const variants: Record = {
+ default: 'bg-card/50',
+ accent: 'border-primary/30 bg-primary/10',
+ muted: 'bg-muted/30',
+ };
+
+ return (
+
+ );
+}
diff --git a/apps/landing/components/docs-code.tsx b/apps/landing/components/docs-code.tsx
new file mode 100644
index 0000000000..cb7bf808cd
--- /dev/null
+++ b/apps/landing/components/docs-code.tsx
@@ -0,0 +1,9 @@
+import type { ReactNode } from 'react';
+
+export function DocsCode({ children }: { children: ReactNode }) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/apps/landing/components/docs-shell.tsx b/apps/landing/components/docs-shell.tsx
new file mode 100644
index 0000000000..4ffbff80f8
--- /dev/null
+++ b/apps/landing/components/docs-shell.tsx
@@ -0,0 +1,25 @@
+export function DocsShell({
+ eyebrow,
+ title,
+ description,
+ children,
+}: {
+ eyebrow: string;
+ title: string;
+ description: string;
+ children: React.ReactNode;
+}) {
+ return (
+
+
+
+
+ {eyebrow}
+ {title}
+ {description}
+
+ {children}
+
+
+ );
+}
diff --git a/apps/landing/components/docs-sidebar.tsx b/apps/landing/components/docs-sidebar.tsx
index 0a6721196c..f75cee0901 100644
--- a/apps/landing/components/docs-sidebar.tsx
+++ b/apps/landing/components/docs-sidebar.tsx
@@ -29,34 +29,13 @@ const sections = [
{ title: 'Docker Execution', href: '/docs/docker' },
],
},
- {
- title: 'Integrations',
- items: [
- { title: 'MCP Servers', href: '/docs/mcp' },
- { title: 'GitHub', href: '/docs/github' },
- ],
- },
- {
- title: 'Security',
- items: [
- { title: 'Approval Workflows', href: '/docs/approvals' },
- { title: 'Audit Logs', href: '/docs/audit-logs' },
- ],
- },
- {
- title: 'Advanced',
- items: [
- { title: 'Configuration', href: '/docs/configuration' },
- { title: 'CLI Reference', href: '/docs/cli' },
- ],
- },
];
export function DocsSidebar() {
const pathname = usePathname();
return (
-
+
{sections.map((section) => (
diff --git a/apps/landing/components/footer.tsx b/apps/landing/components/footer.tsx
index 5b59905c67..1063cdcd21 100644
--- a/apps/landing/components/footer.tsx
+++ b/apps/landing/components/footer.tsx
@@ -36,8 +36,8 @@ export function Footer() {
-
- Blog
+
+ Changelog
diff --git a/apps/landing/components/hero-section.tsx b/apps/landing/components/hero-section.tsx
index c606e7a58f..50082cd8b9 100644
--- a/apps/landing/components/hero-section.tsx
+++ b/apps/landing/components/hero-section.tsx
@@ -16,56 +16,48 @@ export function HeroSection() {
return (
- {/* Animated gradient cloud */}
-
-
-
- kandev.ai – AI-powered Kanban for developers
-
-
- Kanban meets AI development
-
-
- Manage development tasks with isolated git worktrees, secure Docker execution, and AI agents.
- Ship faster without breaking your workflow.
-
-
-
-
-
npx kandev
-
- {copied ? (
-
- ) : (
-
- )}
+
+
+
+ kandev.ai – AI-powered Kanban for developers
+
+
+ Kanban meets AI development
+
+
+ Manage development tasks with isolated git worktrees, secure Docker execution, and AI agents.
+ Ship faster without breaking your workflow.
+
+
-
-
-
-
Video placeholder
+
+
+ npx kandev
+
+ {copied ? (
+
+ ) : (
+
+ )}
+
+
+
+
-
);
diff --git a/apps/landing/components/mdx-components.tsx b/apps/landing/components/mdx-components.tsx
new file mode 100644
index 0000000000..2c09e0f14b
--- /dev/null
+++ b/apps/landing/components/mdx-components.tsx
@@ -0,0 +1,44 @@
+import type { ComponentProps, ReactElement } from 'react';
+import { ChangelogVideo } from '@/components/changelog-video';
+
+function MdxHeading({ className, ...props }: ComponentProps<'h2'>) {
+ return ;
+}
+
+function MdxSubheading({ className, ...props }: ComponentProps<'h3'>) {
+ return ;
+}
+
+function MdxParagraph({ className, ...props }: ComponentProps<'p'>) {
+ return
;
+}
+
+function MdxList({ className, ...props }: ComponentProps<'ul'>) {
+ return ;
+}
+
+function MdxListItem({ className, ...props }: ComponentProps<'li'>) {
+ return ;
+}
+
+function MdxImage({ className, alt, ...props }: ComponentProps<'img'>): ReactElement {
+ return (
+
+ );
+}
+
+export const mdxComponents = {
+ h2: MdxHeading,
+ h3: MdxSubheading,
+ p: MdxParagraph,
+ ul: MdxList,
+ li: MdxListItem,
+ img: MdxImage,
+ ChangelogVideo,
+};
diff --git a/apps/landing/components/navbar.tsx b/apps/landing/components/navbar.tsx
index 4648dc16d3..121f2c7a41 100644
--- a/apps/landing/components/navbar.tsx
+++ b/apps/landing/components/navbar.tsx
@@ -37,13 +37,13 @@ export function Navbar() {
Documentation
- Blog
+ Changelog
diff --git a/apps/landing/content/changelog/2026-01-17-launch/index.mdx b/apps/landing/content/changelog/2026-01-17-launch/index.mdx
new file mode 100644
index 0000000000..f1619cbee2
--- /dev/null
+++ b/apps/landing/content/changelog/2026-01-17-launch/index.mdx
@@ -0,0 +1,37 @@
+---
+title: "kandev.ai Launch"
+date: "2026-01-17"
+surface: "Platform"
+summary:
+ - "kandev.ai ships a WebSocket-first Kanban + AI agent workflow for developer teams."
+ - "Tasks run inside isolated git worktrees and Docker containers with approval gates."
+---
+
+## What is kandev.ai?
+
+kandev.ai is a Kanban-native development platform that pairs task management with AI agents. Every task can be executed by an agent in a clean, isolated environment, while you keep control over approvals and merge decisions.
+
+
+
+## Initial launch features
+
+- **Kanban boards for engineering work** with task metadata, priorities, and agent selection.
+- **Isolated git worktrees** so parallel tasks never collide.
+- **Docker-based execution** for secure, repeatable runs.
+- **Agent control plane** via `agentctl` with start/stop/status and ACP relays.
+- **WebSocket-only client API** for real-time orchestration and updates.
+- **Approval gates** for sensitive paths and commands.
+
+## How it works (high level)
+
+1. The client opens a single WebSocket connection to the backend.
+2. The backend spins up an agent container with `agentctl` as a sidecar.
+3. The backend initializes ACP over stdin/stdout and creates a session.
+4. The task prompt is streamed to the agent and progress events flow back in real time.
+5. Results are reviewed, approved, and merged back into the main branch.
+
+
+
+### What’s next
+
+Expect expanded agent types, richer approvals, and deeper task analytics in upcoming releases.
diff --git a/apps/landing/lib/changelog.ts b/apps/landing/lib/changelog.ts
new file mode 100644
index 0000000000..5375e1b650
--- /dev/null
+++ b/apps/landing/lib/changelog.ts
@@ -0,0 +1,71 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import matter from 'gray-matter';
+
+export type ChangelogEntry = {
+ slug: string;
+ title: string;
+ date: string;
+ surface: string;
+ summary: string[];
+ content: string;
+};
+
+const changelogRoot = path.join(process.cwd(), 'content', 'changelog');
+
+function normalizeSummary(summary: unknown): string[] {
+ if (Array.isArray(summary)) {
+ return summary.filter((item): item is string => typeof item === 'string');
+ }
+ if (typeof summary === 'string') {
+ return [summary];
+ }
+ return [];
+}
+
+function parseEntry(slug: string, fileContent: string): ChangelogEntry {
+ const { data, content } = matter(fileContent);
+
+ return {
+ slug,
+ title: String(data.title ?? slug),
+ date: String(data.date ?? ''),
+ surface: String(data.surface ?? 'Product'),
+ summary: normalizeSummary(data.summary),
+ content,
+ };
+}
+
+export async function getChangelogEntries(): Promise {
+ const entries = await fs.readdir(changelogRoot, { withFileTypes: true });
+ const slugs = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
+
+ const items = await Promise.all(
+ slugs.map(async (slug) => {
+ const entryPath = path.join(changelogRoot, slug, 'index.mdx');
+ const fileContent = await fs.readFile(entryPath, 'utf8');
+ return parseEntry(slug, fileContent);
+ })
+ );
+
+ return items.sort((a, b) => {
+ const aTime = new Date(a.date).getTime();
+ const bTime = new Date(b.date).getTime();
+ return bTime - aTime;
+ });
+}
+
+export async function getChangelogEntry(slug: string): Promise {
+ const entryPath = path.join(changelogRoot, slug, 'index.mdx');
+ try {
+ const fileContent = await fs.readFile(entryPath, 'utf8');
+ return parseEntry(slug, fileContent);
+ } catch {
+ return null;
+ }
+}
+
+export async function getChangelogSlugs(): Promise {
+ const entries = await fs.readdir(changelogRoot, { withFileTypes: true });
+ return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
+}
diff --git a/apps/landing/next-env.d.ts b/apps/landing/next-env.d.ts
index 9edff1c7ca..c4b7818fbb 100644
--- a/apps/landing/next-env.d.ts
+++ b/apps/landing/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/apps/landing/package.json b/apps/landing/package.json
index cb87de4f52..b75ca6c291 100644
--- a/apps/landing/package.json
+++ b/apps/landing/package.json
@@ -15,8 +15,10 @@
"clsx": "^2.1.1",
"next": "16.1.1",
"next-themes": "^0.4.6",
+ "next-mdx-remote": "^5.0.0",
"react": "19.2.3",
"react-dom": "19.2.3",
+ "gray-matter": "^4.0.3",
"shadcn": "^3.6.3",
"tailwind-merge": "^2.6.0",
"tw-animate-css": "^1.4.0"
diff --git a/apps/landing/public/changelog/2026-01-17-launch/high-level-flow.svg b/apps/landing/public/changelog/2026-01-17-launch/high-level-flow.svg
new file mode 100644
index 0000000000..4d6cdd3403
--- /dev/null
+++ b/apps/landing/public/changelog/2026-01-17-launch/high-level-flow.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+ Client WS
+ Backend
+ agentctl
+ Agent
+
+ orchestrator.start → /api/v1/start → ACP initialize/session/prompt → session/update
+ Real-time progress streamed back over WebSocket
+ High-level execution flow
+
diff --git a/apps/landing/public/changelog/2026-01-17-launch/launch-hero.svg b/apps/landing/public/changelog/2026-01-17-launch/launch-hero.svg
new file mode 100644
index 0000000000..6b0c65f70a
--- /dev/null
+++ b/apps/landing/public/changelog/2026-01-17-launch/launch-hero.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+ kandev.ai Launch
+ Kanban + AI agents with secure execution
+
diff --git a/apps/pnpm-lock.yaml b/apps/pnpm-lock.yaml
index 7543a81b80..03de9600f0 100644
--- a/apps/pnpm-lock.yaml
+++ b/apps/pnpm-lock.yaml
@@ -29,9 +29,15 @@ importers:
clsx:
specifier: ^2.1.1
version: 2.1.1
+ gray-matter:
+ specifier: ^4.0.3
+ version: 4.0.3
next:
specifier: 16.1.1
version: 16.1.1(@babel/core@7.28.6)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ next-mdx-remote:
+ specifier: ^5.0.0
+ version: 5.0.0(@types/react@19.2.8)(react@19.2.3)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -68,7 +74,7 @@ importers:
version: 9.39.2(jiti@2.6.1)
eslint-config-next:
specifier: 16.1.1
- version: 16.1.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ version: 16.1.1(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
tailwindcss:
specifier: ^4.0.0
version: 4.1.18
@@ -373,7 +379,7 @@ importers:
version: 9.39.2(jiti@2.6.1)
eslint-config-next:
specifier: 16.1.1
- version: 16.1.1(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ version: 16.1.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
happy-dom:
specifier: ^20.1.0
version: 20.1.0
@@ -1122,6 +1128,15 @@ packages:
'@marijn/find-cluster-break@1.0.2':
resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
+
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
'@modelcontextprotocol/sdk@1.25.2':
resolution: {integrity: sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==}
engines: {node: '>=18'}
@@ -2268,6 +2283,9 @@ packages:
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
@@ -2572,6 +2590,9 @@ packages:
resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -2625,6 +2646,10 @@ packages:
resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
engines: {node: '>=4'}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -2769,6 +2794,9 @@ packages:
codemirror@6.0.2:
resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==}
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -3095,6 +3123,12 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
esbuild@0.21.5:
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
@@ -3232,9 +3266,24 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
estree-util-is-identifier-name@3.0.0:
resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
@@ -3279,6 +3328,10 @@ packages:
resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
engines: {node: '>= 18'}
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -3478,6 +3531,10 @@ packages:
resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+ gray-matter@4.0.3:
+ resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
+ engines: {node: '>=6.0'}
+
happy-dom@20.1.0:
resolution: {integrity: sha512-ebvqjBqzenBk2LjzNEAzoj7yhw7rW/R2/wVevMu6Mrq3MXtcI/RUz4+ozpcOcqVLEWPqLfg2v9EAU7fFXZUUJw==}
engines: {node: '>=20.0.0'}
@@ -3509,6 +3566,9 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
+
hast-util-to-jsx-runtime@2.3.6:
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
@@ -3654,6 +3714,10 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
hasBin: true
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -3811,6 +3875,10 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
+ hasBin: true
+
js-yaml@4.1.1:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
@@ -3857,6 +3925,10 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
@@ -3986,6 +4058,10 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
@@ -4023,6 +4099,9 @@ packages:
mdast-util-mdx-jsx@3.2.0:
resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
mdast-util-mdxjs-esm@2.0.1:
resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
@@ -4080,12 +4159,30 @@ packages:
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
micromark-factory-destination@2.0.1:
resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
micromark-factory-label@2.0.1:
resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
+
micromark-factory-space@2.0.1:
resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
@@ -4116,6 +4213,9 @@ packages:
micromark-util-encode@2.0.1:
resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
+
micromark-util-html-tag-name@2.0.1:
resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
@@ -4215,6 +4315,12 @@ packages:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
+ next-mdx-remote@5.0.0:
+ resolution: {integrity: sha512-RNNbqRpK9/dcIFZs/esQhuLA8jANqlH694yqoDBK8hkVdJUndzzGmnPHa2nyi90N4Z9VmzuSWNRpr5ItT3M7xQ==}
+ engines: {node: '>=14', npm: '>=7'}
+ peerDependencies:
+ react: '>=16'
+
next-themes@0.4.6:
resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
peerDependencies:
@@ -4597,6 +4703,20 @@ packages:
react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -4605,12 +4725,18 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
remark-breaks@4.0.0:
resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==}
remark-gfm@4.0.1:
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
+
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
@@ -4692,6 +4818,10 @@ packages:
scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+ section-matter@1.0.0:
+ resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
+ engines: {node: '>=4'}
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -4783,9 +4913,16 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
@@ -4856,6 +4993,10 @@ packages:
resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
+ strip-bom-string@1.0.0:
+ resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+ engines: {node: '>=0.10.0'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@@ -5059,15 +5200,27 @@ packages:
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+ unist-util-remove@3.1.1:
+ resolution: {integrity: sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==}
+
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
unist-util-visit-parents@6.0.2:
resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
@@ -5139,6 +5292,9 @@ packages:
react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
+ vfile-matter@5.0.1:
+ resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==}
+
vfile-message@4.0.3:
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
@@ -5289,6 +5445,11 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
@@ -6176,6 +6337,42 @@ snapshots:
'@marijn/find-cluster-break@1.0.2': {}
+ '@mdx-js/mdx@3.1.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ acorn: 8.15.0
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.15.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.1
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mdx-js/react@3.1.1(@types/react@19.2.8)(react@19.2.3)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.8
+ react: 19.2.3
+
'@modelcontextprotocol/sdk@1.25.2(hono@4.11.3)(zod@3.25.76)':
dependencies:
'@hono/node-server': 1.19.8(hono@4.11.3)
@@ -7284,6 +7481,8 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/mdx@2.0.13': {}
+
'@types/ms@2.1.0': {}
'@types/node@20.19.28':
@@ -7591,6 +7790,10 @@ snapshots:
ansis@4.2.0: {}
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
argparse@2.0.1: {}
aria-hidden@1.2.6:
@@ -7674,6 +7877,8 @@ snapshots:
dependencies:
tslib: 2.8.1
+ astring@1.9.0: {}
+
async-function@1.0.0: {}
available-typed-arrays@1.0.7:
@@ -7831,6 +8036,8 @@ snapshots:
'@codemirror/state': 6.5.3
'@codemirror/view': 6.39.10
+ collapse-white-space@2.1.0: {}
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -8170,6 +8377,20 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.15.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
esbuild@0.21.5:
optionalDependencies:
'@esbuild/aix-ppc64': 0.21.5
@@ -8454,8 +8675,35 @@ snapshots:
estraverse@5.3.0: {}
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+
estree-util-is-identifier-name@3.0.0: {}
+ estree-util-scope@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.8
@@ -8548,6 +8796,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
extend@3.0.2: {}
fast-deep-equal@3.1.3: {}
@@ -8738,6 +8990,13 @@ snapshots:
graphql@16.12.0: {}
+ gray-matter@4.0.3:
+ dependencies:
+ js-yaml: 3.14.2
+ kind-of: 6.0.3
+ section-matter: 1.0.0
+ strip-bom-string: 1.0.0
+
happy-dom@20.1.0:
dependencies:
'@types/node': 20.19.28
@@ -8771,6 +9030,27 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-to-estree@3.1.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
hast-util-to-jsx-runtime@2.3.6:
dependencies:
'@types/estree': 1.0.8
@@ -8923,6 +9203,8 @@ snapshots:
is-docker@3.0.0: {}
+ is-extendable@0.1.1: {}
+
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@@ -9050,6 +9332,11 @@ snapshots:
js-tokens@9.0.1: {}
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -9091,6 +9378,8 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ kind-of@6.0.3: {}
+
kleur@3.0.3: {}
kleur@4.1.5: {}
@@ -9199,6 +9488,8 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ markdown-extensions@2.0.0: {}
+
markdown-table@3.0.4: {}
math-intrinsics@1.1.0: {}
@@ -9312,6 +9603,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ mdast-util-mdx@3.0.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
mdast-util-mdxjs-esm@2.0.1:
dependencies:
'@types/estree-jsx': 1.0.5
@@ -9446,6 +9747,57 @@ snapshots:
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-mdx-expression@3.0.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-jsx@3.0.2:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.1.1
@@ -9459,6 +9811,18 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-factory-mdx-expression@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.1.1
@@ -9511,6 +9875,16 @@ snapshots:
micromark-util-encode@2.0.1: {}
+ micromark-util-events-to-acorn@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
micromark-util-html-tag-name@2.0.1: {}
micromark-util-normalize-identifier@2.0.1:
@@ -9635,6 +10009,19 @@ snapshots:
negotiator@1.0.0: {}
+ next-mdx-remote@5.0.0(@types/react@19.2.8)(react@19.2.3):
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@mdx-js/mdx': 3.1.1
+ '@mdx-js/react': 3.1.1(@types/react@19.2.8)(react@19.2.3)
+ react: 19.2.3
+ unist-util-remove: 3.1.1
+ vfile: 6.0.3
+ vfile-matter: 5.0.1
+ transitivePeerDependencies:
+ - '@types/react'
+ - supports-color
+
next-themes@0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
react: 19.2.3
@@ -10110,6 +10497,35 @@ snapshots:
tiny-invariant: 1.3.3
victory-vendor: 36.9.2
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.1(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
@@ -10130,6 +10546,14 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
+ rehype-recma@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ hast-util-to-estree: 3.1.3
+ transitivePeerDependencies:
+ - supports-color
+
remark-breaks@4.0.0:
dependencies:
'@types/mdast': 4.0.4
@@ -10147,6 +10571,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ remark-mdx@3.1.1:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
@@ -10271,6 +10702,11 @@ snapshots:
scheduler@0.27.0: {}
+ section-matter@1.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ kind-of: 6.0.3
+
semver@6.3.1: {}
semver@7.7.3: {}
@@ -10451,8 +10887,12 @@ snapshots:
source-map@0.6.1: {}
+ source-map@0.7.6: {}
+
space-separated-tokens@2.0.2: {}
+ sprintf-js@1.0.3: {}
+
stable-hash@0.0.5: {}
stackback@0.0.2: {}
@@ -10551,6 +10991,8 @@ snapshots:
dependencies:
ansi-regex: 6.2.2
+ strip-bom-string@1.0.0: {}
+
strip-bom@3.0.0: {}
strip-final-newline@2.0.0: {}
@@ -10746,18 +11188,37 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.11
+
unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
unist-util-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
+ unist-util-remove@3.1.1:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
@@ -10843,6 +11304,11 @@ snapshots:
- '@types/react'
- '@types/react-dom'
+ vfile-matter@5.0.1:
+ dependencies:
+ vfile: 6.0.3
+ yaml: 2.8.2
+
vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
@@ -11020,6 +11486,8 @@ snapshots:
yallist@3.1.1: {}
+ yaml@2.8.2: {}
+
yargs-parser@21.1.1: {}
yargs@17.7.2: