From 62288462234a5764b97464b6d7d6a401f5d8beb4 Mon Sep 17 00:00:00 2001 From: Chaim Date: Tue, 14 Apr 2026 15:51:23 +0000 Subject: [PATCH] Add "Start Workflow" button to trigger CEO agent from web UI New endpoint POST /api/cases/{case_number}/start-workflow creates a Paperclip issue, wakes the CEO agent via wakeup API, and transitions case status to "processing". Button appears on case page only when status is "new" or "documents_ready". Co-Authored-By: Claude Opus 4.6 (1M context) --- web-ui/src/app/cases/[caseNumber]/page.tsx | 29 +++++++- web-ui/src/lib/api/cases.ts | 26 +++++++ web/app.py | 67 +++++++++++++++++- web/paperclip_client.py | 81 ++++++++++++++++++++++ 4 files changed, 200 insertions(+), 3 deletions(-) diff --git a/web-ui/src/app/cases/[caseNumber]/page.tsx b/web-ui/src/app/cases/[caseNumber]/page.tsx index 60c5165..7573f81 100644 --- a/web-ui/src/app/cases/[caseNumber]/page.tsx +++ b/web-ui/src/app/cases/[caseNumber]/page.tsx @@ -16,7 +16,9 @@ import { DocumentsPanel } from "@/components/cases/documents-panel"; import { DraftsPanel } from "@/components/cases/drafts-panel"; import { UploadSheet } from "@/components/documents/upload-sheet"; import { expectedOutcomes } from "@/lib/schemas/case"; -import { useCase } from "@/lib/api/cases"; +import { useCase, useStartWorkflow } from "@/lib/api/cases"; +import { toast } from "sonner"; +import { Play, Loader2 } from "lucide-react"; const EXPECTED_OUTCOME_LABELS: Record = Object.fromEntries( expectedOutcomes.map((o) => [o.value, o.label]), @@ -33,6 +35,8 @@ export default function CaseDetailPage({ }) { const { caseNumber } = use(params); const { data, isPending, error } = useCase(caseNumber); + const startWorkflow = useStartWorkflow(caseNumber); + const canStartWorkflow = data?.status === "new" || data?.status === "documents_ready"; const expectedOutcomeLabel = data?.expected_outcome ? EXPECTED_OUTCOME_LABELS[data.expected_outcome] ?? data.expected_outcome : null; @@ -107,6 +111,29 @@ export default function CaseDetailPage({
+ {canStartWorkflow && ( + + )}