feat: Implement phases 6 to 9 of the review cycle fix process, including discovery, batching, parallel planning, execution, and completion

- Added Phase 6: Fix Discovery & Batching with intelligent grouping and batching of findings.
- Added Phase 7: Fix Parallel Planning to launch planning agents for concurrent analysis and aggregation of partial plans.
- Added Phase 8: Fix Execution for stage-based execution of fixes with conservative test verification.
- Added Phase 9: Fix Completion to aggregate results, generate summary reports, and handle session completion.
- Introduced new frontend components: ResizeHandle for draggable resizing of sidebar panels and useResizablePanel hook for managing panel sizes with localStorage persistence.
- Added PowerShell script for checking TypeScript errors in source code, excluding test files.
This commit is contained in:
catlog22
2026-02-07 19:28:33 +08:00
parent ba5f4eba84
commit d43696d756
90 changed files with 8462 additions and 616 deletions

View File

@@ -0,0 +1,51 @@
// ========================================
// Interaction Mode Toggle Component
// ========================================
// Pan/Selection mode toggle for the orchestrator canvas
import { useIntl } from 'react-intl';
import { Hand, MousePointerClick } from 'lucide-react';
import { cn } from '@/lib/utils';
import { useFlowStore } from '@/stores';
interface InteractionModeToggleProps {
disabled?: boolean;
}
export function InteractionModeToggle({ disabled = false }: InteractionModeToggleProps) {
const { formatMessage } = useIntl();
const interactionMode = useFlowStore((state) => state.interactionMode);
const toggleInteractionMode = useFlowStore((state) => state.toggleInteractionMode);
return (
<div className={cn(
'flex items-center gap-1 bg-card/90 backdrop-blur-sm border border-border rounded-lg p-1 shadow-sm',
disabled && 'opacity-50 pointer-events-none'
)}>
<button
onClick={() => { if (interactionMode !== 'pan') toggleInteractionMode(); }}
className={cn(
'flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors',
interactionMode === 'pan'
? 'bg-primary text-primary-foreground'
: 'text-muted-foreground hover:text-foreground hover:bg-muted'
)}
title={formatMessage({ id: 'orchestrator.canvas.panMode', defaultMessage: 'Pan mode (drag to move canvas)' })}
>
<Hand className="w-3.5 h-3.5" />
</button>
<button
onClick={() => { if (interactionMode !== 'selection') toggleInteractionMode(); }}
className={cn(
'flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors',
interactionMode === 'selection'
? 'bg-primary text-primary-foreground'
: 'text-muted-foreground hover:text-foreground hover:bg-muted'
)}
title={formatMessage({ id: 'orchestrator.canvas.selectionMode', defaultMessage: 'Selection mode (drag to select nodes)' })}
>
<MousePointerClick className="w-3.5 h-3.5" />
</button>
</div>
);
}