Skip to main content
Glama
listTasks.ts3.5 kB
/** * listTasks prompt 生成器 * listTasks prompt generator * 負責將模板和參數組合成最終的 prompt * Responsible for combining templates and parameters into the final prompt */ import { loadPrompt, generatePrompt, loadPromptFromTemplate, } from "../loader.js"; import { Task, TaskStatus } from "../../types/index.js"; /** * listTasks prompt 參數介面 * listTasks prompt parameters interface */ export interface ListTasksPromptParams { status: string; tasks: Record<string, Task[]>; allTasks: Task[]; } /** * 獲取 listTasks 的完整 prompt * Get the complete prompt for listTasks * @param params prompt 參數 * @param params prompt parameters * @returns 生成的 prompt * @returns generated prompt */ export async function getListTasksPrompt( params: ListTasksPromptParams ): Promise<string> { const { status, tasks, allTasks } = params; // 如果沒有任務,顯示通知 // If there are no tasks, show notification if (allTasks.length === 0) { const notFoundTemplate = await loadPromptFromTemplate( "listTasks/notFound.md" ); const statusText = status === "all" ? "任何" : `任何 ${status} 的`; // Set status text: "any" for all, or "any [status]" for specific status return generatePrompt(notFoundTemplate, { statusText: statusText, }); } // 獲取所有狀態的計數 // Get counts for all statuses const statusCounts = Object.values(TaskStatus) .map((statusType) => { const count = tasks[statusType]?.length || 0; return `- **${statusType}**: ${count} 個任務`; // Return formatted string showing task count for each status }) .join("\n"); let filterStatus = "all"; switch (status) { case "pending": filterStatus = TaskStatus.PENDING; break; case "in_progress": filterStatus = TaskStatus.IN_PROGRESS; break; case "completed": filterStatus = TaskStatus.COMPLETED; break; } let taskDetails = ""; let taskDetailsTemplate = await loadPromptFromTemplate( "listTasks/taskDetails.md" ); // 添加每個狀態下的詳細任務 // Add detailed tasks under each status for (const statusType of Object.values(TaskStatus)) { const tasksWithStatus = tasks[statusType] || []; if ( tasksWithStatus.length > 0 && (filterStatus === "all" || filterStatus === statusType) ) { for (const task of tasksWithStatus) { let dependencies = "沒有依賴"; // Default dependency text when no dependencies exist if (task.dependencies && task.dependencies.length > 0) { dependencies = task.dependencies .map((d) => `\`${d.taskId}\``) .join(", "); } taskDetails += generatePrompt(taskDetailsTemplate, { name: task.name, id: task.id, description: task.description, createAt: task.createdAt, complatedSummary: (task.summary || "").substring(0, 100) + ((task.summary || "").length > 100 ? "..." : ""), dependencies: dependencies, complatedAt: task.completedAt, }); } } } const indexTemplate = await loadPromptFromTemplate("listTasks/index.md"); let prompt = generatePrompt(indexTemplate, { statusCount: statusCounts, taskDetailsTemplate: taskDetails, }); // 載入可能的自定義 prompt // Load possible custom prompt return loadPrompt(prompt, "LIST_TASKS"); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cjo4m06/mcp-shrimp-task-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server