mirror of
https://github.com/paperclipai/paperclip
synced 2026-03-25 11:21:48 +00:00
Replace the direct agent config dialog with a choice modal offering two paths: "Ask the CEO to create a new agent" (opens pre-filled issue) or "I want advanced configuration myself" (navigates to /agents/new). - Extend NewIssueDefaults with title/description for pre-fill support - Add /agents/new route with full-page agent configuration form - NewAgentDialog now shows CEO recommendation modal Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
97 lines
3.1 KiB
TypeScript
97 lines
3.1 KiB
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import { useNavigate } from "@/lib/router";
|
|
import { useDialog } from "../context/DialogContext";
|
|
import { useCompany } from "../context/CompanyContext";
|
|
import { agentsApi } from "../api/agents";
|
|
import { queryKeys } from "../lib/queryKeys";
|
|
import {
|
|
Dialog,
|
|
DialogContent,
|
|
} from "@/components/ui/dialog";
|
|
import { Button } from "@/components/ui/button";
|
|
import { Bot, Sparkles } from "lucide-react";
|
|
|
|
export function NewAgentDialog() {
|
|
const { newAgentOpen, closeNewAgent, openNewIssue } = useDialog();
|
|
const { selectedCompanyId } = useCompany();
|
|
const navigate = useNavigate();
|
|
|
|
const { data: agents } = useQuery({
|
|
queryKey: queryKeys.agents.list(selectedCompanyId!),
|
|
queryFn: () => agentsApi.list(selectedCompanyId!),
|
|
enabled: !!selectedCompanyId && newAgentOpen,
|
|
});
|
|
|
|
const ceoAgent = (agents ?? []).find((a) => a.role === "ceo");
|
|
|
|
function handleAskCeo() {
|
|
closeNewAgent();
|
|
openNewIssue({
|
|
assigneeAgentId: ceoAgent?.id,
|
|
title: "Create a new agent",
|
|
description: "(type in what kind of agent you want here)",
|
|
});
|
|
}
|
|
|
|
function handleAdvancedConfig() {
|
|
closeNewAgent();
|
|
navigate("/agents/new");
|
|
}
|
|
|
|
return (
|
|
<Dialog
|
|
open={newAgentOpen}
|
|
onOpenChange={(open) => {
|
|
if (!open) closeNewAgent();
|
|
}}
|
|
>
|
|
<DialogContent
|
|
showCloseButton={false}
|
|
className="sm:max-w-md p-0 gap-0 overflow-hidden"
|
|
>
|
|
{/* Header */}
|
|
<div className="flex items-center justify-between px-4 py-2.5 border-b border-border">
|
|
<span className="text-sm text-muted-foreground">Add a new agent</span>
|
|
<Button
|
|
variant="ghost"
|
|
size="icon-xs"
|
|
className="text-muted-foreground"
|
|
onClick={closeNewAgent}
|
|
>
|
|
<span className="text-lg leading-none">×</span>
|
|
</Button>
|
|
</div>
|
|
|
|
<div className="p-6 space-y-6">
|
|
{/* Recommendation */}
|
|
<div className="text-center space-y-3">
|
|
<div className="mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-accent">
|
|
<Sparkles className="h-6 w-6 text-foreground" />
|
|
</div>
|
|
<p className="text-sm text-muted-foreground">
|
|
We recommend letting your CEO handle agent setup — they know the
|
|
org structure and can configure reporting, permissions, and
|
|
adapters.
|
|
</p>
|
|
</div>
|
|
|
|
<Button className="w-full" size="lg" onClick={handleAskCeo}>
|
|
<Bot className="h-4 w-4 mr-2" />
|
|
Ask the CEO to create a new agent
|
|
</Button>
|
|
|
|
{/* Advanced link */}
|
|
<div className="text-center">
|
|
<button
|
|
className="text-xs text-muted-foreground hover:text-foreground underline underline-offset-2 transition-colors"
|
|
onClick={handleAdvancedConfig}
|
|
>
|
|
I want advanced configuration myself
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|