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

@@ -56,6 +56,10 @@ export function useLocale(): UseLocaleReturn {
* Hook to format i18n messages with the current locale
* @returns A formatMessage function for translating message IDs
*
* Supports both string and react-intl descriptor formats:
* - formatMessage('home.title')
* - formatMessage({ id: 'home.title' })
*
* @example
* ```tsx
* const formatMessage = useFormatMessage();
@@ -63,12 +67,13 @@ export function useLocale(): UseLocaleReturn {
* ```
*/
export function useFormatMessage(): (
id: string,
idOrDescriptor: string | { id: string; defaultMessage?: string },
values?: Record<string, string | number | boolean | Date | null | undefined>
) => string {
// Use useMemo to avoid recreating the function on each render
return useMemo(() => {
return (id: string, values?: Record<string, string | number | boolean | Date | null | undefined>) => {
return (idOrDescriptor: string | { id: string; defaultMessage?: string }, values?: Record<string, string | number | boolean | Date | null | undefined>) => {
const id = typeof idOrDescriptor === 'string' ? idOrDescriptor : idOrDescriptor.id;
return formatMessage(id, values);
};
}, []);