diff --git a/ccw/frontend/package-lock.json b/ccw/frontend/package-lock.json index fc197c43..c48628ce 100644 --- a/ccw/frontend/package-lock.json +++ b/ccw/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "ccw-frontend", "version": "0.1.0", "dependencies": { + "@hello-pangea/dnd": "^18.0.1", "@radix-ui/react-dialog": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.0", "@radix-ui/react-select": "^2.1.0", @@ -285,6 +286,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -813,6 +823,23 @@ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, + "node_modules/@hello-pangea/dnd": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-18.0.1.tgz", + "integrity": "sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.26.7", + "css-box-model": "^1.2.1", + "raf-schd": "^4.0.3", + "react-redux": "^9.2.0", + "redux": "^5.0.1" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -2176,6 +2203,12 @@ "@types/react": "^18.0.0" } }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", @@ -2517,6 +2550,15 @@ "dev": true, "license": "MIT" }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3361,6 +3403,12 @@ ], "license": "MIT" }, + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3386,6 +3434,29 @@ "react": "^18.3.1" } }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -3520,6 +3591,12 @@ "node": ">=8.10.0" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -3767,6 +3844,12 @@ "node": ">=0.8" } }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", diff --git a/ccw/frontend/package.json b/ccw/frontend/package.json index 61805b72..c9678046 100644 --- a/ccw/frontend/package.json +++ b/ccw/frontend/package.json @@ -10,32 +10,33 @@ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0" }, "dependencies": { + "@hello-pangea/dnd": "^18.0.1", + "@radix-ui/react-dialog": "^1.1.0", + "@radix-ui/react-dropdown-menu": "^2.1.0", + "@radix-ui/react-select": "^2.1.0", + "@radix-ui/react-tabs": "^1.1.0", + "@radix-ui/react-toast": "^1.2.0", + "@radix-ui/react-tooltip": "^1.1.0", + "@tanstack/react-query": "^5.60.0", + "@xyflow/react": "^12.3.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "lucide-react": "^0.460.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.28.0", - "zustand": "^5.0.0", - "@tanstack/react-query": "^5.60.0", - "@xyflow/react": "^12.3.0", - "@radix-ui/react-dialog": "^1.1.0", - "@radix-ui/react-dropdown-menu": "^2.1.0", - "@radix-ui/react-tabs": "^1.1.0", - "@radix-ui/react-tooltip": "^1.1.0", - "@radix-ui/react-select": "^2.1.0", - "@radix-ui/react-toast": "^1.2.0", - "clsx": "^2.1.0", "tailwind-merge": "^2.5.0", - "class-variance-authority": "^0.7.0", - "lucide-react": "^0.460.0", - "zod": "^3.23.8" + "zod": "^3.23.8", + "zustand": "^5.0.0" }, "devDependencies": { "@types/react": "^18.3.0", - "tailwindcss-animate": "^1.0.7", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.0", "autoprefixer": "^10.4.20", "postcss": "^8.4.40", "tailwindcss": "^3.4.0", + "tailwindcss-animate": "^1.0.7", "typescript": "^5.6.0", "vite": "^6.0.0" } diff --git a/ccw/frontend/src/components/shared/IssueCard.tsx b/ccw/frontend/src/components/shared/IssueCard.tsx index cfd4c005..81a086db 100644 --- a/ccw/frontend/src/components/shared/IssueCard.tsx +++ b/ccw/frontend/src/components/shared/IssueCard.tsx @@ -20,7 +20,7 @@ import { cn } from '@/lib/utils'; import { Card } from '@/components/ui/Card'; import { Badge } from '@/components/ui/Badge'; import { Button } from '@/components/ui/Button'; -import { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from '@/components/ui/Dropdown'; +import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@/components/ui/Dropdown'; import type { Issue } from '@/lib/api'; // ========== Types ========== @@ -162,8 +162,8 @@ export function IssueCard({

#{issue.id}

{showActions && ( - - + + - - - + + + Edit - - onStatusChange?.(issue, 'in_progress')}> + + onStatusChange?.(issue, 'in_progress')}> Start Progress - - onStatusChange?.(issue, 'resolved')}> + + onStatusChange?.(issue, 'resolved')}> Mark Resolved - - + + Delete - - - + + + )} diff --git a/ccw/frontend/src/components/shared/KanbanBoard.tsx b/ccw/frontend/src/components/shared/KanbanBoard.tsx index 986713d3..b4eb4384 100644 --- a/ccw/frontend/src/components/shared/KanbanBoard.tsx +++ b/ccw/frontend/src/components/shared/KanbanBoard.tsx @@ -3,7 +3,7 @@ // ======================================== // Drag-and-drop kanban board for loops and tasks -import { useState, useCallback } from 'react'; +import { useCallback } from 'react'; import { DragDropContext, Droppable, diff --git a/ccw/frontend/src/components/shared/SessionCard.tsx b/ccw/frontend/src/components/shared/SessionCard.tsx index 1851e30e..f08eb704 100644 --- a/ccw/frontend/src/components/shared/SessionCard.tsx +++ b/ccw/frontend/src/components/shared/SessionCard.tsx @@ -22,8 +22,6 @@ import { Eye, Archive, Trash2, - Play, - Pause, } from 'lucide-react'; import type { SessionMetadata } from '@/types/store'; diff --git a/ccw/frontend/src/components/shared/SkillCard.tsx b/ccw/frontend/src/components/shared/SkillCard.tsx index a72c605b..457263d9 100644 --- a/ccw/frontend/src/components/shared/SkillCard.tsx +++ b/ccw/frontend/src/components/shared/SkillCard.tsx @@ -18,7 +18,7 @@ import { cn } from '@/lib/utils'; import { Card } from '@/components/ui/Card'; import { Badge } from '@/components/ui/Badge'; import { Button } from '@/components/ui/Button'; -import { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from '@/components/ui/Dropdown'; +import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@/components/ui/Dropdown'; import type { Skill } from '@/lib/api'; // ========== Types ========== @@ -148,8 +148,8 @@ export function SkillCard({ {showActions && ( - - + + - - - onClick?.(skill)}> + + + onClick?.(skill)}> View Details - - + + Configure - - + + {skill.enabled ? ( <> @@ -180,9 +180,9 @@ export function SkillCard({ Enable )} - - - + + + )} diff --git a/ccw/frontend/src/hooks/useIssues.ts b/ccw/frontend/src/hooks/useIssues.ts index 5c4e065c..99c02cbe 100644 --- a/ccw/frontend/src/hooks/useIssues.ts +++ b/ccw/frontend/src/hooks/useIssues.ts @@ -13,7 +13,6 @@ import { deleteIssue, type Issue, type IssuesResponse, - type IssueQueue, } from '../lib/api'; // Query key factory diff --git a/ccw/frontend/src/pages/CommandsManagerPage.tsx b/ccw/frontend/src/pages/CommandsManagerPage.tsx index d8124437..70cf487b 100644 --- a/ccw/frontend/src/pages/CommandsManagerPage.tsx +++ b/ccw/frontend/src/pages/CommandsManagerPage.tsx @@ -8,10 +8,8 @@ import { Terminal, Search, Plus, - Filter, RefreshCw, Copy, - Play, ChevronDown, ChevronUp, Code, @@ -161,7 +159,6 @@ export function CommandsManagerPage() { const { commands, categories, - commandsByCategory, totalCount, isLoading, isFetching, diff --git a/ccw/frontend/src/pages/IssueManagerPage.tsx b/ccw/frontend/src/pages/IssueManagerPage.tsx index 2a489047..a42a174b 100644 --- a/ccw/frontend/src/pages/IssueManagerPage.tsx +++ b/ccw/frontend/src/pages/IssueManagerPage.tsx @@ -7,12 +7,10 @@ import { useState, useMemo } from 'react'; import { AlertCircle, Plus, - Filter, Search, RefreshCw, Loader2, Github, - ListFilter, CheckCircle, Clock, AlertTriangle, @@ -21,7 +19,6 @@ import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Badge } from '@/components/ui/Badge'; -import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/Dialog'; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select'; import { IssueCard } from '@/components/shared/IssueCard'; @@ -31,7 +28,6 @@ import { cn } from '@/lib/utils'; // ========== Types ========== -type ViewMode = 'issues' | 'queue'; type StatusFilter = 'all' | Issue['status']; type PriorityFilter = 'all' | Issue['priority']; @@ -183,17 +179,14 @@ function IssueList({ // ========== Main Page Component ========== export function IssueManagerPage() { - const [viewMode, setViewMode] = useState('issues'); const [searchQuery, setSearchQuery] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); const [priorityFilter, setPriorityFilter] = useState('all'); const [isNewIssueOpen, setIsNewIssueOpen] = useState(false); - const [selectedIssue, setSelectedIssue] = useState(null); const { issues, issuesByStatus, - issuesByPriority, openCount, criticalCount, isLoading, @@ -207,7 +200,7 @@ export function IssueManagerPage() { }, }); - const { createIssue, updateIssue, deleteIssue, isCreating, isUpdating } = useIssueMutations(); + const { createIssue, updateIssue, deleteIssue, isCreating } = useIssueMutations(); // Filter counts const statusCounts = useMemo(() => ({ @@ -224,8 +217,7 @@ export function IssueManagerPage() { setIsNewIssueOpen(false); }; - const handleEditIssue = (issue: Issue) => { - setSelectedIssue(issue); + const handleEditIssue = (_issue: Issue) => { // TODO: Open edit dialog }; @@ -381,7 +373,7 @@ export function IssueManagerPage() { {}} onIssueEdit={handleEditIssue} onIssueDelete={handleDeleteIssue} onStatusChange={handleStatusChange} diff --git a/ccw/frontend/src/pages/LoopMonitorPage.tsx b/ccw/frontend/src/pages/LoopMonitorPage.tsx index f8c8237b..a158164e 100644 --- a/ccw/frontend/src/pages/LoopMonitorPage.tsx +++ b/ccw/frontend/src/pages/LoopMonitorPage.tsx @@ -11,11 +11,9 @@ import { StopCircle, Plus, Search, - Filter, Clock, CheckCircle, XCircle, - AlertCircle, Loader2, } from 'lucide-react'; import type { DropResult, DraggableProvided } from '@hello-pangea/dnd'; @@ -23,7 +21,7 @@ import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Badge } from '@/components/ui/Badge'; import { Input } from '@/components/ui/Input'; -import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/Dialog'; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/Dialog'; import { KanbanBoard, useLoopKanbanColumns, type LoopKanbanItem } from '@/components/shared/KanbanBoard'; import { useLoops, useLoopMutations } from '@/hooks'; import type { Loop } from '@/lib/api'; @@ -226,7 +224,6 @@ function NewLoopDialog({ open, onOpenChange, onSubmit, isCreating }: NewLoopDial export function LoopMonitorPage() { const [searchQuery, setSearchQuery] = useState(''); const [isNewLoopOpen, setIsNewLoopOpen] = useState(false); - const [selectedLoop, setSelectedLoop] = useState(null); const { loops, @@ -242,7 +239,7 @@ export function LoopMonitorPage() { refetchInterval: 5000, // Refresh every 5 seconds for real-time updates }); - const { createLoop, updateStatus, isCreating, isUpdating } = useLoopMutations(); + const { createLoop, updateStatus, isCreating } = useLoopMutations(); // Kanban columns const columns = useLoopKanbanColumns(loopsByStatus as unknown as Record); @@ -312,7 +309,7 @@ export function LoopMonitorPage() { onPause={handlePause} onResume={handleResume} onStop={handleStop} - onClick={setSelectedLoop} + onClick={() => {}} /> ), [] diff --git a/ccw/frontend/src/pages/MemoryPage.tsx b/ccw/frontend/src/pages/MemoryPage.tsx index e80c122c..5fcd9e45 100644 --- a/ccw/frontend/src/pages/MemoryPage.tsx +++ b/ccw/frontend/src/pages/MemoryPage.tsx @@ -13,7 +13,6 @@ import { RefreshCw, Trash2, Edit, - Eye, Tag, Loader2, Copy, @@ -264,7 +263,7 @@ export function MemoryPage() { }, }); - const { createMemory, updateMemory, deleteMemory, isCreating, isUpdating, isDeleting } = + const { createMemory, updateMemory, deleteMemory, isCreating, isUpdating } = useMemoryMutations(); const toggleExpand = (memoryId: string) => { diff --git a/ccw/frontend/src/pages/SettingsPage.tsx b/ccw/frontend/src/pages/SettingsPage.tsx index 61d01223..756619f3 100644 --- a/ccw/frontend/src/pages/SettingsPage.tsx +++ b/ccw/frontend/src/pages/SettingsPage.tsx @@ -3,21 +3,17 @@ // ======================================== // Application settings and configuration with CLI tools management -import { useState, useEffect } from 'react'; +import { useState } from 'react'; import { Settings, Moon, Sun, - Globe, Bell, - Shield, Cpu, RefreshCw, - Save, RotateCcw, Check, X, - Loader2, ChevronDown, ChevronUp, } from 'lucide-react'; @@ -25,7 +21,7 @@ import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Badge } from '@/components/ui/Badge'; -import { useTheme, useConfig } from '@/hooks'; +import { useTheme } from '@/hooks'; import { useConfigStore, selectCliTools, selectDefaultCliTool, selectUserPreferences } from '@/stores/configStore'; import type { CliToolConfig, UserPreferences } from '@/types/store'; import { cn } from '@/lib/utils'; @@ -170,7 +166,6 @@ export function SettingsPage() { const { updateCliTool, setDefaultCliTool, setUserPreferences, resetUserPreferences } = useConfigStore(); const [expandedTools, setExpandedTools] = useState>(new Set()); - const [isSaving, setIsSaving] = useState(false); const toggleToolExpand = (toolId: string) => { setExpandedTools((prev) => { diff --git a/ccw/frontend/src/pages/SkillsManagerPage.tsx b/ccw/frontend/src/pages/SkillsManagerPage.tsx index bd57d71f..88a9d67a 100644 --- a/ccw/frontend/src/pages/SkillsManagerPage.tsx +++ b/ccw/frontend/src/pages/SkillsManagerPage.tsx @@ -8,17 +8,14 @@ import { Sparkles, Search, Plus, - Filter, RefreshCw, Power, PowerOff, Tag, - Loader2, } from 'lucide-react'; import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; -import { Badge } from '@/components/ui/Badge'; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select'; import { SkillCard } from '@/components/shared/SkillCard'; import { useSkills, useSkillMutations } from '@/hooks'; @@ -89,13 +86,10 @@ export function SkillsManagerPage() { const [sourceFilter, setSourceFilter] = useState('all'); const [enabledFilter, setEnabledFilter] = useState<'all' | 'enabled' | 'disabled'>('all'); const [viewMode, setViewMode] = useState<'grid' | 'compact'>('grid'); - const [selectedSkill, setSelectedSkill] = useState(null); const { skills, - enabledSkills, categories, - skillsByCategory, totalCount, enabledCount, isLoading, @@ -268,7 +262,7 @@ export function SkillsManagerPage() { skills={filteredSkills} isLoading={isLoading} onToggle={handleToggle} - onClick={setSelectedSkill} + onClick={() => {}} isToggling={isToggling} compact={viewMode === 'compact'} /> diff --git a/ccw/frontend/src/pages/orchestrator/ExecutionMonitor.tsx b/ccw/frontend/src/pages/orchestrator/ExecutionMonitor.tsx index 4648f0d5..1d760b4f 100644 --- a/ccw/frontend/src/pages/orchestrator/ExecutionMonitor.tsx +++ b/ccw/frontend/src/pages/orchestrator/ExecutionMonitor.tsx @@ -106,7 +106,6 @@ export function ExecutionMonitor({ className }: ExecutionMonitorProps) { const isMonitorExpanded = useExecutionStore((state) => state.isMonitorExpanded); const autoScrollLogs = useExecutionStore((state) => state.autoScrollLogs); const setMonitorExpanded = useExecutionStore((state) => state.setMonitorExpanded); - const setAutoScrollLogs = useExecutionStore((state) => state.setAutoScrollLogs); const startExecution = useExecutionStore((state) => state.startExecution); // Local state for elapsed time (calculated from startedAt) diff --git a/ccw/frontend/src/pages/orchestrator/FlowToolbar.tsx b/ccw/frontend/src/pages/orchestrator/FlowToolbar.tsx index 4f63b462..4e646df7 100644 --- a/ccw/frontend/src/pages/orchestrator/FlowToolbar.tsx +++ b/ccw/frontend/src/pages/orchestrator/FlowToolbar.tsx @@ -9,7 +9,6 @@ import { Save, FolderOpen, Download, - Play, Trash2, Copy, Workflow, diff --git a/ccw/frontend/src/pages/orchestrator/OrchestratorPage.tsx b/ccw/frontend/src/pages/orchestrator/OrchestratorPage.tsx index d9e9afca..9936007b 100644 --- a/ccw/frontend/src/pages/orchestrator/OrchestratorPage.tsx +++ b/ccw/frontend/src/pages/orchestrator/OrchestratorPage.tsx @@ -11,21 +11,11 @@ import { PropertyPanel } from './PropertyPanel'; import { FlowToolbar } from './FlowToolbar'; import { ExecutionMonitor } from './ExecutionMonitor'; import { TemplateLibrary } from './TemplateLibrary'; -import { useWebSocket } from '@/hooks/useWebSocket'; export function OrchestratorPage() { const fetchFlows = useFlowStore((state) => state.fetchFlows); const [isTemplateLibraryOpen, setIsTemplateLibraryOpen] = useState(false); - // Initialize WebSocket connection for real-time updates - const { isConnected, reconnect } = useWebSocket({ - enabled: true, - onMessage: (message) => { - // Additional message handling can be added here if needed - console.log('[Orchestrator] WebSocket message:', message.type); - }, - }); - // Load flows on mount useEffect(() => { fetchFlows(); diff --git a/ccw/frontend/src/pages/orchestrator/TemplateLibrary.tsx b/ccw/frontend/src/pages/orchestrator/TemplateLibrary.tsx index 92f7e1d3..d1ff713b 100644 --- a/ccw/frontend/src/pages/orchestrator/TemplateLibrary.tsx +++ b/ccw/frontend/src/pages/orchestrator/TemplateLibrary.tsx @@ -17,7 +17,6 @@ import { GitBranch, Loader2, Trash2, - ExternalLink, } from 'lucide-react'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/Button'; diff --git a/ccw/frontend/src/stores/executionStore.ts b/ccw/frontend/src/stores/executionStore.ts index 4db3c1bc..286b7a30 100644 --- a/ccw/frontend/src/stores/executionStore.ts +++ b/ccw/frontend/src/stores/executionStore.ts @@ -35,7 +35,7 @@ const initialState = { export const useExecutionStore = create()( devtools( - (set, get) => ({ + (set) => ({ ...initialState, // ========== Execution Lifecycle ==========