rtaskmaster-mcp 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Task Manager - Core business logic for task operations
3
+ */
4
+ import { TaskStorage } from './storage.js';
5
+ export class TaskManager {
6
+ storage;
7
+ constructor(projectRoot) {
8
+ this.storage = new TaskStorage(projectRoot);
9
+ }
10
+ /**
11
+ * Check if initialized
12
+ */
13
+ isInitialized() {
14
+ return this.storage.isInitialized();
15
+ }
16
+ /**
17
+ * Initialize Ragnar
18
+ */
19
+ initialize(projectName) {
20
+ return this.storage.initialize(projectName);
21
+ }
22
+ /**
23
+ * Generate next task ID
24
+ */
25
+ generateTaskId(tasks) {
26
+ if (tasks.length === 0)
27
+ return '1';
28
+ const maxId = Math.max(...tasks.map((t) => parseInt(t.id, 10) || 0));
29
+ return String(maxId + 1);
30
+ }
31
+ /**
32
+ * Generate next subtask ID
33
+ */
34
+ generateSubtaskId(subtasks) {
35
+ if (subtasks.length === 0)
36
+ return '1';
37
+ const maxId = Math.max(...subtasks.map((s) => parseInt(s.id, 10) || 0));
38
+ return String(maxId + 1);
39
+ }
40
+ /**
41
+ * Get all tasks with optional filtering
42
+ */
43
+ getTasks(filter) {
44
+ let tasks = this.storage.getTasks();
45
+ if (filter?.status) {
46
+ const statuses = Array.isArray(filter.status)
47
+ ? filter.status
48
+ : [filter.status];
49
+ tasks = tasks.filter((t) => statuses.includes(t.status));
50
+ }
51
+ if (filter?.priority) {
52
+ tasks = tasks.filter((t) => t.priority === filter.priority);
53
+ }
54
+ return tasks;
55
+ }
56
+ /**
57
+ * Get a task by ID (supports dot notation for subtasks: "1.2")
58
+ */
59
+ getTask(taskId) {
60
+ const tasks = this.storage.getTasks();
61
+ const parts = taskId.split('.');
62
+ const task = tasks.find((t) => t.id === parts[0]);
63
+ if (!task)
64
+ return null;
65
+ if (parts.length === 1)
66
+ return task;
67
+ // It's a subtask reference
68
+ const subtask = task.subtasks.find((s) => s.id === parts[1]);
69
+ return subtask || null;
70
+ }
71
+ /**
72
+ * Get parent task (for subtask operations)
73
+ */
74
+ getParentTask(taskId) {
75
+ const tasks = this.storage.getTasks();
76
+ const parentId = taskId.split('.')[0];
77
+ return tasks.find((t) => t.id === parentId) || null;
78
+ }
79
+ /**
80
+ * Create a new task
81
+ */
82
+ createTask(input) {
83
+ const tasks = this.storage.getTasks();
84
+ const now = new Date().toISOString();
85
+ const task = {
86
+ id: this.generateTaskId(tasks),
87
+ title: input.title,
88
+ description: input.description || '',
89
+ status: 'pending',
90
+ priority: input.priority || 'medium',
91
+ dependencies: input.dependencies || [],
92
+ subtasks: [],
93
+ details: input.details,
94
+ testStrategy: input.testStrategy,
95
+ createdAt: now,
96
+ updatedAt: now,
97
+ };
98
+ tasks.push(task);
99
+ this.storage.saveTasks(tasks);
100
+ return task;
101
+ }
102
+ /**
103
+ * Update an existing task
104
+ */
105
+ updateTask(taskId, input) {
106
+ const tasks = this.storage.getTasks();
107
+ const index = tasks.findIndex((t) => t.id === taskId);
108
+ if (index === -1)
109
+ return null;
110
+ const task = tasks[index];
111
+ const updatedTask = {
112
+ ...task,
113
+ ...input,
114
+ updatedAt: new Date().toISOString(),
115
+ };
116
+ tasks[index] = updatedTask;
117
+ this.storage.saveTasks(tasks);
118
+ return updatedTask;
119
+ }
120
+ /**
121
+ * Delete a task
122
+ */
123
+ deleteTask(taskId) {
124
+ const tasks = this.storage.getTasks();
125
+ const index = tasks.findIndex((t) => t.id === taskId);
126
+ if (index === -1)
127
+ return false;
128
+ tasks.splice(index, 1);
129
+ // Also remove this task from any dependencies
130
+ for (const task of tasks) {
131
+ task.dependencies = task.dependencies.filter((d) => d !== taskId);
132
+ }
133
+ this.storage.saveTasks(tasks);
134
+ return true;
135
+ }
136
+ /**
137
+ * Set task status
138
+ */
139
+ setStatus(taskId, status) {
140
+ const tasks = this.storage.getTasks();
141
+ const parts = taskId.split('.');
142
+ const taskIndex = tasks.findIndex((t) => t.id === parts[0]);
143
+ if (taskIndex === -1)
144
+ return null;
145
+ const now = new Date().toISOString();
146
+ if (parts.length === 1) {
147
+ // Update task status
148
+ tasks[taskIndex].status = status;
149
+ tasks[taskIndex].updatedAt = now;
150
+ this.storage.saveTasks(tasks);
151
+ return tasks[taskIndex];
152
+ }
153
+ // Update subtask status
154
+ const subtaskIndex = tasks[taskIndex].subtasks.findIndex((s) => s.id === parts[1]);
155
+ if (subtaskIndex === -1)
156
+ return null;
157
+ tasks[taskIndex].subtasks[subtaskIndex].status = status;
158
+ tasks[taskIndex].subtasks[subtaskIndex].updatedAt = now;
159
+ tasks[taskIndex].updatedAt = now;
160
+ this.storage.saveTasks(tasks);
161
+ return tasks[taskIndex].subtasks[subtaskIndex];
162
+ }
163
+ /**
164
+ * Add a subtask to a task
165
+ */
166
+ addSubtask(taskId, input) {
167
+ const tasks = this.storage.getTasks();
168
+ const taskIndex = tasks.findIndex((t) => t.id === taskId);
169
+ if (taskIndex === -1)
170
+ return null;
171
+ const now = new Date().toISOString();
172
+ const subtask = {
173
+ id: this.generateSubtaskId(tasks[taskIndex].subtasks),
174
+ title: input.title,
175
+ description: input.description,
176
+ status: 'pending',
177
+ createdAt: now,
178
+ updatedAt: now,
179
+ };
180
+ tasks[taskIndex].subtasks.push(subtask);
181
+ tasks[taskIndex].updatedAt = now;
182
+ this.storage.saveTasks(tasks);
183
+ return subtask;
184
+ }
185
+ /**
186
+ * Get the next task to work on
187
+ * Prioritizes: in-progress > high priority pending > medium > low
188
+ * Only returns tasks with satisfied dependencies
189
+ */
190
+ getNextTask() {
191
+ const tasks = this.storage.getTasks();
192
+ const doneTasks = new Set(tasks.filter((t) => t.status === 'done').map((t) => t.id));
193
+ // Filter to tasks that can be worked on
194
+ const availableTasks = tasks.filter((t) => {
195
+ if (t.status === 'done' || t.status === 'blocked' || t.status === 'deferred') {
196
+ return false;
197
+ }
198
+ // Check all dependencies are done
199
+ return t.dependencies.every((d) => doneTasks.has(d));
200
+ });
201
+ if (availableTasks.length === 0)
202
+ return null;
203
+ // First, check for in-progress tasks
204
+ const inProgress = availableTasks.find((t) => t.status === 'in-progress');
205
+ if (inProgress)
206
+ return inProgress;
207
+ // Sort by priority
208
+ const priorityOrder = {
209
+ high: 0,
210
+ medium: 1,
211
+ low: 2,
212
+ };
213
+ availableTasks.sort((a, b) => {
214
+ const aPriority = priorityOrder[a.priority] ?? 1;
215
+ const bPriority = priorityOrder[b.priority] ?? 1;
216
+ if (aPriority !== bPriority)
217
+ return aPriority - bPriority;
218
+ // If same priority, prefer lower ID (earlier created)
219
+ return parseInt(a.id, 10) - parseInt(b.id, 10);
220
+ });
221
+ return availableTasks[0] || null;
222
+ }
223
+ /**
224
+ * Get task statistics
225
+ */
226
+ getStats() {
227
+ const tasks = this.storage.getTasks();
228
+ const total = tasks.length;
229
+ const stats = {
230
+ total,
231
+ pending: tasks.filter((t) => t.status === 'pending').length,
232
+ inProgress: tasks.filter((t) => t.status === 'in-progress').length,
233
+ done: tasks.filter((t) => t.status === 'done').length,
234
+ blocked: tasks.filter((t) => t.status === 'blocked').length,
235
+ deferred: tasks.filter((t) => t.status === 'deferred').length,
236
+ completionPercentage: total > 0
237
+ ? Math.round((tasks.filter((t) => t.status === 'done').length / total) * 100)
238
+ : 0,
239
+ };
240
+ return stats;
241
+ }
242
+ }
243
+ //# sourceMappingURL=task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/core/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Core types for Ragnar Task Master
3
+ */
4
+ export type TaskStatus = 'pending' | 'in-progress' | 'done' | 'blocked' | 'deferred';
5
+ export type TaskPriority = 'high' | 'medium' | 'low';
6
+ export interface Subtask {
7
+ id: string;
8
+ title: string;
9
+ description?: string;
10
+ status: TaskStatus;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ }
14
+ export interface Task {
15
+ id: string;
16
+ title: string;
17
+ description: string;
18
+ status: TaskStatus;
19
+ priority: TaskPriority;
20
+ dependencies: string[];
21
+ subtasks: Subtask[];
22
+ details?: string;
23
+ testStrategy?: string;
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ }
27
+ export interface TaskStore {
28
+ version: string;
29
+ projectName?: string;
30
+ tasks: Task[];
31
+ lastUpdated: string;
32
+ }
33
+ export interface CreateTaskInput {
34
+ title: string;
35
+ description?: string;
36
+ priority?: TaskPriority;
37
+ dependencies?: string[];
38
+ details?: string;
39
+ testStrategy?: string;
40
+ }
41
+ export interface UpdateTaskInput {
42
+ title?: string;
43
+ description?: string;
44
+ status?: TaskStatus;
45
+ priority?: TaskPriority;
46
+ dependencies?: string[];
47
+ details?: string;
48
+ testStrategy?: string;
49
+ }
50
+ export interface CreateSubtaskInput {
51
+ title: string;
52
+ description?: string;
53
+ }
54
+ export interface TaskFilter {
55
+ status?: TaskStatus | TaskStatus[];
56
+ priority?: TaskPriority;
57
+ }
58
+ export interface TaskStats {
59
+ total: number;
60
+ pending: number;
61
+ inProgress: number;
62
+ done: number;
63
+ blocked: number;
64
+ deferred: number;
65
+ completionPercentage: number;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AACrF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core types for Ragnar Task Master
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RTaskmaster - MCP Server Entry Point
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RTaskmaster - MCP Server Entry Point
4
+ */
5
+ import { FastMCP } from 'fastmcp';
6
+ import { registerTools } from './mcp/tools.js';
7
+ const server = new FastMCP({
8
+ name: 'RTaskmaster',
9
+ version: '0.2.0',
10
+ });
11
+ // Register all tools
12
+ registerTools(server);
13
+ // Start the server
14
+ server.start({
15
+ transportType: 'stdio',
16
+ });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC;IACzB,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtB,mBAAmB;AACnB,MAAM,CAAC,KAAK,CAAC;IACX,aAAa,EAAE,OAAO;CACvB,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MCP module exports
3
+ */
4
+ export * from './tools.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MCP module exports
3
+ */
4
+ export * from './tools.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Tools - All tool definitions for RTaskmaster Task Master
3
+ */
4
+ import type { FastMCP } from "fastmcp";
5
+ /**
6
+ * Register all RTaskmaster MCP tools
7
+ */
8
+ export declare function registerTools(server: FastMCP): void;
9
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA6BvC;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,QAq5B5C"}