Skip to content

Commit 4fed9cb

Browse files
committed
refactor(agents)!: update provider configurations and navigation structure
- Update all agent provider options with proper TypeScript typing using satisfies operator - Remove deprecated structuredOutput flags from agent configurations - Replace demo/test routes with new networks navigation - Add MDX frontmatter handling and improve Turbopack compatibility - Move blog data to separate module for better organization - Update footer to use dynamic year with useEffect hook - Add new networks images and blog layout components BREAKING CHANGE: Agent provider configurations have been updated and may require dependency version updates. Navigation routes changed from /test to /networks.
1 parent 23cea0c commit 4fed9cb

51 files changed

Lines changed: 2261 additions & 240 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
# 🚀 AgentStack
66

7+
![Networks v1.0.0](networksv1.png)
8+
![Networks Custom Tool v1.0.0](networksCustomToolv1.png)
9+
710
<!-- Core Project Badges -->
811
[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20.9.0-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
912
[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)

app/api-reference/openapi-schema/page.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,5 +303,5 @@ This section provides a detailed reference for the OpenAPI schema definitions ut
303303

304304
---
305305

306-
*Framework Version: 1.0.0 | Last Updated: November 2025*</content>
307-
<parameter name="filePath">c:\Users\ssdsk\mastra\app\api-reference\openapi-schema\page.mdx
306+
*Framework Version: 1.0.0 | Last Updated: November 2025*
307+

app/blog/layout.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Navbar } from "@/app/components/navbar"
2+
import { Footer } from "@/app/components/footer"
3+
import { Sidebar } from "@/app/components/sidebar"
4+
import Link from "next/link"
5+
import { BLOG_POSTS } from "@/app/components/blog-data"
6+
7+
export default function BlogLayout({ children }: { children: React.ReactNode }) {
8+
return (
9+
<div className="flex min-h-screen flex-col bg-background">
10+
<Navbar />
11+
12+
<div className="container mx-auto flex w-full flex-1 gap-6 px-4 py-8 lg:py-12 lg:px-6">
13+
<Sidebar />
14+
<main className="w-full min-h-[60vh] pt-4 lg:pt-0 lg:pl-2">
15+
<div className="grid grid-cols-1 gap-8 lg:grid-cols-3">
16+
<div className="col-span-2">{children}</div>
17+
<aside className="col-span-1 hidden lg:block">
18+
<div className="sticky top-20 rounded-lg border border-border bg-card p-4">
19+
<div className="mb-3 text-sm font-semibold text-muted-foreground">Recent posts</div>
20+
<ul className="space-y-3">
21+
{BLOG_POSTS.slice(0, 5).map((p) => (
22+
<li key={p.slug}>
23+
<Link href={`/blog/${p.slug}`} className="block text-sm text-muted-foreground hover:text-foreground">
24+
<div className="flex items-center justify-between">
25+
<span className="font-medium text-foreground">{p.title}</span>
26+
<span className="text-xs text-muted-foreground">{p.date}</span>
27+
</div>
28+
<p className="text-xs text-muted-foreground line-clamp-2">{p.excerpt}</p>
29+
</Link>
30+
</li>
31+
))}
32+
</ul>
33+
</div>
34+
</aside>
35+
</div>
36+
</main>
37+
</div>
38+
39+
<Footer />
40+
</div>
41+
)
42+
}

app/blog/session-summary/page.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { BlogLayout } from "@/app/components/blog-layout"
2+
3+
export default function SessionSummary() {
4+
const title = "Dev Session: Docs, MDX, Layouts & Fixes"
5+
const date = "2025-12-06"
6+
const readTime = "4 min read"
7+
return (
8+
<BlogLayout title={title} date={date} readTime={readTime} category="Dev Diary">
9+
<section className="prose max-w-none mdx-content">
10+
<p>
11+
This development session implemented a number of fixes and improvements across the repo —
12+
focusing on the documentation system, MDX handling, page layouts, and developer ergonomics.
13+
</p>
14+
15+
<h2>What I changed</h2>
16+
<ul>
17+
<li>Added docs layout with a persistent Navbar + left Sidebar for documentation pages.</li>
18+
<li>Created a blog layout that also keeps the Navbar and adds a Recent posts sidebar.</li>
19+
<li>Fixed several MDX loader/frontmatter issues and installed the missing MDX loader.
20+
Added a defensive client-side strip of raw frontmatter while we stabilize server-side parsing.</li>
21+
<li>Added OO-style documentation files under <code>docs/components/</code> for app/chat, app/networks, app/workflows, app/dashboard, and lib/.</li>
22+
<li>Extracted blog post data into a shared file and added this session summary post.</li>
23+
</ul>
24+
25+
<h2>Why this matters</h2>
26+
<p>
27+
These changes improve the developer experience when writing docs and blog posts, prevent
28+
hydration mismatches caused by stray MDX frontmatter, and standardize layouts across docs
29+
and blog sections so navigation is consistent.
30+
</p>
31+
32+
<h2>Next steps</h2>
33+
<ol>
34+
<li>Replace the frontmatter runtime guard with a robust server-side parsing pipeline so
35+
metadata becomes first-class page metadata rather than visible content.</li>
36+
<li>Convert selected MDX docs to use true frontmatter exports and canonical metadata.</li>
37+
<li>Add automated tests for MDX rendering and layout presence to prevent regressions.</li>
38+
</ol>
39+
40+
<p>— Dev session complete</p>
41+
</section>
42+
</BlogLayout>
43+
)
44+
}

app/components/blog-data.tsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
export const BLOG_POSTS = [
2+
{
3+
title: "Hello World with AgentStack (Mastra)",
4+
excerpt:
5+
"A 10-minute guide to get started with AgentStack, covering agents, tools, storage, MCP, and workflows.",
6+
date: "2025-12-01",
7+
readTime: "10 min read",
8+
category: "Tutorial",
9+
slug: "hello-world-agentstack",
10+
},
11+
{
12+
title: "Introducing AgentStack: Multi-Agent Framework for Production",
13+
excerpt:
14+
"Learn how AgentStack simplifies building, deploying, and managing AI agents at scale with our new open-source framework.",
15+
date: "2025-11-28",
16+
readTime: "5 min read",
17+
category: "Announcement",
18+
slug: "introducing-agentstack",
19+
},
20+
{
21+
title: "Building RAG Pipelines with PgVector",
22+
excerpt:
23+
"A comprehensive guide to implementing retrieval-augmented generation using PostgreSQL and vector embeddings.",
24+
date: "2025-11-25",
25+
readTime: "8 min read",
26+
category: "Tutorial",
27+
slug: "rag-pipelines-pgvector",
28+
},
29+
{
30+
title: "Agent Orchestration Patterns",
31+
excerpt: "Explore common patterns for coordinating multiple AI agents in complex workflows.",
32+
date: "2025-11-20",
33+
readTime: "6 min read",
34+
category: "Architecture",
35+
slug: "agent-orchestration-patterns",
36+
},
37+
{
38+
title: "Observability for AI Applications",
39+
excerpt: "How to implement tracing, monitoring, and debugging for your AI agent systems.",
40+
date: "2025-11-15",
41+
readTime: "7 min read",
42+
category: "Best Practices",
43+
slug: "observability-ai-applications",
44+
},
45+
{
46+
title: "Dev Session: Repo fixes, MDX, docs, and layouts",
47+
excerpt: "Summary of recent development session: docs layouts, MDX fixes, blog & docs layouts, sidebar, and tooling updates.",
48+
date: "2025-12-06",
49+
readTime: "4 min read",
50+
category: "Dev Diary",
51+
slug: "session-summary",
52+
},
53+
]

app/components/blog-list.tsx

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,48 +6,7 @@ import { motion } from "framer-motion"
66
import { Badge } from "@/ui/badge"
77
import { CalendarIcon, ClockIcon, ArrowRightIcon } from "lucide-react"
88

9-
const BLOG_POSTS = [
10-
{
11-
title: "Hello World with AgentStack (Mastra)",
12-
excerpt: "A 10-minute guide to get started with AgentStack, covering agents, tools, storage, MCP, and workflows.",
13-
date: "2025-12-01",
14-
readTime: "10 min read",
15-
category: "Tutorial",
16-
slug: "hello-world-agentstack",
17-
},
18-
{
19-
title: "Introducing AgentStack: Multi-Agent Framework for Production",
20-
excerpt: "Learn how AgentStack simplifies building, deploying, and managing AI agents at scale with our new open-source framework.",
21-
date: "2025-11-28",
22-
readTime: "5 min read",
23-
category: "Announcement",
24-
slug: "introducing-agentstack",
25-
},
26-
{
27-
title: "Building RAG Pipelines with PgVector",
28-
excerpt: "A comprehensive guide to implementing retrieval-augmented generation using PostgreSQL and vector embeddings.",
29-
date: "2025-11-25",
30-
readTime: "8 min read",
31-
category: "Tutorial",
32-
slug: "rag-pipelines-pgvector",
33-
},
34-
{
35-
title: "Agent Orchestration Patterns",
36-
excerpt: "Explore common patterns for coordinating multiple AI agents in complex workflows.",
37-
date: "2025-11-20",
38-
readTime: "6 min read",
39-
category: "Architecture",
40-
slug: "agent-orchestration-patterns",
41-
},
42-
{
43-
title: "Observability for AI Applications",
44-
excerpt: "How to implement tracing, monitoring, and debugging for your AI agent systems.",
45-
date: "2025-11-15",
46-
readTime: "7 min read",
47-
category: "Best Practices",
48-
slug: "observability-ai-applications",
49-
},
50-
]
9+
import { BLOG_POSTS } from "@/app/components/blog-data"
5110

5211
export function BlogList() {
5312
return (

app/components/footer.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client"
22

3-
import { useState } from "react"
3+
import { useEffect, useState } from "react"
44
import Link from "next/link"
55
import { Button } from "@/ui/button"
66
import { Input } from "@/ui/input"
@@ -59,6 +59,12 @@ export function Footer() {
5959
setTimeout(() => setStatus("idle"), 3000)
6060
}
6161

62+
const [year, setYear] = useState<number | null>(null)
63+
64+
useEffect(() => {
65+
setYear(new Date().getFullYear())
66+
}, [])
67+
6268
return (
6369
<footer className="border-t border-border bg-background">
6470
{/* Newsletter section */}
@@ -216,7 +222,7 @@ export function Footer() {
216222
<div className="border-t border-border">
217223
<div className="container mx-auto flex flex-col items-center justify-between gap-4 px-4 py-6 md:flex-row">
218224
<div className="flex flex-col items-center gap-2 text-sm text-muted-foreground md:flex-row md:gap-4">
219-
<p>© {new Date().getFullYear()} AgentStack. All rights reserved.</p>
225+
<p>© {year ?? ''} AgentStack. All rights reserved.</p>
220226
<span className="hidden md:inline"></span>
221227
<p>Built with ❤️ for developers</p>
222228
</div>

app/components/navbar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ export function Navbar() {
232232
<div className="hidden items-center gap-3 lg:flex">
233233
<ThemeToggle />
234234
<Button variant="ghost" size="sm" asChild>
235-
<Link href="/test">Demo</Link>
235+
<Link href="/networks">Networks</Link>
236236
</Button>
237237
<Button variant="ghost" size="sm" asChild>
238238
<Link href={"/login" as Route}>Login</Link>
@@ -336,8 +336,8 @@ export function Navbar() {
336336
className="w-full"
337337
tabIndex={mobileOpen ? 0 : -1}
338338
>
339-
<Link href="/test" onClick={() => setMobileOpen(false)}>
340-
View Demo
339+
<Link href="/networks" onClick={() => setMobileOpen(false)}>
340+
View Networks
341341
</Link>
342342
</Button>
343343
<Button

app/components/networks-list.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export function NetworksList() {
8484
viewport={{ once: true }}
8585
>
8686
<Link
87-
href={{ pathname: '/networks/[id]', query: { id: network.id } }}
87+
href={`/networks/${network.id}`}
8888
className="card-3d group flex h-full flex-col rounded-2xl border border-border bg-card p-8 transition-all duration-300 ease-spring hover:border-primary/50 hover:shadow-lg hover:-translate-y-1"
8989
>
9090
<div className="mb-6 flex items-start justify-between">

app/components/sidebar.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"use client"
2+
3+
import Link from "next/link"
4+
import { usePathname } from "next/navigation"
5+
import { BookOpenIcon, RocketIcon, CodeIcon, DatabaseIcon, SettingsIcon, ShieldIcon } from "lucide-react"
6+
7+
const SECTIONS = [
8+
{ title: "Getting Started", href: "/docs/getting-started", icon: RocketIcon },
9+
{ title: "Core Concepts", href: "/docs/core-concepts", icon: BookOpenIcon },
10+
{ title: "AI SDK", href: "/docs/ai-sdk", icon: CodeIcon },
11+
{ title: "RAG", href: "/docs/rag", icon: DatabaseIcon },
12+
{ title: "Configuration", href: "/docs/configuration", icon: SettingsIcon },
13+
{ title: "Security", href: "/docs/security", icon: ShieldIcon },
14+
]
15+
16+
export function Sidebar() {
17+
const pathname = usePathname()
18+
19+
return (
20+
<aside className="hidden w-72 shrink-0 lg:block">
21+
<div className="sticky top-20 space-y-3 rounded-lg border border-border bg-card p-4">
22+
<div className="mb-2 text-sm font-semibold text-muted-foreground">Documentation</div>
23+
<nav className="flex flex-col gap-1">
24+
{SECTIONS.map((s) => {
25+
const active = pathname?.startsWith(s.href)
26+
return (
27+
<Link
28+
key={s.href}
29+
href={s.href}
30+
className={`flex items-center gap-3 rounded-md px-3 py-2 text-sm transition-all hover:bg-primary/5 ${
31+
active ? "bg-primary/10 text-primary font-semibold" : "text-muted-foreground"
32+
}`}
33+
>
34+
<s.icon className="size-4" />
35+
{s.title}
36+
</Link>
37+
)
38+
})}
39+
</nav>
40+
</div>
41+
</aside>
42+
)
43+
}

0 commit comments

Comments
 (0)