@feeble/blay-mcp-server 0.1.0 → 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.
Files changed (66) hide show
  1. package/dist/backend.d.ts +78 -0
  2. package/dist/backend.js +19 -0
  3. package/dist/backend.js.map +1 -0
  4. package/dist/http-backend.d.ts +11 -0
  5. package/dist/http-backend.js +235 -0
  6. package/dist/http-backend.js.map +1 -0
  7. package/dist/index.d.ts +3 -1
  8. package/dist/index.js +22 -20
  9. package/dist/index.js.map +1 -1
  10. package/dist/register-tools.d.ts +7 -0
  11. package/dist/register-tools.js +41 -0
  12. package/dist/register-tools.js.map +1 -0
  13. package/dist/tools/action-items.d.ts +3 -2
  14. package/dist/tools/action-items.js +136 -41
  15. package/dist/tools/action-items.js.map +1 -1
  16. package/dist/tools/areas.d.ts +2 -1
  17. package/dist/tools/areas.js +51 -35
  18. package/dist/tools/areas.js.map +1 -1
  19. package/dist/tools/briefing.d.ts +3 -2
  20. package/dist/tools/briefing.js +40 -60
  21. package/dist/tools/briefing.js.map +1 -1
  22. package/dist/tools/collaborators.d.ts +2 -1
  23. package/dist/tools/collaborators.js +44 -32
  24. package/dist/tools/collaborators.js.map +1 -1
  25. package/dist/tools/comments.d.ts +2 -1
  26. package/dist/tools/comments.js +63 -50
  27. package/dist/tools/comments.js.map +1 -1
  28. package/dist/tools/context.d.ts +2 -1
  29. package/dist/tools/context.js +14 -10
  30. package/dist/tools/context.js.map +1 -1
  31. package/dist/tools/notifications.d.ts +2 -1
  32. package/dist/tools/notifications.js +33 -25
  33. package/dist/tools/notifications.js.map +1 -1
  34. package/dist/tools/org.d.ts +2 -1
  35. package/dist/tools/org.js +17 -14
  36. package/dist/tools/org.js.map +1 -1
  37. package/dist/tools/portal.d.ts +2 -1
  38. package/dist/tools/portal.js +70 -49
  39. package/dist/tools/portal.js.map +1 -1
  40. package/dist/tools/projects.d.ts +2 -1
  41. package/dist/tools/projects.js +61 -48
  42. package/dist/tools/projects.js.map +1 -1
  43. package/dist/tools/recurrence.d.ts +2 -1
  44. package/dist/tools/recurrence.js +42 -28
  45. package/dist/tools/recurrence.js.map +1 -1
  46. package/dist/tools/reminders.d.ts +2 -1
  47. package/dist/tools/reminders.js +57 -43
  48. package/dist/tools/reminders.js.map +1 -1
  49. package/dist/tools/resources.d.ts +2 -1
  50. package/dist/tools/resources.js +129 -97
  51. package/dist/tools/resources.js.map +1 -1
  52. package/dist/tools/search.d.ts +2 -1
  53. package/dist/tools/search.js +33 -29
  54. package/dist/tools/search.js.map +1 -1
  55. package/dist/tools/subscriptions.d.ts +2 -1
  56. package/dist/tools/subscriptions.js +42 -39
  57. package/dist/tools/subscriptions.js.map +1 -1
  58. package/dist/tools/tasks.d.ts +2 -1
  59. package/dist/tools/tasks.js +108 -90
  60. package/dist/tools/tasks.js.map +1 -1
  61. package/dist/tools/users.d.ts +2 -1
  62. package/dist/tools/users.js +20 -16
  63. package/dist/tools/users.js.map +1 -1
  64. package/dist/utils/formatting.js +1 -11
  65. package/dist/utils/formatting.js.map +1 -1
  66. package/package.json +23 -1
@@ -2,4 +2,5 @@
2
2
  * Subscription Tools — subscribe, unsubscribe, mute_entity, unmute_entity
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerSubscriptionTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerSubscriptionTools(server: McpServer, backend: BackendAdapter): void;
@@ -2,69 +2,72 @@
2
2
  * Subscription Tools — subscribe, unsubscribe, mute_entity, unmute_entity
3
3
  */
4
4
  import { z } from "zod";
5
- import { apiPost, apiDelete, formatError } from "../client.js";
6
- export function registerSubscriptionTools(server) {
5
+ import { BackendError } from "../backend.js";
6
+ export function registerSubscriptionTools(server, backend) {
7
7
  server.tool("subscribe", "Subscribe to an entity's comment feed to receive notifications. Supports tasks, projects, resources, and action items.", {
8
8
  entityType: z.string().describe("Entity type: 'task', 'project', 'resource', or 'actionItem'"),
9
9
  entityId: z.string().describe("The entity ID"),
10
10
  notificationPreference: z.string().optional().describe("'all', 'mentions_only', or 'none'"),
11
11
  }, async ({ entityType, entityId, notificationPreference }) => {
12
- const res = await apiPost("/api/v1/subscriptions", {
13
- entityType,
14
- entityId,
15
- notificationPreference,
16
- });
17
- if (!res.ok) {
18
- return { content: [{ type: "text", text: formatError(res) }] };
12
+ try {
13
+ await backend.subscribe({ entityType, entityId, notificationPreference });
14
+ return {
15
+ content: [{ type: "text", text: `Subscribed to ${entityType} ${entityId}.` }],
16
+ };
17
+ }
18
+ catch (err) {
19
+ return {
20
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
21
+ };
19
22
  }
20
- return {
21
- content: [{ type: "text", text: `Subscribed to ${entityType} ${entityId}.` }],
22
- };
23
23
  });
24
24
  server.tool("unsubscribe", "Unsubscribe from an entity's comment feed to stop receiving notifications.", {
25
25
  entityType: z.string().describe("Entity type: 'task', 'project', 'resource', or 'actionItem'"),
26
26
  entityId: z.string().describe("The entity ID"),
27
27
  }, async ({ entityType, entityId }) => {
28
- const res = await apiDelete("/api/v1/subscriptions", {
29
- entityType,
30
- entityId,
31
- });
32
- if (!res.ok) {
33
- return { content: [{ type: "text", text: formatError(res) }] };
28
+ try {
29
+ await backend.unsubscribe({ entityType, entityId });
30
+ return {
31
+ content: [{ type: "text", text: `Unsubscribed from ${entityType} ${entityId}.` }],
32
+ };
33
+ }
34
+ catch (err) {
35
+ return {
36
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
37
+ };
34
38
  }
35
- return {
36
- content: [{ type: "text", text: `Unsubscribed from ${entityType} ${entityId}.` }],
37
- };
38
39
  });
39
40
  server.tool("mute_entity", "Mute notifications for an entity. You stay subscribed but won't receive notifications until unmuted.", {
40
41
  entityType: z.string().describe("Entity type: 'task', 'project', 'resource', or 'actionItem'"),
41
42
  entityId: z.string().describe("The entity ID"),
42
43
  }, async ({ entityType, entityId }) => {
43
- const res = await apiPost("/api/v1/subscriptions/mute", {
44
- entityType,
45
- entityId,
46
- });
47
- if (!res.ok) {
48
- return { content: [{ type: "text", text: formatError(res) }] };
44
+ try {
45
+ await backend.muteEntity({ entityType, entityId });
46
+ return {
47
+ content: [{ type: "text", text: `Muted ${entityType} ${entityId}.` }],
48
+ };
49
+ }
50
+ catch (err) {
51
+ return {
52
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
53
+ };
49
54
  }
50
- return {
51
- content: [{ type: "text", text: `Muted ${entityType} ${entityId}.` }],
52
- };
53
55
  });
54
56
  server.tool("unmute_entity", "Unmute notifications for an entity, restoring your previous notification preference.", {
55
57
  entityType: z.string().describe("Entity type: 'task', 'project', 'resource', or 'actionItem'"),
56
58
  entityId: z.string().describe("The entity ID"),
57
59
  }, async ({ entityType, entityId }) => {
58
- const res = await apiPost("/api/v1/subscriptions/unmute", {
59
- entityType,
60
- entityId,
61
- });
62
- if (!res.ok) {
63
- return { content: [{ type: "text", text: formatError(res) }] };
60
+ try {
61
+ await backend.unmuteEntity({ entityType, entityId });
62
+ return {
63
+ content: [{ type: "text", text: `Unmuted ${entityType} ${entityId}.` }],
64
+ };
65
+ }
66
+ catch (err) {
67
+ return {
68
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
69
+ };
64
70
  }
65
- return {
66
- content: [{ type: "text", text: `Unmuted ${entityType} ${entityId}.` }],
67
- };
68
71
  });
69
72
  }
70
73
  //# sourceMappingURL=subscriptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/tools/subscriptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/tools/subscriptions.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * Task Tools — list_tasks, get_task, create_task, update_task, link_tasks, unlink_tasks
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerTaskTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerTaskTools(server: McpServer, backend: BackendAdapter): void;
@@ -2,9 +2,9 @@
2
2
  * Task Tools — list_tasks, get_task, create_task, update_task, link_tasks, unlink_tasks
3
3
  */
4
4
  import { z } from "zod";
5
- import { apiGet, apiPost, apiPatch, apiDelete, formatError } from "../client.js";
5
+ import { BackendError } from "../backend.js";
6
6
  import { formatTask, formatTaskDetail, formatConfirmation } from "../utils/formatting.js";
7
- export function registerTaskTools(server) {
7
+ export function registerTaskTools(server, backend) {
8
8
  server.tool("list_tasks", "List tasks with filtering. Use this to explore tasks across projects or for a specific person. For a quick overview of your own work, use get_my_briefing instead. Supports filtering by project, assignee, status, priority, overdue, blocked, stale, and date ranges.", {
9
9
  projectId: z.string().optional().describe("Filter by project ID"),
10
10
  assigneeId: z.string().optional().describe("Filter by assignee user ID"),
@@ -16,53 +16,58 @@ export function registerTaskTools(server) {
16
16
  staleDays: z.number().optional().describe("Days without update to consider stale (default 7)"),
17
17
  limit: z.number().optional().describe("Max results (default 50, max 100)"),
18
18
  }, async (params) => {
19
- const queryParams = {
20
- projectId: params.projectId,
21
- assigneeId: params.assigneeId,
22
- status: params.status,
23
- priority: params.priority,
24
- overdue: params.overdue ? "true" : undefined,
25
- blocked: params.blocked ? "true" : undefined,
26
- stale: params.stale ? "true" : undefined,
27
- staleDays: params.staleDays?.toString(),
28
- limit: params.limit?.toString(),
29
- };
30
- const res = await apiGet("/api/v1/tasks", queryParams);
31
- if (!res.ok) {
32
- return { content: [{ type: "text", text: formatError(res) }] };
19
+ try {
20
+ const result = await backend.listTasks({
21
+ projectId: params.projectId,
22
+ assigneeId: params.assigneeId,
23
+ status: params.status,
24
+ priority: params.priority,
25
+ overdue: params.overdue,
26
+ blocked: params.blocked,
27
+ stale: params.stale,
28
+ staleDays: params.staleDays,
29
+ limit: params.limit,
30
+ });
31
+ const tasks = result.data ?? [];
32
+ if (tasks.length === 0) {
33
+ return { content: [{ type: "text", text: "No tasks found matching your filters." }] };
34
+ }
35
+ return {
36
+ content: [
37
+ {
38
+ type: "text",
39
+ text: `# Tasks (${tasks.length})\n\n${tasks.map(formatTask).join("\n")}`,
40
+ },
41
+ ],
42
+ };
33
43
  }
34
- const tasks = res.data.data ?? [];
35
- if (tasks.length === 0) {
36
- return { content: [{ type: "text", text: "No tasks found matching your filters." }] };
44
+ catch (err) {
45
+ return {
46
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
47
+ };
37
48
  }
38
- return {
39
- content: [
40
- {
41
- type: "text",
42
- text: `# Tasks (${tasks.length})\n\n${tasks.map(formatTask).join("\n")}`,
43
- },
44
- ],
45
- };
46
49
  });
47
- server.tool("get_task", "Get full detail on a single task including description, subtasks, comments, and resources. Use this after finding a task via list_tasks, search, or get_my_briefing. For comprehensive context including project info in one call, prefer get_entity_context.", {
50
+ server.tool("get_task", "Get full detail on a single task including description, comments, and resources. Use this after finding a task via list_tasks, search, or get_my_briefing. For comprehensive context including project info in one call, prefer get_entity_context.", {
48
51
  taskId: z.string().describe("The task ID"),
49
- includeSubtasks: z.boolean().optional().describe("Include subtasks"),
50
52
  includeComments: z.boolean().optional().describe("Include comments"),
51
53
  includeResources: z.boolean().optional().describe("Include attached resources"),
52
54
  includeLinks: z.boolean().optional().describe("Include task links"),
53
- }, async ({ taskId, includeSubtasks, includeComments, includeResources, includeLinks }) => {
54
- const res = await apiGet(`/api/v1/tasks/${taskId}`, {
55
- includeSubtasks: includeSubtasks ? "true" : undefined,
56
- includeComments: includeComments ? "true" : undefined,
57
- includeResources: includeResources ? "true" : undefined,
58
- includeLinks: includeLinks ? "true" : undefined,
59
- });
60
- if (!res.ok) {
61
- return { content: [{ type: "text", text: formatError(res) }] };
55
+ }, async ({ taskId, includeComments, includeResources, includeLinks }) => {
56
+ try {
57
+ const data = await backend.getTask(taskId, {
58
+ includeComments,
59
+ includeResources,
60
+ includeLinks,
61
+ });
62
+ return {
63
+ content: [{ type: "text", text: formatTaskDetail(data) }],
64
+ };
65
+ }
66
+ catch (err) {
67
+ return {
68
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
69
+ };
62
70
  }
63
- return {
64
- content: [{ type: "text", text: formatTaskDetail(res.data) }],
65
- };
66
71
  });
67
72
  server.tool("create_task", "Create a new task in a project. You need a project ID — use list_projects to find one if the user hasn't specified it.", {
68
73
  name: z.string().describe("Task name"),
@@ -71,23 +76,25 @@ export function registerTaskTools(server) {
71
76
  priority: z.string().optional().describe("Priority (low, medium, high, urgent)"),
72
77
  ownerId: z.string().optional().describe("Assignee user ID"),
73
78
  dueDate: z.number().optional().describe("Due date as Unix timestamp in milliseconds"),
74
- parentTaskId: z.string().optional().describe("Parent task ID (creates a subtask)"),
75
79
  }, async (params) => {
76
- const res = await apiPost("/api/v1/tasks", {
77
- name: params.name,
78
- projectId: params.projectId,
79
- status: params.status,
80
- priority: params.priority,
81
- ownerId: params.ownerId,
82
- dueDate: params.dueDate,
83
- parentTaskId: params.parentTaskId,
84
- });
85
- if (!res.ok) {
86
- return { content: [{ type: "text", text: formatError(res) }] };
80
+ try {
81
+ const data = await backend.createTask({
82
+ name: params.name,
83
+ projectId: params.projectId,
84
+ status: params.status,
85
+ priority: params.priority,
86
+ ownerId: params.ownerId,
87
+ dueDate: params.dueDate,
88
+ });
89
+ return {
90
+ content: [{ type: "text", text: formatConfirmation("Task created", data) }],
91
+ };
92
+ }
93
+ catch (err) {
94
+ return {
95
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
96
+ };
87
97
  }
88
- return {
89
- content: [{ type: "text", text: formatConfirmation("Task created", res.data) }],
90
- };
91
98
  });
92
99
  server.tool("update_task", "Update an existing task's fields. Use get_task or list_tasks first to confirm the current state before making changes.", {
93
100
  taskId: z.string().describe("The task ID to update"),
@@ -99,18 +106,22 @@ export function registerTaskTools(server) {
99
106
  isBlocked: z.boolean().optional().describe("Whether the task is blocked"),
100
107
  blockedReason: z.string().optional().describe("Reason the task is blocked"),
101
108
  }, async ({ taskId, ...updates }) => {
102
- const body = {};
103
- for (const [key, value] of Object.entries(updates)) {
104
- if (value !== undefined)
105
- body[key] = value;
109
+ try {
110
+ const body = {};
111
+ for (const [key, value] of Object.entries(updates)) {
112
+ if (value !== undefined)
113
+ body[key] = value;
114
+ }
115
+ const data = await backend.updateTask(taskId, body);
116
+ return {
117
+ content: [{ type: "text", text: formatConfirmation("Task updated", data) }],
118
+ };
106
119
  }
107
- const res = await apiPatch(`/api/v1/tasks/${taskId}`, body);
108
- if (!res.ok) {
109
- return { content: [{ type: "text", text: formatError(res) }] };
120
+ catch (err) {
121
+ return {
122
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
123
+ };
110
124
  }
111
- return {
112
- content: [{ type: "text", text: formatConfirmation("Task updated", res.data) }],
113
- };
114
125
  });
115
126
  server.tool("link_tasks", "Create a dependency or relationship between a task and another entity. Can link task-to-task (with reciprocal links) or task-to-resource/project/action_item. For task targets, use targetTaskId. For other entities, use entityType+entityId.", {
116
127
  taskId: z.string().describe("The source task ID"),
@@ -119,37 +130,44 @@ export function registerTaskTools(server) {
119
130
  entityType: z.string().optional().describe("Target entity type: 'task', 'resource', 'project', or 'action_item'"),
120
131
  entityId: z.string().optional().describe("Target entity ID (use with entityType for non-task links)"),
121
132
  }, async ({ taskId, targetTaskId, linkType, entityType, entityId }) => {
122
- const body = { linkType };
123
- if (targetTaskId)
124
- body.targetTaskId = targetTaskId;
125
- if (entityType)
126
- body.entityType = entityType;
127
- if (entityId)
128
- body.entityId = entityId;
129
- const res = await apiPost(`/api/v1/tasks/${taskId}/links`, body);
130
- if (!res.ok) {
131
- return { content: [{ type: "text", text: formatError(res) }] };
133
+ try {
134
+ const body = { linkType };
135
+ if (targetTaskId)
136
+ body.targetTaskId = targetTaskId;
137
+ if (entityType)
138
+ body.entityType = entityType;
139
+ if (entityId)
140
+ body.entityId = entityId;
141
+ const data = await backend.linkTask(taskId, body);
142
+ const targetDesc = entityType && entityId
143
+ ? `${entityType}:${entityId}`
144
+ : targetTaskId ?? "unknown";
145
+ const text = data.alreadyExists
146
+ ? `Link already exists (id: ${data.id}).`
147
+ : `Task link created: ${taskId} ${linkType} ${targetDesc} (id: ${data.id}).`;
148
+ return { content: [{ type: "text", text }] };
149
+ }
150
+ catch (err) {
151
+ return {
152
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
153
+ };
132
154
  }
133
- const data = res.data;
134
- const targetDesc = entityType && entityId
135
- ? `${entityType}:${entityId}`
136
- : targetTaskId ?? "unknown";
137
- const text = data.alreadyExists
138
- ? `Link already exists (id: ${data.id}).`
139
- : `Task link created: ${taskId} ${linkType} ${targetDesc} (id: ${data.id}).`;
140
- return { content: [{ type: "text", text }] };
141
155
  });
142
156
  server.tool("unlink_tasks", "Remove a task link. Use get_task with includeLinks=true to find the link ID first. The reciprocal link on the target task is also removed.", {
143
157
  taskId: z.string().describe("The task ID that owns the link"),
144
158
  linkId: z.string().describe("The link ID to remove"),
145
159
  }, async ({ taskId, linkId }) => {
146
- const res = await apiDelete(`/api/v1/tasks/${taskId}/links/${linkId}`);
147
- if (!res.ok) {
148
- return { content: [{ type: "text", text: formatError(res) }] };
160
+ try {
161
+ await backend.unlinkTask(taskId, linkId);
162
+ return {
163
+ content: [{ type: "text", text: `Task link removed (id: ${linkId}).` }],
164
+ };
165
+ }
166
+ catch (err) {
167
+ return {
168
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
169
+ };
149
170
  }
150
- return {
151
- content: [{ type: "text", text: `Task link removed (id: ${linkId}).` }],
152
- };
153
171
  });
154
172
  }
155
173
  //# sourceMappingURL=tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * User Tools — list_users
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerUserTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerUserTools(server: McpServer, backend: BackendAdapter): void;
@@ -1,26 +1,30 @@
1
1
  /**
2
2
  * User Tools — list_users
3
3
  */
4
- import { apiGet, formatError } from "../client.js";
4
+ import { BackendError } from "../backend.js";
5
5
  import { formatUser } from "../utils/formatting.js";
6
- export function registerUserTools(server) {
6
+ export function registerUserTools(server, backend) {
7
7
  server.tool("list_users", "List all members of the organization. Use this to find user IDs for assigning tasks or action items, or to see who's on the team.", {}, async () => {
8
- const res = await apiGet("/api/v1/users");
9
- if (!res.ok) {
10
- return { content: [{ type: "text", text: formatError(res) }] };
8
+ try {
9
+ const result = await backend.listUsers();
10
+ const users = result.data ?? [];
11
+ if (users.length === 0) {
12
+ return { content: [{ type: "text", text: "No users found." }] };
13
+ }
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: `# Organization Members (${users.length})\n\n${users.map(formatUser).join("\n")}`,
19
+ },
20
+ ],
21
+ };
11
22
  }
12
- const users = res.data.data ?? [];
13
- if (users.length === 0) {
14
- return { content: [{ type: "text", text: "No users found." }] };
23
+ catch (err) {
24
+ return {
25
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
26
+ };
15
27
  }
16
- return {
17
- content: [
18
- {
19
- type: "text",
20
- text: `# Organization Members (${users.length})\n\n${users.map(formatUser).join("\n")}`,
21
- },
22
- ],
23
- };
24
28
  });
25
29
  }
26
30
  //# sourceMappingURL=users.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,mIAAmI,EACnI,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAsC,eAAe,CAAC,CAAC;QAE/E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC3E,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,2BAA2B,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACxF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,OAAuB;IAC1E,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,mIAAmI,EACnI,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;YAC3E,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,2BAA2B,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACxF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;aAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -108,16 +108,11 @@ export function formatTaskDetail(task) {
108
108
  if (task.description) {
109
109
  sections.push(`## Description\n${task.description}`);
110
110
  }
111
- // Subtasks
112
- const subtasks = task.subtasks;
113
- if (subtasks && subtasks.length > 0) {
114
- sections.push(`## Subtasks (${subtasks.length})\n${subtasks.map(formatTask).join("\n")}`);
115
- }
116
111
  // Comments
117
112
  const comments = task.comments;
118
113
  if (comments && comments.length > 0) {
119
114
  const formatted = comments
120
- .map((c) => `**${c.authorName ?? "Unknown"}** (${formatRelativeDate(c.createdAt)}):\n${c.content}`)
115
+ .map((c) => `**${c.authorName ?? "Unknown"}** (${formatRelativeDate(c.createdAt)}) (id: ${c._id ?? c.id}):\n${c.content}`)
121
116
  .join("\n\n---\n\n");
122
117
  sections.push(`## Comments (${comments.length})\n${formatted}`);
123
118
  }
@@ -197,11 +192,6 @@ export function formatContextEntity(ctx) {
197
192
  .join("\n\n---\n\n");
198
193
  sections.push(`## Recent Comments (${comments.length})\n${formatted}`);
199
194
  }
200
- // Subtasks from context
201
- const subtasks = ctx.subtasks;
202
- if (subtasks && subtasks.length > 0 && !entity.subtasks) {
203
- sections.push(`## Subtasks (${subtasks.length})\n${subtasks.map(formatTask).join("\n")}`);
204
- }
205
195
  // Collaborators from context (for projects)
206
196
  const collaborators = ctx.collaborators;
207
197
  if (collaborators && collaborators.length > 0 && !entity.collaborators) {