diff --git a/ui/src/pages/IssueDetail.tsx b/ui/src/pages/IssueDetail.tsx index 0b9c1df9..0eecd014 100644 --- a/ui/src/pages/IssueDetail.tsx +++ b/ui/src/pages/IssueDetail.tsx @@ -39,21 +39,15 @@ import { ChevronDown, ChevronRight, EyeOff, - ExternalLink, - FileText, - GitBranch, - GitPullRequest, Hexagon, ListTree, MessageSquare, MoreHorizontal, - Package, Paperclip, - Rocket, SlidersHorizontal, Trash2, } from "lucide-react"; -import type { ActivityEvent, IssueWorkProduct } from "@paperclipai/shared"; +import type { ActivityEvent } from "@paperclipai/shared"; import type { Agent, IssueAttachment } from "@paperclipai/shared"; type CommentReassignment = { @@ -183,24 +177,6 @@ function formatAction(action: string, details?: Record | null): return ACTION_LABELS[action] ?? action.replace(/[._]/g, " "); } -function workProductIcon(product: IssueWorkProduct) { - switch (product.type) { - case "pull_request": - return ; - case "branch": - case "commit": - return ; - case "artifact": - return ; - case "document": - return ; - case "runtime_service": - return ; - default: - return ; - } -} - function ActorIdentity({ evt, agentMap }: { evt: ActivityEvent; agentMap: Map }) { const id = evt.actorId; if (evt.actorType === "agent") { @@ -228,13 +204,6 @@ export function IssueDetail() { cost: false, }); const [attachmentError, setAttachmentError] = useState(null); - const [newWorkProductType, setNewWorkProductType] = useState("preview_url"); - const [newWorkProductProvider, setNewWorkProductProvider] = useState("paperclip"); - const [newWorkProductTitle, setNewWorkProductTitle] = useState(""); - const [newWorkProductUrl, setNewWorkProductUrl] = useState(""); - const [newWorkProductStatus, setNewWorkProductStatus] = useState("active"); - const [newWorkProductReviewState, setNewWorkProductReviewState] = useState("none"); - const [newWorkProductSummary, setNewWorkProductSummary] = useState(""); const [attachmentDragActive, setAttachmentDragActive] = useState(false); const fileInputRef = useRef(null); const lastMarkedReadIssueIdRef = useRef(null); @@ -477,7 +446,6 @@ export function IssueDetail() { queryClient.invalidateQueries({ queryKey: queryKeys.issues.documents(issueId!) }); queryClient.invalidateQueries({ queryKey: queryKeys.issues.liveRuns(issueId!) }); queryClient.invalidateQueries({ queryKey: queryKeys.issues.activeRun(issueId!) }); - queryClient.invalidateQueries({ queryKey: queryKeys.issues.workProducts(issueId!) }); if (selectedCompanyId) { queryClient.invalidateQueries({ queryKey: queryKeys.issues.list(selectedCompanyId) }); queryClient.invalidateQueries({ queryKey: queryKeys.issues.listTouchedByMe(selectedCompanyId) }); @@ -586,42 +554,6 @@ export function IssueDetail() { }, }); - const createWorkProduct = useMutation({ - mutationFn: () => - issuesApi.createWorkProduct(issueId!, { - type: newWorkProductType, - provider: newWorkProductProvider, - title: newWorkProductTitle.trim(), - url: newWorkProductUrl.trim() || null, - status: newWorkProductStatus, - reviewState: newWorkProductReviewState, - summary: newWorkProductSummary.trim() || null, - projectId: issue?.projectId ?? null, - executionWorkspaceId: issue?.currentExecutionWorkspace?.id ?? issue?.executionWorkspaceId ?? null, - }), - onSuccess: () => { - setNewWorkProductTitle(""); - setNewWorkProductUrl(""); - setNewWorkProductSummary(""); - setNewWorkProductType("preview_url"); - setNewWorkProductProvider("paperclip"); - setNewWorkProductStatus("active"); - setNewWorkProductReviewState("none"); - invalidateIssue(); - }, - }); - - const updateWorkProduct = useMutation({ - mutationFn: ({ id, data }: { id: string; data: Record }) => - issuesApi.updateWorkProduct(id, data), - onSuccess: () => invalidateIssue(), - }); - - const deleteWorkProduct = useMutation({ - mutationFn: (id: string) => issuesApi.deleteWorkProduct(id), - onSuccess: () => invalidateIssue(), - }); - useEffect(() => { const titleLabel = issue?.title ?? issueId ?? "Issue"; setBreadcrumbs([ @@ -659,9 +591,6 @@ export function IssueDetail() { // Ancestors are returned oldest-first from the server (root at end, immediate parent at start) const ancestors = issue.ancestors ?? []; - const workProducts = issue.workProducts ?? []; - const showOutputsTab = Boolean(issue.currentExecutionWorkspace) || workProducts.length > 0; - const handleFilePicked = async (evt: ChangeEvent) => { const files = evt.target.files; if (!files || files.length === 0) return; @@ -1009,12 +938,6 @@ export function IssueDetail() { Comments - {showOutputsTab && ( - - - Outputs - - )} Sub-issues @@ -1061,199 +984,6 @@ export function IssueDetail() { /> - {showOutputsTab && ( - - {issue.currentExecutionWorkspace && ( -
-
-
-
Execution workspace
-
- {issue.currentExecutionWorkspace.status} · {issue.currentExecutionWorkspace.mode} -
-
- - Open - - -
-
- {issue.currentExecutionWorkspace.branchName ?? issue.currentExecutionWorkspace.cwd ?? "No workspace path recorded."} -
-
- )} - -
-
Work product
-
- - setNewWorkProductProvider(e.target.value)} - placeholder="Provider" - /> - setNewWorkProductTitle(e.target.value)} - placeholder="Title" - /> - setNewWorkProductUrl(e.target.value)} - placeholder="URL" - /> - - -