/**
* Developed by eBrook Group.
* Copyright © 2026 eBrook Group (https://www.ebrook.com.tw)
*/
/**
* Update task status tool handler
* Updates the status of a ClickUp task
*/
import { ClickUpService } from "../services/clickup.js";
import { debug, error } from "../utils/logger.js";
import { sanitizeErrorResponse, sanitizeApiResponse } from "../utils/error-sanitizer.js";
import type { AppConfig } from "../config/env.js";
import type { ClickUpTaskResponse } from "../types/index.js";
/**
* Update task status tool handler
* @param task_id - ClickUp task ID
* @param status - New status value
* @param _config - Application configuration (unused)
* @param click_up_service - ClickUp service instance
* @returns Tool execution result
*/
export async function handleUpdateStatus(
task_id: string,
status: string,
_config: AppConfig,
click_up_service: ClickUpService
): Promise<{ content: Array<{ type: "text"; text: string }>; isError?: boolean }> {
debug(`Updating status for task: ${task_id} to: ${status}`);
// Update task status
const update_res = await click_up_service.updateStatus(task_id, status);
debug(`ClickUp API response status: ${update_res.status}`);
if (update_res.status !== 200) {
// Sanitized error message for client
const error_msg = `Failed to update task ${task_id}. ${sanitizeErrorResponse(update_res.status, update_res.body)}`;
// Full error details only in logs
debug(`Full API error response: ${JSON.stringify(update_res.body)}`);
error(error_msg);
return {
content: [
{
type: "text",
text: error_msg,
},
],
isError: true,
};
}
const updated_task = update_res.body as ClickUpTaskResponse;
debug(`Successfully updated task status: ${updated_task.name}`);
// Build formatted output
const output_lines: string[] = [];
output_lines.push("=".repeat(80));
output_lines.push(`✅ TASK STATUS UPDATED`);
output_lines.push("=".repeat(80));
output_lines.push("");
output_lines.push(`📋 Task: ${updated_task.name || "Unknown"}`);
output_lines.push(`🆔 Task ID: ${updated_task.custom_id || updated_task.id || task_id}`);
output_lines.push(`📊 New Status: ${updated_task.status?.status || status}`);
output_lines.push(`🔗 URL: ${updated_task.url || "N/A"}`);
output_lines.push("");
output_lines.push("=".repeat(80));
// Return formatted result
return {
content: [
{
type: "text",
text: output_lines.join("\n"),
},
{
type: "text",
text: `\n📊 Raw Response (JSON):\n${JSON.stringify(sanitizeApiResponse(updated_task), null, 2)}`,
},
],
isError: false,
};
}