2025-05-12 19:10:01 +00:00
|
|
|
import Link from "next/link";
|
|
|
|
|
import { NavigationMenu } from "../components/navigationMenu";
|
|
|
|
|
import { FaCogs } from "react-icons/fa";
|
2025-11-05 05:22:31 +00:00
|
|
|
import { env } from "@sourcebot/shared";
|
2025-05-12 19:10:01 +00:00
|
|
|
|
|
|
|
|
const agents = [
|
|
|
|
|
{
|
|
|
|
|
id: "review-agent",
|
|
|
|
|
name: "Review Agent",
|
|
|
|
|
description: "An AI code review agent that reviews your PRs. Uses the code indexed on Sourcebot to provide codebase-wide context.",
|
2025-10-22 03:17:28 +00:00
|
|
|
requiredEnvVars: ["GITHUB_REVIEW_AGENT_APP_ID", "GITHUB_REVIEW_AGENT_APP_WEBHOOK_SECRET", "GITHUB_REVIEW_AGENT_APP_PRIVATE_KEY_PATH", "OPENAI_API_KEY"],
|
2025-06-02 01:51:12 +00:00
|
|
|
configureUrl: "https://docs.sourcebot.dev/docs/features/agents/review-agent"
|
2025-05-12 19:10:01 +00:00
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
2025-08-22 18:48:29 +00:00
|
|
|
export default async function AgentsPage(props: { params: Promise<{ domain: string }> }) {
|
|
|
|
|
const params = await props.params;
|
|
|
|
|
|
|
|
|
|
const {
|
|
|
|
|
domain
|
|
|
|
|
} = params;
|
|
|
|
|
|
2025-05-12 19:10:01 +00:00
|
|
|
return (
|
|
|
|
|
<div className="flex flex-col items-center overflow-hidden min-h-screen">
|
|
|
|
|
<NavigationMenu domain={domain} />
|
|
|
|
|
<div className="w-full max-w-6xl px-4 mt-12 mb-24">
|
|
|
|
|
<div
|
|
|
|
|
className={
|
|
|
|
|
agents.length === 1
|
|
|
|
|
? "flex justify-center items-center min-h-[60vh]"
|
|
|
|
|
: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10"
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
{agents.map((agent) => (
|
|
|
|
|
<div
|
|
|
|
|
key={agent.id}
|
|
|
|
|
className={
|
|
|
|
|
agents.length === 1
|
|
|
|
|
? "relative flex flex-col items-center border border-border rounded-2xl p-8 bg-card shadow-xl w-full max-w-xl"
|
|
|
|
|
: "relative flex flex-col items-center border border-border rounded-2xl p-8 bg-card shadow-xl"
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
{/* Name and description */}
|
|
|
|
|
<div className="flex flex-col items-center w-full">
|
|
|
|
|
<h2 className="font-bold text-2xl mb-4 mt-2 text-center text-foreground drop-shadow-sm">
|
|
|
|
|
{agent.name}
|
|
|
|
|
</h2>
|
|
|
|
|
<p className="text-base text-muted-foreground text-center mb-4 min-h-[56px]">
|
|
|
|
|
{agent.description}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
{/* Actions */}
|
|
|
|
|
<div className="flex flex-col items-center w-full mt-2">
|
|
|
|
|
{agent.requiredEnvVars.every(envVar => envVar in env && env[envVar as keyof typeof env] !== undefined) ? (
|
|
|
|
|
<div className="text-green-500 font-semibold">
|
|
|
|
|
Agent is configured and accepting requests on /api/webhook
|
|
|
|
|
</div>
|
|
|
|
|
) : (
|
|
|
|
|
<Link
|
|
|
|
|
href={agent.configureUrl}
|
|
|
|
|
target="_blank"
|
|
|
|
|
rel="noopener noreferrer"
|
|
|
|
|
className="flex items-center justify-center gap-2 px-5 py-2.5 rounded-md bg-primary text-primary-foreground font-mono font-semibold text-base border border-primary shadow-sm hover:bg-primary/80 focus:outline-none focus:ring-2 focus:ring-primary/60 transition w-1/2"
|
|
|
|
|
>
|
|
|
|
|
<FaCogs className="text-lg" /> Configure
|
|
|
|
|
</Link>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|