mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
feat: add templates for epics, product brief, and requirements PRD
- Created a new directory structure for epics and stories with templates for individual epics and an index file. - Added a product brief template for generating product brief documents in Phase 2. - Introduced a requirements PRD template for generating a Product Requirements Document as a directory of individual requirement files in Phase 3. feat: implement V2PipelineTab component for Memory V2 management - Developed the V2PipelineTab component to manage extraction and consolidation processes. - Included ExtractionCard and ConsolidationCard components to handle respective functionalities. - Added JobsList component to display job statuses and allow filtering by job kind. feat: create hooks for Memory V2 pipeline - Implemented custom hooks for managing extraction and consolidation statuses, as well as job listings. - Added mutation hooks to trigger extraction and consolidation processes with automatic query invalidation on success.
This commit is contained in:
101
ccw/frontend/src/hooks/useMemoryV2.ts
Normal file
101
ccw/frontend/src/hooks/useMemoryV2.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
// ========================================
|
||||
// useMemoryV2 Hook
|
||||
// ========================================
|
||||
// TanStack Query hooks for Memory V2 pipeline
|
||||
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import {
|
||||
triggerExtraction,
|
||||
getExtractionStatus,
|
||||
triggerConsolidation,
|
||||
getConsolidationStatus,
|
||||
getV2Jobs,
|
||||
type ExtractionStatus,
|
||||
type ConsolidationStatus,
|
||||
type V2JobsResponse,
|
||||
} from '../lib/api';
|
||||
import { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';
|
||||
|
||||
// Query keys
|
||||
export const memoryV2Keys = {
|
||||
all: ['memoryV2'] as const,
|
||||
extractionStatus: (path?: string) => [...memoryV2Keys.all, 'extraction', path] as const,
|
||||
consolidationStatus: (path?: string) => [...memoryV2Keys.all, 'consolidation', path] as const,
|
||||
jobs: (path?: string, filters?: { kind?: string; status_filter?: string }) =>
|
||||
[...memoryV2Keys.all, 'jobs', path, filters] as const,
|
||||
};
|
||||
|
||||
// Default stale time: 30 seconds (V2 status changes frequently)
|
||||
const STALE_TIME = 30 * 1000;
|
||||
|
||||
// Hook: 提取状态
|
||||
export function useExtractionStatus() {
|
||||
const projectPath = useWorkflowStore(selectProjectPath);
|
||||
|
||||
return useQuery({
|
||||
queryKey: memoryV2Keys.extractionStatus(projectPath),
|
||||
queryFn: () => getExtractionStatus(projectPath),
|
||||
enabled: !!projectPath,
|
||||
staleTime: STALE_TIME,
|
||||
refetchInterval: 5000, // 每 5 秒刷新
|
||||
});
|
||||
}
|
||||
|
||||
// Hook: 合并状态
|
||||
export function useConsolidationStatus() {
|
||||
const projectPath = useWorkflowStore(selectProjectPath);
|
||||
|
||||
return useQuery({
|
||||
queryKey: memoryV2Keys.consolidationStatus(projectPath),
|
||||
queryFn: () => getConsolidationStatus(projectPath),
|
||||
enabled: !!projectPath,
|
||||
staleTime: STALE_TIME,
|
||||
refetchInterval: 5000,
|
||||
});
|
||||
}
|
||||
|
||||
// Hook: V2 作业列表
|
||||
export function useV2Jobs(filters?: { kind?: string; status_filter?: string }) {
|
||||
const projectPath = useWorkflowStore(selectProjectPath);
|
||||
|
||||
return useQuery({
|
||||
queryKey: memoryV2Keys.jobs(projectPath, filters),
|
||||
queryFn: () => getV2Jobs(filters, projectPath),
|
||||
enabled: !!projectPath,
|
||||
staleTime: STALE_TIME,
|
||||
refetchInterval: 10000, // 每 10 秒刷新
|
||||
});
|
||||
}
|
||||
|
||||
// Hook: 触发提取
|
||||
export function useTriggerExtraction() {
|
||||
const queryClient = useQueryClient();
|
||||
const projectPath = useWorkflowStore(selectProjectPath);
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (maxSessions?: number) => triggerExtraction(maxSessions, projectPath),
|
||||
onSuccess: () => {
|
||||
// Invalidate related queries
|
||||
queryClient.invalidateQueries({ queryKey: memoryV2Keys.extractionStatus(projectPath) });
|
||||
queryClient.invalidateQueries({ queryKey: memoryV2Keys.jobs(projectPath) });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Hook: 触发合并
|
||||
export function useTriggerConsolidation() {
|
||||
const queryClient = useQueryClient();
|
||||
const projectPath = useWorkflowStore(selectProjectPath);
|
||||
|
||||
return useMutation({
|
||||
mutationFn: () => triggerConsolidation(projectPath),
|
||||
onSuccess: () => {
|
||||
// Invalidate related queries
|
||||
queryClient.invalidateQueries({ queryKey: memoryV2Keys.consolidationStatus(projectPath) });
|
||||
queryClient.invalidateQueries({ queryKey: memoryV2Keys.jobs(projectPath) });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Export types
|
||||
export type { ExtractionStatus, ConsolidationStatus, V2JobsResponse };
|
||||
Reference in New Issue
Block a user