@doist/todoist-ai 4.11.0 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/filter-helpers.d.ts +51 -0
  2. package/dist/filter-helpers.d.ts.map +1 -0
  3. package/dist/filter-helpers.js +79 -0
  4. package/dist/index.d.ts +47 -23
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/tool-helpers.d.ts +8 -20
  7. package/dist/tool-helpers.d.ts.map +1 -1
  8. package/dist/tool-helpers.js +6 -23
  9. package/dist/tools/__tests__/find-tasks-by-date.test.js +118 -20
  10. package/dist/tools/__tests__/find-tasks.test.js +2 -0
  11. package/dist/tools/add-projects.d.ts +3 -3
  12. package/dist/tools/add-tasks.d.ts +6 -3
  13. package/dist/tools/add-tasks.d.ts.map +1 -1
  14. package/dist/tools/delete-object.d.ts +1 -1
  15. package/dist/tools/find-completed-tasks.d.ts +16 -10
  16. package/dist/tools/find-completed-tasks.d.ts.map +1 -1
  17. package/dist/tools/find-completed-tasks.js +23 -4
  18. package/dist/tools/find-tasks-by-date.d.ts +9 -0
  19. package/dist/tools/find-tasks-by-date.d.ts.map +1 -1
  20. package/dist/tools/find-tasks-by-date.js +39 -15
  21. package/dist/tools/find-tasks.d.ts +5 -2
  22. package/dist/tools/find-tasks.d.ts.map +1 -1
  23. package/dist/tools/find-tasks.js +20 -36
  24. package/dist/tools/update-comments.d.ts +3 -3
  25. package/dist/tools/update-sections.d.ts +3 -3
  26. package/dist/tools/update-tasks.d.ts +9 -6
  27. package/dist/tools/update-tasks.d.ts.map +1 -1
  28. package/dist/utils/test-helpers.d.ts +3 -0
  29. package/dist/utils/test-helpers.d.ts.map +1 -1
  30. package/dist/utils/test-helpers.js +3 -0
  31. package/dist/utils/user-resolver.d.ts +2 -4
  32. package/dist/utils/user-resolver.d.ts.map +1 -1
  33. package/dist/utils/user-resolver.js +5 -5
  34. package/package.json +4 -4
@@ -0,0 +1,51 @@
1
+ import type { TodoistApi } from '@doist/todoist-api-typescript';
2
+ export declare const RESPONSIBLE_USER_FILTERING: readonly ["assigned", "unassignedOrMe", "all"];
3
+ export type ResponsibleUserFiltering = (typeof RESPONSIBLE_USER_FILTERING)[number];
4
+ /**
5
+ * Resolves a responsible user name/email to user ID and email.
6
+ * @param client - Todoist API client
7
+ * @param responsibleUser - User identifier (can be user ID, name, or email)
8
+ * @returns Object with userId and email, or undefined if not provided
9
+ * @throws Error if user cannot be found
10
+ */
11
+ export declare function resolveResponsibleUser(client: TodoistApi, responsibleUser: string | undefined): Promise<{
12
+ userId: string;
13
+ email: string;
14
+ } | undefined>;
15
+ /**
16
+ * Appends a filter component to a query string with proper ' & ' separator.
17
+ * @param query - The existing query string
18
+ * @param filterComponent - The filter component to append
19
+ * @returns The updated query string
20
+ */
21
+ export declare function appendToQuery(query: string, filterComponent: string): string;
22
+ /**
23
+ * Builds a query filter string for responsible user filtering that can be appended to a Todoist filter query.
24
+ * @param resolvedAssigneeId - The resolved assignee ID (if provided)
25
+ * @param assigneeEmail - The assignee email (if provided)
26
+ * @param responsibleUserFiltering - The filtering mode ('assigned', 'unassignedOrMe', 'all')
27
+ * @returns Query filter string (e.g., "assigned to: email@example.com" or "!assigned to: others")
28
+ */
29
+ export declare function buildResponsibleUserQueryFilter({ resolvedAssigneeId, assigneeEmail, responsibleUserFiltering, }: {
30
+ resolvedAssigneeId: string | undefined;
31
+ assigneeEmail: string | undefined;
32
+ responsibleUserFiltering?: ResponsibleUserFiltering;
33
+ }): string;
34
+ /**
35
+ * Filters tasks based on responsible user logic:
36
+ * - If resolvedAssigneeId is provided: returns only tasks assigned to that user
37
+ * - If no resolvedAssigneeId: returns only unassigned tasks or tasks assigned to current user
38
+ * @param tasks - Array of tasks to filter (must have responsibleUid property)
39
+ * @param resolvedAssigneeId - The resolved assignee ID to filter by (optional)
40
+ * @param currentUserId - The current authenticated user's ID
41
+ * @returns Filtered array of tasks
42
+ */
43
+ export declare function filterTasksByResponsibleUser<T extends {
44
+ responsibleUid: string | null;
45
+ }>({ tasks, resolvedAssigneeId, currentUserId, responsibleUserFiltering, }: {
46
+ tasks: T[];
47
+ resolvedAssigneeId: string | undefined;
48
+ currentUserId: string;
49
+ responsibleUserFiltering?: ResponsibleUserFiltering;
50
+ }): T[];
51
+ //# sourceMappingURL=filter-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-helpers.d.ts","sourceRoot":"","sources":["../src/filter-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAG/D,eAAO,MAAM,0BAA0B,gDAAiD,CAAA;AACxF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAElF;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,UAAU,EAClB,eAAe,EAAE,MAAM,GAAG,SAAS,GACpC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAaxD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,EAC5C,kBAAkB,EAClB,aAAa,EACb,wBAA2C,GAC9C,EAAE;IACC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;CACtD,GAAG,MAAM,CAmBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS;IAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,EACtF,KAAK,EACL,kBAAkB,EAClB,aAAa,EACb,wBAA2C,GAC9C,EAAE;IACC,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;CACtD,GAAG,CAAC,EAAE,CAUN"}
@@ -0,0 +1,79 @@
1
+ import { resolveUserNameToId } from './utils/user-resolver.js';
2
+ export const RESPONSIBLE_USER_FILTERING = ['assigned', 'unassignedOrMe', 'all'];
3
+ /**
4
+ * Resolves a responsible user name/email to user ID and email.
5
+ * @param client - Todoist API client
6
+ * @param responsibleUser - User identifier (can be user ID, name, or email)
7
+ * @returns Object with userId and email, or undefined if not provided
8
+ * @throws Error if user cannot be found
9
+ */
10
+ export async function resolveResponsibleUser(client, responsibleUser) {
11
+ if (!responsibleUser) {
12
+ return undefined;
13
+ }
14
+ const resolved = await resolveUserNameToId(client, responsibleUser);
15
+ if (!resolved) {
16
+ throw new Error(`Could not find user: "${responsibleUser}". Make sure the user is a collaborator on a shared project.`);
17
+ }
18
+ return { userId: resolved.userId, email: resolved.email };
19
+ }
20
+ /**
21
+ * Appends a filter component to a query string with proper ' & ' separator.
22
+ * @param query - The existing query string
23
+ * @param filterComponent - The filter component to append
24
+ * @returns The updated query string
25
+ */
26
+ export function appendToQuery(query, filterComponent) {
27
+ if (filterComponent.length === 0) {
28
+ return query;
29
+ }
30
+ if (query.length === 0) {
31
+ return filterComponent;
32
+ }
33
+ return `${query} & ${filterComponent}`;
34
+ }
35
+ /**
36
+ * Builds a query filter string for responsible user filtering that can be appended to a Todoist filter query.
37
+ * @param resolvedAssigneeId - The resolved assignee ID (if provided)
38
+ * @param assigneeEmail - The assignee email (if provided)
39
+ * @param responsibleUserFiltering - The filtering mode ('assigned', 'unassignedOrMe', 'all')
40
+ * @returns Query filter string (e.g., "assigned to: email@example.com" or "!assigned to: others")
41
+ */
42
+ export function buildResponsibleUserQueryFilter({ resolvedAssigneeId, assigneeEmail, responsibleUserFiltering = 'unassignedOrMe', }) {
43
+ if (resolvedAssigneeId && assigneeEmail) {
44
+ // If specific user is provided, filter by that user
45
+ return `assigned to: ${assigneeEmail}`;
46
+ }
47
+ // Otherwise use the filtering mode
48
+ if (responsibleUserFiltering === 'unassignedOrMe') {
49
+ // Exclude tasks assigned to others (keeps unassigned + assigned to me)
50
+ return '!assigned to: others';
51
+ }
52
+ if (responsibleUserFiltering === 'assigned') {
53
+ // Only tasks assigned to others
54
+ return 'assigned to: others';
55
+ }
56
+ // For 'all', don't add any assignment filter
57
+ return '';
58
+ }
59
+ /**
60
+ * Filters tasks based on responsible user logic:
61
+ * - If resolvedAssigneeId is provided: returns only tasks assigned to that user
62
+ * - If no resolvedAssigneeId: returns only unassigned tasks or tasks assigned to current user
63
+ * @param tasks - Array of tasks to filter (must have responsibleUid property)
64
+ * @param resolvedAssigneeId - The resolved assignee ID to filter by (optional)
65
+ * @param currentUserId - The current authenticated user's ID
66
+ * @returns Filtered array of tasks
67
+ */
68
+ export function filterTasksByResponsibleUser({ tasks, resolvedAssigneeId, currentUserId, responsibleUserFiltering = 'unassignedOrMe', }) {
69
+ if (resolvedAssigneeId) {
70
+ // If responsibleUser provided, only return tasks assigned to that user
71
+ return tasks.filter((task) => task.responsibleUid === resolvedAssigneeId);
72
+ }
73
+ else {
74
+ // If no responsibleUser, only return unassigned tasks or tasks assigned to current user
75
+ return responsibleUserFiltering === 'unassignedOrMe'
76
+ ? tasks.filter((task) => !task.responsibleUid || task.responsibleUid === currentUserId)
77
+ : tasks;
78
+ }
79
+ }
package/dist/index.d.ts CHANGED
@@ -40,8 +40,8 @@ declare const tools: {
40
40
  }, "strip", import("zod").ZodTypeAny, {
41
41
  content: string;
42
42
  description?: string | undefined;
43
- projectId?: string | undefined;
44
43
  parentId?: string | undefined;
44
+ projectId?: string | undefined;
45
45
  sectionId?: string | undefined;
46
46
  labels?: string[] | undefined;
47
47
  duration?: string | undefined;
@@ -51,8 +51,8 @@ declare const tools: {
51
51
  }, {
52
52
  content: string;
53
53
  description?: string | undefined;
54
- projectId?: string | undefined;
55
54
  parentId?: string | undefined;
55
+ projectId?: string | undefined;
56
56
  sectionId?: string | undefined;
57
57
  labels?: string[] | undefined;
58
58
  duration?: string | undefined;
@@ -65,8 +65,8 @@ declare const tools: {
65
65
  tasks: {
66
66
  content: string;
67
67
  description?: string | undefined;
68
- projectId?: string | undefined;
69
68
  parentId?: string | undefined;
69
+ projectId?: string | undefined;
70
70
  sectionId?: string | undefined;
71
71
  labels?: string[] | undefined;
72
72
  duration?: string | undefined;
@@ -94,6 +94,9 @@ declare const tools: {
94
94
  duration: string | null;
95
95
  responsibleUid: string | null;
96
96
  assignedByUid: string | null;
97
+ checked: boolean;
98
+ completedAt: string | null;
99
+ updatedAt: string | null;
97
100
  }[];
98
101
  totalCount: number;
99
102
  };
@@ -166,10 +169,10 @@ declare const tools: {
166
169
  labels: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
167
170
  }, "strip", import("zod").ZodTypeAny, {
168
171
  id: string;
169
- content?: string | undefined;
170
172
  description?: string | undefined;
171
- projectId?: string | undefined;
172
173
  parentId?: string | undefined;
174
+ content?: string | undefined;
175
+ projectId?: string | undefined;
173
176
  sectionId?: string | undefined;
174
177
  labels?: string[] | undefined;
175
178
  duration?: string | undefined;
@@ -179,10 +182,10 @@ declare const tools: {
179
182
  order?: number | undefined;
180
183
  }, {
181
184
  id: string;
182
- content?: string | undefined;
183
185
  description?: string | undefined;
184
- projectId?: string | undefined;
185
186
  parentId?: string | undefined;
187
+ content?: string | undefined;
188
+ projectId?: string | undefined;
186
189
  sectionId?: string | undefined;
187
190
  labels?: string[] | undefined;
188
191
  duration?: string | undefined;
@@ -195,10 +198,10 @@ declare const tools: {
195
198
  execute(args: {
196
199
  tasks: {
197
200
  id: string;
198
- content?: string | undefined;
199
201
  description?: string | undefined;
200
- projectId?: string | undefined;
201
202
  parentId?: string | undefined;
203
+ content?: string | undefined;
204
+ projectId?: string | undefined;
202
205
  sectionId?: string | undefined;
203
206
  labels?: string[] | undefined;
204
207
  duration?: string | undefined;
@@ -227,6 +230,9 @@ declare const tools: {
227
230
  duration: string | null;
228
231
  responsibleUid: string | null;
229
232
  assignedByUid: string | null;
233
+ checked: boolean;
234
+ completedAt: string | null;
235
+ updatedAt: string | null;
230
236
  }[];
231
237
  totalCount: number;
232
238
  updatedTaskIds: string[];
@@ -265,9 +271,9 @@ declare const tools: {
265
271
  };
266
272
  execute(args: {
267
273
  limit: number;
268
- projectId?: string | undefined;
269
274
  parentId?: string | undefined;
270
275
  responsibleUserFiltering?: "assigned" | "unassignedOrMe" | "all" | undefined;
276
+ projectId?: string | undefined;
271
277
  sectionId?: string | undefined;
272
278
  labels?: string[] | undefined;
273
279
  cursor?: string | undefined;
@@ -294,15 +300,18 @@ declare const tools: {
294
300
  duration: string | null;
295
301
  responsibleUid: string | null;
296
302
  assignedByUid: string | null;
303
+ checked: boolean;
304
+ completedAt: string | null;
305
+ updatedAt: string | null;
297
306
  }[];
298
307
  nextCursor: string | null;
299
308
  totalCount: number;
300
309
  hasMore: boolean;
301
310
  appliedFilters: {
302
311
  limit: number;
303
- projectId?: string | undefined;
304
312
  parentId?: string | undefined;
305
313
  responsibleUserFiltering?: "assigned" | "unassignedOrMe" | "all" | undefined;
314
+ projectId?: string | undefined;
306
315
  sectionId?: string | undefined;
307
316
  labels?: string[] | undefined;
308
317
  cursor?: string | undefined;
@@ -335,12 +344,16 @@ declare const tools: {
335
344
  daysCount: import("zod").ZodDefault<import("zod").ZodNumber>;
336
345
  limit: import("zod").ZodDefault<import("zod").ZodNumber>;
337
346
  cursor: import("zod").ZodOptional<import("zod").ZodString>;
347
+ responsibleUser: import("zod").ZodOptional<import("zod").ZodString>;
348
+ responsibleUserFiltering: import("zod").ZodOptional<import("zod").ZodEnum<["assigned", "unassignedOrMe", "all"]>>;
338
349
  };
339
350
  execute(args: {
340
351
  limit: number;
341
352
  daysCount: number;
353
+ responsibleUserFiltering?: "assigned" | "unassignedOrMe" | "all" | undefined;
342
354
  labels?: string[] | undefined;
343
355
  cursor?: string | undefined;
356
+ responsibleUser?: string | undefined;
344
357
  labelsOperator?: "and" | "or" | undefined;
345
358
  startDate?: string | undefined;
346
359
  overdueOption?: "overdue-only" | "include-overdue" | "exclude-overdue" | undefined;
@@ -364,6 +377,9 @@ declare const tools: {
364
377
  duration: string | null;
365
378
  responsibleUid: string | null;
366
379
  assignedByUid: string | null;
380
+ checked: boolean;
381
+ completedAt: string | null;
382
+ updatedAt: string | null;
367
383
  }[];
368
384
  nextCursor: string | null;
369
385
  totalCount: number;
@@ -371,8 +387,10 @@ declare const tools: {
371
387
  appliedFilters: {
372
388
  limit: number;
373
389
  daysCount: number;
390
+ responsibleUserFiltering?: "assigned" | "unassignedOrMe" | "all" | undefined;
374
391
  labels?: string[] | undefined;
375
392
  cursor?: string | undefined;
393
+ responsibleUser?: string | undefined;
376
394
  labelsOperator?: "and" | "or" | undefined;
377
395
  startDate?: string | undefined;
378
396
  overdueOption?: "overdue-only" | "include-overdue" | "exclude-overdue" | undefined;
@@ -404,6 +422,7 @@ declare const tools: {
404
422
  projectId: import("zod").ZodOptional<import("zod").ZodString>;
405
423
  sectionId: import("zod").ZodOptional<import("zod").ZodString>;
406
424
  parentId: import("zod").ZodOptional<import("zod").ZodString>;
425
+ responsibleUser: import("zod").ZodOptional<import("zod").ZodString>;
407
426
  limit: import("zod").ZodDefault<import("zod").ZodNumber>;
408
427
  cursor: import("zod").ZodOptional<import("zod").ZodString>;
409
428
  };
@@ -412,12 +431,13 @@ declare const tools: {
412
431
  getBy: "due" | "completion";
413
432
  since: string;
414
433
  until: string;
415
- projectId?: string | undefined;
416
434
  parentId?: string | undefined;
417
435
  workspaceId?: string | undefined;
436
+ projectId?: string | undefined;
418
437
  sectionId?: string | undefined;
419
438
  labels?: string[] | undefined;
420
439
  cursor?: string | undefined;
440
+ responsibleUser?: string | undefined;
421
441
  labelsOperator?: "and" | "or" | undefined;
422
442
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
423
443
  content: {
@@ -439,6 +459,9 @@ declare const tools: {
439
459
  duration: string | null;
440
460
  responsibleUid: string | null;
441
461
  assignedByUid: string | null;
462
+ checked: boolean;
463
+ completedAt: string | null;
464
+ updatedAt: string | null;
442
465
  }[];
443
466
  nextCursor: string | null;
444
467
  totalCount: number;
@@ -448,12 +471,13 @@ declare const tools: {
448
471
  getBy: "due" | "completion";
449
472
  since: string;
450
473
  until: string;
451
- projectId?: string | undefined;
452
474
  parentId?: string | undefined;
453
475
  workspaceId?: string | undefined;
476
+ projectId?: string | undefined;
454
477
  sectionId?: string | undefined;
455
478
  labels?: string[] | undefined;
456
479
  cursor?: string | undefined;
480
+ responsibleUser?: string | undefined;
457
481
  labelsOperator?: "and" | "or" | undefined;
458
482
  };
459
483
  };
@@ -481,22 +505,22 @@ declare const tools: {
481
505
  viewStyle: import("zod").ZodOptional<import("zod").ZodEnum<["list", "board", "calendar"]>>;
482
506
  }, "strip", import("zod").ZodTypeAny, {
483
507
  name: string;
484
- parentId?: string | undefined;
485
508
  isFavorite?: boolean | undefined;
486
509
  viewStyle?: "list" | "board" | "calendar" | undefined;
510
+ parentId?: string | undefined;
487
511
  }, {
488
512
  name: string;
489
- parentId?: string | undefined;
490
513
  isFavorite?: boolean | undefined;
491
514
  viewStyle?: "list" | "board" | "calendar" | undefined;
515
+ parentId?: string | undefined;
492
516
  }>, "many">;
493
517
  };
494
518
  execute({ projects }: {
495
519
  projects: {
496
520
  name: string;
497
- parentId?: string | undefined;
498
521
  isFavorite?: boolean | undefined;
499
522
  viewStyle?: "list" | "board" | "calendar" | undefined;
523
+ parentId?: string | undefined;
500
524
  }[];
501
525
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
502
526
  content: {
@@ -778,17 +802,17 @@ declare const tools: {
778
802
  id: import("zod").ZodString;
779
803
  name: import("zod").ZodString;
780
804
  }, "strip", import("zod").ZodTypeAny, {
781
- name: string;
782
805
  id: string;
783
- }, {
784
806
  name: string;
807
+ }, {
785
808
  id: string;
809
+ name: string;
786
810
  }>, "many">;
787
811
  };
788
812
  execute({ sections }: {
789
813
  sections: {
790
- name: string;
791
814
  id: string;
815
+ name: string;
792
816
  }[];
793
817
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
794
818
  content: {
@@ -944,17 +968,17 @@ declare const tools: {
944
968
  id: import("zod").ZodString;
945
969
  content: import("zod").ZodString;
946
970
  }, "strip", import("zod").ZodTypeAny, {
947
- content: string;
948
971
  id: string;
949
- }, {
950
972
  content: string;
973
+ }, {
951
974
  id: string;
975
+ content: string;
952
976
  }>, "many">;
953
977
  };
954
978
  execute(args: {
955
979
  comments: {
956
- content: string;
957
980
  id: string;
981
+ content: string;
958
982
  }[];
959
983
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
960
984
  content: {
@@ -1107,8 +1131,8 @@ declare const tools: {
1107
1131
  id: import("zod").ZodString;
1108
1132
  };
1109
1133
  execute(args: {
1110
- type: "task" | "comment" | "project" | "section";
1111
1134
  id: string;
1135
+ type: "task" | "comment" | "project" | "section";
1112
1136
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
1113
1137
  content: {
1114
1138
  type: "text";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAEpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAiE6yX,CAAC;gCAA6C,CAAC;gCAA6C,CAAC;+BAA4C,CAAC;oCAAiD,CAAC;mCAAgD,CAAC;6BAA2D,CAAC;kCAA+C,CAAC;mCAAgD,CAAC;2BAAwC,CAAC;6BAA0C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAA9d,CAAC;gCAA6C,CAAC;gCAA6C,CAAC;+BAA4C,CAAC;oCAAiD,CAAC;mCAAgD,CAAC;6BAA2D,CAAC;kCAA+C,CAAC;mCAAgD,CAAC;2BAAwC,CAAC;6BAA0C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAA9d,CAAC;gCAA6C,CAAC;gCAA6C,CAAC;+BAA4C,CAAC;oCAAiD,CAAC;mCAAgD,CAAC;6BAA2D,CAAC;kCAA+C,CAAC;mCAAgD,CAAC;2BAAwC,CAAC;6BAA0C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAnCrxY,CAAA;AAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;AAE9B,OAAO,EAEH,QAAQ,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,kBAAkB,EAElB,WAAW,EACX,cAAc,EACd,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,YAAY,EAEZ,WAAW,EACX,YAAY,EACZ,QAAQ,EAER,wBAAwB,EACxB,iBAAiB,EAEjB,MAAM,EACN,KAAK,GACR,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,8 @@
1
1
  import type { MoveTaskArgs, PersonalProject, Task, TodoistApi, WorkspaceProject } from '@doist/todoist-api-typescript';
2
- export declare const RESPONSIBLE_USER_FILTERING: readonly ["assigned", "unassignedOrMe", "all"];
3
- export type ResponsibleUserFiltering = (typeof RESPONSIBLE_USER_FILTERING)[number];
2
+ export { appendToQuery, buildResponsibleUserQueryFilter, filterTasksByResponsibleUser, RESPONSIBLE_USER_FILTERING, type ResponsibleUserFiltering, resolveResponsibleUser, } from './filter-helpers.js';
4
3
  export type Project = PersonalProject | WorkspaceProject;
5
4
  export declare function isPersonalProject(project: Project): project is PersonalProject;
6
5
  export declare function isWorkspaceProject(project: Project): project is WorkspaceProject;
7
- /**
8
- * Filters tasks based on responsible user logic:
9
- * - If resolvedAssigneeId is provided: returns only tasks assigned to that user
10
- * - If no resolvedAssigneeId: returns only unassigned tasks or tasks assigned to current user
11
- * @param tasks - Array of tasks to filter (must have responsibleUid property)
12
- * @param resolvedAssigneeId - The resolved assignee ID to filter by (optional)
13
- * @param currentUserId - The current authenticated user's ID
14
- * @returns Filtered array of tasks
15
- */
16
- export declare function filterTasksByResponsibleUser<T extends {
17
- responsibleUid: string | null;
18
- }>({ tasks, resolvedAssigneeId, currentUserId, responsibleUserFiltering, }: {
19
- tasks: T[];
20
- resolvedAssigneeId: string | undefined;
21
- currentUserId: string;
22
- responsibleUserFiltering?: ResponsibleUserFiltering;
23
- }): T[];
24
6
  /**
25
7
  * Creates a MoveTaskArgs object from move parameters, validating that exactly one is provided.
26
8
  * @param taskId - The task ID (used for error messages)
@@ -50,6 +32,9 @@ declare function mapTask(task: Task): {
50
32
  duration: string | null;
51
33
  responsibleUid: string | null;
52
34
  assignedByUid: string | null;
35
+ checked: boolean;
36
+ completedAt: string | null;
37
+ updatedAt: string | null;
53
38
  };
54
39
  /**
55
40
  * Map a single Todoist project to a more structured format, for LLM consumption.
@@ -86,6 +71,9 @@ declare function getTasksByFilter({ client, query, limit, cursor, }: {
86
71
  duration: string | null;
87
72
  responsibleUid: string | null;
88
73
  assignedByUid: string | null;
74
+ checked: boolean;
75
+ completedAt: string | null;
76
+ updatedAt: string | null;
89
77
  }[];
90
78
  nextCursor: string | null;
91
79
  }>;
@@ -96,5 +84,5 @@ declare function getTasksByFilter({ client, query, limit, cursor, }: {
96
84
  * @returns The URL string
97
85
  */
98
86
  declare function buildTodoistUrl(type: 'task' | 'project', id: string): string;
99
- export { getTasksByFilter, mapTask, mapProject, buildTodoistUrl };
87
+ export { buildTodoistUrl, getTasksByFilter, mapProject, mapTask };
100
88
  //# sourceMappingURL=tool-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../src/tool-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,UAAU,EACV,gBAAgB,EACnB,MAAM,+BAA+B,CAAA;AAItC,eAAO,MAAM,0BAA0B,gDAAiD,CAAA;AACxF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAElF,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,gBAAgB,CAAA;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS;IAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,EACtF,KAAK,EACL,kBAAkB,EAClB,aAAa,EACb,wBAA2C,GAC9C,EAAE;IACC,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;CACtD,GAAG,CAAC,EAAE,CAUN;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAClB,YAAY,CAsBd;AAED;;;;GAIG;AACH,iBAAS,OAAO,CAAC,IAAI,EAAE,IAAI;;;;;;;;;;;;;;EAgB1B;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,OAAO,EAAE,OAAO;;;;;;;;;EAWnC;AAWD,iBAAe,gBAAgB,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,GACT,EAAE;IACC,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B;;;;;;;;;;;;;;;;;GAkBA;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../src/tool-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,UAAU,EACV,gBAAgB,EACnB,MAAM,+BAA+B,CAAA;AAKtC,OAAO,EACH,aAAa,EACb,+BAA+B,EAC/B,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,wBAAwB,EAC7B,sBAAsB,GACzB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,gBAAgB,CAAA;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAClB,YAAY,CAsBd;AAED;;;;GAIG;AACH,iBAAS,OAAO,CAAC,IAAI,EAAE,IAAI;;;;;;;;;;;;;;;;;EAmB1B;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,OAAO,EAAE,OAAO;;;;;;;;;EAWnC;AAWD,iBAAe,gBAAgB,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,GACT,EAAE;IACC,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B;;;;;;;;;;;;;;;;;;;;GAkBA;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA"}
@@ -1,33 +1,13 @@
1
1
  import z from 'zod';
2
2
  import { formatDuration } from './utils/duration-parser.js';
3
- export const RESPONSIBLE_USER_FILTERING = ['assigned', 'unassignedOrMe', 'all'];
3
+ // Re-export filter helpers for backward compatibility
4
+ export { appendToQuery, buildResponsibleUserQueryFilter, filterTasksByResponsibleUser, RESPONSIBLE_USER_FILTERING, resolveResponsibleUser, } from './filter-helpers.js';
4
5
  export function isPersonalProject(project) {
5
6
  return 'inboxProject' in project;
6
7
  }
7
8
  export function isWorkspaceProject(project) {
8
9
  return 'accessLevel' in project;
9
10
  }
10
- /**
11
- * Filters tasks based on responsible user logic:
12
- * - If resolvedAssigneeId is provided: returns only tasks assigned to that user
13
- * - If no resolvedAssigneeId: returns only unassigned tasks or tasks assigned to current user
14
- * @param tasks - Array of tasks to filter (must have responsibleUid property)
15
- * @param resolvedAssigneeId - The resolved assignee ID to filter by (optional)
16
- * @param currentUserId - The current authenticated user's ID
17
- * @returns Filtered array of tasks
18
- */
19
- export function filterTasksByResponsibleUser({ tasks, resolvedAssigneeId, currentUserId, responsibleUserFiltering = 'unassignedOrMe', }) {
20
- if (resolvedAssigneeId) {
21
- // If responsibleUser provided, only return tasks assigned to that user
22
- return tasks.filter((task) => task.responsibleUid === resolvedAssigneeId);
23
- }
24
- else {
25
- // If no responsibleUser, only return unassigned tasks or tasks assigned to current user
26
- return responsibleUserFiltering === 'unassignedOrMe'
27
- ? tasks.filter((task) => !task.responsibleUid || task.responsibleUid === currentUserId)
28
- : tasks;
29
- }
30
- }
31
11
  /**
32
12
  * Creates a MoveTaskArgs object from move parameters, validating that exactly one is provided.
33
13
  * @param taskId - The task ID (used for error messages)
@@ -76,6 +56,9 @@ function mapTask(task) {
76
56
  duration: task.duration ? formatDuration(task.duration.amount) : null,
77
57
  responsibleUid: task.responsibleUid,
78
58
  assignedByUid: task.assignedByUid,
59
+ checked: task.checked,
60
+ completedAt: task.completedAt,
61
+ updatedAt: task.updatedAt,
79
62
  };
80
63
  }
81
64
  /**
@@ -130,4 +113,4 @@ async function getTasksByFilter({ client, query, limit, cursor, }) {
130
113
  function buildTodoistUrl(type, id) {
131
114
  return `https://app.todoist.com/app/${type}/${id}`;
132
115
  }
133
- export { getTasksByFilter, mapTask, mapProject, buildTodoistUrl };
116
+ export { buildTodoistUrl, getTasksByFilter, mapProject, mapTask };