@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.
Files changed (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +427 -0
  3. package/TOOLS.md +2148 -0
  4. package/dist/api/dartClient.d.ts +123 -0
  5. package/dist/api/dartClient.d.ts.map +1 -0
  6. package/dist/api/dartClient.js +436 -0
  7. package/dist/api/dartClient.js.map +1 -0
  8. package/dist/batch/batchOperations.d.ts +14 -0
  9. package/dist/batch/batchOperations.d.ts.map +1 -0
  10. package/dist/batch/batchOperations.js +65 -0
  11. package/dist/batch/batchOperations.js.map +1 -0
  12. package/dist/cache/configCache.d.ts +20 -0
  13. package/dist/cache/configCache.d.ts.map +1 -0
  14. package/dist/cache/configCache.js +59 -0
  15. package/dist/cache/configCache.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +1120 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/parsers/csv.d.ts +44 -0
  21. package/dist/parsers/csv.d.ts.map +1 -0
  22. package/dist/parsers/csv.js +574 -0
  23. package/dist/parsers/csv.js.map +1 -0
  24. package/dist/parsers/dartql.d.ts +104 -0
  25. package/dist/parsers/dartql.d.ts.map +1 -0
  26. package/dist/parsers/dartql.js +889 -0
  27. package/dist/parsers/dartql.js.map +1 -0
  28. package/dist/tools/add_task_comment.d.ts +3 -0
  29. package/dist/tools/add_task_comment.d.ts.map +1 -0
  30. package/dist/tools/add_task_comment.js +43 -0
  31. package/dist/tools/add_task_comment.js.map +1 -0
  32. package/dist/tools/add_time_tracking.d.ts +3 -0
  33. package/dist/tools/add_time_tracking.d.ts.map +1 -0
  34. package/dist/tools/add_time_tracking.js +52 -0
  35. package/dist/tools/add_time_tracking.js.map +1 -0
  36. package/dist/tools/attach_url.d.ts +3 -0
  37. package/dist/tools/attach_url.d.ts.map +1 -0
  38. package/dist/tools/attach_url.js +38 -0
  39. package/dist/tools/attach_url.js.map +1 -0
  40. package/dist/tools/batch_delete_tasks.d.ts +3 -0
  41. package/dist/tools/batch_delete_tasks.d.ts.map +1 -0
  42. package/dist/tools/batch_delete_tasks.js +125 -0
  43. package/dist/tools/batch_delete_tasks.js.map +1 -0
  44. package/dist/tools/batch_update_tasks.d.ts +3 -0
  45. package/dist/tools/batch_update_tasks.d.ts.map +1 -0
  46. package/dist/tools/batch_update_tasks.js +327 -0
  47. package/dist/tools/batch_update_tasks.js.map +1 -0
  48. package/dist/tools/create_doc.d.ts +3 -0
  49. package/dist/tools/create_doc.d.ts.map +1 -0
  50. package/dist/tools/create_doc.js +65 -0
  51. package/dist/tools/create_doc.js.map +1 -0
  52. package/dist/tools/create_task.d.ts +3 -0
  53. package/dist/tools/create_task.d.ts.map +1 -0
  54. package/dist/tools/create_task.js +143 -0
  55. package/dist/tools/create_task.js.map +1 -0
  56. package/dist/tools/delete_doc.d.ts +3 -0
  57. package/dist/tools/delete_doc.d.ts.map +1 -0
  58. package/dist/tools/delete_doc.js +35 -0
  59. package/dist/tools/delete_doc.js.map +1 -0
  60. package/dist/tools/delete_task.d.ts +3 -0
  61. package/dist/tools/delete_task.d.ts.map +1 -0
  62. package/dist/tools/delete_task.js +35 -0
  63. package/dist/tools/delete_task.js.map +1 -0
  64. package/dist/tools/get_batch_status.d.ts +3 -0
  65. package/dist/tools/get_batch_status.d.ts.map +1 -0
  66. package/dist/tools/get_batch_status.js +24 -0
  67. package/dist/tools/get_batch_status.js.map +1 -0
  68. package/dist/tools/get_config.d.ts +3 -0
  69. package/dist/tools/get_config.d.ts.map +1 -0
  70. package/dist/tools/get_config.js +74 -0
  71. package/dist/tools/get_config.js.map +1 -0
  72. package/dist/tools/get_dartboard.d.ts +3 -0
  73. package/dist/tools/get_dartboard.d.ts.map +1 -0
  74. package/dist/tools/get_dartboard.js +43 -0
  75. package/dist/tools/get_dartboard.js.map +1 -0
  76. package/dist/tools/get_doc.d.ts +3 -0
  77. package/dist/tools/get_doc.d.ts.map +1 -0
  78. package/dist/tools/get_doc.js +34 -0
  79. package/dist/tools/get_doc.js.map +1 -0
  80. package/dist/tools/get_folder.d.ts +3 -0
  81. package/dist/tools/get_folder.d.ts.map +1 -0
  82. package/dist/tools/get_folder.js +45 -0
  83. package/dist/tools/get_folder.js.map +1 -0
  84. package/dist/tools/get_task.d.ts +3 -0
  85. package/dist/tools/get_task.d.ts.map +1 -0
  86. package/dist/tools/get_task.js +109 -0
  87. package/dist/tools/get_task.js.map +1 -0
  88. package/dist/tools/import_tasks_csv.d.ts +3 -0
  89. package/dist/tools/import_tasks_csv.d.ts.map +1 -0
  90. package/dist/tools/import_tasks_csv.js +218 -0
  91. package/dist/tools/import_tasks_csv.js.map +1 -0
  92. package/dist/tools/info.d.ts +3 -0
  93. package/dist/tools/info.d.ts.map +1 -0
  94. package/dist/tools/info.js +474 -0
  95. package/dist/tools/info.js.map +1 -0
  96. package/dist/tools/list_comments.d.ts +3 -0
  97. package/dist/tools/list_comments.d.ts.map +1 -0
  98. package/dist/tools/list_comments.js +46 -0
  99. package/dist/tools/list_comments.js.map +1 -0
  100. package/dist/tools/list_docs.d.ts +3 -0
  101. package/dist/tools/list_docs.d.ts.map +1 -0
  102. package/dist/tools/list_docs.js +101 -0
  103. package/dist/tools/list_docs.js.map +1 -0
  104. package/dist/tools/list_tasks.d.ts +3 -0
  105. package/dist/tools/list_tasks.d.ts.map +1 -0
  106. package/dist/tools/list_tasks.js +325 -0
  107. package/dist/tools/list_tasks.js.map +1 -0
  108. package/dist/tools/move_task.d.ts +3 -0
  109. package/dist/tools/move_task.d.ts.map +1 -0
  110. package/dist/tools/move_task.js +44 -0
  111. package/dist/tools/move_task.js.map +1 -0
  112. package/dist/tools/search_tasks.d.ts +3 -0
  113. package/dist/tools/search_tasks.d.ts.map +1 -0
  114. package/dist/tools/search_tasks.js +227 -0
  115. package/dist/tools/search_tasks.js.map +1 -0
  116. package/dist/tools/update_doc.d.ts +3 -0
  117. package/dist/tools/update_doc.d.ts.map +1 -0
  118. package/dist/tools/update_doc.js +102 -0
  119. package/dist/tools/update_doc.js.map +1 -0
  120. package/dist/tools/update_task.d.ts +3 -0
  121. package/dist/tools/update_task.d.ts.map +1 -0
  122. package/dist/tools/update_task.js +241 -0
  123. package/dist/tools/update_task.js.map +1 -0
  124. package/dist/types/index.d.ts +529 -0
  125. package/dist/types/index.d.ts.map +1 -0
  126. package/dist/types/index.js +65 -0
  127. package/dist/types/index.js.map +1 -0
  128. package/package.json +72 -0
@@ -0,0 +1,327 @@
1
+ import pLimit from 'p-limit';
2
+ import { DartClient } from '../api/dartClient.js';
3
+ import { handleGetConfig } from './get_config.js';
4
+ import { parseDartQLToAST, convertToFilters } from '../parsers/dartql.js';
5
+ import { DartAPIError, ValidationError, findDartboard, findStatus, findTag, getDartboardNames, getStatusNames, getTagNames, } from '../types/index.js';
6
+ import { createBatchOperation, completeBatchOperation, addSuccessfulItem, addFailedItem, } from '../batch/batchOperations.js';
7
+ export async function handleBatchUpdateTasks(input) {
8
+ const DART_TOKEN = process.env.DART_TOKEN;
9
+ if (!DART_TOKEN) {
10
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
11
+ }
12
+ if (!input || typeof input !== 'object') {
13
+ throw new ValidationError('input is required and must be an object', 'input');
14
+ }
15
+ if (!input.selector || typeof input.selector !== 'string' || input.selector.trim() === '') {
16
+ throw new ValidationError('selector is required and must be a non-empty DartQL WHERE clause (e.g., "status = \'Todo\' AND priority >= 3")', 'selector');
17
+ }
18
+ if (!input.updates || typeof input.updates !== 'object' || Object.keys(input.updates).length === 0) {
19
+ throw new ValidationError('updates is required and must be a non-empty object with at least one field to update', 'updates');
20
+ }
21
+ const dryRun = input.dry_run !== false;
22
+ let concurrency = input.concurrency ?? 5;
23
+ if (typeof concurrency !== 'number' || !Number.isInteger(concurrency)) {
24
+ throw new ValidationError('concurrency must be an integer', 'concurrency');
25
+ }
26
+ if (concurrency < 1 || concurrency > 20) {
27
+ throw new ValidationError('concurrency must be between 1 and 20', 'concurrency');
28
+ }
29
+ const parseResult = parseDartQLToAST(input.selector);
30
+ if (parseResult.errors.length > 0) {
31
+ throw new ValidationError(`DartQL parse errors: ${parseResult.errors.join('; ')}`, 'selector', parseResult.errors);
32
+ }
33
+ const filterResult = convertToFilters(parseResult.ast);
34
+ if (filterResult.errors.length > 0) {
35
+ throw new ValidationError(`DartQL conversion errors: ${filterResult.errors.join('; ')}`, 'selector', filterResult.errors);
36
+ }
37
+ let config;
38
+ try {
39
+ config = await handleGetConfig({ cache_bust: false });
40
+ }
41
+ catch (error) {
42
+ if (error instanceof DartAPIError) {
43
+ throw new DartAPIError(`Failed to retrieve workspace config for validation: ${error.message}`, error.statusCode, error.response);
44
+ }
45
+ throw error;
46
+ }
47
+ const validatedUpdates = await validateUpdates(input.updates, config);
48
+ const client = new DartClient({ token: DART_TOKEN });
49
+ let matchingTasks = [];
50
+ try {
51
+ const apiFilters = filterResult.apiFilters;
52
+ let offset = 0;
53
+ const limit = 500;
54
+ let hasMore = true;
55
+ while (hasMore) {
56
+ const response = await client.listTasks({
57
+ ...apiFilters,
58
+ limit,
59
+ offset,
60
+ });
61
+ matchingTasks.push(...(response.tasks || []));
62
+ hasMore = offset + limit < (response.total || 0);
63
+ offset += limit;
64
+ if (matchingTasks.length >= 10000) {
65
+ throw new ValidationError('Selector matches too many tasks (>10,000). Please narrow your selector.', 'selector');
66
+ }
67
+ }
68
+ if (filterResult.requiresClientSide && filterResult.clientFilter) {
69
+ matchingTasks = matchingTasks.filter(filterResult.clientFilter);
70
+ }
71
+ }
72
+ catch (error) {
73
+ if (error instanceof DartAPIError) {
74
+ throw new DartAPIError(`Failed to fetch matching tasks: ${error.message}`, error.statusCode, error.response);
75
+ }
76
+ throw error;
77
+ }
78
+ const selectorMatched = matchingTasks.length;
79
+ if (dryRun) {
80
+ const previewTasks = matchingTasks.slice(0, 10).map((task) => ({
81
+ dart_id: task.dart_id,
82
+ title: task.title,
83
+ current_values: extractCurrentValues(task, Object.keys(validatedUpdates)),
84
+ new_values: validatedUpdates,
85
+ }));
86
+ return {
87
+ batch_operation_id: 'dry_run',
88
+ selector_matched: selectorMatched,
89
+ dry_run: true,
90
+ preview_tasks: previewTasks,
91
+ successful_updates: 0,
92
+ failed_updates: 0,
93
+ successful_dart_ids: [],
94
+ failed_items: [],
95
+ execution_time_ms: 0,
96
+ };
97
+ }
98
+ const batchOperation = createBatchOperation('update', selectorMatched);
99
+ const batchOperationId = batchOperation.batch_operation_id;
100
+ const startTime = Date.now();
101
+ const limit = pLimit(concurrency);
102
+ const successfulDartIds = [];
103
+ const failedItems = [];
104
+ const updatePromises = matchingTasks.map((task) => limit(async () => {
105
+ try {
106
+ await client.updateTask({
107
+ dart_id: task.dart_id,
108
+ updates: validatedUpdates,
109
+ });
110
+ successfulDartIds.push(task.dart_id);
111
+ addSuccessfulItem(batchOperationId, task.dart_id);
112
+ }
113
+ catch (error) {
114
+ const errorMessage = error instanceof Error ? error.message : String(error);
115
+ const reason = error instanceof DartAPIError
116
+ ? `HTTP ${error.statusCode}: ${error.message}`
117
+ : errorMessage;
118
+ failedItems.push({
119
+ dart_id: task.dart_id,
120
+ error: errorMessage,
121
+ reason,
122
+ });
123
+ addFailedItem(batchOperationId, {
124
+ id: task.dart_id,
125
+ error: reason,
126
+ });
127
+ }
128
+ }));
129
+ await Promise.all(updatePromises);
130
+ const executionTimeMs = Date.now() - startTime;
131
+ const status = failedItems.length === 0 ? 'completed' : failedItems.length === selectorMatched ? 'failed' : 'completed';
132
+ completeBatchOperation(batchOperationId, status);
133
+ return {
134
+ batch_operation_id: batchOperationId,
135
+ selector_matched: selectorMatched,
136
+ dry_run: false,
137
+ successful_updates: successfulDartIds.length,
138
+ failed_updates: failedItems.length,
139
+ successful_dart_ids: successfulDartIds,
140
+ failed_items: failedItems,
141
+ execution_time_ms: executionTimeMs,
142
+ };
143
+ }
144
+ async function validateUpdates(updates, config) {
145
+ const validated = {};
146
+ if (updates.title !== undefined) {
147
+ if (typeof updates.title !== 'string' || updates.title.trim() === '') {
148
+ throw new ValidationError('title must be a non-empty string', 'title');
149
+ }
150
+ if (updates.title.length > 500) {
151
+ throw new ValidationError(`title exceeds maximum length of 500 characters (current: ${updates.title.length})`, 'title');
152
+ }
153
+ validated.title = updates.title;
154
+ }
155
+ if (updates.description !== undefined) {
156
+ validated.description = updates.description;
157
+ }
158
+ if (updates.dartboard !== undefined) {
159
+ if (!config.dartboards || config.dartboards.length === 0) {
160
+ throw new ValidationError('No dartboards found in workspace configuration. Cannot update dartboard.', 'dartboard');
161
+ }
162
+ const dartboard = findDartboard(config.dartboards, updates.dartboard);
163
+ if (!dartboard) {
164
+ const dartboardNames = getDartboardNames(config.dartboards);
165
+ const availableDartboards = dartboardNames.slice(0, 10).join(', ') +
166
+ (dartboardNames.length > 10 ? `, ... (${dartboardNames.length - 10} more)` : '');
167
+ throw new ValidationError(`Invalid dartboard: "${updates.dartboard}" not found in workspace. Available dartboards: ${availableDartboards}`, 'dartboard', dartboardNames);
168
+ }
169
+ validated.dartboard = dartboard.dart_id;
170
+ }
171
+ if (updates.status !== undefined) {
172
+ if (!config.statuses || config.statuses.length === 0) {
173
+ throw new ValidationError('No statuses found in workspace configuration. Cannot update status.', 'status');
174
+ }
175
+ const status = findStatus(config.statuses, updates.status);
176
+ if (!status) {
177
+ const statusNames = getStatusNames(config.statuses);
178
+ const availableStatuses = statusNames.join(', ');
179
+ throw new ValidationError(`Invalid status: "${updates.status}" not found in workspace. Available statuses: ${availableStatuses}`, 'status', statusNames);
180
+ }
181
+ validated.status = status.dart_id;
182
+ }
183
+ if (updates.priority !== undefined) {
184
+ if (!config.priorities || config.priorities.length === 0) {
185
+ throw new ValidationError('No priorities found in workspace configuration. Cannot update priority.', 'priority');
186
+ }
187
+ if (typeof updates.priority !== 'number' || updates.priority < 1 || updates.priority > 5) {
188
+ throw new ValidationError(`Invalid priority: ${updates.priority}. Valid range: 1-5 (1=lowest, 5=highest)`, 'priority', ['1', '2', '3', '4', '5']);
189
+ }
190
+ validated.priority = updates.priority;
191
+ }
192
+ if (updates.size !== undefined) {
193
+ if (!config.sizes || config.sizes.length === 0) {
194
+ throw new ValidationError('No sizes found in workspace configuration. Cannot update size.', 'size');
195
+ }
196
+ if (typeof updates.size !== 'number' || updates.size < 1 || updates.size > 5) {
197
+ throw new ValidationError(`Invalid size: ${updates.size}. Valid range: 1-5 (1=XS, 5=XL)`, 'size', ['1', '2', '3', '4', '5']);
198
+ }
199
+ validated.size = updates.size;
200
+ }
201
+ if (updates.assignees !== undefined) {
202
+ if (!Array.isArray(updates.assignees)) {
203
+ throw new ValidationError('assignees must be an array of assignee dart_ids, names, or emails', 'assignees');
204
+ }
205
+ if (updates.assignees.length > 0) {
206
+ if (!config.assignees || config.assignees.length === 0) {
207
+ throw new ValidationError('No assignees found in workspace configuration. Cannot update assignees.', 'assignees');
208
+ }
209
+ const resolvedAssignees = [];
210
+ for (const assigneeIdOrName of updates.assignees) {
211
+ if (typeof assigneeIdOrName !== 'string') {
212
+ throw new ValidationError(`assignees array must contain only strings, found: ${typeof assigneeIdOrName}`, 'assignees');
213
+ }
214
+ const assignee = config.assignees.find((a) => a.email === assigneeIdOrName ||
215
+ a.name === assigneeIdOrName);
216
+ if (!assignee) {
217
+ const availableAssignees = config.assignees
218
+ .map((a) => a.email ? `${a.name} <${a.email}>` : a.name)
219
+ .join(', ');
220
+ throw new ValidationError(`Invalid assignee: "${assigneeIdOrName}" not found in workspace. Available assignees: ${availableAssignees}`, 'assignees', config.assignees.map((a) => a.email || a.name));
221
+ }
222
+ resolvedAssignees.push(assignee.email || assignee.name);
223
+ }
224
+ validated.assignees = resolvedAssignees;
225
+ }
226
+ else {
227
+ validated.assignees = [];
228
+ }
229
+ }
230
+ if (updates.tags !== undefined) {
231
+ if (!Array.isArray(updates.tags)) {
232
+ throw new ValidationError('tags must be an array of tag dart_ids or names', 'tags');
233
+ }
234
+ if (updates.tags.length > 0) {
235
+ if (!config.tags || config.tags.length === 0) {
236
+ throw new ValidationError('No tags found in workspace configuration. Cannot update tags.', 'tags');
237
+ }
238
+ const resolvedTags = [];
239
+ for (const tagInput of updates.tags) {
240
+ if (typeof tagInput !== 'string') {
241
+ throw new ValidationError(`tags array must contain only strings, found: ${typeof tagInput}`, 'tags');
242
+ }
243
+ const tag = findTag(config.tags, tagInput);
244
+ if (!tag) {
245
+ const tagNames = getTagNames(config.tags);
246
+ const availableTags = tagNames.slice(0, 20).join(', ') +
247
+ (tagNames.length > 20 ? `, ... (${tagNames.length - 20} more)` : '');
248
+ throw new ValidationError(`Invalid tag: "${tagInput}" not found in workspace. Available tags: ${availableTags}`, 'tags', tagNames);
249
+ }
250
+ resolvedTags.push(tag.dart_id);
251
+ }
252
+ validated.tags = resolvedTags;
253
+ }
254
+ else {
255
+ validated.tags = [];
256
+ }
257
+ }
258
+ if (updates.due_at !== undefined) {
259
+ const dueDate = new Date(updates.due_at);
260
+ if (isNaN(dueDate.getTime())) {
261
+ throw new ValidationError(`Invalid due_at date format: "${updates.due_at}". Expected ISO8601 format (e.g., "2026-01-17T10:00:00Z")`, 'due_at');
262
+ }
263
+ validated.due_at = updates.due_at;
264
+ }
265
+ if (updates.start_at !== undefined) {
266
+ const startDate = new Date(updates.start_at);
267
+ if (isNaN(startDate.getTime())) {
268
+ throw new ValidationError(`Invalid start_at date format: "${updates.start_at}". Expected ISO8601 format (e.g., "2026-01-17T10:00:00Z")`, 'start_at');
269
+ }
270
+ validated.start_at = updates.start_at;
271
+ }
272
+ if (updates.parent_task !== undefined) {
273
+ validated.parent_task = updates.parent_task;
274
+ }
275
+ const validateRelationshipArray = (fieldName, value) => {
276
+ if (value === undefined) {
277
+ return undefined;
278
+ }
279
+ if (!Array.isArray(value)) {
280
+ throw new ValidationError(`${fieldName} must be an array of task dart_ids`, fieldName);
281
+ }
282
+ if (value.length === 0) {
283
+ return [];
284
+ }
285
+ for (let i = 0; i < value.length; i++) {
286
+ const item = value[i];
287
+ if (typeof item !== 'string') {
288
+ throw new ValidationError(`${fieldName}[${i}] must be a string, found: ${typeof item}`, fieldName);
289
+ }
290
+ if (item.trim() === '') {
291
+ throw new ValidationError(`${fieldName}[${i}] must be a non-empty string`, fieldName);
292
+ }
293
+ }
294
+ return value;
295
+ };
296
+ const subtaskIds = validateRelationshipArray('subtask_ids', updates.subtask_ids);
297
+ if (subtaskIds !== undefined) {
298
+ validated.subtask_ids = subtaskIds;
299
+ }
300
+ const blockerIds = validateRelationshipArray('blocker_ids', updates.blocker_ids);
301
+ if (blockerIds !== undefined) {
302
+ validated.blocker_ids = blockerIds;
303
+ }
304
+ const blockingIds = validateRelationshipArray('blocking_ids', updates.blocking_ids);
305
+ if (blockingIds !== undefined) {
306
+ validated.blocking_ids = blockingIds;
307
+ }
308
+ const duplicateIds = validateRelationshipArray('duplicate_ids', updates.duplicate_ids);
309
+ if (duplicateIds !== undefined) {
310
+ validated.duplicate_ids = duplicateIds;
311
+ }
312
+ const relatedIds = validateRelationshipArray('related_ids', updates.related_ids);
313
+ if (relatedIds !== undefined) {
314
+ validated.related_ids = relatedIds;
315
+ }
316
+ return validated;
317
+ }
318
+ function extractCurrentValues(task, updatedFields) {
319
+ const currentValues = {};
320
+ for (const field of updatedFields) {
321
+ if (field in task) {
322
+ currentValues[field] = task[field];
323
+ }
324
+ }
325
+ return currentValues;
326
+ }
327
+ //# sourceMappingURL=batch_update_tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch_update_tasks.js","sourceRoot":"","sources":["../../src/tools/batch_update_tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CreateDocInput, CreateDocOutput } from '../types/index.js';
2
+ export declare function handleCreateDoc(input: CreateDocInput): Promise<CreateDocOutput>;
3
+ //# sourceMappingURL=create_doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_doc.d.ts","sourceRoot":"","sources":["../../src/tools/create_doc.ts"],"names":[],"mappings":"AASA,OAAO,EACL,cAAc,EACd,eAAe,EAMhB,MAAM,mBAAmB,CAAC;AAiB3B,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA+GrF"}
@@ -0,0 +1,65 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { handleGetConfig } from './get_config.js';
3
+ import { DartAPIError, ValidationError, findFolder, getFolderNames, } from '../types/index.js';
4
+ export async function handleCreateDoc(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.title || typeof input.title !== 'string' || input.title.trim() === '') {
10
+ throw new ValidationError('title is required and must be a non-empty string', 'title');
11
+ }
12
+ if (!input.text || typeof input.text !== 'string') {
13
+ throw new ValidationError('text is required and must be a string (markdown supported)', 'text');
14
+ }
15
+ let resolvedFolder;
16
+ if (input.folder) {
17
+ let config;
18
+ try {
19
+ config = await handleGetConfig({ cache_bust: false });
20
+ }
21
+ catch (error) {
22
+ if (error instanceof DartAPIError) {
23
+ throw new DartAPIError(`Failed to retrieve workspace config for folder validation: ${error.message}`, error.statusCode, error.response);
24
+ }
25
+ throw error;
26
+ }
27
+ if (!config.folders || config.folders.length === 0) {
28
+ throw new ValidationError('No folders found in workspace configuration. Create a folder first in Dart AI.', 'folder');
29
+ }
30
+ const folder = findFolder(config.folders, input.folder);
31
+ if (!folder) {
32
+ const folderNames = getFolderNames(config.folders);
33
+ const availableFolders = folderNames.join(', ');
34
+ throw new ValidationError(`Invalid folder: "${input.folder}" not found in workspace. Available folders: ${availableFolders}`, 'folder', folderNames);
35
+ }
36
+ resolvedFolder = folder.dart_id;
37
+ }
38
+ const client = new DartClient({ token: DART_TOKEN });
39
+ const docInput = {
40
+ title: input.title,
41
+ text: input.text,
42
+ };
43
+ if (resolvedFolder) {
44
+ docInput.folder = resolvedFolder;
45
+ }
46
+ let createdDoc;
47
+ try {
48
+ createdDoc = await client.createDoc(docInput);
49
+ }
50
+ catch (error) {
51
+ if (error instanceof DartAPIError) {
52
+ throw new DartAPIError(`Failed to create document: ${error.message}`, error.statusCode, error.response);
53
+ }
54
+ throw error;
55
+ }
56
+ const deepLinkUrl = `https://app.dartai.com/doc/${createdDoc.doc_id}`;
57
+ return {
58
+ doc_id: createdDoc.doc_id,
59
+ title: createdDoc.title,
60
+ url: deepLinkUrl,
61
+ created_at: createdDoc.created_at,
62
+ all_fields: createdDoc,
63
+ };
64
+ }
65
+ //# sourceMappingURL=create_doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_doc.js","sourceRoot":"","sources":["../../src/tools/create_doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CreateTaskInput, CreateTaskOutput } from '../types/index.js';
2
+ export declare function handleCreateTask(input: CreateTaskInput): Promise<CreateTaskOutput>;
3
+ //# sourceMappingURL=create_task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_task.d.ts","sourceRoot":"","sources":["../../src/tools/create_task.ts"],"names":[],"mappings":"AASA,OAAO,EACL,eAAe,EACf,gBAAgB,EAUjB,MAAM,mBAAmB,CAAC;AAuB3B,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6QxF"}
@@ -0,0 +1,143 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { handleGetConfig } from './get_config.js';
3
+ import { DartAPIError, ValidationError, findDartboard, findTag, findStatus, getDartboardNames, getTagNames, getStatusNames, } from '../types/index.js';
4
+ export async function handleCreateTask(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.title || typeof input.title !== 'string' || input.title.trim() === '') {
10
+ throw new ValidationError('title is required and must be a non-empty string', 'title');
11
+ }
12
+ if (input.title.length > 500) {
13
+ throw new ValidationError(`title exceeds maximum length of 500 characters (current: ${input.title.length})`, 'title');
14
+ }
15
+ if (!input.dartboard || typeof input.dartboard !== 'string' || input.dartboard.trim() === '') {
16
+ throw new ValidationError('dartboard is required and must be a non-empty string (dartboard name)', 'dartboard');
17
+ }
18
+ let config;
19
+ try {
20
+ config = await handleGetConfig({ cache_bust: false });
21
+ }
22
+ catch (error) {
23
+ if (error instanceof DartAPIError) {
24
+ throw new DartAPIError(`Failed to retrieve workspace config for validation: ${error.message}`, error.statusCode, error.response);
25
+ }
26
+ throw error;
27
+ }
28
+ if (!config.dartboards || config.dartboards.length === 0) {
29
+ throw new ValidationError('No dartboards found in workspace configuration. Create a dartboard first in Dart AI.', 'dartboard');
30
+ }
31
+ const dartboard = findDartboard(config.dartboards, input.dartboard);
32
+ if (!dartboard) {
33
+ const dartboardNames = getDartboardNames(config.dartboards);
34
+ const availableDartboards = dartboardNames.slice(0, 10).join(', ') +
35
+ (dartboardNames.length > 10 ? `, ... (${dartboardNames.length - 10} more)` : '');
36
+ throw new ValidationError(`Invalid dartboard: "${input.dartboard}" not found in workspace. Available dartboards: ${availableDartboards}`, 'dartboard', dartboardNames);
37
+ }
38
+ if (input.assignees && Array.isArray(input.assignees) && input.assignees.length > 0) {
39
+ const invalidAssignees = [];
40
+ for (const assignee of input.assignees) {
41
+ const assigneeExists = config.assignees.some((a) => a.email === assignee || a.name === assignee);
42
+ if (!assigneeExists) {
43
+ invalidAssignees.push(assignee);
44
+ }
45
+ }
46
+ if (invalidAssignees.length > 0) {
47
+ const availableAssignees = config.assignees
48
+ .map((a) => a.email ? `${a.name} <${a.email}>` : a.name)
49
+ .join(', ');
50
+ throw new ValidationError(`Invalid assignee(s): ${invalidAssignees.join(', ')} not found in workspace. Available assignees: ${availableAssignees}`, 'assignees', config.assignees.map((a) => a.email || a.name));
51
+ }
52
+ }
53
+ if (input.tags && Array.isArray(input.tags) && input.tags.length > 0) {
54
+ const invalidTags = [];
55
+ for (const tagInput of input.tags) {
56
+ if (!findTag(config.tags, tagInput)) {
57
+ invalidTags.push(tagInput);
58
+ }
59
+ }
60
+ if (invalidTags.length > 0) {
61
+ const tagNames = getTagNames(config.tags);
62
+ const availableTags = tagNames.slice(0, 20).join(', ') +
63
+ (tagNames.length > 20 ? `, ... (${tagNames.length - 20} more)` : '');
64
+ throw new ValidationError(`Invalid tag(s): ${invalidTags.join(', ')} not found in workspace. Available tags: ${availableTags}`, 'tags', tagNames);
65
+ }
66
+ }
67
+ if (input.status && typeof input.status === 'string') {
68
+ if (!findStatus(config.statuses, input.status)) {
69
+ const statusNames = getStatusNames(config.statuses);
70
+ const availableStatuses = statusNames.join(', ');
71
+ throw new ValidationError(`Invalid status: "${input.status}" not found in workspace. Available statuses: ${availableStatuses}`, 'status', statusNames);
72
+ }
73
+ }
74
+ if (input.priority !== undefined && input.priority !== null) {
75
+ }
76
+ if (input.size !== undefined && input.size !== null) {
77
+ }
78
+ const validateDartIdFormat = (id) => {
79
+ return typeof id === 'string' && id.trim().length > 0;
80
+ };
81
+ const validateRelationshipIds = (ids, fieldName) => {
82
+ if (!ids || !Array.isArray(ids)) {
83
+ return;
84
+ }
85
+ const invalidIds = [];
86
+ for (const id of ids) {
87
+ if (!validateDartIdFormat(id)) {
88
+ invalidIds.push(id === '' ? '(empty string)' : String(id));
89
+ }
90
+ }
91
+ if (invalidIds.length > 0) {
92
+ throw new ValidationError(`Invalid dart_id format in ${fieldName}: ${invalidIds.join(', ')}. Each ID must be a non-empty string.`, fieldName);
93
+ }
94
+ };
95
+ validateRelationshipIds(input.subtask_ids, 'subtask_ids');
96
+ validateRelationshipIds(input.blocker_ids, 'blocker_ids');
97
+ validateRelationshipIds(input.blocking_ids, 'blocking_ids');
98
+ validateRelationshipIds(input.duplicate_ids, 'duplicate_ids');
99
+ validateRelationshipIds(input.related_ids, 'related_ids');
100
+ const validateDate = (dateStr, fieldName) => {
101
+ try {
102
+ const date = new Date(dateStr);
103
+ if (isNaN(date.getTime())) {
104
+ throw new ValidationError(`Invalid ${fieldName}: "${dateStr}" is not a valid ISO8601 date`, fieldName);
105
+ }
106
+ }
107
+ catch {
108
+ throw new ValidationError(`Invalid ${fieldName}: "${dateStr}" is not a valid ISO8601 date`, fieldName);
109
+ }
110
+ };
111
+ if (input.due_at) {
112
+ validateDate(input.due_at, 'due_at');
113
+ }
114
+ if (input.start_at) {
115
+ validateDate(input.start_at, 'start_at');
116
+ }
117
+ const client = new DartClient({ token: DART_TOKEN });
118
+ let createdTask;
119
+ try {
120
+ createdTask = await client.createTask(input);
121
+ }
122
+ catch (error) {
123
+ if (error instanceof DartAPIError) {
124
+ throw new DartAPIError(`Failed to create task: ${error.message}`, error.statusCode, error.response);
125
+ }
126
+ throw error;
127
+ }
128
+ const taskWithDartId = {
129
+ ...createdTask,
130
+ dart_id: createdTask.id || createdTask.dart_id,
131
+ created_at: createdTask.createdAt || createdTask.created_at,
132
+ updated_at: createdTask.updatedAt || createdTask.updated_at,
133
+ };
134
+ const url = createdTask.htmlUrl || `https://app.dartai.com/task/${taskWithDartId.dart_id}`;
135
+ return {
136
+ dart_id: taskWithDartId.dart_id,
137
+ title: taskWithDartId.title,
138
+ url,
139
+ created_at: taskWithDartId.created_at,
140
+ all_fields: taskWithDartId,
141
+ };
142
+ }
143
+ //# sourceMappingURL=create_task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_task.js","sourceRoot":"","sources":["../../src/tools/create_task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { DeleteDocInput, DeleteDocOutput } from '../types/index.js';
2
+ export declare function handleDeleteDoc(input: DeleteDocInput): Promise<DeleteDocOutput>;
3
+ //# sourceMappingURL=delete_doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete_doc.d.ts","sourceRoot":"","sources":["../../src/tools/delete_doc.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,cAAc,EACd,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAc3B,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAgErF"}
@@ -0,0 +1,35 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { DartAPIError, } from '../types/index.js';
3
+ export async function handleDeleteDoc(input) {
4
+ const DART_TOKEN = process.env.DART_TOKEN;
5
+ if (!DART_TOKEN) {
6
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
7
+ }
8
+ if (!input || typeof input !== 'object') {
9
+ throw new DartAPIError('input is required and must be an object', 400);
10
+ }
11
+ if (!input.doc_id || typeof input.doc_id !== 'string' || input.doc_id.trim() === '') {
12
+ throw new DartAPIError('doc_id is required and must be a non-empty string', 400);
13
+ }
14
+ const client = new DartClient({ token: DART_TOKEN });
15
+ let result;
16
+ try {
17
+ result = await client.deleteDoc(input.doc_id);
18
+ }
19
+ catch (error) {
20
+ if (error instanceof DartAPIError && error.statusCode === 404) {
21
+ throw new DartAPIError(`Document not found: No document with doc_id "${input.doc_id}" exists in workspace`, 404, error.response);
22
+ }
23
+ if (error instanceof DartAPIError) {
24
+ throw new DartAPIError(`Failed to delete document: ${error.message}`, error.statusCode, error.response);
25
+ }
26
+ throw error;
27
+ }
28
+ return {
29
+ doc_id: result.doc_id,
30
+ deleted: result.success,
31
+ recoverable: true,
32
+ message: `Document "${result.doc_id}" moved to trash. Recoverable via Dart web UI: https://app.dartai.com/trash`,
33
+ };
34
+ }
35
+ //# sourceMappingURL=delete_doc.js.map