@standardbeagle/dart-query 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,8 @@ import pLimit from 'p-limit';
2
2
  import { DartClient } from '../api/dartClient.js';
3
3
  import { handleGetConfig } from './get_config.js';
4
4
  import { parseDartQLToAST, convertToFilters } from '../parsers/dartql.js';
5
- import { DartAPIError, ValidationError, findDartboard, findStatus, findTag, getDartboardNames, getStatusNames, } from '../types/index.js';
5
+ import { DartAPIError, ValidationError, } from '../types/index.js';
6
+ import { validateUpdates, extractCurrentValues } from '../batch/validateUpdates.js';
6
7
  import { createBatchOperation, completeBatchOperation, addSuccessfulItem, addFailedItem, } from '../batch/batchOperations.js';
7
8
  export async function handleBatchUpdateTasks(input) {
8
9
  const DART_TOKEN = process.env.DART_TOKEN;
@@ -103,10 +104,7 @@ export async function handleBatchUpdateTasks(input) {
103
104
  const failedItems = [];
104
105
  const updatePromises = matchingTasks.map((task) => limit(async () => {
105
106
  try {
106
- await client.updateTask({
107
- dart_id: task.dart_id,
108
- updates: validatedUpdates,
109
- });
107
+ await client.updateTask(task.dart_id, validatedUpdates);
110
108
  successfulDartIds.push(task.dart_id);
111
109
  addSuccessfulItem(batchOperationId, task.dart_id);
112
110
  }
@@ -141,178 +139,4 @@ export async function handleBatchUpdateTasks(input) {
141
139
  execution_time_ms: executionTimeMs,
142
140
  };
143
141
  }
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 = typeof dartboard === 'string' ? 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 = typeof status === 'string' ? 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
- const resolvedTags = [];
236
- for (const tagInput of updates.tags) {
237
- if (typeof tagInput !== 'string') {
238
- throw new ValidationError(`tags array must contain only strings, found: ${typeof tagInput}`, 'tags');
239
- }
240
- const tag = findTag(config.tags, tagInput);
241
- resolvedTags.push(tag ? (typeof tag === 'string' ? tag : tag.dart_id) : tagInput);
242
- }
243
- validated.tags = resolvedTags;
244
- }
245
- else {
246
- validated.tags = [];
247
- }
248
- }
249
- if (updates.due_at !== undefined) {
250
- const dueDate = new Date(updates.due_at);
251
- if (isNaN(dueDate.getTime())) {
252
- throw new ValidationError(`Invalid due_at date format: "${updates.due_at}". Expected ISO8601 format (e.g., "2026-01-17T10:00:00Z")`, 'due_at');
253
- }
254
- validated.due_at = updates.due_at;
255
- }
256
- if (updates.start_at !== undefined) {
257
- const startDate = new Date(updates.start_at);
258
- if (isNaN(startDate.getTime())) {
259
- throw new ValidationError(`Invalid start_at date format: "${updates.start_at}". Expected ISO8601 format (e.g., "2026-01-17T10:00:00Z")`, 'start_at');
260
- }
261
- validated.start_at = updates.start_at;
262
- }
263
- if (updates.parent_task !== undefined) {
264
- validated.parent_task = updates.parent_task;
265
- }
266
- const validateRelationshipArray = (fieldName, value) => {
267
- if (value === undefined) {
268
- return undefined;
269
- }
270
- if (!Array.isArray(value)) {
271
- throw new ValidationError(`${fieldName} must be an array of task dart_ids`, fieldName);
272
- }
273
- if (value.length === 0) {
274
- return [];
275
- }
276
- for (let i = 0; i < value.length; i++) {
277
- const item = value[i];
278
- if (typeof item !== 'string') {
279
- throw new ValidationError(`${fieldName}[${i}] must be a string, found: ${typeof item}`, fieldName);
280
- }
281
- if (item.trim() === '') {
282
- throw new ValidationError(`${fieldName}[${i}] must be a non-empty string`, fieldName);
283
- }
284
- }
285
- return value;
286
- };
287
- const subtaskIds = validateRelationshipArray('subtask_ids', updates.subtask_ids);
288
- if (subtaskIds !== undefined) {
289
- validated.subtask_ids = subtaskIds;
290
- }
291
- const blockerIds = validateRelationshipArray('blocker_ids', updates.blocker_ids);
292
- if (blockerIds !== undefined) {
293
- validated.blocker_ids = blockerIds;
294
- }
295
- const blockingIds = validateRelationshipArray('blocking_ids', updates.blocking_ids);
296
- if (blockingIds !== undefined) {
297
- validated.blocking_ids = blockingIds;
298
- }
299
- const duplicateIds = validateRelationshipArray('duplicate_ids', updates.duplicate_ids);
300
- if (duplicateIds !== undefined) {
301
- validated.duplicate_ids = duplicateIds;
302
- }
303
- const relatedIds = validateRelationshipArray('related_ids', updates.related_ids);
304
- if (relatedIds !== undefined) {
305
- validated.related_ids = relatedIds;
306
- }
307
- return validated;
308
- }
309
- function extractCurrentValues(task, updatedFields) {
310
- const currentValues = {};
311
- for (const field of updatedFields) {
312
- if (field in task) {
313
- currentValues[field] = task[field];
314
- }
315
- }
316
- return currentValues;
317
- }
318
142
  //# sourceMappingURL=batch_update_tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch_update_tasks.js","sourceRoot":"","sources":["../../src/tools/batch_update_tasks.ts"],"names":[],"mappings":"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"}
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,4 @@
1
+ import { ExecuteDartQLInput, ExecuteDartQLOutput, DartTask } from '../types/index.js';
2
+ export declare function interpolateTemplate(template: string, task: DartTask): string;
3
+ export declare function handleExecuteDartQL(input: ExecuteDartQLInput): Promise<ExecuteDartQLOutput>;
4
+ //# sourceMappingURL=execute_dartql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute_dartql.d.ts","sourceRoot":"","sources":["../../src/tools/execute_dartql.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EAQnB,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAY3B,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAO5E;AA0GD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAuH9B"}
@@ -0,0 +1,270 @@
1
+ import pLimit from 'p-limit';
2
+ import { DartClient } from '../api/dartClient.js';
3
+ import { handleGetConfig } from './get_config.js';
4
+ import { parseDartQLStatements, convertToFilters } from '../parsers/dartql.js';
5
+ import { DartAPIError, ValidationError, } from '../types/index.js';
6
+ import { validateUpdates } from '../batch/validateUpdates.js';
7
+ import { createBatchOperation, completeBatchOperation, addSuccessfulItem, addFailedItem, } from '../batch/batchOperations.js';
8
+ export function interpolateTemplate(template, task) {
9
+ return template.replace(/\{(\w+)\}/g, (_match, field) => {
10
+ const val = task[field];
11
+ if (val === null || val === undefined)
12
+ return '';
13
+ if (Array.isArray(val))
14
+ return val.join(', ');
15
+ return String(val);
16
+ });
17
+ }
18
+ function setValueToPlainWithTemplate(sv, task) {
19
+ switch (sv.type) {
20
+ case 'string': return interpolateTemplate(sv.value, task);
21
+ case 'number': return sv.value;
22
+ case 'null': return undefined;
23
+ case 'array': return sv.elements.map(e => setValueToPlainWithTemplate(e, task));
24
+ }
25
+ }
26
+ function assignmentsToUpdates(assignments, task) {
27
+ const updates = {};
28
+ for (const { field, value } of assignments) {
29
+ updates[field] = setValueToPlainWithTemplate(value, task);
30
+ }
31
+ return updates;
32
+ }
33
+ function buildPlannedOps(stmt) {
34
+ if (stmt.type === 'delete') {
35
+ return ['DELETE task'];
36
+ }
37
+ const ops = [];
38
+ for (const a of stmt.assignments) {
39
+ ops.push(`SET ${a.field} = ${formatSetValue(a.value)}`);
40
+ }
41
+ if (stmt.comment) {
42
+ ops.push(`COMMENT '${stmt.comment}'`);
43
+ }
44
+ return ops;
45
+ }
46
+ function formatSetValue(sv) {
47
+ switch (sv.type) {
48
+ case 'string': return `'${sv.value}'`;
49
+ case 'number': return String(sv.value);
50
+ case 'null': return 'NULL';
51
+ case 'array': return `[${sv.elements.map(formatSetValue).join(', ')}]`;
52
+ }
53
+ }
54
+ async function fetchMatchingTasks(client, whereExpr) {
55
+ const filterResult = convertToFilters(whereExpr);
56
+ if (filterResult.errors.length > 0) {
57
+ throw new ValidationError(`DartQL filter conversion errors: ${filterResult.errors.join('; ')}`, 'query', filterResult.errors);
58
+ }
59
+ let matchingTasks = [];
60
+ const apiFilters = filterResult.apiFilters;
61
+ let offset = 0;
62
+ const pageSize = 500;
63
+ let hasMore = true;
64
+ while (hasMore) {
65
+ const response = await client.listTasks({
66
+ ...apiFilters,
67
+ limit: pageSize,
68
+ offset,
69
+ });
70
+ matchingTasks.push(...(response.tasks || []));
71
+ hasMore = offset + pageSize < (response.total || 0);
72
+ offset += pageSize;
73
+ if (matchingTasks.length >= 10000) {
74
+ throw new ValidationError('Statement matches too many tasks (>10,000). Please narrow your WHERE clause.', 'query');
75
+ }
76
+ }
77
+ if (filterResult.requiresClientSide && filterResult.clientFilter) {
78
+ matchingTasks = matchingTasks.filter(filterResult.clientFilter);
79
+ }
80
+ return matchingTasks;
81
+ }
82
+ export async function handleExecuteDartQL(input) {
83
+ const DART_TOKEN = process.env.DART_TOKEN;
84
+ if (!DART_TOKEN) {
85
+ throw new DartAPIError('DART_TOKEN environment variable is required. Get your token from: https://app.dartai.com/?settings=account', 401);
86
+ }
87
+ if (!input || typeof input !== 'object') {
88
+ throw new ValidationError('input is required and must be an object', 'input');
89
+ }
90
+ if (!input.query || typeof input.query !== 'string' || input.query.trim() === '') {
91
+ throw new ValidationError('query is required and must be a non-empty DartQL statement', 'query');
92
+ }
93
+ const dryRun = input.dry_run !== false;
94
+ let concurrency = input.concurrency ?? 5;
95
+ if (typeof concurrency !== 'number' || !Number.isInteger(concurrency)) {
96
+ throw new ValidationError('concurrency must be an integer', 'concurrency');
97
+ }
98
+ if (concurrency < 1 || concurrency > 20) {
99
+ throw new ValidationError('concurrency must be between 1 and 20', 'concurrency');
100
+ }
101
+ const parseResult = parseDartQLStatements(input.query);
102
+ if (parseResult.errors.length > 0) {
103
+ throw new ValidationError(`DartQL parse errors: ${parseResult.errors.join('; ')}`, 'query', parseResult.errors);
104
+ }
105
+ const { statements } = parseResult.program;
106
+ let config;
107
+ if (statements.some(s => s.type === 'update')) {
108
+ try {
109
+ config = await handleGetConfig({ cache_bust: false });
110
+ }
111
+ catch (error) {
112
+ if (error instanceof DartAPIError) {
113
+ throw new DartAPIError(`Failed to retrieve workspace config for validation: ${error.message}`, error.statusCode, error.response);
114
+ }
115
+ throw error;
116
+ }
117
+ }
118
+ const client = new DartClient({ token: DART_TOKEN });
119
+ const batchOp = createBatchOperation('dartql', 0);
120
+ const batchId = batchOp.batch_operation_id;
121
+ const startTime = Date.now();
122
+ const statementResults = [];
123
+ let totalMatched = 0;
124
+ let totalSucceeded = 0;
125
+ let totalFailed = 0;
126
+ for (let i = 0; i < statements.length; i++) {
127
+ const stmt = statements[i];
128
+ try {
129
+ const matchingTasks = await fetchMatchingTasks(client, stmt.where);
130
+ totalMatched += matchingTasks.length;
131
+ if (stmt.type === 'update') {
132
+ const result = await executeUpdateStatement(stmt, matchingTasks, client, config, dryRun, concurrency, batchId);
133
+ result.statement_index = i;
134
+ totalSucceeded += result.succeeded;
135
+ totalFailed += result.failed;
136
+ statementResults.push(result);
137
+ }
138
+ else {
139
+ const result = await executeDeleteStatement(stmt, matchingTasks, client, dryRun, concurrency, batchId);
140
+ result.statement_index = i;
141
+ totalSucceeded += result.succeeded;
142
+ totalFailed += result.failed;
143
+ statementResults.push(result);
144
+ }
145
+ }
146
+ catch (error) {
147
+ const errMsg = error instanceof Error ? error.message : String(error);
148
+ statementResults.push({
149
+ statement_index: i,
150
+ statement_type: stmt.type,
151
+ selector_matched: 0,
152
+ succeeded: 0,
153
+ failed: 1,
154
+ failed_items: [{ dart_id: '', error: errMsg }],
155
+ });
156
+ totalFailed += 1;
157
+ }
158
+ }
159
+ const executionTimeMs = Date.now() - startTime;
160
+ const status = totalFailed === 0 ? 'completed' : 'completed';
161
+ completeBatchOperation(batchId, status);
162
+ return {
163
+ batch_operation_id: dryRun ? 'dry_run' : batchId,
164
+ dry_run: dryRun,
165
+ statements: statementResults,
166
+ total_matched: totalMatched,
167
+ total_succeeded: totalSucceeded,
168
+ total_failed: totalFailed,
169
+ execution_time_ms: executionTimeMs,
170
+ };
171
+ }
172
+ async function executeUpdateStatement(stmt, matchingTasks, client, config, dryRun, concurrency, batchId) {
173
+ const result = {
174
+ statement_index: 0,
175
+ statement_type: 'update',
176
+ selector_matched: matchingTasks.length,
177
+ succeeded: 0,
178
+ failed: 0,
179
+ };
180
+ if (dryRun) {
181
+ result.preview_tasks = matchingTasks.slice(0, 10).map(task => ({
182
+ dart_id: task.dart_id,
183
+ title: task.title,
184
+ planned_ops: buildPlannedOps(stmt),
185
+ }));
186
+ return result;
187
+ }
188
+ const limit = pLimit(concurrency);
189
+ const successfulIds = [];
190
+ const failedItems = [];
191
+ let commentsAdded = 0;
192
+ let commentsFailed = 0;
193
+ const promises = matchingTasks.map(task => limit(async () => {
194
+ try {
195
+ const rawUpdates = assignmentsToUpdates(stmt.assignments, task);
196
+ const validated = await validateUpdates(rawUpdates, config);
197
+ await client.updateTask(task.dart_id, validated);
198
+ successfulIds.push(task.dart_id);
199
+ addSuccessfulItem(batchId, task.dart_id);
200
+ if (stmt.comment) {
201
+ try {
202
+ const commentText = interpolateTemplate(stmt.comment, task);
203
+ await client.addComment(task.dart_id, commentText);
204
+ commentsAdded++;
205
+ }
206
+ catch {
207
+ commentsFailed++;
208
+ }
209
+ }
210
+ }
211
+ catch (error) {
212
+ const errMsg = error instanceof Error ? error.message : String(error);
213
+ failedItems.push({ dart_id: task.dart_id, error: errMsg });
214
+ addFailedItem(batchId, { id: task.dart_id, error: errMsg });
215
+ }
216
+ }));
217
+ await Promise.all(promises);
218
+ result.succeeded = successfulIds.length;
219
+ result.failed = failedItems.length;
220
+ result.successful_dart_ids = successfulIds;
221
+ result.failed_items = failedItems.length > 0 ? failedItems : undefined;
222
+ if (stmt.comment) {
223
+ result.comments_added = commentsAdded;
224
+ result.comments_failed = commentsFailed;
225
+ }
226
+ return result;
227
+ }
228
+ async function executeDeleteStatement(stmt, matchingTasks, client, dryRun, concurrency, batchId) {
229
+ const result = {
230
+ statement_index: 0,
231
+ statement_type: 'delete',
232
+ selector_matched: matchingTasks.length,
233
+ succeeded: 0,
234
+ failed: 0,
235
+ };
236
+ if (dryRun) {
237
+ result.preview_tasks = matchingTasks.slice(0, 10).map(task => ({
238
+ dart_id: task.dart_id,
239
+ title: task.title,
240
+ planned_ops: ['DELETE task' + (stmt.confirmed ? '' : ' (CONFIRM required)')],
241
+ }));
242
+ return result;
243
+ }
244
+ if (!stmt.confirmed) {
245
+ throw new ValidationError('DELETE statement requires CONFIRM keyword when dry_run=false. ' +
246
+ 'Add CONFIRM to the end of the DELETE statement to proceed.', 'query');
247
+ }
248
+ const limit = pLimit(concurrency);
249
+ const successfulIds = [];
250
+ const failedItems = [];
251
+ const promises = matchingTasks.map(task => limit(async () => {
252
+ try {
253
+ await client.deleteTask(task.dart_id);
254
+ successfulIds.push(task.dart_id);
255
+ addSuccessfulItem(batchId, task.dart_id);
256
+ }
257
+ catch (error) {
258
+ const errMsg = error instanceof Error ? error.message : String(error);
259
+ failedItems.push({ dart_id: task.dart_id, error: errMsg });
260
+ addFailedItem(batchId, { id: task.dart_id, error: errMsg });
261
+ }
262
+ }));
263
+ await Promise.all(promises);
264
+ result.succeeded = successfulIds.length;
265
+ result.failed = failedItems.length;
266
+ result.successful_dart_ids = successfulIds;
267
+ result.failed_items = failedItems.length > 0 ? failedItems : undefined;
268
+ return result;
269
+ }
270
+ //# sourceMappingURL=execute_dartql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute_dartql.js","sourceRoot":"","sources":["../../src/tools/execute_dartql.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/tools/info.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAme1D,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAuCtE"}
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/tools/info.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqhB1D,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAuCtE"}
@@ -60,16 +60,20 @@ const TOOL_GROUPS = {
60
60
  ],
61
61
  },
62
62
  'task-batch': {
63
- count: 3,
63
+ count: 4,
64
64
  purpose: 'Bulk operations on multiple tasks',
65
65
  tools: [
66
+ {
67
+ name: 'execute_dartql',
68
+ description: 'Execute DartQL UPDATE/DELETE statements with template vars, array literals, comments, multi-statement (;). Preferred over batch_update/delete_tasks.',
69
+ },
66
70
  {
67
71
  name: 'batch_update_tasks',
68
- description: 'Update multiple tasks matching a DartQL selector expression (SQL-like WHERE syntax)',
72
+ description: '[Deprecated: use execute_dartql] Update multiple tasks matching a DartQL selector',
69
73
  },
70
74
  {
71
75
  name: 'batch_delete_tasks',
72
- description: 'Delete multiple tasks matching a DartQL selector expression (moves to trash, recoverable)',
76
+ description: '[Deprecated: use execute_dartql] Delete multiple tasks matching a DartQL selector',
73
77
  },
74
78
  {
75
79
  name: 'get_batch_status',
@@ -125,7 +129,7 @@ discovery | 1 | Progressive capability discovery
125
129
  config | 1 | Workspace configuration
126
130
  task-crud | 5 | Single task operations
127
131
  task-query | 2 | Search and filter tasks
128
- task-batch | 3 | Bulk operations on multiple tasks
132
+ task-batch | 4 | Bulk operations on multiple tasks
129
133
  doc-crud | 5 | Document management
130
134
  import | 1 | CSV bulk import
131
135
 
@@ -218,7 +222,52 @@ Examples:
218
222
 
219
223
  Token Budget: ~400 tokens
220
224
  Performance: Fast (cached) / Medium (API call)`,
221
- batch_update_tasks: `Tool: batch_update_tasks
225
+ execute_dartql: `Tool: execute_dartql
226
+ Description: Execute DartQL UPDATE/DELETE statements with template vars, array literals, and multi-statement support
227
+
228
+ Input Schema:
229
+ query: string (required)
230
+ One or more DartQL statements separated by semicolons
231
+
232
+ dry_run?: boolean (default: true)
233
+ Preview matching tasks without executing (RECOMMENDED for first run)
234
+
235
+ concurrency?: integer (default: 5)
236
+ Max concurrent API calls per statement (1-20)
237
+
238
+ Statement Syntax:
239
+ UPDATE WHERE <expression> SET <field> = <value> [, ...] [COMMENT '<template>']
240
+ DELETE WHERE <expression> [CONFIRM]
241
+
242
+ Values: strings ('text'), numbers (42), NULL, arrays (['a', 'b'])
243
+ Template vars: {field} in strings resolves to pre-update task values
244
+
245
+ Examples:
246
+ -- Set blocker relationships
247
+ UPDATE WHERE dart_id = 'abc' SET blocker_ids = ['id1', 'id2']
248
+
249
+ -- Batch status change with comment
250
+ UPDATE WHERE status = 'Todo' SET status = 'Done' COMMENT 'Closed: {title}'
251
+
252
+ -- Multi-statement
253
+ UPDATE WHERE priority = 1 SET priority = 2;
254
+ DELETE WHERE status = 'Archived' AND completed_at < '2025-01-01' CONFIRM
255
+
256
+ Safety:
257
+ - dry_run=true (default): preview only
258
+ - DELETE requires CONFIRM keyword when dry_run=false
259
+ - WHERE is mandatory (no accidental "update all")
260
+
261
+ Output Schema:
262
+ batch_operation_id: string
263
+ dry_run: boolean
264
+ statements: Array<StatementResult>
265
+ total_matched, total_succeeded, total_failed: integer
266
+ execution_time_ms: integer
267
+
268
+ Token Budget: ~400 tokens
269
+ Performance: Slow (depends on match count)`,
270
+ batch_update_tasks: `Tool: batch_update_tasks [DEPRECATED: use execute_dartql instead]
222
271
  Description: Update multiple tasks matching a DartQL selector expression (SQL-like WHERE syntax)
223
272
 
224
273
  Input Schema: