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:
catlog22
2026-02-27 13:27:27 +08:00
parent 99a3561f71
commit dd72e95e4d
57 changed files with 11018 additions and 1915 deletions

View File

@@ -42,6 +42,7 @@ import { Checkbox } from '@/components/ui/Checkbox';
import { useMemory, useMemoryMutations, useUnifiedSearch, useUnifiedStats, useRecommendations, useReindex } from '@/hooks';
import type { CoreMemory, UnifiedSearchResult } from '@/lib/api';
import { cn, parseMemoryMetadata } from '@/lib/utils';
import { V2PipelineTab } from '@/components/memory/V2PipelineTab';
// ========== Source Type Helpers ==========
@@ -624,7 +625,7 @@ export function MemoryPage() {
const [isNewMemoryOpen, setIsNewMemoryOpen] = useState(false);
const [editingMemory, setEditingMemory] = useState<CoreMemory | null>(null);
const [viewingMemory, setViewingMemory] = useState<CoreMemory | null>(null);
const [currentTab, setCurrentTab] = useState<'memories' | 'favorites' | 'archived' | 'unifiedSearch'>('memories');
const [currentTab, setCurrentTab] = useState<'memories' | 'favorites' | 'archived' | 'unifiedSearch' | 'v2pipeline'>('memories');
const [unifiedQuery, setUnifiedQuery] = useState('');
const [selectedCategory, setSelectedCategory] = useState('');
const isImmersiveMode = useAppStore(selectIsImmersiveMode);
@@ -866,6 +867,11 @@ export function MemoryPage() {
label: formatMessage({ id: 'memory.tabs.unifiedSearch' }),
icon: <Search className="h-4 w-4" />,
},
{
value: 'v2pipeline',
label: 'V2 Pipeline',
icon: <Zap className="h-4 w-4" />,
},
]}
/>
@@ -1062,7 +1068,10 @@ export function MemoryPage() {
)}
{/* Content Area */}
{isUnifiedTab ? (
{currentTab === 'v2pipeline' ? (
/* V2 Pipeline Tab */
<V2PipelineTab />
) : isUnifiedTab ? (
/* Unified Search Results */
unifiedLoading ? (
<div className="flex items-center justify-center py-12">