@doist/todoist-ai 2.2.2 → 4.0.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 (202) hide show
  1. package/README.md +6 -14
  2. package/dist/index.d.ts +619 -250
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +45 -29
  5. package/dist/main.js +2 -1
  6. package/dist/mcp-helpers.d.ts +25 -3
  7. package/dist/mcp-helpers.d.ts.map +1 -1
  8. package/dist/mcp-helpers.js +37 -19
  9. package/dist/mcp-server.d.ts.map +1 -1
  10. package/dist/mcp-server.js +44 -28
  11. package/dist/tools/__tests__/add-comments.test.d.ts +2 -0
  12. package/dist/tools/__tests__/add-comments.test.d.ts.map +1 -0
  13. package/dist/tools/__tests__/add-comments.test.js +241 -0
  14. package/dist/tools/__tests__/add-projects.test.d.ts +2 -0
  15. package/dist/tools/__tests__/add-projects.test.d.ts.map +1 -0
  16. package/dist/tools/__tests__/add-projects.test.js +152 -0
  17. package/dist/tools/__tests__/add-sections.test.d.ts +2 -0
  18. package/dist/tools/__tests__/add-sections.test.d.ts.map +1 -0
  19. package/dist/tools/__tests__/add-sections.test.js +181 -0
  20. package/dist/tools/__tests__/add-tasks.test.d.ts +2 -0
  21. package/dist/tools/__tests__/add-tasks.test.d.ts.map +1 -0
  22. package/dist/tools/__tests__/{tasks-add-multiple.test.js → add-tasks.test.js} +89 -79
  23. package/dist/tools/__tests__/complete-tasks.test.d.ts +2 -0
  24. package/dist/tools/__tests__/complete-tasks.test.d.ts.map +1 -0
  25. package/dist/tools/__tests__/complete-tasks.test.js +206 -0
  26. package/dist/tools/__tests__/delete-object.test.d.ts +2 -0
  27. package/dist/tools/__tests__/delete-object.test.d.ts.map +1 -0
  28. package/dist/tools/__tests__/{delete-one.test.js → delete-object.test.js} +42 -22
  29. package/dist/tools/__tests__/find-comments.test.d.ts +2 -0
  30. package/dist/tools/__tests__/find-comments.test.d.ts.map +1 -0
  31. package/dist/tools/__tests__/find-comments.test.js +242 -0
  32. package/dist/tools/__tests__/find-completed-tasks.test.d.ts +2 -0
  33. package/dist/tools/__tests__/find-completed-tasks.test.d.ts.map +1 -0
  34. package/dist/tools/__tests__/{tasks-list-completed.test.js → find-completed-tasks.test.js} +13 -36
  35. package/dist/tools/__tests__/find-projects.test.d.ts +2 -0
  36. package/dist/tools/__tests__/find-projects.test.d.ts.map +1 -0
  37. package/dist/tools/__tests__/{projects-list.test.js → find-projects.test.js} +55 -39
  38. package/dist/tools/__tests__/find-sections.test.d.ts +2 -0
  39. package/dist/tools/__tests__/find-sections.test.d.ts.map +1 -0
  40. package/dist/tools/__tests__/{sections-search.test.js → find-sections.test.js} +64 -50
  41. package/dist/tools/__tests__/find-tasks-by-date.test.d.ts +2 -0
  42. package/dist/tools/__tests__/find-tasks-by-date.test.d.ts.map +1 -0
  43. package/dist/tools/__tests__/{tasks-list-by-date.test.js → find-tasks-by-date.test.js} +96 -14
  44. package/dist/tools/__tests__/find-tasks.test.d.ts +2 -0
  45. package/dist/tools/__tests__/find-tasks.test.d.ts.map +1 -0
  46. package/dist/tools/__tests__/find-tasks.test.js +334 -0
  47. package/dist/tools/__tests__/get-overview.test.d.ts +2 -0
  48. package/dist/tools/__tests__/get-overview.test.d.ts.map +1 -0
  49. package/dist/tools/__tests__/{overview.test.js → get-overview.test.js} +77 -13
  50. package/dist/tools/__tests__/update-comments.test.d.ts +2 -0
  51. package/dist/tools/__tests__/update-comments.test.d.ts.map +1 -0
  52. package/dist/tools/__tests__/update-comments.test.js +296 -0
  53. package/dist/tools/__tests__/update-projects.test.d.ts +2 -0
  54. package/dist/tools/__tests__/update-projects.test.d.ts.map +1 -0
  55. package/dist/tools/__tests__/update-projects.test.js +205 -0
  56. package/dist/tools/__tests__/update-sections.test.d.ts +2 -0
  57. package/dist/tools/__tests__/update-sections.test.d.ts.map +1 -0
  58. package/dist/tools/__tests__/update-sections.test.js +156 -0
  59. package/dist/tools/__tests__/update-tasks.test.d.ts +2 -0
  60. package/dist/tools/__tests__/update-tasks.test.d.ts.map +1 -0
  61. package/dist/tools/__tests__/update-tasks.test.js +645 -0
  62. package/dist/tools/add-comments.d.ts +51 -0
  63. package/dist/tools/add-comments.d.ts.map +1 -0
  64. package/dist/tools/add-comments.js +79 -0
  65. package/dist/tools/add-projects.d.ts +50 -0
  66. package/dist/tools/add-projects.d.ts.map +1 -0
  67. package/dist/tools/add-projects.js +59 -0
  68. package/dist/tools/add-sections.d.ts +46 -0
  69. package/dist/tools/add-sections.d.ts.map +1 -0
  70. package/dist/tools/add-sections.js +61 -0
  71. package/dist/tools/add-tasks.d.ts +82 -0
  72. package/dist/tools/add-tasks.d.ts.map +1 -0
  73. package/dist/tools/add-tasks.js +96 -0
  74. package/dist/tools/complete-tasks.d.ts +40 -0
  75. package/dist/tools/complete-tasks.d.ts.map +1 -0
  76. package/dist/tools/complete-tasks.js +68 -0
  77. package/dist/tools/delete-object.d.ts +38 -0
  78. package/dist/tools/delete-object.d.ts.map +1 -0
  79. package/dist/tools/delete-object.js +79 -0
  80. package/dist/tools/find-comments.d.ts +46 -0
  81. package/dist/tools/find-comments.d.ts.map +1 -0
  82. package/dist/tools/find-comments.js +143 -0
  83. package/dist/tools/find-completed-tasks.d.ts +74 -0
  84. package/dist/tools/find-completed-tasks.d.ts.map +1 -0
  85. package/dist/tools/find-completed-tasks.js +112 -0
  86. package/dist/tools/find-projects.d.ts +53 -0
  87. package/dist/tools/find-projects.d.ts.map +1 -0
  88. package/dist/tools/find-projects.js +101 -0
  89. package/dist/tools/find-sections.d.ts +42 -0
  90. package/dist/tools/find-sections.d.ts.map +1 -0
  91. package/dist/tools/find-sections.js +96 -0
  92. package/dist/tools/find-tasks-by-date.d.ts +59 -0
  93. package/dist/tools/find-tasks-by-date.d.ts.map +1 -0
  94. package/dist/tools/find-tasks-by-date.js +121 -0
  95. package/dist/tools/find-tasks.d.ts +65 -0
  96. package/dist/tools/find-tasks.d.ts.map +1 -0
  97. package/dist/tools/find-tasks.js +182 -0
  98. package/dist/tools/get-overview.d.ts +67 -0
  99. package/dist/tools/get-overview.d.ts.map +1 -0
  100. package/dist/tools/{overview.js → get-overview.js} +66 -19
  101. package/dist/tools/update-comments.d.ts +50 -0
  102. package/dist/tools/update-comments.d.ts.map +1 -0
  103. package/dist/tools/update-comments.js +82 -0
  104. package/dist/tools/update-projects.d.ts +59 -0
  105. package/dist/tools/update-projects.d.ts.map +1 -0
  106. package/dist/tools/update-projects.js +84 -0
  107. package/dist/tools/update-sections.d.ts +47 -0
  108. package/dist/tools/update-sections.d.ts.map +1 -0
  109. package/dist/tools/update-sections.js +70 -0
  110. package/dist/tools/update-tasks.d.ts +94 -0
  111. package/dist/tools/update-tasks.d.ts.map +1 -0
  112. package/dist/tools/update-tasks.js +120 -0
  113. package/dist/utils/constants.d.ts +39 -0
  114. package/dist/utils/constants.d.ts.map +1 -0
  115. package/dist/utils/constants.js +41 -0
  116. package/dist/utils/response-builders.d.ts +88 -0
  117. package/dist/utils/response-builders.d.ts.map +1 -0
  118. package/dist/utils/response-builders.js +202 -0
  119. package/dist/{tools → utils}/test-helpers.d.ts +16 -0
  120. package/dist/utils/test-helpers.d.ts.map +1 -0
  121. package/dist/{tools → utils}/test-helpers.js +51 -0
  122. package/dist/utils/tool-names.d.ts +28 -0
  123. package/dist/utils/tool-names.d.ts.map +1 -0
  124. package/dist/utils/tool-names.js +31 -0
  125. package/package.json +1 -1
  126. package/dist/tools/__tests__/delete-one.test.d.ts +0 -2
  127. package/dist/tools/__tests__/delete-one.test.d.ts.map +0 -1
  128. package/dist/tools/__tests__/overview.test.d.ts +0 -2
  129. package/dist/tools/__tests__/overview.test.d.ts.map +0 -1
  130. package/dist/tools/__tests__/projects-list.test.d.ts +0 -2
  131. package/dist/tools/__tests__/projects-list.test.d.ts.map +0 -1
  132. package/dist/tools/__tests__/projects-manage.test.d.ts +0 -2
  133. package/dist/tools/__tests__/projects-manage.test.d.ts.map +0 -1
  134. package/dist/tools/__tests__/projects-manage.test.js +0 -106
  135. package/dist/tools/__tests__/sections-manage.test.d.ts +0 -2
  136. package/dist/tools/__tests__/sections-manage.test.d.ts.map +0 -1
  137. package/dist/tools/__tests__/sections-manage.test.js +0 -138
  138. package/dist/tools/__tests__/sections-search.test.d.ts +0 -2
  139. package/dist/tools/__tests__/sections-search.test.d.ts.map +0 -1
  140. package/dist/tools/__tests__/tasks-add-multiple.test.d.ts +0 -2
  141. package/dist/tools/__tests__/tasks-add-multiple.test.d.ts.map +0 -1
  142. package/dist/tools/__tests__/tasks-complete-multiple.test.d.ts +0 -2
  143. package/dist/tools/__tests__/tasks-complete-multiple.test.d.ts.map +0 -1
  144. package/dist/tools/__tests__/tasks-complete-multiple.test.js +0 -146
  145. package/dist/tools/__tests__/tasks-list-by-date.test.d.ts +0 -2
  146. package/dist/tools/__tests__/tasks-list-by-date.test.d.ts.map +0 -1
  147. package/dist/tools/__tests__/tasks-list-completed.test.d.ts +0 -2
  148. package/dist/tools/__tests__/tasks-list-completed.test.d.ts.map +0 -1
  149. package/dist/tools/__tests__/tasks-list-for-container.test.d.ts +0 -2
  150. package/dist/tools/__tests__/tasks-list-for-container.test.d.ts.map +0 -1
  151. package/dist/tools/__tests__/tasks-list-for-container.test.js +0 -232
  152. package/dist/tools/__tests__/tasks-organize-multiple.test.d.ts +0 -2
  153. package/dist/tools/__tests__/tasks-organize-multiple.test.d.ts.map +0 -1
  154. package/dist/tools/__tests__/tasks-organize-multiple.test.js +0 -245
  155. package/dist/tools/__tests__/tasks-search.test.d.ts +0 -2
  156. package/dist/tools/__tests__/tasks-search.test.d.ts.map +0 -1
  157. package/dist/tools/__tests__/tasks-search.test.js +0 -106
  158. package/dist/tools/__tests__/tasks-update-one.test.d.ts +0 -2
  159. package/dist/tools/__tests__/tasks-update-one.test.d.ts.map +0 -1
  160. package/dist/tools/__tests__/tasks-update-one.test.js +0 -251
  161. package/dist/tools/delete-one.d.ts +0 -17
  162. package/dist/tools/delete-one.d.ts.map +0 -1
  163. package/dist/tools/delete-one.js +0 -25
  164. package/dist/tools/overview.d.ts +0 -14
  165. package/dist/tools/overview.d.ts.map +0 -1
  166. package/dist/tools/projects-list.d.ts +0 -29
  167. package/dist/tools/projects-list.d.ts.map +0 -1
  168. package/dist/tools/projects-list.js +0 -39
  169. package/dist/tools/projects-manage.d.ts +0 -24
  170. package/dist/tools/projects-manage.d.ts.map +0 -1
  171. package/dist/tools/projects-manage.js +0 -26
  172. package/dist/tools/sections-manage.d.ts +0 -23
  173. package/dist/tools/sections-manage.d.ts.map +0 -1
  174. package/dist/tools/sections-manage.js +0 -37
  175. package/dist/tools/sections-search.d.ts +0 -18
  176. package/dist/tools/sections-search.d.ts.map +0 -1
  177. package/dist/tools/sections-search.js +0 -27
  178. package/dist/tools/tasks-add-multiple.d.ts +0 -55
  179. package/dist/tools/tasks-add-multiple.d.ts.map +0 -1
  180. package/dist/tools/tasks-add-multiple.js +0 -52
  181. package/dist/tools/tasks-complete-multiple.d.ts +0 -16
  182. package/dist/tools/tasks-complete-multiple.d.ts.map +0 -1
  183. package/dist/tools/tasks-complete-multiple.js +0 -23
  184. package/dist/tools/tasks-list-by-date.d.ts +0 -34
  185. package/dist/tools/tasks-list-by-date.d.ts.map +0 -1
  186. package/dist/tools/tasks-list-by-date.js +0 -53
  187. package/dist/tools/tasks-list-completed.d.ts +0 -44
  188. package/dist/tools/tasks-list-completed.d.ts.map +0 -1
  189. package/dist/tools/tasks-list-completed.js +0 -49
  190. package/dist/tools/tasks-list-for-container.d.ts +0 -34
  191. package/dist/tools/tasks-list-for-container.d.ts.map +0 -1
  192. package/dist/tools/tasks-list-for-container.js +0 -48
  193. package/dist/tools/tasks-organize-multiple.d.ts +0 -37
  194. package/dist/tools/tasks-organize-multiple.d.ts.map +0 -1
  195. package/dist/tools/tasks-organize-multiple.js +0 -34
  196. package/dist/tools/tasks-search.d.ts +0 -32
  197. package/dist/tools/tasks-search.d.ts.map +0 -1
  198. package/dist/tools/tasks-search.js +0 -30
  199. package/dist/tools/tasks-update-one.d.ts +0 -29
  200. package/dist/tools/tasks-update-one.d.ts.map +0 -1
  201. package/dist/tools/tasks-update-one.js +0 -63
  202. package/dist/tools/test-helpers.d.ts.map +0 -1
@@ -0,0 +1,156 @@
1
+ import { jest } from '@jest/globals';
2
+ import { createMockSection, extractStructuredContent, extractTextContent, } from '../../utils/test-helpers.js';
3
+ import { ToolNames } from '../../utils/tool-names.js';
4
+ import { updateSections } from '../update-sections.js';
5
+ // Mock the Todoist API
6
+ const mockTodoistApi = {
7
+ updateSection: jest.fn(),
8
+ };
9
+ const { FIND_TASKS, UPDATE_SECTIONS, GET_OVERVIEW } = ToolNames;
10
+ describe(`${UPDATE_SECTIONS} tool`, () => {
11
+ beforeEach(() => {
12
+ jest.clearAllMocks();
13
+ });
14
+ describe('updating a single section', () => {
15
+ it('should update a section when id and name are provided', async () => {
16
+ const mockApiResponse = {
17
+ id: 'existing-section-123',
18
+ projectId: '6cfCcrrCFg2xP94Q',
19
+ sectionOrder: 1,
20
+ userId: 'test-user',
21
+ addedAt: '2024-01-01T00:00:00Z',
22
+ updatedAt: '2024-01-01T00:00:00Z',
23
+ archivedAt: null,
24
+ isArchived: false,
25
+ isDeleted: false,
26
+ isCollapsed: false,
27
+ name: 'Updated Section Name',
28
+ };
29
+ mockTodoistApi.updateSection.mockResolvedValue(mockApiResponse);
30
+ const result = await updateSections.execute({ sections: [{ id: 'existing-section-123', name: 'Updated Section Name' }] }, mockTodoistApi);
31
+ expect(mockTodoistApi.updateSection).toHaveBeenCalledWith('existing-section-123', {
32
+ name: 'Updated Section Name',
33
+ });
34
+ const textContent = extractTextContent(result);
35
+ expect(textContent).toMatchSnapshot();
36
+ expect(textContent).toContain('Updated 1 section:');
37
+ expect(textContent).toContain('Updated Section Name (id=existing-section-123, projectId=6cfCcrrCFg2xP94Q)');
38
+ expect(textContent).toContain(`Use ${FIND_TASKS} with sectionId=existing-section-123`);
39
+ // Verify structured content
40
+ const structuredContent = extractStructuredContent(result);
41
+ expect(structuredContent).toEqual(expect.objectContaining({
42
+ sections: [mockApiResponse],
43
+ totalCount: 1,
44
+ updatedSectionIds: ['existing-section-123'],
45
+ }));
46
+ });
47
+ });
48
+ describe('updating multiple sections', () => {
49
+ it('should update multiple sections and return mapped results', async () => {
50
+ const mockSections = [
51
+ createMockSection({
52
+ id: 'section-1',
53
+ projectId: 'project-1',
54
+ name: 'Updated First Section',
55
+ }),
56
+ createMockSection({
57
+ id: 'section-2',
58
+ projectId: 'project-1',
59
+ name: 'Updated Second Section',
60
+ }),
61
+ createMockSection({
62
+ id: 'section-3',
63
+ projectId: 'project-2',
64
+ name: 'Updated Third Section',
65
+ }),
66
+ ];
67
+ const [section1, section2, section3] = mockSections;
68
+ mockTodoistApi.updateSection
69
+ .mockResolvedValueOnce(section1)
70
+ .mockResolvedValueOnce(section2)
71
+ .mockResolvedValueOnce(section3);
72
+ const result = await updateSections.execute({
73
+ sections: [
74
+ { id: 'section-1', name: 'Updated First Section' },
75
+ { id: 'section-2', name: 'Updated Second Section' },
76
+ { id: 'section-3', name: 'Updated Third Section' },
77
+ ],
78
+ }, mockTodoistApi);
79
+ // Verify API was called correctly for each section
80
+ expect(mockTodoistApi.updateSection).toHaveBeenCalledTimes(3);
81
+ expect(mockTodoistApi.updateSection).toHaveBeenNthCalledWith(1, 'section-1', {
82
+ name: 'Updated First Section',
83
+ });
84
+ expect(mockTodoistApi.updateSection).toHaveBeenNthCalledWith(2, 'section-2', {
85
+ name: 'Updated Second Section',
86
+ });
87
+ expect(mockTodoistApi.updateSection).toHaveBeenNthCalledWith(3, 'section-3', {
88
+ name: 'Updated Third Section',
89
+ });
90
+ const textContent = extractTextContent(result);
91
+ expect(textContent).toMatchSnapshot();
92
+ expect(textContent).toContain('Updated 3 sections:');
93
+ expect(textContent).toContain('Updated First Section (id=section-1, projectId=project-1)');
94
+ expect(textContent).toContain('Updated Second Section (id=section-2, projectId=project-1)');
95
+ expect(textContent).toContain('Updated Third Section (id=section-3, projectId=project-2)');
96
+ // Verify structured content
97
+ const structuredContent = extractStructuredContent(result);
98
+ expect(structuredContent).toEqual(expect.objectContaining({
99
+ sections: mockSections,
100
+ totalCount: 3,
101
+ updatedSectionIds: ['section-1', 'section-2', 'section-3'],
102
+ }));
103
+ });
104
+ it('should handle sections from the same project', async () => {
105
+ const mockSections = [
106
+ createMockSection({
107
+ id: 'section-1',
108
+ projectId: 'same-project',
109
+ name: 'Backlog',
110
+ }),
111
+ createMockSection({
112
+ id: 'section-2',
113
+ projectId: 'same-project',
114
+ name: 'Done',
115
+ }),
116
+ ];
117
+ const [section1, section2] = mockSections;
118
+ mockTodoistApi.updateSection
119
+ .mockResolvedValueOnce(section1)
120
+ .mockResolvedValueOnce(section2);
121
+ const result = await updateSections.execute({
122
+ sections: [
123
+ { id: 'section-1', name: 'Backlog' },
124
+ { id: 'section-2', name: 'Done' },
125
+ ],
126
+ }, mockTodoistApi);
127
+ const textContent = extractTextContent(result);
128
+ expect(textContent).toMatchSnapshot();
129
+ expect(textContent).toContain('Updated 2 sections:');
130
+ expect(textContent).toContain(`Use ${GET_OVERVIEW} with projectId=same-project`);
131
+ });
132
+ });
133
+ describe('error handling', () => {
134
+ it('should propagate API errors', async () => {
135
+ const apiError = new Error('API Error: Section not found');
136
+ mockTodoistApi.updateSection.mockRejectedValue(apiError);
137
+ await expect(updateSections.execute({ sections: [{ id: 'nonexistent', name: 'New Name' }] }, mockTodoistApi)).rejects.toThrow('API Error: Section not found');
138
+ });
139
+ it('should handle partial failures in multiple sections', async () => {
140
+ const mockSection = createMockSection({
141
+ id: 'section-1',
142
+ projectId: 'project-1',
143
+ name: 'Updated Section',
144
+ });
145
+ mockTodoistApi.updateSection
146
+ .mockResolvedValueOnce(mockSection)
147
+ .mockRejectedValueOnce(new Error('API Error: Section not found'));
148
+ await expect(updateSections.execute({
149
+ sections: [
150
+ { id: 'section-1', name: 'Updated Section' },
151
+ { id: 'nonexistent', name: 'New Name' },
152
+ ],
153
+ }, mockTodoistApi)).rejects.toThrow('API Error: Section not found');
154
+ });
155
+ });
156
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-tasks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tasks.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/update-tasks.test.ts"],"names":[],"mappings":""}