Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ OPENCODE_API_KEY='your_opencode_zen_api_key_here'
# Can also use gemini must set OPENAI_BASE_URL and OPENAI_MODEL, OPENAI_EMBEDDING_BASE_URL, and EMBEDDING_MODEL
OPENAI_API_KEY='your_openai_api_key_here'
OPENAI_BASE_URL='https://api.openai.com/v1'
OPENAI_MODEL='gpt-5.1-mini'
OPENAI_MODEL='gpt-5-mini'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add missing Daytona environment variables.

The src/mastra/workspaces.ts file references DAYTONA_API_KEY and DAYTONA_API_URL environment variables, but they are not documented in .env.example. This makes it difficult for developers to know these variables exist.

As per coding guidelines: "Update .env.example file when new environment variables are added to the codebase."

📝 Proposed addition
 # Smithery Configuration (optional, for advanced mcp)
 SMITHERY_API_KEY='your_smithery_api_key_here'
 SMITHERY_PROFILE='your_smithery_profile_here'

+# Daytona Sandbox Configuration (optional, for cloud sandbox execution)
+DAYTONA_API_KEY='your_daytona_api_key_here'
+DAYTONA_API_URL='https://api.daytona.io'
+
 # Convex Configuration
🧰 Tools
🪛 dotenv-linter (4.0.0)

[warning] 15-15: [QuoteCharacter] The value has quote characters (', ")

(QuoteCharacter)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.env.example at line 15, Update the .env.example to include the
Daytona-related environment variables referenced by src/mastra/workspaces.ts:
add DAYTONA_API_KEY and DAYTONA_API_URL entries (with placeholder values and a
short comment indicating their purpose) so developers can see and set the API
key and base URL required by the Daytona integration.


# Gemini OAuth Cache Directory
GEMINI_OAUTH_CACHE='~/.gemini/oauth_creds.json'
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,4 @@ thoughts/ledgers/CONTINUITY_ses_37f3.md
thoughts/ledgers/CONTINUITY_ses_37f1.md
thoughts/ledgers/CONTINUITY_ses_3771.md
thoughts/ledgers/CONTINUITY_ses_3772.md
.sisyphus/plans/update-readme-accurate-stats.md
176 changes: 0 additions & 176 deletions AI_ELEMENTS_INTEGRATION_TODO.md

This file was deleted.

18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- AGENTS-META {"title":"AgentStack README","version":"3.4.0","applies_to":"/","last_updated":"2026-02-16T00:00:00Z","status":"stable"} -->
<!-- AGENTS-META {"title":"AgentStack README","version":"1.2.1","applies_to":"/","last_updated":"2026-02-27","status":"stable"} -->

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Replace custom metadata comment with required YAML front matter.

Line 1 uses an HTML comment for metadata, but this repo requires YAML front
matter with the specified fields. Keep the AGENTS comment if needed, but add
proper front matter at the top.

📄 Proposed fix
-<!-- AGENTS-META {"title":"AgentStack README","version":"1.2.1","applies_to":"/","last_updated":"2026-02-27","status":"stable"} -->
+---
+post_title: AgentStack README
+author1: ssdeanx
+post_slug: agentstack-readme
+microsoft_alias: ""
+featured_image: assets/logo.png
+categories: []
+tags: [agentstack, mastra, ai-elements]
+ai_note: "README generated/maintained with AI assistance."
+summary: "Production-grade multi-agent framework with AI Elements and Mastra."
+post_date: 2026-02-27
+---
+<!-- AGENTS-META {"title":"AgentStack README","version":"1.2.1","applies_to":"/","last_updated":"2026-02-27","status":"stable"} -->
As per coding guidelines, "Include YAML front matter at the beginning of markdown files with required metadata fields: `post_title`, `author1`, `post_slug`, `microsoft_alias`, `featured_image`, `categories` (from /categories.txt), `tags`, `ai_note`, `summary`, and `post_date`."
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<!-- AGENTS-META {"title":"AgentStack README","version":"1.2.1","applies_to":"/","last_updated":"2026-02-27","status":"stable"} -->
---
post_title: AgentStack README
author1: ssdeanx
post_slug: agentstack-readme
microsoft_alias: ""
featured_image: assets/logo.png
categories: []
tags: [agentstack, mastra, ai-elements]
ai_note: "README generated/maintained with AI assistance."
summary: "Production-grade multi-agent framework with AI Elements and Mastra."
post_date: 2026-02-27
---
<!-- AGENTS-META {"title":"AgentStack README","version":"1.2.1","applies_to":"/","last_updated":"2026-02-27","status":"stable"} -->
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 1, Replace the HTML metadata comment "<!-- AGENTS-META ...
-->" at the top of README.md with a YAML front matter block (---) placed at the
very beginning of the file containing the required keys: post_title, author1,
post_slug, microsoft_alias, featured_image, categories (choose entries from
/categories.txt), tags, ai_note, summary, and post_date; you may retain the
original AGENTS-META HTML comment below or after the front matter if desired,
but ensure the YAML front matter is the first thing in the file and all fields
are populated with appropriate values.


<div align="center">

Expand All @@ -19,10 +19,10 @@

<!-- Stats Badges -->

[![Agents](https://img.shields.io/badge/Agents-48+-blue?logo=robot&logoColor=white)](src/mastra/agents)
[![Tools](https://img.shields.io/badge/Tools-94+-orange?logo=hammer&logoColor=white)](src/mastra/tools)
[![Agents](https://img.shields.io/badge/Agents-41-blue?logo=robot&logoColor=white)](src/mastra/agents)
[![Tools](https://img.shields.io/badge/Tools-57-orange?logo=hammer&logoColor=white)](src/mastra/tools)
[![Workflows](https://img.shields.io/badge/Workflows-21-purple?logo=workflow&logoColor=white)](src/mastra/workflows)
[![Networks](https://img.shields.io/badge/Networks-12-teal?logo=network-wired&logoColor=white)](src/mastra/networks)
[![Networks](https://img.shields.io/badge/Networks-11-teal?logo=network-wired&logoColor=white)](src/mastra/networks)
Comment on lines +22 to +25

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Fix conflicting capability counts in updated README sections.

The updated counts (agents/networks/tools) in these changed lines conflict with
other parts of the same README (e.g., later sections still mention 48+, 12, or
13). This creates documentation drift and user confusion.

🛠️ Suggested direction
- [![Agents](...Agents-41...)]
- [![Networks](...Networks-11...)]
+ [![Agents](...Agents-<single_source_value>...)]
+ [![Networks](...Networks-<single_source_value>...)]

Prefer a single source of truth (generated counts script or one canonical
section) and reuse those values everywhere.

As per coding guidelines, "Update README.md when adding new features or capabilities, including feature description to 'Features' section, usage examples, and table of contents updates."

Also applies to: 40-40, 74-74, 76-76, 91-91, 93-93

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 22 - 25, README has inconsistent capability counts
across the file (the badges for "Agents", "Tools", "Workflows", "Networks"
disagree with other mentions like "48+", "12", "13"); fix by choosing a single
canonical source for counts (e.g., generate_counts script or a central constant)
and update all occurrences to use that source, replacing the hard-coded badge
numbers and the conflicting entries in the "Features"/badges sections so they
match the canonical values; ensure the badges lines containing "Agents",
"Tools", "Workflows", and "Networks" and the later textual references ("48+",
"12", "13" etc.) are updated to reference or be generated from the same source.

[![UI Components](https://img.shields.io/badge/UI%20Components-105-pink?logo=react&logoColor=white)](ui/)

<!-- Quality Badges -->
Expand All @@ -37,7 +37,7 @@
[![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/ssdeanx/AgentStack)](https://gitmcp.io/ssdeanx/AgentStack)
[![wakatime](https://wakatime.com/badge/user/7a2fb9a0-188b-4568-887f-7645f9249e62/project/e52d02a1-f64a-4f8d-bc13-caaa2dc37461.svg)](https://wakatime.com/badge/user/7a2fb9a0-188b-4568-887f-7645f9249e62/project/e52d02a1-f64a-4f8d-bc13-caaa2dc37461)

**AgentStack** is a **production-grade multi-agent framework** built on Mastra, delivering **60+ enterprise tools**, **48+ specialized agents**, **21 workflows**, **12 agent networks**, **105 UI components** (50+ AI Elements + 55+ base), and **A2A/MCP orchestration** for scalable AI systems. Focuses on **financial intelligence**, **RAG pipelines**, **observability**, **secure governance**, and **AI chat interfaces**.
**AgentStack** is a **production-grade multi-agent framework** built on Mastra, delivering **57 enterprise tools**, **41 specialized agents**, **21 workflows**, **11 agent networks**, **105 UI components** (50+ AI Elements + 55+ base), and **A2A/MCP orchestration** for scalable AI systems. Focuses on **financial intelligence**, **RAG pipelines**, **observability**, **secure governance**, and **AI chat interfaces**.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Wrap long lines to satisfy markdown readability rules.

These changed lines exceed the 80-character line-length limit and should be soft-wrapped.

As per coding guidelines, "Limit line length to 80 characters in markdown for readability. Use soft line breaks for long paragraphs."

Also applies to: 91-91, 93-93

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 40, The README paragraph containing the AgentStack summary
exceeds the 80-character markdown line-length limit; soft-wrap that long
sentence into multiple lines under 80 characters (preserving words and
punctuation) so the paragraph is split into readable lines, and apply the same
soft-wrapping fix to the other long lines noted (lines referenced in the comment
at 91 and 93) so all three affected README paragraphs comply with the 80-char
guideline.


<!-- Mastra Ecosystem -->

Expand Down Expand Up @@ -71,9 +71,9 @@ AgentStack bridges the gap between experimental AI frameworks and production-rea
| **Production Observability** | ✅ **Full Langfuse tracing + 10+ custom scorers** | ⚠️ Partial | ❌ Basic | ❌ Limited |
| **Financial Intelligence** | ✅ **Polygon/Finnhub/AlphaVantage (30+ endpoints)** | ❌ None | ❌ None | ❌ None |
| **RAG Pipeline** | ✅ **PgVector HNSW + rerank + graphRAG** | ⚠️ External | ❌ Basic | ❌ None |
| **Multi-Agent Orchestration** | ✅ **A2A MCP + parallel execution (48+ agents)** | ⚠️ Sequential | ✅ Sequential | ✅ Custom |
| **Multi-Agent Orchestration** | ✅ **A2A MCP + parallel execution (41 agents)** | ⚠️ Sequential | ✅ Sequential | ✅ Custom |
| **Enterprise Security** | ✅ **JWT/RBAC + path traversal protection + HTML sanitization** | ❌ Custom | ❌ None | ❌ None |
| **Type Safety** | ✅ **Zod schemas everywhere (94+ tools)** | ⚠️ JS/TS mix | ⚠️ JS focus | ❌ Python |
| **Type Safety** | ✅ **Zod schemas everywhere (57 tools)** | ⚠️ JS/TS mix | ⚠️ JS focus | ❌ Python |
| **UI Components** | ✅ **105 components (AI Elements + shadcn/ui)** | ❌ None | ❌ None | ❌ None |
| **Testing** | ✅ **Vitest + 97% coverage + comprehensive mocks** | ⚠️ Partial | ❌ Sparse | ⚠️ Partial |

Expand All @@ -88,9 +88,9 @@ AgentStack bridges the gap between experimental AI frameworks and production-rea

- **💰 Financial Intelligence**: 30+ tools (Polygon quotes/aggs/fundamentals, Finnhub analysis, AlphaVantage indicators)
- **🔍 Semantic RAG**: PgVector (3072D embeddings) + MDocument chunking + rerank + graph traversal
- **🤖 48+ Agents**: Research → Learn → Report → Edit → Analyze (stock/crypto/copywriter/evaluator/data pipeline/business-legal/charting/image/coding/dane/social media/SEO/translation/customer support/project management)
- **🤖 41 Agents**: Research → Learn → Report → Edit → Analyze (stock/crypto/copywriter/evaluator/data pipeline/business-legal/charting/image/coding/dane/social media/SEO/translation/customer support/project management)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (typo): Possible typo in agent list: "dane" may be incorrect.

This role name stands out as inconsistent with the others; if it’s meant to be something like “data” or another specific role, please update it to avoid confusion.

Suggested implementation:

- **🤖 41 Agents**: Research → Learn → Report → Edit → Analyze (stock/crypto/copywriter/evaluator/data pipeline/business-legal/charting/image/coding/data/social media/SEO/translation/customer support/project management)

If your project uses a specific term (e.g. “data scientist”, “data QA”, or another role name) elsewhere in the docs or codebase, you may want to align this label with that existing terminology instead of the generic “data”.

- **📋 21 Workflows**: Weather, content, financial reports, document processing, research synthesis, learning extraction, governed RAG (index + answer), spec generation, repo ingestion, stock analysis, marketing campaign
- **🌐 12 Agent Networks**: Primary routing, data pipeline, report generation, research pipeline, content creation, financial intelligence, learning, marketing automation, DevOps, business intelligence, security
- **🌐 11 Agent Networks**: Primary routing, data pipeline, report generation, research pipeline, content creation, financial intelligence, learning, marketing automation, DevOps, business intelligence, security
- **🔌 A2A/MCP**: MCP server coordinates parallel agents (research+stock→report), A2A coordinator for cross-agent communication
- **🎨 105 UI Components**: AI Elements (50 chat/reasoning/canvas components) + shadcn/ui (55 base primitives)
- **📊 Full Observability**: Langfuse traces + 10+ custom scorers (diversity/quality/completeness) + TanStack Query for state management
Expand Down
23 changes: 15 additions & 8 deletions app/chat/components/chat-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,27 @@ export function ChatLayout() {
return (
<main
className={cn(
'ui-crisp flex h-[calc(100vh-4rem)] flex-col bg-background transition-all duration-500',
'flex h-screen pt-16 flex-col bg-background transition-all duration-500 overflow-hidden',
isFocusMode && 'focus-mode-active'
)}
>
<ChatHeader />
<SidebarProvider className="flex flex-1 overflow-hidden min-h-0 bg-background">
<SidebarProvider className="flex flex-1 overflow-hidden min-h-0 bg-background w-full">
<MainSidebar />
<SidebarInset className="flex flex-1 flex-col overflow-hidden bg-background m-0 rounded-none border-x-0">
<ChatMessages />
<ChatInput />
<SidebarInset className="flex flex-1 flex-col overflow-hidden bg-background m-0 rounded-none border-x-0 relative min-w-0">
<div className="flex h-full w-full flex-1 overflow-hidden">
<div className="flex flex-1 flex-col overflow-hidden relative min-w-0">
<ChatMessages />
<ChatInput />
</div>

{!isFocusMode && (
<div className="w-[380px] h-full border-l bg-card/30 backdrop-blur-xl overflow-hidden min-w-[380px] shrink-0">
<ChatSidebar />
</div>
)}
</div>
</SidebarInset>
<div className="hide-on-focus h-full border-l">
<ChatSidebar />
</div>
</SidebarProvider>
</main>
)
Expand Down
5 changes: 5 additions & 0 deletions app/chat/components/chat-messages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2161,6 +2161,11 @@ export function ChatMessages(_props?: Partial<ChatMessagesProps>) {

const timeoutId = window.setTimeout(() => {
const validateMessages = async () => {
if (messages.length === 0) {
setValidationError(null)
return
}

const result = await safeValidateUIMessages<UIMessage>({
messages,
})
Expand Down
Loading
Loading