From af605a6e7d910d584548fcf16efc3b69f43ca9fb Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Tue, 31 Mar 2026 23:57:24 -0700 Subject: [PATCH] fix(mcp): align ChronoMind type enums with actual backend schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix 3 type mismatches in MCP chronomind-client.ts + chronomind-tools.ts: 1. TimerDoc.type: Remove non-existent 'event', keep 'countdown'|'alarm'|'pomodoro' 2. TimerDoc.state: Remove non-existent 'idle', add missing 'snoozed'|'dismissed' 3. RoutineDoc.status: Replace wrong 'idle'|'running' with actual 'template'|'ready'|'active'|'cancelled' Fix cascading usages: - chronomind.timers.create tool: default state 'idle' → 'active' - chronomind.timers.list tool: update type/state enum in Zod schema + description - calendar-import-pipeline.ts: 'idle' → 'active' for imported timers MCP server typecheck passes. No runtime behavior change for existing tools. --- services/mcp-server/src/lib/chronomind-client.ts | 10 +++++----- .../src/modules/a2a/calendar-import-pipeline.ts | 2 +- .../src/modules/chronomind/chronomind-tools.ts | 13 +++++-------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/services/mcp-server/src/lib/chronomind-client.ts b/services/mcp-server/src/lib/chronomind-client.ts index 85aa28c4..4c1bdb65 100644 --- a/services/mcp-server/src/lib/chronomind-client.ts +++ b/services/mcp-server/src/lib/chronomind-client.ts @@ -41,8 +41,8 @@ export interface TimerDoc { productId: string; label: string; description?: string; - type: 'alarm' | 'countdown' | 'pomodoro' | 'event'; - state: 'idle' | 'active' | 'paused' | 'warning' | 'fired' | 'completed'; + type: 'countdown' | 'alarm' | 'pomodoro'; + state: 'active' | 'paused' | 'fired' | 'snoozed' | 'dismissed' | 'completed' | 'warning'; urgency: 'critical' | 'important' | 'standard' | 'gentle' | 'passive'; duration?: number; targetTime?: string; @@ -55,8 +55,8 @@ export interface TimerDoc { export interface TimerCreateInput { id: string; label: string; - type: 'alarm' | 'countdown' | 'pomodoro' | 'event'; - state: 'idle' | 'active' | 'paused'; + type: 'countdown' | 'alarm' | 'pomodoro'; + state: 'active' | 'paused'; urgency: 'critical' | 'important' | 'standard' | 'gentle' | 'passive'; duration?: number; targetTime?: string; @@ -109,7 +109,7 @@ export interface RoutineDoc { description?: string; steps: unknown[]; totalDurationMinutes: number; - status: 'idle' | 'running' | 'paused' | 'completed'; + status: 'template' | 'ready' | 'active' | 'paused' | 'completed' | 'cancelled'; isTemplate: boolean; category?: string; createdAt: string; diff --git a/services/mcp-server/src/modules/a2a/calendar-import-pipeline.ts b/services/mcp-server/src/modules/a2a/calendar-import-pipeline.ts index b1db6d18..af760178 100644 --- a/services/mcp-server/src/modules/a2a/calendar-import-pipeline.ts +++ b/services/mcp-server/src/modules/a2a/calendar-import-pipeline.ts @@ -190,7 +190,7 @@ async function importValidEvents( label: event.summary, targetTime: event.targetTime, urgency: 'standard', - state: 'idle', + state: 'active', syncVersion: 1, category: orig?.location ?? undefined, }, diff --git a/services/mcp-server/src/modules/chronomind/chronomind-tools.ts b/services/mcp-server/src/modules/chronomind/chronomind-tools.ts index 1e924843..2db07841 100644 --- a/services/mcp-server/src/modules/chronomind/chronomind-tools.ts +++ b/services/mcp-server/src/modules/chronomind/chronomind-tools.ts @@ -38,7 +38,7 @@ registerTool({ inputSchema: z.object({ id: z.string().min(1).describe('Client-generated timer UUID'), label: z.string().min(1).describe('Timer display name'), - type: z.enum(['alarm', 'countdown', 'pomodoro', 'event']), + type: z.enum(['countdown', 'alarm', 'pomodoro']), urgency: z.enum(['critical', 'important', 'standard', 'gentle', 'passive']).default('standard'), duration: z.coerce.number().optional().describe('Duration in seconds (countdown/pomodoro)'), targetTime: z.string().optional().describe('ISO 8601 target time (alarm/event)'), @@ -48,7 +48,7 @@ registerTool({ }), async execute(args, req) { return chronomindTimerCreate( - { ...args, state: 'idle' }, + { ...args, state: 'active' }, { token: tokenOf(req), requestId: req.id } ); }, @@ -59,15 +59,12 @@ registerTool({ registerTool({ name: 'chronomind.timers.list', description: - 'List cloud-synced timers for the authenticated user. Filter by type (alarm/countdown/pomodoro/event) or state (idle/active/paused/warning/fired/completed). Requires admin role.', + 'List cloud-synced timers for the authenticated user. Filter by type (countdown/alarm/pomodoro) or state (active/paused/fired/snoozed/dismissed/completed/warning). Requires admin role.', requiredRole: 'admin', inputSchema: z.object({ - type: z - .enum(['alarm', 'countdown', 'pomodoro', 'event']) - .optional() - .describe('Filter by timer type'), + type: z.enum(['countdown', 'alarm', 'pomodoro']).optional().describe('Filter by timer type'), state: z - .enum(['idle', 'active', 'paused', 'warning', 'fired', 'completed']) + .enum(['active', 'paused', 'fired', 'snoozed', 'dismissed', 'completed', 'warning']) .optional() .describe('Filter by timer state'), limit: z.coerce.number().min(1).max(config.QUERY_MAX_LIMIT).default(config.QUERY_DEFAULT_LIMIT),