From 3fc8f2d5e01c2eb5a290c67df67c1a4c0c9dde71 Mon Sep 17 00:00:00 2001 From: Christian Gick Date: Fri, 9 Jan 2026 00:13:31 +0200 Subject: [PATCH] feat: Add 'testing' status to task workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Workflow: open → in_progress → testing → completed Co-Authored-By: Claude Opus 4.5 --- src/tools/index.ts | 54 ++++++++++++++++++++++++++++++++++++++++++++-- src/types.ts | 2 +- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/tools/index.ts b/src/tools/index.ts index 00c0be6..8c1fee6 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -24,7 +24,7 @@ export const toolDefinitions = [ type: 'object', properties: { project: { type: 'string', description: 'Filter by project key' }, - status: { type: 'string', enum: ['open', 'in_progress', 'blocked', 'completed'], description: 'Filter by status' }, + status: { type: 'string', enum: ['open', 'in_progress', 'testing', 'blocked', 'completed'], description: 'Filter by status' }, type: { type: 'string', enum: ['task', 'bug', 'feature', 'debt'], description: 'Filter by type' }, priority: { type: 'string', enum: ['P0', 'P1', 'P2', 'P3'], description: 'Filter by priority' }, limit: { type: 'number', description: 'Max results (default: 20)' }, @@ -60,7 +60,7 @@ export const toolDefinitions = [ type: 'object', properties: { id: { type: 'string', description: 'Task ID to update' }, - status: { type: 'string', enum: ['open', 'in_progress', 'blocked', 'completed'], description: 'New status' }, + status: { type: 'string', enum: ['open', 'in_progress', 'testing', 'blocked', 'completed'], description: 'New status' }, priority: { type: 'string', enum: ['P0', 'P1', 'P2', 'P3'], description: 'New priority' }, type: { type: 'string', enum: ['task', 'bug', 'feature', 'debt'], description: 'New type' }, title: { type: 'string', description: 'New title' }, @@ -135,4 +135,54 @@ export const toolDefinitions = [ required: ['item_id', 'checked'], }, }, + + // Epic Tools + { + name: 'epic_add', + description: 'Create a new epic (session-scoped work bundle) with auto-generated ID', + inputSchema: { + type: 'object', + properties: { + title: { type: 'string', description: 'Epic title (required)' }, + project: { type: 'string', description: 'Project key (e.g., VPN, ST). Auto-detected if not provided.' }, + description: { type: 'string', description: 'Optional description of the epic scope' }, + }, + required: ['title'], + }, + }, + { + name: 'epic_list', + description: 'List epics with task counts and progress', + inputSchema: { + type: 'object', + properties: { + project: { type: 'string', description: 'Filter by project key' }, + status: { type: 'string', enum: ['open', 'in_progress', 'completed'], description: 'Filter by status' }, + limit: { type: 'number', description: 'Max results (default: 20)' }, + }, + }, + }, + { + name: 'epic_show', + description: 'Show epic details with all assigned tasks', + inputSchema: { + type: 'object', + properties: { + id: { type: 'string', description: 'Epic ID (e.g., VPN-E1, ST-E3)' }, + }, + required: ['id'], + }, + }, + { + name: 'epic_assign', + description: 'Assign a task to an epic', + inputSchema: { + type: 'object', + properties: { + task_id: { type: 'string', description: 'Task ID to assign' }, + epic_id: { type: 'string', description: 'Epic ID to assign to' }, + }, + required: ['task_id', 'epic_id'], + }, + }, ]; diff --git a/src/types.ts b/src/types.ts index a08b926..1b6894a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,7 +6,7 @@ export interface Task { title: string; description?: string; type: 'task' | 'bug' | 'feature' | 'debt'; - status: 'open' | 'in_progress' | 'blocked' | 'completed'; + status: 'open' | 'in_progress' | 'testing' | 'blocked' | 'completed'; priority: 'P0' | 'P1' | 'P2' | 'P3'; version_id?: string; epic_id?: string;