* refactor: complete Phase 2 Query Keys Standardization Standardize query keys across all features following vertical slice architecture, ensuring they mirror backend API structure exactly with no backward compatibility. Key Changes: - Refactor all query key factories to follow consistent patterns - Move progress feature from knowledge/progress to top-level /features/progress - Create shared query patterns for consistency (DISABLED_QUERY_KEY, STALE_TIMES) - Remove all hardcoded stale times and disabled keys - Update all imports after progress feature relocation Query Key Factories Standardized: - projectKeys: removed task-related keys (tasks, taskCounts) - taskKeys: added dual nature support (global via lists(), project-scoped via byProject()) - knowledgeKeys: removed redundant methods (details, summary) - progressKeys: new top-level feature with consistent factory - documentKeys: full factory pattern with versions support - mcpKeys: complete with health endpoint Shared Patterns Implementation: - STALE_TIMES: instant (0), realtime (3s), frequent (5s), normal (30s), rare (5m), static (∞) - DISABLED_QUERY_KEY: consistent disabled query pattern across all features - Removed unused createQueryOptions helper Testing: - Added comprehensive tests for progress hooks - Updated all test mocks to include new STALE_TIMES values - All 81 feature tests passing Documentation: - Created QUERY_PATTERNS.md guide for future implementations - Clear patterns, examples, and migration checklist Breaking Changes: - Progress imports moved from knowledge/progress to progress - Query key structure changes (cache will reset) - No backward compatibility maintained Co-Authored-By: Claude <noreply@anthropic.com> * fix: establish single source of truth for tags in metadata - Remove ambiguous top-level tags field from KnowledgeItem interface - Update all UI components to use metadata.tags exclusively - Fix mutations to correctly update tags in metadata object - Remove duplicate tags field from backend KnowledgeSummaryService - Fix test setup issue with QueryClient instance in knowledge tests - Add TODO comments for filter-blind optimistic updates (Phase 3) This eliminates the ambiguity identified in Phase 2 where both item.tags and metadata.tags existed, establishing metadata.tags as the single source of truth across the entire stack. * fix: comprehensive progress hooks improvements - Integrate useSmartPolling for all polling queries - Fix memory leaks from uncleaned timeouts - Replace string-based error checking with status codes - Remove TypeScript any usage with proper types - Fix unstable dependencies with sorted JSON serialization - Add staleTime to document queries for consistency * feat: implement flexible assignee system for dynamic agents - Changed assignee from restricted enum to flexible string type - Renamed "AI IDE Agent" to "Coding Agent" for clarity - Enhanced ComboBox with Radix UI best practices: - Full ARIA compliance (roles, labels, keyboard nav) - Performance optimizations (memoization, useCallback) - Improved UX (auto-scroll, keyboard shortcuts) - Fixed event bubbling preventing unintended modal opens - Updated MCP server docs to reflect flexible assignee capability - Removed unnecessary UI elements (arrows, helper text) - Styled ComboBox to match priority selector aesthetic This allows external MCP clients to create and assign custom sub-agents dynamically, supporting advanced agent orchestration workflows. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com> * fix: complete Phase 2 summariesPrefix usage for cache consistency - Fix all knowledgeKeys.summaries() calls to use summariesPrefix() for operations targeting multiple summary caches - Update cancelQueries, getQueriesData, setQueriesData, invalidateQueries, and refetchQueries calls - Fix critical cache invalidation bug where filtered summaries weren't being cleared - Update test expectations to match new factory patterns - Address CodeRabbit review feedback on cache stability issues This completes the Phase 2 Query Keys Standardization work documented in PRPs/local/frontend-state-management-refactor.md 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: update MCP task tools documentation for Coding Agent rename Update task assignee documentation from "AI IDE Agent" to "Coding Agent" to match frontend changes for consistency across the system. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: implement assignee filtering in MCP find_tasks function Add missing implementation for filter_by="assignee" that was documented but not coded. The filter now properly passes the assignee parameter to the backend API, matching the existing pattern used for status filtering. Fixes documentation/implementation mismatch identified by CodeRabbit. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Phase 2 cleanup - address review comments and improve code quality Changes made: - Reduced smart polling interval from 60s to 5s for background tabs (better responsiveness) - Fixed cache coherence bug in knowledge queries (missing limit parameter) - Standardized "Coding Agent" naming (was inconsistently "AI IDE Agent") - Improved task queries with 2s polling, type safety, and proper invalidation - Enhanced combobox accessibility with proper ARIA attributes and IDs - Delegated useCrawlProgressPolling to useActiveOperations (removed duplication) - Added exact: true to progress query removals (prevents sibling removal) - Fixed invalid Tailwind class ml-4.5 to ml-4 All changes align with Phase 2 query key standardization goals and improve overall code quality, accessibility, and performance. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
5.8 KiB
5.8 KiB
API Naming Conventions
Overview
This document defines the naming conventions used throughout the Archon V2 codebase for consistency and clarity.
Task Status Values
Database values only - no UI mapping:
todo- Task is in backlog/todo statedoing- Task is actively being worked onreview- Task is pending reviewdone- Task is completed
Service Method Naming
Project Service (projectService.ts)
Projects
listProjects()- Get all projectsgetProject(projectId)- Get single project by IDcreateProject(projectData)- Create new projectupdateProject(projectId, updates)- Update projectdeleteProject(projectId)- Delete project
Tasks
getTasksByProject(projectId)- Get all tasks for a specific projectgetTask(taskId)- Get single task by IDcreateTask(taskData)- Create new taskupdateTask(taskId, updates)- Update task with partial dataupdateTaskStatus(taskId, status)- Update only task statusupdateTaskOrder(taskId, newOrder, newStatus?)- Update task position/orderdeleteTask(taskId)- Delete task (soft delete/archive)getTasksByStatus(status)- Get all tasks with specific status
Documents
getDocuments(projectId)- Get all documents for projectgetDocument(projectId, docId)- Get single documentcreateDocument(projectId, documentData)- Create documentupdateDocument(projectId, docId, updates)- Update documentdeleteDocument(projectId, docId)- Delete document
Versions
createVersion(projectId, field, content)- Create version snapshotlistVersions(projectId, fieldName?)- List version historygetVersion(projectId, fieldName, versionNumber)- Get specific versionrestoreVersion(projectId, fieldName, versionNumber)- Restore version
API Endpoint Patterns
RESTful Endpoints
GET /api/projects - List all projects
POST /api/projects - Create project
GET /api/projects/{project_id} - Get project
PUT /api/projects/{project_id} - Update project
DELETE /api/projects/{project_id} - Delete project
GET /api/projects/{project_id}/tasks - Get project tasks
POST /api/tasks - Create task (project_id in body)
GET /api/tasks/{task_id} - Get task
PUT /api/tasks/{task_id} - Update task
DELETE /api/tasks/{task_id} - Delete task
GET /api/projects/{project_id}/docs - Get project documents
POST /api/projects/{project_id}/docs - Create document
GET /api/projects/{project_id}/docs/{doc_id} - Get document
PUT /api/projects/{project_id}/docs/{doc_id} - Update document
DELETE /api/projects/{project_id}/docs/{doc_id} - Delete document
Progress/Polling Endpoints
GET /api/progress/{operation_id} - Generic operation progress
GET /api/knowledge/crawl-progress/{id} - Crawling progress
GET /api/agent-chat/sessions/{id}/messages - Chat messages
Component Naming
Hooks
use[Feature]- Custom hooks (e.g.,usePolling,useProjectMutation)- Returns object with:
{ data, isLoading, error, refetch }
Services
[feature]Service- Service modules (e.g.,projectService,crawlProgressService)- Methods return Promises with typed responses
Components
[Feature][Type]- UI components (e.g.,TaskBoardView,EditTaskModal)- Props interfaces:
[Component]Props
State Variable Naming
Loading States
isLoading[Feature]- Boolean loading indicatorsisSwitchingProject- Specific operation statesmovingTaskIds- Set/Array of items being processed
Error States
[feature]Error- Error message stringstaskOperationError- Specific operation errors
Data States
[feature]s- Plural for collections (e.g.,tasks,projects)selected[Feature]- Currently selected item[feature]Data- Raw data from API
Type Definitions
Database Types (from backend)
type DatabaseTaskStatus = 'todo' | 'doing' | 'review' | 'done';
type Assignee = string; // Flexible string to support any agent name
// Common values: 'User', 'Archon', 'Coding Agent'
Request/Response Types
Create[Feature]Request // e.g., CreateTaskRequest
Update[Feature]Request // e.g., UpdateTaskRequest
[Feature]Response // e.g., TaskResponse
Function Naming Patterns
Event Handlers
handle[Event]- Generic handlers (e.g.,handleProjectSelect)on[Event]- Props callbacks (e.g.,onTaskMove,onRefresh)
Operations
load[Feature]- Fetch data (e.g.,loadTasksForProject)save[Feature]- Persist changes (e.g.,saveTask)delete[Feature]- Remove items (e.g.,deleteTask)refresh[Feature]- Reload data (e.g.,refreshTasks)
Formatting/Transformation
format[Feature]- Format for display (e.g.,formatTask)validate[Feature]- Validate data (e.g.,validateUpdateTask)
Best Practices
✅ Do Use
getTasksByProject(projectId)- Clear scope with contextstatus- Single source of truth from database- Direct database values everywhere (no mapping)
- Polling with
usePollinghook for data fetching - Async/await with proper error handling
- ETag headers for efficient polling
- Loading indicators during operations
Current Architecture Patterns
Polling & Data Fetching
- HTTP polling with
usePollinganduseCrawlProgressPollinghooks - ETag-based caching for bandwidth efficiency
- Loading state indicators (
isLoading,isSwitchingProject) - Error toast notifications for user feedback
- Manual refresh triggers via
refetch() - Immediate UI updates followed by API calls
Service Architecture
- Specialized services for different domains (
projectService,crawlProgressService) - Direct database value usage (no UI/DB mapping)
- Promise-based async operations
- Typed request/response interfaces