* 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>
164 lines
5.8 KiB
Markdown
164 lines
5.8 KiB
Markdown
# 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 state
|
|
- `doing` - Task is actively being worked on
|
|
- `review` - Task is pending review
|
|
- `done` - Task is completed
|
|
|
|
## Service Method Naming
|
|
|
|
### Project Service (`projectService.ts`)
|
|
|
|
#### Projects
|
|
- `listProjects()` - Get all projects
|
|
- `getProject(projectId)` - Get single project by ID
|
|
- `createProject(projectData)` - Create new project
|
|
- `updateProject(projectId, updates)` - Update project
|
|
- `deleteProject(projectId)` - Delete project
|
|
|
|
#### Tasks
|
|
- `getTasksByProject(projectId)` - Get all tasks for a specific project
|
|
- `getTask(taskId)` - Get single task by ID
|
|
- `createTask(taskData)` - Create new task
|
|
- `updateTask(taskId, updates)` - Update task with partial data
|
|
- `updateTaskStatus(taskId, status)` - Update only task status
|
|
- `updateTaskOrder(taskId, newOrder, newStatus?)` - Update task position/order
|
|
- `deleteTask(taskId)` - Delete task (soft delete/archive)
|
|
- `getTasksByStatus(status)` - Get all tasks with specific status
|
|
|
|
#### Documents
|
|
- `getDocuments(projectId)` - Get all documents for project
|
|
- `getDocument(projectId, docId)` - Get single document
|
|
- `createDocument(projectId, documentData)` - Create document
|
|
- `updateDocument(projectId, docId, updates)` - Update document
|
|
- `deleteDocument(projectId, docId)` - Delete document
|
|
|
|
#### Versions
|
|
- `createVersion(projectId, field, content)` - Create version snapshot
|
|
- `listVersions(projectId, fieldName?)` - List version history
|
|
- `getVersion(projectId, fieldName, versionNumber)` - Get specific version
|
|
- `restoreVersion(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 indicators
|
|
- `isSwitchingProject` - Specific operation states
|
|
- `movingTaskIds` - Set/Array of items being processed
|
|
|
|
### Error States
|
|
- `[feature]Error` - Error message strings
|
|
- `taskOperationError` - 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)
|
|
```typescript
|
|
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
|
|
```typescript
|
|
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 context
|
|
- `status` - Single source of truth from database
|
|
- Direct database values everywhere (no mapping)
|
|
- Polling with `usePolling` hook 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 `usePolling` and `useCrawlProgressPolling` hooks
|
|
- 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 |