@standardbeagle/dart-query 0.3.2
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.
- package/LICENSE +21 -0
- package/README.md +427 -0
- package/TOOLS.md +2148 -0
- package/dist/api/dartClient.d.ts +123 -0
- package/dist/api/dartClient.d.ts.map +1 -0
- package/dist/api/dartClient.js +436 -0
- package/dist/api/dartClient.js.map +1 -0
- package/dist/batch/batchOperations.d.ts +14 -0
- package/dist/batch/batchOperations.d.ts.map +1 -0
- package/dist/batch/batchOperations.js +65 -0
- package/dist/batch/batchOperations.js.map +1 -0
- package/dist/cache/configCache.d.ts +20 -0
- package/dist/cache/configCache.d.ts.map +1 -0
- package/dist/cache/configCache.js +59 -0
- package/dist/cache/configCache.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1120 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/csv.d.ts +44 -0
- package/dist/parsers/csv.d.ts.map +1 -0
- package/dist/parsers/csv.js +574 -0
- package/dist/parsers/csv.js.map +1 -0
- package/dist/parsers/dartql.d.ts +104 -0
- package/dist/parsers/dartql.d.ts.map +1 -0
- package/dist/parsers/dartql.js +889 -0
- package/dist/parsers/dartql.js.map +1 -0
- package/dist/tools/add_task_comment.d.ts +3 -0
- package/dist/tools/add_task_comment.d.ts.map +1 -0
- package/dist/tools/add_task_comment.js +43 -0
- package/dist/tools/add_task_comment.js.map +1 -0
- package/dist/tools/add_time_tracking.d.ts +3 -0
- package/dist/tools/add_time_tracking.d.ts.map +1 -0
- package/dist/tools/add_time_tracking.js +52 -0
- package/dist/tools/add_time_tracking.js.map +1 -0
- package/dist/tools/attach_url.d.ts +3 -0
- package/dist/tools/attach_url.d.ts.map +1 -0
- package/dist/tools/attach_url.js +38 -0
- package/dist/tools/attach_url.js.map +1 -0
- package/dist/tools/batch_delete_tasks.d.ts +3 -0
- package/dist/tools/batch_delete_tasks.d.ts.map +1 -0
- package/dist/tools/batch_delete_tasks.js +125 -0
- package/dist/tools/batch_delete_tasks.js.map +1 -0
- package/dist/tools/batch_update_tasks.d.ts +3 -0
- package/dist/tools/batch_update_tasks.d.ts.map +1 -0
- package/dist/tools/batch_update_tasks.js +327 -0
- package/dist/tools/batch_update_tasks.js.map +1 -0
- package/dist/tools/create_doc.d.ts +3 -0
- package/dist/tools/create_doc.d.ts.map +1 -0
- package/dist/tools/create_doc.js +65 -0
- package/dist/tools/create_doc.js.map +1 -0
- package/dist/tools/create_task.d.ts +3 -0
- package/dist/tools/create_task.d.ts.map +1 -0
- package/dist/tools/create_task.js +143 -0
- package/dist/tools/create_task.js.map +1 -0
- package/dist/tools/delete_doc.d.ts +3 -0
- package/dist/tools/delete_doc.d.ts.map +1 -0
- package/dist/tools/delete_doc.js +35 -0
- package/dist/tools/delete_doc.js.map +1 -0
- package/dist/tools/delete_task.d.ts +3 -0
- package/dist/tools/delete_task.d.ts.map +1 -0
- package/dist/tools/delete_task.js +35 -0
- package/dist/tools/delete_task.js.map +1 -0
- package/dist/tools/get_batch_status.d.ts +3 -0
- package/dist/tools/get_batch_status.d.ts.map +1 -0
- package/dist/tools/get_batch_status.js +24 -0
- package/dist/tools/get_batch_status.js.map +1 -0
- package/dist/tools/get_config.d.ts +3 -0
- package/dist/tools/get_config.d.ts.map +1 -0
- package/dist/tools/get_config.js +74 -0
- package/dist/tools/get_config.js.map +1 -0
- package/dist/tools/get_dartboard.d.ts +3 -0
- package/dist/tools/get_dartboard.d.ts.map +1 -0
- package/dist/tools/get_dartboard.js +43 -0
- package/dist/tools/get_dartboard.js.map +1 -0
- package/dist/tools/get_doc.d.ts +3 -0
- package/dist/tools/get_doc.d.ts.map +1 -0
- package/dist/tools/get_doc.js +34 -0
- package/dist/tools/get_doc.js.map +1 -0
- package/dist/tools/get_folder.d.ts +3 -0
- package/dist/tools/get_folder.d.ts.map +1 -0
- package/dist/tools/get_folder.js +45 -0
- package/dist/tools/get_folder.js.map +1 -0
- package/dist/tools/get_task.d.ts +3 -0
- package/dist/tools/get_task.d.ts.map +1 -0
- package/dist/tools/get_task.js +109 -0
- package/dist/tools/get_task.js.map +1 -0
- package/dist/tools/import_tasks_csv.d.ts +3 -0
- package/dist/tools/import_tasks_csv.d.ts.map +1 -0
- package/dist/tools/import_tasks_csv.js +218 -0
- package/dist/tools/import_tasks_csv.js.map +1 -0
- package/dist/tools/info.d.ts +3 -0
- package/dist/tools/info.d.ts.map +1 -0
- package/dist/tools/info.js +474 -0
- package/dist/tools/info.js.map +1 -0
- package/dist/tools/list_comments.d.ts +3 -0
- package/dist/tools/list_comments.d.ts.map +1 -0
- package/dist/tools/list_comments.js +46 -0
- package/dist/tools/list_comments.js.map +1 -0
- package/dist/tools/list_docs.d.ts +3 -0
- package/dist/tools/list_docs.d.ts.map +1 -0
- package/dist/tools/list_docs.js +101 -0
- package/dist/tools/list_docs.js.map +1 -0
- package/dist/tools/list_tasks.d.ts +3 -0
- package/dist/tools/list_tasks.d.ts.map +1 -0
- package/dist/tools/list_tasks.js +325 -0
- package/dist/tools/list_tasks.js.map +1 -0
- package/dist/tools/move_task.d.ts +3 -0
- package/dist/tools/move_task.d.ts.map +1 -0
- package/dist/tools/move_task.js +44 -0
- package/dist/tools/move_task.js.map +1 -0
- package/dist/tools/search_tasks.d.ts +3 -0
- package/dist/tools/search_tasks.d.ts.map +1 -0
- package/dist/tools/search_tasks.js +227 -0
- package/dist/tools/search_tasks.js.map +1 -0
- package/dist/tools/update_doc.d.ts +3 -0
- package/dist/tools/update_doc.d.ts.map +1 -0
- package/dist/tools/update_doc.js +102 -0
- package/dist/tools/update_doc.js.map +1 -0
- package/dist/tools/update_task.d.ts +3 -0
- package/dist/tools/update_task.d.ts.map +1 -0
- package/dist/tools/update_task.js +241 -0
- package/dist/tools/update_task.js.map +1 -0
- package/dist/types/index.d.ts +529 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +65 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { DartClient } from '../api/dartClient.js';
|
|
2
|
+
import { configCache } from '../cache/configCache.js';
|
|
3
|
+
import { DartAPIError, ValidationError, findStatus, findDartboard, findTag, getStatusNames, getDartboardNames, getTagNames, } from '../types/index.js';
|
|
4
|
+
export async function handleListTasks(input) {
|
|
5
|
+
const safeInput = input || {};
|
|
6
|
+
const DART_TOKEN = process.env.DART_TOKEN;
|
|
7
|
+
if (!DART_TOKEN) {
|
|
8
|
+
throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
|
|
9
|
+
}
|
|
10
|
+
const client = new DartClient({ token: DART_TOKEN });
|
|
11
|
+
const limit = validateLimit(safeInput.limit);
|
|
12
|
+
const offset = validateOffset(safeInput.offset);
|
|
13
|
+
const detailLevel = validateDetailLevel(safeInput.detail_level);
|
|
14
|
+
const resolvedFilters = await resolveFilters(safeInput, client);
|
|
15
|
+
const apiRequest = {
|
|
16
|
+
...resolvedFilters,
|
|
17
|
+
limit,
|
|
18
|
+
offset,
|
|
19
|
+
detail_level: detailLevel,
|
|
20
|
+
};
|
|
21
|
+
let apiResponse;
|
|
22
|
+
try {
|
|
23
|
+
apiResponse = await client.listTasks(apiRequest);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof DartAPIError) {
|
|
27
|
+
if (error.statusCode === 401) {
|
|
28
|
+
throw new DartAPIError('Authentication failed: Invalid DART_TOKEN. Get a valid token from: https://app.dartai.com/?settings=account', 401, error.response);
|
|
29
|
+
}
|
|
30
|
+
else if (error.statusCode === 403) {
|
|
31
|
+
throw new DartAPIError('Access forbidden: Your DART_TOKEN does not have permission to list tasks.', 403, error.response);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
let tasks = apiResponse.tasks || [];
|
|
37
|
+
const totalCount = apiResponse.total || 0;
|
|
38
|
+
tasks = applyClientSideFilters(tasks, safeInput);
|
|
39
|
+
tasks = applyDetailLevel(tasks, detailLevel);
|
|
40
|
+
const returnedCount = tasks.length;
|
|
41
|
+
const hasMore = offset + limit < totalCount;
|
|
42
|
+
const nextOffset = hasMore ? offset + limit : null;
|
|
43
|
+
const filtersApplied = buildFiltersApplied(safeInput, resolvedFilters);
|
|
44
|
+
return {
|
|
45
|
+
tasks,
|
|
46
|
+
total_count: totalCount,
|
|
47
|
+
returned_count: returnedCount,
|
|
48
|
+
has_more: hasMore,
|
|
49
|
+
next_offset: nextOffset,
|
|
50
|
+
filters_applied: filtersApplied,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function validateLimit(limit) {
|
|
54
|
+
if (limit === undefined || limit === null) {
|
|
55
|
+
return 50;
|
|
56
|
+
}
|
|
57
|
+
if (typeof limit !== 'number' || !Number.isInteger(limit)) {
|
|
58
|
+
throw new ValidationError('limit must be an integer');
|
|
59
|
+
}
|
|
60
|
+
if (limit < 1) {
|
|
61
|
+
throw new ValidationError('limit must be at least 1');
|
|
62
|
+
}
|
|
63
|
+
if (limit > 500) {
|
|
64
|
+
throw new ValidationError('limit must not exceed 500 (max allowed)');
|
|
65
|
+
}
|
|
66
|
+
return limit;
|
|
67
|
+
}
|
|
68
|
+
function validateOffset(offset) {
|
|
69
|
+
if (offset === undefined || offset === null) {
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
if (typeof offset !== 'number' || !Number.isInteger(offset)) {
|
|
73
|
+
throw new ValidationError('offset must be an integer');
|
|
74
|
+
}
|
|
75
|
+
if (offset < 0) {
|
|
76
|
+
throw new ValidationError('offset must be non-negative');
|
|
77
|
+
}
|
|
78
|
+
return offset;
|
|
79
|
+
}
|
|
80
|
+
function validateDetailLevel(detailLevel) {
|
|
81
|
+
if (!detailLevel) {
|
|
82
|
+
return 'standard';
|
|
83
|
+
}
|
|
84
|
+
if (!['minimal', 'standard', 'full'].includes(detailLevel)) {
|
|
85
|
+
throw new ValidationError(`detail_level must be one of: minimal, standard, full. Got: "${detailLevel}"`);
|
|
86
|
+
}
|
|
87
|
+
return detailLevel;
|
|
88
|
+
}
|
|
89
|
+
async function resolveFilters(input, client) {
|
|
90
|
+
const needsResolution = input.assignee || input.status || input.dartboard || input.tags;
|
|
91
|
+
if (!needsResolution) {
|
|
92
|
+
return { ...input };
|
|
93
|
+
}
|
|
94
|
+
let config = configCache.get();
|
|
95
|
+
if (!config) {
|
|
96
|
+
config = await client.getConfig();
|
|
97
|
+
configCache.set({
|
|
98
|
+
...config,
|
|
99
|
+
cached_at: new Date().toISOString(),
|
|
100
|
+
cache_ttl_seconds: configCache.getTTL(),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const resolved = { ...input };
|
|
104
|
+
if (input.assignee && typeof input.assignee === 'string') {
|
|
105
|
+
const assigneeInput = input.assignee;
|
|
106
|
+
if (!config.assignees || config.assignees.length === 0) {
|
|
107
|
+
throw new ValidationError('No assignees configured in workspace. Cannot filter by assignee.', 'assignee', ['No assignees available']);
|
|
108
|
+
}
|
|
109
|
+
const assignee = config.assignees.find((a) => a.name.toLowerCase() === assigneeInput.toLowerCase() ||
|
|
110
|
+
(a.email && a.email.toLowerCase() === assigneeInput.toLowerCase()));
|
|
111
|
+
if (!assignee) {
|
|
112
|
+
throw new ValidationError(`Assignee not found: "${assigneeInput}". Use get_config to see available assignees.`, 'assignee', config.assignees.map((a) => a.email ? `${a.name} <${a.email}>` : a.name));
|
|
113
|
+
}
|
|
114
|
+
resolved.assignee = assignee.email || assignee.name;
|
|
115
|
+
}
|
|
116
|
+
if (input.status && typeof input.status === 'string') {
|
|
117
|
+
const statusInput = input.status;
|
|
118
|
+
if (!config.statuses || config.statuses.length === 0) {
|
|
119
|
+
throw new ValidationError('No statuses configured in workspace. Cannot filter by status.', 'status', ['No statuses available']);
|
|
120
|
+
}
|
|
121
|
+
const status = findStatus(config.statuses, statusInput);
|
|
122
|
+
if (!status) {
|
|
123
|
+
throw new ValidationError(`Status not found: "${statusInput}". Use get_config to see available statuses.`, 'status', getStatusNames(config.statuses));
|
|
124
|
+
}
|
|
125
|
+
resolved.status = status.dart_id;
|
|
126
|
+
}
|
|
127
|
+
if (input.dartboard && typeof input.dartboard === 'string') {
|
|
128
|
+
const dartboardInput = input.dartboard;
|
|
129
|
+
if (!config.dartboards || config.dartboards.length === 0) {
|
|
130
|
+
throw new ValidationError('No dartboards configured in workspace. Cannot filter by dartboard.', 'dartboard', ['No dartboards available']);
|
|
131
|
+
}
|
|
132
|
+
const dartboard = findDartboard(config.dartboards, dartboardInput);
|
|
133
|
+
if (!dartboard) {
|
|
134
|
+
throw new ValidationError(`Dartboard not found: "${dartboardInput}". Use get_config to see available dartboards.`, 'dartboard', getDartboardNames(config.dartboards).slice(0, 10));
|
|
135
|
+
}
|
|
136
|
+
resolved.dartboard = dartboard.dart_id;
|
|
137
|
+
}
|
|
138
|
+
if (input.tags && Array.isArray(input.tags) && input.tags.length > 0) {
|
|
139
|
+
if (!config.tags || config.tags.length === 0) {
|
|
140
|
+
throw new ValidationError('No tags configured in workspace. Cannot filter by tags.', 'tags', ['No tags available']);
|
|
141
|
+
}
|
|
142
|
+
const resolvedTags = [];
|
|
143
|
+
for (const tagInput of input.tags) {
|
|
144
|
+
if (typeof tagInput !== 'string') {
|
|
145
|
+
throw new ValidationError(`Invalid tag value: tags must be strings. Got: ${typeof tagInput}`, 'tags');
|
|
146
|
+
}
|
|
147
|
+
const tag = findTag(config.tags, tagInput);
|
|
148
|
+
if (!tag) {
|
|
149
|
+
throw new ValidationError(`Tag not found: "${tagInput}". Use get_config to see available tags.`, 'tags', getTagNames(config.tags).slice(0, 20));
|
|
150
|
+
}
|
|
151
|
+
resolvedTags.push(tag.dart_id);
|
|
152
|
+
}
|
|
153
|
+
resolved.tags = resolvedTags;
|
|
154
|
+
}
|
|
155
|
+
if (input.due_before && !isValidISO8601Date(input.due_before)) {
|
|
156
|
+
throw new ValidationError(`due_before must be in ISO8601 format (e.g., "2024-12-31T23:59:59Z"). Got: "${input.due_before}"`, 'due_before');
|
|
157
|
+
}
|
|
158
|
+
if (input.due_after && !isValidISO8601Date(input.due_after)) {
|
|
159
|
+
throw new ValidationError(`due_after must be in ISO8601 format (e.g., "2024-01-01T00:00:00Z"). Got: "${input.due_after}"`, 'due_after');
|
|
160
|
+
}
|
|
161
|
+
if (input.priority !== undefined) {
|
|
162
|
+
if (typeof input.priority !== 'number' || !Number.isInteger(input.priority)) {
|
|
163
|
+
throw new ValidationError('priority must be an integer', 'priority');
|
|
164
|
+
}
|
|
165
|
+
if (input.priority < 1 || input.priority > 5) {
|
|
166
|
+
throw new ValidationError('priority must be between 1 and 5 (1=lowest, 5=highest)', 'priority');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
validateRelationshipFilters(input);
|
|
170
|
+
return resolved;
|
|
171
|
+
}
|
|
172
|
+
function validateRelationshipFilters(input) {
|
|
173
|
+
if (input.has_parent !== undefined && typeof input.has_parent !== 'boolean') {
|
|
174
|
+
throw new ValidationError('has_parent must be a boolean', 'has_parent');
|
|
175
|
+
}
|
|
176
|
+
if (input.has_subtasks !== undefined && typeof input.has_subtasks !== 'boolean') {
|
|
177
|
+
throw new ValidationError('has_subtasks must be a boolean', 'has_subtasks');
|
|
178
|
+
}
|
|
179
|
+
if (input.has_blockers !== undefined && typeof input.has_blockers !== 'boolean') {
|
|
180
|
+
throw new ValidationError('has_blockers must be a boolean', 'has_blockers');
|
|
181
|
+
}
|
|
182
|
+
if (input.is_blocking !== undefined && typeof input.is_blocking !== 'boolean') {
|
|
183
|
+
throw new ValidationError('is_blocking must be a boolean', 'is_blocking');
|
|
184
|
+
}
|
|
185
|
+
if (input.blocked_by !== undefined) {
|
|
186
|
+
if (typeof input.blocked_by !== 'string') {
|
|
187
|
+
throw new ValidationError('blocked_by must be a string (dart_id)', 'blocked_by');
|
|
188
|
+
}
|
|
189
|
+
if (input.blocked_by.trim() === '') {
|
|
190
|
+
throw new ValidationError('blocked_by cannot be an empty string', 'blocked_by');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (input.blocking !== undefined) {
|
|
194
|
+
if (typeof input.blocking !== 'string') {
|
|
195
|
+
throw new ValidationError('blocking must be a string (dart_id)', 'blocking');
|
|
196
|
+
}
|
|
197
|
+
if (input.blocking.trim() === '') {
|
|
198
|
+
throw new ValidationError('blocking cannot be an empty string', 'blocking');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function isValidISO8601Date(dateString) {
|
|
203
|
+
const iso8601Regex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?)?$/;
|
|
204
|
+
if (!iso8601Regex.test(dateString)) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
const date = new Date(dateString);
|
|
208
|
+
return !isNaN(date.getTime());
|
|
209
|
+
}
|
|
210
|
+
function hasRelationshipFilters(input) {
|
|
211
|
+
return (input.has_parent !== undefined ||
|
|
212
|
+
input.has_subtasks !== undefined ||
|
|
213
|
+
input.has_blockers !== undefined ||
|
|
214
|
+
input.is_blocking !== undefined ||
|
|
215
|
+
input.blocked_by !== undefined ||
|
|
216
|
+
input.blocking !== undefined);
|
|
217
|
+
}
|
|
218
|
+
function applyClientSideFilters(tasks, input) {
|
|
219
|
+
if (!hasRelationshipFilters(input)) {
|
|
220
|
+
return tasks;
|
|
221
|
+
}
|
|
222
|
+
return tasks.filter((task) => {
|
|
223
|
+
if (input.has_parent !== undefined) {
|
|
224
|
+
const hasParent = task.parent_task !== undefined && task.parent_task !== null && task.parent_task !== '';
|
|
225
|
+
if (input.has_parent !== hasParent) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (input.has_subtasks !== undefined) {
|
|
230
|
+
const hasSubtasks = Array.isArray(task.subtask_ids) && task.subtask_ids.length > 0;
|
|
231
|
+
if (input.has_subtasks !== hasSubtasks) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (input.has_blockers !== undefined) {
|
|
236
|
+
const hasBlockers = Array.isArray(task.blocker_ids) && task.blocker_ids.length > 0;
|
|
237
|
+
if (input.has_blockers !== hasBlockers) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (input.is_blocking !== undefined) {
|
|
242
|
+
const isBlocking = Array.isArray(task.blocking_ids) && task.blocking_ids.length > 0;
|
|
243
|
+
if (input.is_blocking !== isBlocking) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (input.blocked_by !== undefined) {
|
|
248
|
+
const blockerIds = task.blocker_ids || [];
|
|
249
|
+
if (!blockerIds.includes(input.blocked_by)) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (input.blocking !== undefined) {
|
|
254
|
+
const blockingIds = task.blocking_ids || [];
|
|
255
|
+
if (!blockingIds.includes(input.blocking)) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
function applyDetailLevel(tasks, detailLevel) {
|
|
263
|
+
if (detailLevel === 'full') {
|
|
264
|
+
return tasks;
|
|
265
|
+
}
|
|
266
|
+
return tasks.map((task) => {
|
|
267
|
+
if (detailLevel === 'minimal') {
|
|
268
|
+
return {
|
|
269
|
+
dart_id: task.dart_id,
|
|
270
|
+
title: task.title,
|
|
271
|
+
created_at: task.created_at,
|
|
272
|
+
updated_at: task.updated_at,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
dart_id: task.dart_id,
|
|
277
|
+
title: task.title,
|
|
278
|
+
status: task.status,
|
|
279
|
+
status_id: task.status_id,
|
|
280
|
+
priority: task.priority,
|
|
281
|
+
assignees: task.assignees,
|
|
282
|
+
dartboard: task.dartboard,
|
|
283
|
+
dartboard_id: task.dartboard_id,
|
|
284
|
+
created_at: task.created_at,
|
|
285
|
+
updated_at: task.updated_at,
|
|
286
|
+
};
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
function buildFiltersApplied(input, resolved) {
|
|
290
|
+
const filtersApplied = {};
|
|
291
|
+
if (resolved.assignee)
|
|
292
|
+
filtersApplied.assignee = resolved.assignee;
|
|
293
|
+
if (resolved.status)
|
|
294
|
+
filtersApplied.status = resolved.status;
|
|
295
|
+
if (resolved.dartboard)
|
|
296
|
+
filtersApplied.dartboard = resolved.dartboard;
|
|
297
|
+
if (resolved.priority !== undefined)
|
|
298
|
+
filtersApplied.priority = resolved.priority;
|
|
299
|
+
if (resolved.tags && resolved.tags.length > 0)
|
|
300
|
+
filtersApplied.tags = resolved.tags;
|
|
301
|
+
if (resolved.due_before)
|
|
302
|
+
filtersApplied.due_before = resolved.due_before;
|
|
303
|
+
if (resolved.due_after)
|
|
304
|
+
filtersApplied.due_after = resolved.due_after;
|
|
305
|
+
if (input.has_parent !== undefined)
|
|
306
|
+
filtersApplied.has_parent = input.has_parent;
|
|
307
|
+
if (input.has_subtasks !== undefined)
|
|
308
|
+
filtersApplied.has_subtasks = input.has_subtasks;
|
|
309
|
+
if (input.has_blockers !== undefined)
|
|
310
|
+
filtersApplied.has_blockers = input.has_blockers;
|
|
311
|
+
if (input.is_blocking !== undefined)
|
|
312
|
+
filtersApplied.is_blocking = input.is_blocking;
|
|
313
|
+
if (input.blocked_by !== undefined)
|
|
314
|
+
filtersApplied.blocked_by = input.blocked_by;
|
|
315
|
+
if (input.blocking !== undefined)
|
|
316
|
+
filtersApplied.blocking = input.blocking;
|
|
317
|
+
filtersApplied.limit = input.limit !== undefined ? input.limit : 50;
|
|
318
|
+
filtersApplied.offset = input.offset !== undefined ? input.offset : 0;
|
|
319
|
+
filtersApplied.detail_level = input.detail_level || 'standard';
|
|
320
|
+
if (hasRelationshipFilters(input)) {
|
|
321
|
+
filtersApplied.client_side_filtered = true;
|
|
322
|
+
}
|
|
323
|
+
return filtersApplied;
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=list_tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_tasks.js","sourceRoot":"","sources":["../../src/tools/list_tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move_task.d.ts","sourceRoot":"","sources":["../../src/tools/move_task.ts"],"names":[],"mappings":"AASA,OAAO,EACL,aAAa,EACb,cAAc,EAKf,MAAM,mBAAmB,CAAC;AAQ3B,wBAAsB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA6DlF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DartClient } from '../api/dartClient.js';
|
|
2
|
+
import { handleGetConfig } from './get_config.js';
|
|
3
|
+
import { DartAPIError, ValidationError, findDartboard, getDartboardNames, } from '../types/index.js';
|
|
4
|
+
export async function handleMoveTask(input) {
|
|
5
|
+
const DART_TOKEN = process.env.DART_TOKEN;
|
|
6
|
+
if (!DART_TOKEN) {
|
|
7
|
+
throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
|
|
8
|
+
}
|
|
9
|
+
if (!input || typeof input !== 'object') {
|
|
10
|
+
throw new ValidationError('Input must be an object', 'input');
|
|
11
|
+
}
|
|
12
|
+
if (!input.dart_id || typeof input.dart_id !== 'string' || input.dart_id.trim() === '') {
|
|
13
|
+
throw new ValidationError('dart_id is required and must be a non-empty string', 'dart_id');
|
|
14
|
+
}
|
|
15
|
+
if (input.dartboard === undefined && input.order === undefined &&
|
|
16
|
+
input.after_id === undefined && input.before_id === undefined) {
|
|
17
|
+
throw new ValidationError('At least one of dartboard, order, after_id, or before_id must be provided', 'positioning');
|
|
18
|
+
}
|
|
19
|
+
let resolvedDartboard;
|
|
20
|
+
if (input.dartboard !== undefined) {
|
|
21
|
+
const config = await handleGetConfig({ cache_bust: false });
|
|
22
|
+
const dartboard = findDartboard(config.dartboards, input.dartboard);
|
|
23
|
+
if (!dartboard) {
|
|
24
|
+
const dartboardNames = getDartboardNames(config.dartboards);
|
|
25
|
+
throw new ValidationError(`Invalid dartboard: "${input.dartboard}" not found. Available: ${dartboardNames.slice(0, 5).join(', ')}`, 'dartboard', dartboardNames);
|
|
26
|
+
}
|
|
27
|
+
resolvedDartboard = dartboard.dart_id;
|
|
28
|
+
}
|
|
29
|
+
const client = new DartClient({ token: DART_TOKEN });
|
|
30
|
+
const task = await client.moveTask({
|
|
31
|
+
dart_id: input.dart_id.trim(),
|
|
32
|
+
dartboard: resolvedDartboard,
|
|
33
|
+
order: input.order,
|
|
34
|
+
after_id: input.after_id,
|
|
35
|
+
before_id: input.before_id,
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
dart_id: task.dart_id,
|
|
39
|
+
dartboard: task.dartboard || resolvedDartboard || '',
|
|
40
|
+
task,
|
|
41
|
+
url: `https://app.dartai.com/task/${task.dart_id}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=move_task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move_task.js","sourceRoot":"","sources":["../../src/tools/move_task.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAGL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAoB;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,4GAA4G,EAC5G,GAAG,CACJ,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvF,MAAM,IAAI,eAAe,CAAC,oDAAoD,EAAE,SAAS,CAAC,CAAC;IAC7F,CAAC;IAGD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAC1D,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,IAAI,eAAe,CACvB,2EAA2E,EAC3E,aAAa,CACd,CAAC;IACJ,CAAC;IAGD,IAAI,iBAAqC,CAAC;IAC1C,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAEpE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5D,MAAM,IAAI,eAAe,CACvB,uBAAuB,KAAK,CAAC,SAAS,2BAA2B,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACxG,WAAW,EACX,cAAc,CACf,CAAC;QACJ,CAAC;QACD,iBAAiB,GAAG,SAAS,CAAC,OAAO,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC7B,SAAS,EAAE,iBAAiB;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,iBAAiB,IAAI,EAAE;QACpD,IAAI;QACJ,GAAG,EAAE,+BAA+B,IAAI,CAAC,OAAO,EAAE;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search_tasks.d.ts","sourceRoot":"","sources":["../../src/tools/search_tasks.ts"],"names":[],"mappings":"AASA,OAAO,EAIL,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAc3B,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsE3F"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { DartClient } from '../api/dartClient.js';
|
|
2
|
+
import { configCache } from '../cache/configCache.js';
|
|
3
|
+
import { DartAPIError, ValidationError, findDartboard, getDartboardNames, } from '../types/index.js';
|
|
4
|
+
export async function handleSearchTasks(input) {
|
|
5
|
+
const safeInput = input || {};
|
|
6
|
+
if (!safeInput.query || typeof safeInput.query !== 'string') {
|
|
7
|
+
throw new ValidationError('query is required and must be a string', 'query');
|
|
8
|
+
}
|
|
9
|
+
const query = safeInput.query.trim();
|
|
10
|
+
if (query.length === 0) {
|
|
11
|
+
throw new ValidationError('query cannot be empty or whitespace-only', 'query');
|
|
12
|
+
}
|
|
13
|
+
const DART_TOKEN = process.env.DART_TOKEN;
|
|
14
|
+
if (!DART_TOKEN) {
|
|
15
|
+
throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
|
|
16
|
+
}
|
|
17
|
+
const client = new DartClient({ token: DART_TOKEN });
|
|
18
|
+
const queryParsed = parseQuery(query);
|
|
19
|
+
if (queryParsed.terms.length === 0 && queryParsed.phrases.length === 0) {
|
|
20
|
+
throw new ValidationError('query must contain at least one search term or phrase (not just exclusions)', 'query');
|
|
21
|
+
}
|
|
22
|
+
const limit = validateLimit(safeInput.limit);
|
|
23
|
+
let dartboardId;
|
|
24
|
+
if (safeInput.dartboard) {
|
|
25
|
+
dartboardId = await resolveDartboard(safeInput.dartboard, client);
|
|
26
|
+
}
|
|
27
|
+
const searchMethod = 'client_side';
|
|
28
|
+
const tasks = await fetchAllTasks(client, dartboardId, safeInput.include_completed);
|
|
29
|
+
const searchResults = performClientSideSearch(tasks, queryParsed);
|
|
30
|
+
searchResults.sort((a, b) => b.relevance_score - a.relevance_score);
|
|
31
|
+
const limitedResults = searchResults.slice(0, limit);
|
|
32
|
+
const resultsWithDetail = applyProgressiveDetail(limitedResults);
|
|
33
|
+
return {
|
|
34
|
+
tasks: resultsWithDetail,
|
|
35
|
+
total_results: searchResults.length,
|
|
36
|
+
query_parsed: queryParsed,
|
|
37
|
+
search_method: searchMethod,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function parseQuery(query) {
|
|
41
|
+
const phrases = [];
|
|
42
|
+
const exclusions = [];
|
|
43
|
+
const terms = [];
|
|
44
|
+
let remaining = query;
|
|
45
|
+
const phraseRegex = /["']([^"']+)["']/g;
|
|
46
|
+
let match;
|
|
47
|
+
while ((match = phraseRegex.exec(query)) !== null) {
|
|
48
|
+
phrases.push(match[1].toLowerCase());
|
|
49
|
+
remaining = remaining.replace(match[0], ' ');
|
|
50
|
+
}
|
|
51
|
+
const exclusionRegex = /-(\w+)/g;
|
|
52
|
+
while ((match = exclusionRegex.exec(remaining)) !== null) {
|
|
53
|
+
exclusions.push(match[1].toLowerCase());
|
|
54
|
+
remaining = remaining.replace(match[0], ' ');
|
|
55
|
+
}
|
|
56
|
+
const remainingTerms = remaining
|
|
57
|
+
.split(/\s+/)
|
|
58
|
+
.map(t => t.trim().toLowerCase())
|
|
59
|
+
.filter(t => t.length > 0);
|
|
60
|
+
terms.push(...remainingTerms);
|
|
61
|
+
return { terms, phrases, exclusions };
|
|
62
|
+
}
|
|
63
|
+
function validateLimit(limit) {
|
|
64
|
+
if (limit === undefined || limit === null) {
|
|
65
|
+
return 50;
|
|
66
|
+
}
|
|
67
|
+
if (typeof limit !== 'number' || !Number.isInteger(limit)) {
|
|
68
|
+
throw new ValidationError('limit must be an integer', 'limit');
|
|
69
|
+
}
|
|
70
|
+
if (limit < 1) {
|
|
71
|
+
throw new ValidationError('limit must be at least 1', 'limit');
|
|
72
|
+
}
|
|
73
|
+
if (limit > 500) {
|
|
74
|
+
throw new ValidationError('limit must not exceed 500 (max allowed)', 'limit');
|
|
75
|
+
}
|
|
76
|
+
return limit;
|
|
77
|
+
}
|
|
78
|
+
async function resolveDartboard(dartboard, client) {
|
|
79
|
+
if (typeof dartboard !== 'string') {
|
|
80
|
+
throw new ValidationError('dartboard must be a string', 'dartboard');
|
|
81
|
+
}
|
|
82
|
+
const dartboardInput = dartboard.trim();
|
|
83
|
+
if (dartboardInput.length === 0) {
|
|
84
|
+
throw new ValidationError('dartboard cannot be empty', 'dartboard');
|
|
85
|
+
}
|
|
86
|
+
let config = configCache.get();
|
|
87
|
+
if (!config) {
|
|
88
|
+
config = await client.getConfig();
|
|
89
|
+
configCache.set({
|
|
90
|
+
...config,
|
|
91
|
+
cached_at: new Date().toISOString(),
|
|
92
|
+
cache_ttl_seconds: configCache.getTTL(),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (!config.dartboards || config.dartboards.length === 0) {
|
|
96
|
+
throw new ValidationError('No dartboards configured in workspace. Cannot filter by dartboard.', 'dartboard', ['No dartboards available']);
|
|
97
|
+
}
|
|
98
|
+
const matchedDartboard = findDartboard(config.dartboards, dartboardInput);
|
|
99
|
+
if (!matchedDartboard) {
|
|
100
|
+
throw new ValidationError(`Dartboard not found: "${dartboardInput}". Use get_config to see available dartboards.`, 'dartboard', getDartboardNames(config.dartboards).slice(0, 10));
|
|
101
|
+
}
|
|
102
|
+
return matchedDartboard.dart_id;
|
|
103
|
+
}
|
|
104
|
+
async function fetchAllTasks(client, dartboardId, includeCompleted) {
|
|
105
|
+
const allTasks = [];
|
|
106
|
+
const fetchLimit = 500;
|
|
107
|
+
const maxTotalTasks = 10000;
|
|
108
|
+
let offset = 0;
|
|
109
|
+
let hasMore = true;
|
|
110
|
+
while (hasMore && allTasks.length < maxTotalTasks) {
|
|
111
|
+
const response = await client.listTasks({
|
|
112
|
+
dartboard: dartboardId,
|
|
113
|
+
limit: fetchLimit,
|
|
114
|
+
offset,
|
|
115
|
+
detail_level: 'full',
|
|
116
|
+
});
|
|
117
|
+
allTasks.push(...response.tasks);
|
|
118
|
+
hasMore = offset + fetchLimit < response.total;
|
|
119
|
+
offset += fetchLimit;
|
|
120
|
+
if (allTasks.length >= maxTotalTasks) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!includeCompleted) {
|
|
125
|
+
return allTasks.filter(task => !task.completed_at);
|
|
126
|
+
}
|
|
127
|
+
return allTasks;
|
|
128
|
+
}
|
|
129
|
+
function performClientSideSearch(tasks, queryParsed) {
|
|
130
|
+
const results = [];
|
|
131
|
+
for (const task of tasks) {
|
|
132
|
+
const relevanceScore = calculateRelevance(task, queryParsed);
|
|
133
|
+
if (relevanceScore > 0) {
|
|
134
|
+
results.push({
|
|
135
|
+
...task,
|
|
136
|
+
relevance_score: relevanceScore,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return results;
|
|
141
|
+
}
|
|
142
|
+
function calculateRelevance(task, queryParsed) {
|
|
143
|
+
const title = (task.title || '').toLowerCase();
|
|
144
|
+
const description = (task.description || '').toLowerCase();
|
|
145
|
+
for (const exclusion of queryParsed.exclusions) {
|
|
146
|
+
if (title.includes(exclusion) || description.includes(exclusion)) {
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
let score = 0;
|
|
151
|
+
let maxScore = 0;
|
|
152
|
+
for (const phrase of queryParsed.phrases) {
|
|
153
|
+
maxScore += 10;
|
|
154
|
+
maxScore += 7;
|
|
155
|
+
if (title.includes(phrase)) {
|
|
156
|
+
score += 10;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
const titleWords = title.split(/\s+/);
|
|
160
|
+
const phraseWords = phrase.split(/\s+/);
|
|
161
|
+
const allWordsPresent = phraseWords.every(word => titleWords.includes(word));
|
|
162
|
+
if (allWordsPresent) {
|
|
163
|
+
score += 5;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (description.includes(phrase)) {
|
|
167
|
+
score += 7;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
const descWords = description.split(/\s+/);
|
|
171
|
+
const phraseWords = phrase.split(/\s+/);
|
|
172
|
+
const allWordsPresent = phraseWords.every(word => descWords.includes(word));
|
|
173
|
+
if (allWordsPresent) {
|
|
174
|
+
score += 3;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (const term of queryParsed.terms) {
|
|
179
|
+
maxScore += 2;
|
|
180
|
+
maxScore += 1;
|
|
181
|
+
if (title.includes(term)) {
|
|
182
|
+
score += 2;
|
|
183
|
+
}
|
|
184
|
+
if (description.includes(term)) {
|
|
185
|
+
score += 1;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (maxScore === 0) {
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
const normalizedScore = Math.min(score / maxScore, 1);
|
|
192
|
+
return normalizedScore;
|
|
193
|
+
}
|
|
194
|
+
function applyProgressiveDetail(results) {
|
|
195
|
+
return results.map(result => {
|
|
196
|
+
const score = result.relevance_score;
|
|
197
|
+
if (score > 0.7) {
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
else if (score >= 0.3) {
|
|
201
|
+
return {
|
|
202
|
+
dart_id: result.dart_id,
|
|
203
|
+
title: result.title,
|
|
204
|
+
description: result.description,
|
|
205
|
+
status: result.status,
|
|
206
|
+
status_id: result.status_id,
|
|
207
|
+
priority: result.priority,
|
|
208
|
+
assignees: result.assignees,
|
|
209
|
+
dartboard: result.dartboard,
|
|
210
|
+
dartboard_id: result.dartboard_id,
|
|
211
|
+
created_at: result.created_at,
|
|
212
|
+
updated_at: result.updated_at,
|
|
213
|
+
relevance_score: result.relevance_score,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
return {
|
|
218
|
+
dart_id: result.dart_id,
|
|
219
|
+
title: result.title,
|
|
220
|
+
created_at: result.created_at,
|
|
221
|
+
updated_at: result.updated_at,
|
|
222
|
+
relevance_score: result.relevance_score,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=search_tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search_tasks.js","sourceRoot":"","sources":["../../src/tools/search_tasks.ts"],"names":[],"mappings":"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"}
|