@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,3 @@
1
+ import { UpdateDocInput, UpdateDocOutput } from '../types/index.js';
2
+ export declare function handleUpdateDoc(input: UpdateDocInput): Promise<UpdateDocOutput>;
3
+ //# sourceMappingURL=update_doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_doc.d.ts","sourceRoot":"","sources":["../../src/tools/update_doc.ts"],"names":[],"mappings":"AASA,OAAO,EACL,cAAc,EACd,eAAe,EAMhB,MAAM,mBAAmB,CAAC;AAmB3B,wBAAsB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAuLrF"}
@@ -0,0 +1,102 @@
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 handleUpdateDoc(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 DartAPIError('input is required and must be an object', 400);
11
+ }
12
+ if (!input.doc_id || typeof input.doc_id !== 'string' || input.doc_id.trim() === '') {
13
+ throw new DartAPIError('doc_id is required and must be a non-empty string', 400);
14
+ }
15
+ if (!input.updates || typeof input.updates !== 'object') {
16
+ throw new ValidationError('updates is required and must be an object', 'updates');
17
+ }
18
+ const updateKeys = Object.keys(input.updates);
19
+ if (updateKeys.length === 0) {
20
+ throw new ValidationError('updates must contain at least one field to update', 'updates');
21
+ }
22
+ let resolvedFolder;
23
+ if (input.updates.folder !== undefined) {
24
+ if (input.updates.folder === null || input.updates.folder === '') {
25
+ resolvedFolder = input.updates.folder;
26
+ }
27
+ else if (typeof input.updates.folder === 'string') {
28
+ let config;
29
+ try {
30
+ config = await handleGetConfig({ cache_bust: false });
31
+ }
32
+ catch (error) {
33
+ if (error instanceof DartAPIError) {
34
+ throw new DartAPIError(`Failed to retrieve workspace config for folder validation: ${error.message}`, error.statusCode, error.response);
35
+ }
36
+ throw error;
37
+ }
38
+ if (!config.folders || config.folders.length === 0) {
39
+ throw new ValidationError('No folders found in workspace configuration. Create a folder first in Dart AI.', 'folder');
40
+ }
41
+ const folder = findFolder(config.folders, input.updates.folder);
42
+ if (!folder) {
43
+ const folderNames = getFolderNames(config.folders);
44
+ const availableFolders = folderNames.join(', ');
45
+ throw new ValidationError(`Invalid folder: "${input.updates.folder}" not found in workspace. Available folders: ${availableFolders}`, 'folder', folderNames);
46
+ }
47
+ resolvedFolder = folder.dart_id;
48
+ }
49
+ else {
50
+ throw new ValidationError(`folder must be a string or null (received: ${typeof input.updates.folder})`, 'folder');
51
+ }
52
+ }
53
+ if (input.updates.title !== undefined) {
54
+ if (typeof input.updates.title !== 'string' || input.updates.title.trim() === '') {
55
+ throw new ValidationError('title must be a non-empty string', 'title');
56
+ }
57
+ }
58
+ if (input.updates.text !== undefined) {
59
+ if (typeof input.updates.text !== 'string') {
60
+ throw new ValidationError('text must be a string', 'text');
61
+ }
62
+ }
63
+ const resolvedUpdates = {};
64
+ const updatedFields = [];
65
+ if (input.updates.title !== undefined) {
66
+ resolvedUpdates.title = input.updates.title;
67
+ updatedFields.push('title');
68
+ }
69
+ if (input.updates.text !== undefined) {
70
+ resolvedUpdates.text = input.updates.text;
71
+ updatedFields.push('text');
72
+ }
73
+ if (input.updates.folder !== undefined) {
74
+ resolvedUpdates.folder = resolvedFolder;
75
+ updatedFields.push('folder');
76
+ }
77
+ const client = new DartClient({ token: DART_TOKEN });
78
+ let updatedDoc;
79
+ try {
80
+ updatedDoc = await client.updateDoc({
81
+ doc_id: input.doc_id,
82
+ updates: resolvedUpdates,
83
+ });
84
+ }
85
+ catch (error) {
86
+ if (error instanceof DartAPIError && error.statusCode === 404) {
87
+ throw new DartAPIError(`Document not found: No document with doc_id "${input.doc_id}" exists in workspace`, 404, error.response);
88
+ }
89
+ if (error instanceof DartAPIError) {
90
+ throw new DartAPIError(`Failed to update document: ${error.message}`, error.statusCode, error.response);
91
+ }
92
+ throw error;
93
+ }
94
+ const deepLinkUrl = `https://app.dartai.com/doc/${updatedDoc.doc_id}`;
95
+ return {
96
+ doc_id: updatedDoc.doc_id,
97
+ updated_fields: updatedFields,
98
+ doc: updatedDoc,
99
+ url: deepLinkUrl,
100
+ };
101
+ }
102
+ //# sourceMappingURL=update_doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_doc.js","sourceRoot":"","sources":["../../src/tools/update_doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { UpdateTaskInput, UpdateTaskOutput } from '../types/index.js';
2
+ export declare function handleUpdateTask(input: UpdateTaskInput): Promise<UpdateTaskOutput>;
3
+ //# sourceMappingURL=update_task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_task.d.ts","sourceRoot":"","sources":["../../src/tools/update_task.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,eAAe,EACf,gBAAgB,EAWjB,MAAM,mBAAmB,CAAC;AAuB3B,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgdxF"}
@@ -0,0 +1,241 @@
1
+ import { DartClient } from '../api/dartClient.js';
2
+ import { handleGetConfig } from './get_config.js';
3
+ import { DartAPIError, ValidationError, findDartboard, findStatus, findTag, getDartboardNames, getStatusNames, getTagNames, } from '../types/index.js';
4
+ export async function handleUpdateTask(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 is required and 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.updates || typeof input.updates !== 'object' || Object.keys(input.updates).length === 0) {
16
+ throw new ValidationError('updates is required and must be a non-empty object with at least one field to update', 'updates');
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
+ const resolvedUpdates = {};
29
+ const updatedFields = [];
30
+ for (const key of Object.keys(input.updates)) {
31
+ if (input.updates[key] !== undefined) {
32
+ updatedFields.push(key);
33
+ }
34
+ }
35
+ if (input.updates.title !== undefined) {
36
+ if (typeof input.updates.title !== 'string' || input.updates.title.trim() === '') {
37
+ throw new ValidationError('title must be a non-empty string', 'title');
38
+ }
39
+ if (input.updates.title.length > 500) {
40
+ throw new ValidationError(`title exceeds maximum length of 500 characters (current: ${input.updates.title.length})`, 'title');
41
+ }
42
+ resolvedUpdates.title = input.updates.title;
43
+ }
44
+ if (input.updates.dartboard !== undefined) {
45
+ if (!config.dartboards || config.dartboards.length === 0) {
46
+ throw new ValidationError('No dartboards found in workspace configuration. Cannot update dartboard.', 'dartboard');
47
+ }
48
+ const dartboard = findDartboard(config.dartboards, input.updates.dartboard);
49
+ if (!dartboard) {
50
+ const dartboardNames = getDartboardNames(config.dartboards);
51
+ const availableDartboards = dartboardNames.slice(0, 10).join(', ') +
52
+ (dartboardNames.length > 10 ? `, ... (${dartboardNames.length - 10} more)` : '');
53
+ throw new ValidationError(`Invalid dartboard: "${input.updates.dartboard}" not found in workspace. Available dartboards: ${availableDartboards}`, 'dartboard', dartboardNames);
54
+ }
55
+ resolvedUpdates.dartboard = dartboard.dart_id;
56
+ }
57
+ if (input.updates.status !== undefined) {
58
+ if (!config.statuses || config.statuses.length === 0) {
59
+ throw new ValidationError('No statuses found in workspace configuration. Cannot update status.', 'status');
60
+ }
61
+ const status = findStatus(config.statuses, input.updates.status);
62
+ if (!status) {
63
+ const statusNames = getStatusNames(config.statuses);
64
+ const availableStatuses = statusNames.join(', ');
65
+ throw new ValidationError(`Invalid status: "${input.updates.status}" not found in workspace. Available statuses: ${availableStatuses}`, 'status', statusNames);
66
+ }
67
+ resolvedUpdates.status = status.dart_id;
68
+ }
69
+ if (input.updates.assignees !== undefined) {
70
+ if (!Array.isArray(input.updates.assignees)) {
71
+ throw new ValidationError('assignees must be an array of assignee dart_ids, names, or emails', 'assignees');
72
+ }
73
+ if (input.updates.assignees.length > 0) {
74
+ if (!config.assignees || config.assignees.length === 0) {
75
+ throw new ValidationError('No assignees found in workspace configuration. Cannot update assignees.', 'assignees');
76
+ }
77
+ const invalidAssignees = [];
78
+ for (const assigneeId of input.updates.assignees) {
79
+ if (typeof assigneeId !== 'string') {
80
+ throw new ValidationError(`assignees array must contain only strings, found: ${typeof assigneeId}`, 'assignees');
81
+ }
82
+ const assigneeExists = config.assignees.some((assignee) => assignee.email === assigneeId || assignee.name === assigneeId);
83
+ if (!assigneeExists) {
84
+ invalidAssignees.push(assigneeId);
85
+ }
86
+ }
87
+ if (invalidAssignees.length > 0) {
88
+ const availableAssignees = config.assignees
89
+ .map((a) => a.email ? `${a.name} <${a.email}>` : a.name)
90
+ .join(', ');
91
+ throw new ValidationError(`Invalid assignee(s): ${invalidAssignees.join(', ')} not found in workspace. Available assignees: ${availableAssignees}`, 'assignees', config.assignees.map((a) => a.email || a.name));
92
+ }
93
+ const resolvedAssignees = input.updates.assignees.map((assigneeIdOrName) => {
94
+ const assignee = config.assignees.find((a) => a.email === assigneeIdOrName || a.name === assigneeIdOrName);
95
+ return assignee ? (assignee.email || assignee.name) : assigneeIdOrName;
96
+ });
97
+ resolvedUpdates.assignees = resolvedAssignees;
98
+ }
99
+ else {
100
+ resolvedUpdates.assignees = [];
101
+ }
102
+ }
103
+ if (input.updates.tags !== undefined) {
104
+ if (!Array.isArray(input.updates.tags)) {
105
+ throw new ValidationError('tags must be an array of tag dart_ids or names', 'tags');
106
+ }
107
+ if (input.updates.tags.length > 0) {
108
+ if (!config.tags || config.tags.length === 0) {
109
+ throw new ValidationError('No tags found in workspace configuration. Cannot update tags.', 'tags');
110
+ }
111
+ const invalidTags = [];
112
+ const resolvedTags = [];
113
+ for (const tagInput of input.updates.tags) {
114
+ if (typeof tagInput !== 'string') {
115
+ throw new ValidationError(`tags array must contain only strings, found: ${typeof tagInput}`, 'tags');
116
+ }
117
+ const tag = findTag(config.tags, tagInput);
118
+ if (!tag) {
119
+ invalidTags.push(tagInput);
120
+ }
121
+ else {
122
+ resolvedTags.push(tag.dart_id);
123
+ }
124
+ }
125
+ if (invalidTags.length > 0) {
126
+ const tagNames = getTagNames(config.tags);
127
+ const availableTags = tagNames.slice(0, 20).join(', ') +
128
+ (tagNames.length > 20 ? `, ... (${tagNames.length - 20} more)` : '');
129
+ throw new ValidationError(`Invalid tag(s): ${invalidTags.join(', ')} not found in workspace. Available tags: ${availableTags}`, 'tags', tagNames);
130
+ }
131
+ resolvedUpdates.tags = resolvedTags;
132
+ }
133
+ else {
134
+ resolvedUpdates.tags = [];
135
+ }
136
+ }
137
+ if (input.updates.priority !== undefined) {
138
+ if (!config.priorities || config.priorities.length === 0) {
139
+ throw new ValidationError('No priorities found in workspace configuration. Cannot update priority.', 'priority');
140
+ }
141
+ if (typeof input.updates.priority !== 'number' || input.updates.priority < 1 || input.updates.priority > 5) {
142
+ throw new ValidationError(`Invalid priority: ${input.updates.priority}. Valid range: 1-5 (1=lowest, 5=highest)`, 'priority', ['1', '2', '3', '4', '5']);
143
+ }
144
+ resolvedUpdates.priority = input.updates.priority;
145
+ }
146
+ if (input.updates.size !== undefined) {
147
+ if (!config.sizes || config.sizes.length === 0) {
148
+ throw new ValidationError('No sizes found in workspace configuration. Cannot update size.', 'size');
149
+ }
150
+ if (typeof input.updates.size !== 'number' || input.updates.size < 1 || input.updates.size > 5) {
151
+ throw new ValidationError(`Invalid size: ${input.updates.size}. Valid range: 1-5 (1=XS, 5=XL)`, 'size', ['1', '2', '3', '4', '5']);
152
+ }
153
+ resolvedUpdates.size = input.updates.size;
154
+ }
155
+ if (input.updates.due_at !== undefined) {
156
+ const dueDate = new Date(input.updates.due_at);
157
+ if (isNaN(dueDate.getTime())) {
158
+ throw new ValidationError(`Invalid due_at date format: "${input.updates.due_at}". Expected ISO8601 format (e.g., "2026-01-17T10:00:00Z")`, 'due_at');
159
+ }
160
+ resolvedUpdates.due_at = input.updates.due_at;
161
+ }
162
+ if (input.updates.start_at !== undefined) {
163
+ const startDate = new Date(input.updates.start_at);
164
+ if (isNaN(startDate.getTime())) {
165
+ throw new ValidationError(`Invalid start_at date format: "${input.updates.start_at}". Expected ISO8601 format (e.g., "2026-01-17T10:00:00Z")`, 'start_at');
166
+ }
167
+ resolvedUpdates.start_at = input.updates.start_at;
168
+ }
169
+ if (input.updates.description !== undefined) {
170
+ resolvedUpdates.description = input.updates.description;
171
+ }
172
+ if (input.updates.parent_task !== undefined) {
173
+ resolvedUpdates.parent_task = input.updates.parent_task;
174
+ }
175
+ const validateRelationshipArray = (fieldName, value) => {
176
+ if (value === undefined) {
177
+ return undefined;
178
+ }
179
+ if (!Array.isArray(value)) {
180
+ throw new ValidationError(`${fieldName} must be an array of task dart_ids`, fieldName);
181
+ }
182
+ if (value.length === 0) {
183
+ return [];
184
+ }
185
+ for (let i = 0; i < value.length; i++) {
186
+ const item = value[i];
187
+ if (typeof item !== 'string') {
188
+ throw new ValidationError(`${fieldName}[${i}] must be a string, found: ${typeof item}`, fieldName);
189
+ }
190
+ if (item.trim() === '') {
191
+ throw new ValidationError(`${fieldName}[${i}] must be a non-empty string`, fieldName);
192
+ }
193
+ }
194
+ return value;
195
+ };
196
+ const subtaskIds = validateRelationshipArray('subtask_ids', input.updates.subtask_ids);
197
+ if (subtaskIds !== undefined) {
198
+ resolvedUpdates.subtask_ids = subtaskIds;
199
+ }
200
+ const blockerIds = validateRelationshipArray('blocker_ids', input.updates.blocker_ids);
201
+ if (blockerIds !== undefined) {
202
+ resolvedUpdates.blocker_ids = blockerIds;
203
+ }
204
+ const blockingIds = validateRelationshipArray('blocking_ids', input.updates.blocking_ids);
205
+ if (blockingIds !== undefined) {
206
+ resolvedUpdates.blocking_ids = blockingIds;
207
+ }
208
+ const duplicateIds = validateRelationshipArray('duplicate_ids', input.updates.duplicate_ids);
209
+ if (duplicateIds !== undefined) {
210
+ resolvedUpdates.duplicate_ids = duplicateIds;
211
+ }
212
+ const relatedIds = validateRelationshipArray('related_ids', input.updates.related_ids);
213
+ if (relatedIds !== undefined) {
214
+ resolvedUpdates.related_ids = relatedIds;
215
+ }
216
+ const client = new DartClient({ token: DART_TOKEN });
217
+ let updatedTask;
218
+ try {
219
+ updatedTask = await client.updateTask({
220
+ dart_id: input.dart_id,
221
+ updates: resolvedUpdates,
222
+ });
223
+ }
224
+ catch (error) {
225
+ if (error instanceof DartAPIError && error.statusCode === 404) {
226
+ throw new DartAPIError(`Task not found: No task with dart_id "${input.dart_id}" exists in workspace`, 404, error.response);
227
+ }
228
+ if (error instanceof DartAPIError) {
229
+ throw new DartAPIError(`Failed to update task: ${error.message}`, error.statusCode, error.response);
230
+ }
231
+ throw error;
232
+ }
233
+ const deepLinkUrl = `https://app.dartai.com/task/${updatedTask.dart_id}`;
234
+ return {
235
+ dart_id: updatedTask.dart_id,
236
+ updated_fields: updatedFields,
237
+ task: updatedTask,
238
+ url: deepLinkUrl,
239
+ };
240
+ }
241
+ //# sourceMappingURL=update_task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_task.js","sourceRoot":"","sources":["../../src/tools/update_task.ts"],"names":[],"mappings":"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"}