Skip to content

Commit 611bd72

Browse files
authored
Merge branch 'main' into mateo/dev-140-update-langgraph-quickstart-python
2 parents 69e426c + 090adb8 commit 611bd72

Some content is hidden

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

41 files changed

+2152
-391
lines changed

.github/workflows/llmstxt.yml

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
name: Generate LLMs.txt
22

33
on:
4-
schedule:
5-
- cron: "0 0 * * 0" # Run at 00:00 every Sunday
64
workflow_dispatch:
5+
pull_request:
6+
types: [opened, synchronize, reopened]
77

88
permissions:
99
contents: write
@@ -27,7 +27,8 @@ jobs:
2727
- name: Checkout code
2828
uses: actions/checkout@v4
2929
with:
30-
ref: main
30+
ref: ${{ github.event.pull_request.head.ref || github.ref }}
31+
token: ${{ secrets.DOCS_PUBLISHABLE_GH_TOKEN }}
3132

3233
- name: Install dependencies
3334
run: npm install -g pnpm
@@ -40,8 +41,26 @@ jobs:
4041
env:
4142
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
4243

43-
# commit the changes and make a PR (branch protection)
44-
- name: Create Pull Request
44+
- name: Check for changes
45+
id: check-changes
46+
run: |
47+
if [ -n "$(git status --porcelain)" ]; then
48+
echo "has_changes=true" >> $GITHUB_OUTPUT
49+
else
50+
echo "has_changes=false" >> $GITHUB_OUTPUT
51+
fi
52+
53+
- name: Commit changes to PR
54+
if: steps.check-changes.outputs.has_changes == 'true' && github.event_name == 'pull_request'
55+
run: |
56+
git config user.name "github-actions[bot]"
57+
git config user.email "github-actions[bot]@users.noreply.github.com"
58+
git add public/llms.txt
59+
git commit -m "🤖 Regenerate LLMs.txt"
60+
git push
61+
62+
- name: Create Pull Request (for scheduled/manual runs)
63+
if: steps.check-changes.outputs.has_changes == 'true' && github.event_name != 'pull_request'
4564
id: cpr
4665
uses: peter-evans/create-pull-request@v7
4766
with:
@@ -55,6 +74,7 @@ jobs:
5574
torresmateo
5675
5776
- name: Enable Pull Request Automerge
77+
if: steps.check-changes.outputs.has_changes == 'true' && github.event_name != 'pull_request'
5878
run: gh pr merge --squash --auto ${{ steps.cpr.outputs.pull-request-number }}
5979
env:
6080
GH_TOKEN: ${{ secrets.DOCS_PUBLISHABLE_GH_TOKEN }}

app/_components/guide-overview.tsx

Lines changed: 87 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,37 +34,22 @@ export function GuideOverview({ children, className }: GuideOverviewProps) {
3434
className
3535
)}
3636
>
37-
{/* Outcomes section (full width) */}
38-
{outcomes && (
39-
<div className="mb-6">
40-
<h2 className="mb-3 font-semibold text-card-foreground text-xl">
41-
Outcomes
42-
</h2>
43-
<div className="text-muted-foreground">
44-
{React.isValidElement(outcomes) &&
45-
(outcomes.props as { children: React.ReactNode }).children}
46-
</div>
47-
</div>
48-
)}
49-
50-
{/* Two column layout - You will Learn (2/3) and Prerequisites (1/3) */}
51-
<div className="grid gap-6 md:grid-cols-3">
52-
{/* You will Learn column - takes 2/3 of width */}
53-
{youWillLearn && (
54-
<div className="md:col-span-2">
55-
<h3 className="mb-3 font-medium text-card-foreground text-lg">
56-
You will Learn
57-
</h3>
58-
<div className="space-y-2 text-muted-foreground text-sm">
59-
{React.isValidElement(youWillLearn) &&
60-
(youWillLearn.props as { children: React.ReactNode }).children}
37+
{/* When only Outcomes and Prerequisites exist, show them side by side */}
38+
{outcomes && prerequisites && !youWillLearn && (
39+
<div className="grid gap-6 md:grid-cols-2">
40+
{/* Outcomes column */}
41+
<div>
42+
<h2 className="mb-3 font-semibold text-card-foreground text-xl">
43+
Outcomes
44+
</h2>
45+
<div className="text-muted-foreground">
46+
{React.isValidElement(outcomes) &&
47+
(outcomes.props as { children: React.ReactNode }).children}
6148
</div>
6249
</div>
63-
)}
6450

65-
{/* Prerequisites column - takes 1/3 of width */}
66-
{prerequisites && (
67-
<div className="md:col-span-1">
51+
{/* Prerequisites column */}
52+
<div>
6853
<h3 className="mb-3 font-medium text-card-foreground text-lg">
6954
Prerequisites
7055
</h3>
@@ -73,8 +58,80 @@ export function GuideOverview({ children, className }: GuideOverviewProps) {
7358
(prerequisites.props as { children: React.ReactNode }).children}
7459
</div>
7560
</div>
76-
)}
77-
</div>
61+
</div>
62+
)}
63+
64+
{/* When YouWillLearn exists, use the original layout */}
65+
{youWillLearn && (
66+
<>
67+
{/* Outcomes section (full width) */}
68+
{outcomes && (
69+
<div className="mb-6">
70+
<h2 className="mb-3 font-semibold text-card-foreground text-xl">
71+
Outcomes
72+
</h2>
73+
<div className="text-muted-foreground">
74+
{React.isValidElement(outcomes) &&
75+
(outcomes.props as { children: React.ReactNode }).children}
76+
</div>
77+
</div>
78+
)}
79+
80+
{/* Two column layout - You will Learn (2/3) and Prerequisites (1/3) */}
81+
<div className="grid gap-6 md:grid-cols-3">
82+
{/* You will Learn column - takes 2/3 of width */}
83+
<div className="md:col-span-2">
84+
<h3 className="mb-3 font-medium text-card-foreground text-lg">
85+
You will Learn
86+
</h3>
87+
<div className="space-y-2 text-muted-foreground text-sm">
88+
{React.isValidElement(youWillLearn) &&
89+
(youWillLearn.props as { children: React.ReactNode })
90+
.children}
91+
</div>
92+
</div>
93+
94+
{/* Prerequisites column - takes 1/3 of width */}
95+
{prerequisites && (
96+
<div className="md:col-span-1">
97+
<h3 className="mb-3 font-medium text-card-foreground text-lg">
98+
Prerequisites
99+
</h3>
100+
<div className="space-y-2 text-muted-foreground text-sm">
101+
{React.isValidElement(prerequisites) &&
102+
(prerequisites.props as { children: React.ReactNode })
103+
.children}
104+
</div>
105+
</div>
106+
)}
107+
</div>
108+
</>
109+
)}
110+
111+
{/* Fallback for edge cases - only outcomes, only prerequisites, etc. */}
112+
{outcomes && !prerequisites && !youWillLearn && (
113+
<div>
114+
<h2 className="mb-3 font-semibold text-card-foreground text-xl">
115+
Outcomes
116+
</h2>
117+
<div className="text-muted-foreground">
118+
{React.isValidElement(outcomes) &&
119+
(outcomes.props as { children: React.ReactNode }).children}
120+
</div>
121+
</div>
122+
)}
123+
124+
{!outcomes && prerequisites && !youWillLearn && (
125+
<div>
126+
<h3 className="mb-3 font-medium text-card-foreground text-lg">
127+
Prerequisites
128+
</h3>
129+
<div className="space-y-2 text-muted-foreground text-sm">
130+
{React.isValidElement(prerequisites) &&
131+
(prerequisites.props as { children: React.ReactNode }).children}
132+
</div>
133+
</div>
134+
)}
78135
</div>
79136
);
80137
}

app/_components/platform-card.tsx

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
"use client";
2+
import { Card, CardHeader, CardTitle } from "@arcadeai/design-system";
3+
import { cn } from "@arcadeai/design-system/lib/utils";
4+
import Link from "next/link";
5+
import type React from "react";
6+
7+
type PlatformCardProps = {
8+
name: string;
9+
icon: string;
10+
link: string;
11+
type: "Agent Framework" | "MCP Client";
12+
};
13+
14+
export const PlatformCard: React.FC<PlatformCardProps> = ({
15+
name,
16+
icon,
17+
link,
18+
type,
19+
}) => {
20+
const cardContent = (
21+
<Card
22+
className={cn(
23+
"flex h-full flex-col gap-1.5 border border-gray-600/20 bg-gray-600/2 py-3 backdrop-blur-sm transition-all duration-300 hover:border-primary hover:bg-gray-600/3 hover:shadow-lg dark:bg-gray-900/80"
24+
)}
25+
>
26+
<CardHeader>
27+
<div className="flex items-center space-x-5">
28+
<div className="relative flex h-10 w-10 items-center justify-center overflow-hidden rounded-lg">
29+
<img alt={`${name} logo`} className="size-9" src={icon} />
30+
</div>
31+
<div>
32+
<CardTitle className="mb-0.5 text-base text-gray-900 dark:text-gray-50">
33+
{name}
34+
</CardTitle>
35+
<div className="text-gray-600 text-xs dark:text-gray-400">
36+
{type}
37+
</div>
38+
</div>
39+
</div>
40+
</CardHeader>
41+
</Card>
42+
);
43+
44+
return <Link href={link}>{cardContent}</Link>;
45+
};

app/en/home/_meta.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ export const meta: MetaRecord = {
6868
type: "separator",
6969
title: "Agent Frameworks and MCP",
7070
},
71+
"agent-frameworks-overview": {
72+
title: "Overview",
73+
},
7174
"mcp-clients": {
7275
title: "MCP Clients",
7376
},
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import { PlatformCard } from "@/app/_components/platform-card";
2+
import { Tabs } from "nextra/components";
3+
4+
# Arcade with Agent Frameworks and MCP Clients
5+
6+
Arcade seamlessly integrates with your favorite agent frameworks and MCP clients, making it easy to add powerful tool-calling capabilities to your AI applications.
7+
8+
## Agent Frameworks
9+
10+
<Tabs items={["Python", "JavaScript"]} storageKey="preferredLanguage">
11+
<Tabs.Tab>
12+
<div className="mt-6 grid gap-3 sm:grid-cols-2 sm:gap-4 md:gap-5 lg:grid-cols-3">
13+
<PlatformCard
14+
name="LangChain"
15+
icon="https://avatars.githubusercontent.com/u/126733545?s=200&v=4"
16+
link="/home/langchain/use-arcade-tools"
17+
type="Agent Framework"
18+
/>
19+
<PlatformCard
20+
name="CrewAI"
21+
icon="https://avatars.githubusercontent.com/u/170677839?s=200&v=4"
22+
link="/home/crewai/use-arcade-tools"
23+
type="Agent Framework"
24+
/>
25+
<PlatformCard
26+
name="OpenAI Agents"
27+
icon="https://avatars.githubusercontent.com/u/14957082?s=200&v=4"
28+
link="/home/oai-agents/overview"
29+
type="Agent Framework"
30+
/>
31+
<PlatformCard
32+
name="Google ADK"
33+
icon="https://avatars.githubusercontent.com/u/1342004?s=200&v=4"
34+
link="/home/google-adk/overview"
35+
type="Agent Framework"
36+
/>
37+
</div>
38+
</Tabs.Tab>
39+
<Tabs.Tab>
40+
<div className="mt-6 grid gap-3 sm:grid-cols-2 sm:gap-4 md:gap-5 lg:grid-cols-3">
41+
<PlatformCard
42+
name="LangChain"
43+
icon="https://avatars.githubusercontent.com/u/126733545?s=200&v=4"
44+
link="/home/langchain/use-arcade-tools"
45+
type="Agent Framework"
46+
/>
47+
<PlatformCard
48+
name="Google ADK"
49+
icon="https://avatars.githubusercontent.com/u/1342004?s=200&v=4"
50+
link="/home/google-adk/overview"
51+
type="Agent Framework"
52+
/>
53+
<PlatformCard
54+
name="Mastra"
55+
icon="https://avatars.githubusercontent.com/u/157496478?s=200&v=4"
56+
link="/home/mastra/overview"
57+
type="Agent Framework"
58+
/>
59+
<PlatformCard
60+
name="Vercel AI"
61+
icon="https://avatars.githubusercontent.com/u/14985020?s=200&v=4"
62+
link="/home/vercelai/using-arcade-tools"
63+
type="Agent Framework"
64+
/>
65+
</div>
66+
</Tabs.Tab>
67+
</Tabs>
68+
69+
## MCP Clients
70+
71+
<div className="mt-8 grid gap-3 sm:grid-cols-2 sm:gap-4 md:gap-5 lg:grid-cols-3">
72+
<PlatformCard
73+
name="Claude Desktop"
74+
icon="https://claude.ai/images/claude_app_icon.png"
75+
link="/home/mcp-clients/claude-desktop"
76+
type="MCP Client"
77+
/>
78+
<PlatformCard
79+
name="Cursor"
80+
icon="https://www.cursor.com/favicon.ico"
81+
link="/home/mcp-clients/cursor"
82+
type="MCP Client"
83+
/>
84+
<PlatformCard
85+
name="VS Code"
86+
icon="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg"
87+
link="/home/mcp-clients/visual-studio-code"
88+
type="MCP Client"
89+
/>
90+
</div>

0 commit comments

Comments
 (0)