vikunja-mcp-ng 0.4.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 (582) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/auth/AuthManager.d.ts +63 -0
  4. package/dist/auth/AuthManager.d.ts.map +1 -0
  5. package/dist/auth/AuthManager.js +137 -0
  6. package/dist/auth/AuthManager.js.map +1 -0
  7. package/dist/auth/index.d.ts +7 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/index.js +14 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/auth/permissions.d.ts +60 -0
  12. package/dist/auth/permissions.d.ts.map +1 -0
  13. package/dist/auth/permissions.js +173 -0
  14. package/dist/auth/permissions.js.map +1 -0
  15. package/dist/client/VikunjaClientFactory.d.ts +41 -0
  16. package/dist/client/VikunjaClientFactory.d.ts.map +1 -0
  17. package/dist/client/VikunjaClientFactory.js +58 -0
  18. package/dist/client/VikunjaClientFactory.js.map +1 -0
  19. package/dist/client.d.ts +70 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +136 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/config/ConfigurationManager.d.ts +106 -0
  24. package/dist/config/ConfigurationManager.d.ts.map +1 -0
  25. package/dist/config/ConfigurationManager.js +509 -0
  26. package/dist/config/ConfigurationManager.js.map +1 -0
  27. package/dist/config/index.d.ts +9 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +36 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/secrets.d.ts +33 -0
  32. package/dist/config/secrets.d.ts.map +1 -0
  33. package/dist/config/secrets.js +90 -0
  34. package/dist/config/secrets.js.map +1 -0
  35. package/dist/config/types.d.ts +1113 -0
  36. package/dist/config/types.d.ts.map +1 -0
  37. package/dist/config/types.js +189 -0
  38. package/dist/config/types.js.map +1 -0
  39. package/dist/formatters/BatchImportResponseFormatter.d.ts +89 -0
  40. package/dist/formatters/BatchImportResponseFormatter.d.ts.map +1 -0
  41. package/dist/formatters/BatchImportResponseFormatter.js +125 -0
  42. package/dist/formatters/BatchImportResponseFormatter.js.map +1 -0
  43. package/dist/index.d.ts +20 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +130 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/middleware/direct-middleware.d.ts +9 -0
  48. package/dist/middleware/direct-middleware.d.ts.map +1 -0
  49. package/dist/middleware/direct-middleware.js +49 -0
  50. package/dist/middleware/direct-middleware.js.map +1 -0
  51. package/dist/middleware/index.d.ts +8 -0
  52. package/dist/middleware/index.d.ts.map +1 -0
  53. package/dist/middleware/index.js +21 -0
  54. package/dist/middleware/index.js.map +1 -0
  55. package/dist/middleware/simplified-rate-limit.d.ts +147 -0
  56. package/dist/middleware/simplified-rate-limit.d.ts.map +1 -0
  57. package/dist/middleware/simplified-rate-limit.js +533 -0
  58. package/dist/middleware/simplified-rate-limit.js.map +1 -0
  59. package/dist/parsers/CSVParser.d.ts +36 -0
  60. package/dist/parsers/CSVParser.d.ts.map +1 -0
  61. package/dist/parsers/CSVParser.js +69 -0
  62. package/dist/parsers/CSVParser.js.map +1 -0
  63. package/dist/parsers/InputParserFactory.d.ts +17 -0
  64. package/dist/parsers/InputParserFactory.d.ts.map +1 -0
  65. package/dist/parsers/InputParserFactory.js +137 -0
  66. package/dist/parsers/InputParserFactory.js.map +1 -0
  67. package/dist/parsers/JSONParser.d.ts +74 -0
  68. package/dist/parsers/JSONParser.d.ts.map +1 -0
  69. package/dist/parsers/JSONParser.js +69 -0
  70. package/dist/parsers/JSONParser.js.map +1 -0
  71. package/dist/services/EntityResolver.d.ts +92 -0
  72. package/dist/services/EntityResolver.d.ts.map +1 -0
  73. package/dist/services/EntityResolver.js +201 -0
  74. package/dist/services/EntityResolver.js.map +1 -0
  75. package/dist/services/TaskCreationService.d.ts +99 -0
  76. package/dist/services/TaskCreationService.d.ts.map +1 -0
  77. package/dist/services/TaskCreationService.js +392 -0
  78. package/dist/services/TaskCreationService.js.map +1 -0
  79. package/dist/storage/SimpleFilterStorage.d.ts +103 -0
  80. package/dist/storage/SimpleFilterStorage.d.ts.map +1 -0
  81. package/dist/storage/SimpleFilterStorage.js +350 -0
  82. package/dist/storage/SimpleFilterStorage.js.map +1 -0
  83. package/dist/storage/filtering/FilterSerializer.d.ts +45 -0
  84. package/dist/storage/filtering/FilterSerializer.d.ts.map +1 -0
  85. package/dist/storage/filtering/FilterSerializer.js +171 -0
  86. package/dist/storage/filtering/FilterSerializer.js.map +1 -0
  87. package/dist/storage/filtering/FilterValidator.d.ts +59 -0
  88. package/dist/storage/filtering/FilterValidator.d.ts.map +1 -0
  89. package/dist/storage/filtering/FilterValidator.js +183 -0
  90. package/dist/storage/filtering/FilterValidator.js.map +1 -0
  91. package/dist/storage/index.d.ts +61 -0
  92. package/dist/storage/index.d.ts.map +1 -0
  93. package/dist/storage/index.js +125 -0
  94. package/dist/storage/index.js.map +1 -0
  95. package/dist/storage/templateFileStore.d.ts +62 -0
  96. package/dist/storage/templateFileStore.d.ts.map +1 -0
  97. package/dist/storage/templateFileStore.js +151 -0
  98. package/dist/storage/templateFileStore.js.map +1 -0
  99. package/dist/tools/admin.d.ts +51 -0
  100. package/dist/tools/admin.d.ts.map +1 -0
  101. package/dist/tools/admin.js +207 -0
  102. package/dist/tools/admin.js.map +1 -0
  103. package/dist/tools/auth.d.ts +9 -0
  104. package/dist/tools/auth.d.ts.map +1 -0
  105. package/dist/tools/auth.js +175 -0
  106. package/dist/tools/auth.js.map +1 -0
  107. package/dist/tools/batch-import.d.ts +5 -0
  108. package/dist/tools/batch-import.d.ts.map +1 -0
  109. package/dist/tools/batch-import.js +153 -0
  110. package/dist/tools/batch-import.js.map +1 -0
  111. package/dist/tools/caldav-tokens.d.ts +45 -0
  112. package/dist/tools/caldav-tokens.d.ts.map +1 -0
  113. package/dist/tools/caldav-tokens.js +93 -0
  114. package/dist/tools/caldav-tokens.js.map +1 -0
  115. package/dist/tools/export.d.ts +14 -0
  116. package/dist/tools/export.d.ts.map +1 -0
  117. package/dist/tools/export.js +252 -0
  118. package/dist/tools/export.js.map +1 -0
  119. package/dist/tools/filters.d.ts +50 -0
  120. package/dist/tools/filters.d.ts.map +1 -0
  121. package/dist/tools/filters.js +512 -0
  122. package/dist/tools/filters.js.map +1 -0
  123. package/dist/tools/index.d.ts +53 -0
  124. package/dist/tools/index.d.ts.map +1 -0
  125. package/dist/tools/index.js +217 -0
  126. package/dist/tools/index.js.map +1 -0
  127. package/dist/tools/labels.d.ts +22 -0
  128. package/dist/tools/labels.d.ts.map +1 -0
  129. package/dist/tools/labels.js +206 -0
  130. package/dist/tools/labels.js.map +1 -0
  131. package/dist/tools/notifications.d.ts +17 -0
  132. package/dist/tools/notifications.d.ts.map +1 -0
  133. package/dist/tools/notifications.js +171 -0
  134. package/dist/tools/notifications.js.map +1 -0
  135. package/dist/tools/projects/backgrounds.d.ts +80 -0
  136. package/dist/tools/projects/backgrounds.d.ts.map +1 -0
  137. package/dist/tools/projects/backgrounds.js +154 -0
  138. package/dist/tools/projects/backgrounds.js.map +1 -0
  139. package/dist/tools/projects/buckets.d.ts +147 -0
  140. package/dist/tools/projects/buckets.d.ts.map +1 -0
  141. package/dist/tools/projects/buckets.js +291 -0
  142. package/dist/tools/projects/buckets.js.map +1 -0
  143. package/dist/tools/projects/crud.d.ts +145 -0
  144. package/dist/tools/projects/crud.d.ts.map +1 -0
  145. package/dist/tools/projects/crud.js +425 -0
  146. package/dist/tools/projects/crud.js.map +1 -0
  147. package/dist/tools/projects/duplicate.d.ts +41 -0
  148. package/dist/tools/projects/duplicate.d.ts.map +1 -0
  149. package/dist/tools/projects/duplicate.js +49 -0
  150. package/dist/tools/projects/duplicate.js.map +1 -0
  151. package/dist/tools/projects/hierarchy.d.ts +77 -0
  152. package/dist/tools/projects/hierarchy.d.ts.map +1 -0
  153. package/dist/tools/projects/hierarchy.js +300 -0
  154. package/dist/tools/projects/hierarchy.js.map +1 -0
  155. package/dist/tools/projects/index.d.ts +34 -0
  156. package/dist/tools/projects/index.d.ts.map +1 -0
  157. package/dist/tools/projects/index.js +522 -0
  158. package/dist/tools/projects/index.js.map +1 -0
  159. package/dist/tools/projects/permission.d.ts +26 -0
  160. package/dist/tools/projects/permission.d.ts.map +1 -0
  161. package/dist/tools/projects/permission.js +53 -0
  162. package/dist/tools/projects/permission.js.map +1 -0
  163. package/dist/tools/projects/response-formatter.d.ts +54 -0
  164. package/dist/tools/projects/response-formatter.d.ts.map +1 -0
  165. package/dist/tools/projects/response-formatter.js +139 -0
  166. package/dist/tools/projects/response-formatter.js.map +1 -0
  167. package/dist/tools/projects/sharing-access.d.ts +165 -0
  168. package/dist/tools/projects/sharing-access.d.ts.map +1 -0
  169. package/dist/tools/projects/sharing-access.js +450 -0
  170. package/dist/tools/projects/sharing-access.js.map +1 -0
  171. package/dist/tools/projects/sharing.d.ts +105 -0
  172. package/dist/tools/projects/sharing.d.ts.map +1 -0
  173. package/dist/tools/projects/sharing.js +258 -0
  174. package/dist/tools/projects/sharing.js.map +1 -0
  175. package/dist/tools/projects/validation.d.ts +51 -0
  176. package/dist/tools/projects/validation.d.ts.map +1 -0
  177. package/dist/tools/projects/validation.js +160 -0
  178. package/dist/tools/projects/validation.js.map +1 -0
  179. package/dist/tools/projects/views.d.ts +161 -0
  180. package/dist/tools/projects/views.d.ts.map +1 -0
  181. package/dist/tools/projects/views.js +234 -0
  182. package/dist/tools/projects/views.js.map +1 -0
  183. package/dist/tools/projects.d.ts +20 -0
  184. package/dist/tools/projects.d.ts.map +1 -0
  185. package/dist/tools/projects.js +66 -0
  186. package/dist/tools/projects.js.map +1 -0
  187. package/dist/tools/reactions.d.ts +25 -0
  188. package/dist/tools/reactions.d.ts.map +1 -0
  189. package/dist/tools/reactions.js +108 -0
  190. package/dist/tools/reactions.js.map +1 -0
  191. package/dist/tools/subscriptions.d.ts +23 -0
  192. package/dist/tools/subscriptions.d.ts.map +1 -0
  193. package/dist/tools/subscriptions.js +111 -0
  194. package/dist/tools/subscriptions.js.map +1 -0
  195. package/dist/tools/task-assignees.d.ts +13 -0
  196. package/dist/tools/task-assignees.d.ts.map +1 -0
  197. package/dist/tools/task-assignees.js +74 -0
  198. package/dist/tools/task-assignees.js.map +1 -0
  199. package/dist/tools/task-bulk.d.ts +13 -0
  200. package/dist/tools/task-bulk.d.ts.map +1 -0
  201. package/dist/tools/task-bulk.js +117 -0
  202. package/dist/tools/task-bulk.js.map +1 -0
  203. package/dist/tools/task-comments.d.ts +12 -0
  204. package/dist/tools/task-comments.d.ts.map +1 -0
  205. package/dist/tools/task-comments.js +65 -0
  206. package/dist/tools/task-comments.js.map +1 -0
  207. package/dist/tools/task-crud.d.ts +13 -0
  208. package/dist/tools/task-crud.d.ts.map +1 -0
  209. package/dist/tools/task-crud.js +168 -0
  210. package/dist/tools/task-crud.js.map +1 -0
  211. package/dist/tools/task-labels.d.ts +13 -0
  212. package/dist/tools/task-labels.d.ts.map +1 -0
  213. package/dist/tools/task-labels.js +64 -0
  214. package/dist/tools/task-labels.js.map +1 -0
  215. package/dist/tools/task-relations.d.ts +13 -0
  216. package/dist/tools/task-relations.d.ts.map +1 -0
  217. package/dist/tools/task-relations.js +74 -0
  218. package/dist/tools/task-relations.js.map +1 -0
  219. package/dist/tools/task-reminders.d.ts +13 -0
  220. package/dist/tools/task-reminders.d.ts.map +1 -0
  221. package/dist/tools/task-reminders.js +69 -0
  222. package/dist/tools/task-reminders.js.map +1 -0
  223. package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts +63 -0
  224. package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts.map +1 -0
  225. package/dist/tools/tasks/assignees/AssigneeOperationsService.js +152 -0
  226. package/dist/tools/tasks/assignees/AssigneeOperationsService.js.map +1 -0
  227. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts +28 -0
  228. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts.map +1 -0
  229. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js +73 -0
  230. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js.map +1 -0
  231. package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts +46 -0
  232. package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts.map +1 -0
  233. package/dist/tools/tasks/assignees/AssigneeValidationService.js +70 -0
  234. package/dist/tools/tasks/assignees/AssigneeValidationService.js.map +1 -0
  235. package/dist/tools/tasks/assignees/index.d.ts +52 -0
  236. package/dist/tools/tasks/assignees/index.d.ts.map +1 -0
  237. package/dist/tools/tasks/assignees/index.js +103 -0
  238. package/dist/tools/tasks/assignees/index.js.map +1 -0
  239. package/dist/tools/tasks/attach.d.ts +39 -0
  240. package/dist/tools/tasks/attach.d.ts.map +1 -0
  241. package/dist/tools/tasks/attach.js +90 -0
  242. package/dist/tools/tasks/attach.js.map +1 -0
  243. package/dist/tools/tasks/attachments.d.ts +67 -0
  244. package/dist/tools/tasks/attachments.d.ts.map +1 -0
  245. package/dist/tools/tasks/attachments.js +153 -0
  246. package/dist/tools/tasks/attachments.js.map +1 -0
  247. package/dist/tools/tasks/buckets.d.ts +41 -0
  248. package/dist/tools/tasks/buckets.d.ts.map +1 -0
  249. package/dist/tools/tasks/buckets.js +75 -0
  250. package/dist/tools/tasks/buckets.js.map +1 -0
  251. package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts +30 -0
  252. package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts.map +1 -0
  253. package/dist/tools/tasks/bulk/BatchProcessorFactory.js +69 -0
  254. package/dist/tools/tasks/bulk/BatchProcessorFactory.js.map +1 -0
  255. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts +50 -0
  256. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts.map +1 -0
  257. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js +183 -0
  258. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js.map +1 -0
  259. package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts +101 -0
  260. package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts.map +1 -0
  261. package/dist/tools/tasks/bulk/BulkOperationProcessor.js +416 -0
  262. package/dist/tools/tasks/bulk/BulkOperationProcessor.js.map +1 -0
  263. package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts +50 -0
  264. package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts.map +1 -0
  265. package/dist/tools/tasks/bulk/BulkOperationTypes.js +6 -0
  266. package/dist/tools/tasks/bulk/BulkOperationTypes.js.map +1 -0
  267. package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts +53 -0
  268. package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts.map +1 -0
  269. package/dist/tools/tasks/bulk/BulkOperationValidator.js +216 -0
  270. package/dist/tools/tasks/bulk/BulkOperationValidator.js.map +1 -0
  271. package/dist/tools/tasks/bulk/index.d.ts +9 -0
  272. package/dist/tools/tasks/bulk/index.d.ts.map +1 -0
  273. package/dist/tools/tasks/bulk/index.js +15 -0
  274. package/dist/tools/tasks/bulk/index.js.map +1 -0
  275. package/dist/tools/tasks/bulk-operations-simplified.d.ts +62 -0
  276. package/dist/tools/tasks/bulk-operations-simplified.d.ts.map +1 -0
  277. package/dist/tools/tasks/bulk-operations-simplified.js +416 -0
  278. package/dist/tools/tasks/bulk-operations-simplified.js.map +1 -0
  279. package/dist/tools/tasks/bulk-operations.d.ts +8 -0
  280. package/dist/tools/tasks/bulk-operations.d.ts.map +1 -0
  281. package/dist/tools/tasks/bulk-operations.js +13 -0
  282. package/dist/tools/tasks/bulk-operations.js.map +1 -0
  283. package/dist/tools/tasks/by-index.d.ts +36 -0
  284. package/dist/tools/tasks/by-index.d.ts.map +1 -0
  285. package/dist/tools/tasks/by-index.js +52 -0
  286. package/dist/tools/tasks/by-index.js.map +1 -0
  287. package/dist/tools/tasks/comments/CommentOperationsService.d.ts +44 -0
  288. package/dist/tools/tasks/comments/CommentOperationsService.d.ts.map +1 -0
  289. package/dist/tools/tasks/comments/CommentOperationsService.js +86 -0
  290. package/dist/tools/tasks/comments/CommentOperationsService.js.map +1 -0
  291. package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts +41 -0
  292. package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts.map +1 -0
  293. package/dist/tools/tasks/comments/CommentResponseFormatter.js +114 -0
  294. package/dist/tools/tasks/comments/CommentResponseFormatter.js.map +1 -0
  295. package/dist/tools/tasks/comments/CommentValidationService.d.ts +62 -0
  296. package/dist/tools/tasks/comments/CommentValidationService.d.ts.map +1 -0
  297. package/dist/tools/tasks/comments/CommentValidationService.js +105 -0
  298. package/dist/tools/tasks/comments/CommentValidationService.js.map +1 -0
  299. package/dist/tools/tasks/comments/index.d.ts +66 -0
  300. package/dist/tools/tasks/comments/index.d.ts.map +1 -0
  301. package/dist/tools/tasks/comments/index.js +99 -0
  302. package/dist/tools/tasks/comments/index.js.map +1 -0
  303. package/dist/tools/tasks/constants.d.ts +19 -0
  304. package/dist/tools/tasks/constants.d.ts.map +1 -0
  305. package/dist/tools/tasks/constants.js +82 -0
  306. package/dist/tools/tasks/constants.js.map +1 -0
  307. package/dist/tools/tasks/crud/TaskCreationService.d.ts +29 -0
  308. package/dist/tools/tasks/crud/TaskCreationService.d.ts.map +1 -0
  309. package/dist/tools/tasks/crud/TaskCreationService.js +274 -0
  310. package/dist/tools/tasks/crud/TaskCreationService.js.map +1 -0
  311. package/dist/tools/tasks/crud/TaskDeletionService.d.ts +19 -0
  312. package/dist/tools/tasks/crud/TaskDeletionService.d.ts.map +1 -0
  313. package/dist/tools/tasks/crud/TaskDeletionService.js +96 -0
  314. package/dist/tools/tasks/crud/TaskDeletionService.js.map +1 -0
  315. package/dist/tools/tasks/crud/TaskReadService.d.ts +19 -0
  316. package/dist/tools/tasks/crud/TaskReadService.d.ts.map +1 -0
  317. package/dist/tools/tasks/crud/TaskReadService.js +66 -0
  318. package/dist/tools/tasks/crud/TaskReadService.js.map +1 -0
  319. package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts +18 -0
  320. package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts.map +1 -0
  321. package/dist/tools/tasks/crud/TaskResponseFormatter.js +248 -0
  322. package/dist/tools/tasks/crud/TaskResponseFormatter.js.map +1 -0
  323. package/dist/tools/tasks/crud/TaskUpdateService.d.ts +33 -0
  324. package/dist/tools/tasks/crud/TaskUpdateService.d.ts.map +1 -0
  325. package/dist/tools/tasks/crud/TaskUpdateService.js +294 -0
  326. package/dist/tools/tasks/crud/TaskUpdateService.js.map +1 -0
  327. package/dist/tools/tasks/crud/index.d.ts +17 -0
  328. package/dist/tools/tasks/crud/index.d.ts.map +1 -0
  329. package/dist/tools/tasks/crud/index.js +20 -0
  330. package/dist/tools/tasks/crud/index.js.map +1 -0
  331. package/dist/tools/tasks/duplicate.d.ts +28 -0
  332. package/dist/tools/tasks/duplicate.d.ts.map +1 -0
  333. package/dist/tools/tasks/duplicate.js +41 -0
  334. package/dist/tools/tasks/duplicate.js.map +1 -0
  335. package/dist/tools/tasks/filtering/FilterExecutor.d.ts +39 -0
  336. package/dist/tools/tasks/filtering/FilterExecutor.d.ts.map +1 -0
  337. package/dist/tools/tasks/filtering/FilterExecutor.js +214 -0
  338. package/dist/tools/tasks/filtering/FilterExecutor.js.map +1 -0
  339. package/dist/tools/tasks/filtering/FilterValidator.d.ts +59 -0
  340. package/dist/tools/tasks/filtering/FilterValidator.d.ts.map +1 -0
  341. package/dist/tools/tasks/filtering/FilterValidator.js +257 -0
  342. package/dist/tools/tasks/filtering/FilterValidator.js.map +1 -0
  343. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts +78 -0
  344. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts.map +1 -0
  345. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js +195 -0
  346. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js.map +1 -0
  347. package/dist/tools/tasks/filtering/evaluators.d.ts +41 -0
  348. package/dist/tools/tasks/filtering/evaluators.d.ts.map +1 -0
  349. package/dist/tools/tasks/filtering/evaluators.js +224 -0
  350. package/dist/tools/tasks/filtering/evaluators.js.map +1 -0
  351. package/dist/tools/tasks/filtering/index.d.ts +11 -0
  352. package/dist/tools/tasks/filtering/index.d.ts.map +1 -0
  353. package/dist/tools/tasks/filtering/index.js +26 -0
  354. package/dist/tools/tasks/filtering/index.js.map +1 -0
  355. package/dist/tools/tasks/index.d.ts +9 -0
  356. package/dist/tools/tasks/index.d.ts.map +1 -0
  357. package/dist/tools/tasks/index.js +337 -0
  358. package/dist/tools/tasks/index.js.map +1 -0
  359. package/dist/tools/tasks/labels.d.ts +49 -0
  360. package/dist/tools/tasks/labels.d.ts.map +1 -0
  361. package/dist/tools/tasks/labels.js +223 -0
  362. package/dist/tools/tasks/labels.js.map +1 -0
  363. package/dist/tools/tasks/mark-read.d.ts +27 -0
  364. package/dist/tools/tasks/mark-read.d.ts.map +1 -0
  365. package/dist/tools/tasks/mark-read.js +38 -0
  366. package/dist/tools/tasks/mark-read.js.map +1 -0
  367. package/dist/tools/tasks/position.d.ts +53 -0
  368. package/dist/tools/tasks/position.d.ts.map +1 -0
  369. package/dist/tools/tasks/position.js +83 -0
  370. package/dist/tools/tasks/position.js.map +1 -0
  371. package/dist/tools/tasks/reminders.d.ts +56 -0
  372. package/dist/tools/tasks/reminders.d.ts.map +1 -0
  373. package/dist/tools/tasks/reminders.js +213 -0
  374. package/dist/tools/tasks/reminders.js.map +1 -0
  375. package/dist/tools/tasks/subtasks.d.ts +85 -0
  376. package/dist/tools/tasks/subtasks.d.ts.map +1 -0
  377. package/dist/tools/tasks/subtasks.js +286 -0
  378. package/dist/tools/tasks/subtasks.js.map +1 -0
  379. package/dist/tools/tasks/types/filters.d.ts +136 -0
  380. package/dist/tools/tasks/types/filters.d.ts.map +1 -0
  381. package/dist/tools/tasks/types/filters.js +7 -0
  382. package/dist/tools/tasks/types/filters.js.map +1 -0
  383. package/dist/tools/tasks/validation.d.ts +47 -0
  384. package/dist/tools/tasks/validation.d.ts.map +1 -0
  385. package/dist/tools/tasks/validation.js +131 -0
  386. package/dist/tools/tasks/validation.js.map +1 -0
  387. package/dist/tools/tasks-relations.d.ts +25 -0
  388. package/dist/tools/tasks-relations.d.ts.map +1 -0
  389. package/dist/tools/tasks-relations.js +271 -0
  390. package/dist/tools/tasks-relations.js.map +1 -0
  391. package/dist/tools/tasks.d.ts +6 -0
  392. package/dist/tools/tasks.d.ts.map +1 -0
  393. package/dist/tools/tasks.js +10 -0
  394. package/dist/tools/tasks.js.map +1 -0
  395. package/dist/tools/teams.d.ts +9 -0
  396. package/dist/tools/teams.d.ts.map +1 -0
  397. package/dist/tools/teams.js +255 -0
  398. package/dist/tools/teams.js.map +1 -0
  399. package/dist/tools/templates.d.ts +9 -0
  400. package/dist/tools/templates.d.ts.map +1 -0
  401. package/dist/tools/templates.js +450 -0
  402. package/dist/tools/templates.js.map +1 -0
  403. package/dist/tools/tokens.d.ts +37 -0
  404. package/dist/tools/tokens.d.ts.map +1 -0
  405. package/dist/tools/tokens.js +122 -0
  406. package/dist/tools/tokens.js.map +1 -0
  407. package/dist/tools/user-deletion.d.ts +41 -0
  408. package/dist/tools/user-deletion.d.ts.map +1 -0
  409. package/dist/tools/user-deletion.js +126 -0
  410. package/dist/tools/user-deletion.js.map +1 -0
  411. package/dist/tools/users.d.ts +9 -0
  412. package/dist/tools/users.d.ts.map +1 -0
  413. package/dist/tools/users.js +418 -0
  414. package/dist/tools/users.js.map +1 -0
  415. package/dist/tools/webhooks.d.ts +31 -0
  416. package/dist/tools/webhooks.d.ts.map +1 -0
  417. package/dist/tools/webhooks.js +414 -0
  418. package/dist/tools/webhooks.js.map +1 -0
  419. package/dist/transforms/base.d.ts +204 -0
  420. package/dist/transforms/base.d.ts.map +1 -0
  421. package/dist/transforms/base.js +175 -0
  422. package/dist/transforms/base.js.map +1 -0
  423. package/dist/transforms/field-selector.d.ts +27 -0
  424. package/dist/transforms/field-selector.d.ts.map +1 -0
  425. package/dist/transforms/field-selector.js +91 -0
  426. package/dist/transforms/field-selector.js.map +1 -0
  427. package/dist/transforms/index.d.ts +15 -0
  428. package/dist/transforms/index.d.ts.map +1 -0
  429. package/dist/transforms/index.js +50 -0
  430. package/dist/transforms/index.js.map +1 -0
  431. package/dist/transforms/size-calculator.d.ts +131 -0
  432. package/dist/transforms/size-calculator.d.ts.map +1 -0
  433. package/dist/transforms/size-calculator.js +284 -0
  434. package/dist/transforms/size-calculator.js.map +1 -0
  435. package/dist/transforms/task.d.ts +207 -0
  436. package/dist/transforms/task.d.ts.map +1 -0
  437. package/dist/transforms/task.js +259 -0
  438. package/dist/transforms/task.js.map +1 -0
  439. package/dist/types/errors.d.ts +65 -0
  440. package/dist/types/errors.d.ts.map +1 -0
  441. package/dist/types/errors.js +44 -0
  442. package/dist/types/errors.js.map +1 -0
  443. package/dist/types/filters.d.ts +149 -0
  444. package/dist/types/filters.d.ts.map +1 -0
  445. package/dist/types/filters.js +26 -0
  446. package/dist/types/filters.js.map +1 -0
  447. package/dist/types/index.d.ts +147 -0
  448. package/dist/types/index.d.ts.map +1 -0
  449. package/dist/types/index.js +24 -0
  450. package/dist/types/index.js.map +1 -0
  451. package/dist/types/node-vikunja-extended.d.ts +36 -0
  452. package/dist/types/node-vikunja-extended.d.ts.map +1 -0
  453. package/dist/types/node-vikunja-extended.js +25 -0
  454. package/dist/types/node-vikunja-extended.js.map +1 -0
  455. package/dist/types/responses.d.ts +121 -0
  456. package/dist/types/responses.d.ts.map +1 -0
  457. package/dist/types/responses.js +26 -0
  458. package/dist/types/responses.js.map +1 -0
  459. package/dist/types/vikunja.d.ts +319 -0
  460. package/dist/types/vikunja.d.ts.map +1 -0
  461. package/dist/types/vikunja.js +7 -0
  462. package/dist/types/vikunja.js.map +1 -0
  463. package/dist/utils/auth-error-handler.d.ts +23 -0
  464. package/dist/utils/auth-error-handler.d.ts.map +1 -0
  465. package/dist/utils/auth-error-handler.js +162 -0
  466. package/dist/utils/auth-error-handler.js.map +1 -0
  467. package/dist/utils/composite-operation.d.ts +184 -0
  468. package/dist/utils/composite-operation.d.ts.map +1 -0
  469. package/dist/utils/composite-operation.js +293 -0
  470. package/dist/utils/composite-operation.js.map +1 -0
  471. package/dist/utils/error-handler.d.ts +39 -0
  472. package/dist/utils/error-handler.d.ts.map +1 -0
  473. package/dist/utils/error-handler.js +336 -0
  474. package/dist/utils/error-handler.js.map +1 -0
  475. package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts +13 -0
  476. package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts.map +1 -0
  477. package/dist/utils/filtering/ClientSideFilteringStrategy.js +129 -0
  478. package/dist/utils/filtering/ClientSideFilteringStrategy.js.map +1 -0
  479. package/dist/utils/filtering/FilteringContext.d.ts +40 -0
  480. package/dist/utils/filtering/FilteringContext.d.ts.map +1 -0
  481. package/dist/utils/filtering/FilteringContext.js +58 -0
  482. package/dist/utils/filtering/FilteringContext.js.map +1 -0
  483. package/dist/utils/filtering/HybridFilteringStrategy.d.ts +15 -0
  484. package/dist/utils/filtering/HybridFilteringStrategy.d.ts.map +1 -0
  485. package/dist/utils/filtering/HybridFilteringStrategy.js +55 -0
  486. package/dist/utils/filtering/HybridFilteringStrategy.js.map +1 -0
  487. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts +42 -0
  488. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts.map +1 -0
  489. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js +120 -0
  490. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js.map +1 -0
  491. package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts +13 -0
  492. package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts.map +1 -0
  493. package/dist/utils/filtering/ServerSideFilteringStrategy.js +88 -0
  494. package/dist/utils/filtering/ServerSideFilteringStrategy.js.map +1 -0
  495. package/dist/utils/filtering/TaskFilteringStrategy.d.ts +19 -0
  496. package/dist/utils/filtering/TaskFilteringStrategy.d.ts.map +1 -0
  497. package/dist/utils/filtering/TaskFilteringStrategy.js +10 -0
  498. package/dist/utils/filtering/TaskFilteringStrategy.js.map +1 -0
  499. package/dist/utils/filtering/index.d.ts +14 -0
  500. package/dist/utils/filtering/index.d.ts.map +1 -0
  501. package/dist/utils/filtering/index.js +22 -0
  502. package/dist/utils/filtering/index.js.map +1 -0
  503. package/dist/utils/filtering/types.d.ts +108 -0
  504. package/dist/utils/filtering/types.d.ts.map +1 -0
  505. package/dist/utils/filtering/types.js +6 -0
  506. package/dist/utils/filtering/types.js.map +1 -0
  507. package/dist/utils/filters.d.ts +70 -0
  508. package/dist/utils/filters.d.ts.map +1 -0
  509. package/dist/utils/filters.js +812 -0
  510. package/dist/utils/filters.js.map +1 -0
  511. package/dist/utils/http-error-detail.d.ts +28 -0
  512. package/dist/utils/http-error-detail.d.ts.map +1 -0
  513. package/dist/utils/http-error-detail.js +67 -0
  514. package/dist/utils/http-error-detail.js.map +1 -0
  515. package/dist/utils/label-bulk.d.ts +21 -0
  516. package/dist/utils/label-bulk.d.ts.map +1 -0
  517. package/dist/utils/label-bulk.js +51 -0
  518. package/dist/utils/label-bulk.js.map +1 -0
  519. package/dist/utils/logger.d.ts +20 -0
  520. package/dist/utils/logger.d.ts.map +1 -0
  521. package/dist/utils/logger.js +66 -0
  522. package/dist/utils/logger.js.map +1 -0
  523. package/dist/utils/memory.d.ts +73 -0
  524. package/dist/utils/memory.d.ts.map +1 -0
  525. package/dist/utils/memory.js +194 -0
  526. package/dist/utils/memory.js.map +1 -0
  527. package/dist/utils/performance/batch-processor.d.ts +77 -0
  528. package/dist/utils/performance/batch-processor.d.ts.map +1 -0
  529. package/dist/utils/performance/batch-processor.js +218 -0
  530. package/dist/utils/performance/batch-processor.js.map +1 -0
  531. package/dist/utils/performance/index.d.ts +42 -0
  532. package/dist/utils/performance/index.d.ts.map +1 -0
  533. package/dist/utils/performance/index.js +49 -0
  534. package/dist/utils/performance/index.js.map +1 -0
  535. package/dist/utils/performance/performance-monitor.d.ts +116 -0
  536. package/dist/utils/performance/performance-monitor.d.ts.map +1 -0
  537. package/dist/utils/performance/performance-monitor.js +307 -0
  538. package/dist/utils/performance/performance-monitor.js.map +1 -0
  539. package/dist/utils/read-only.d.ts +111 -0
  540. package/dist/utils/read-only.d.ts.map +1 -0
  541. package/dist/utils/read-only.js +503 -0
  542. package/dist/utils/read-only.js.map +1 -0
  543. package/dist/utils/response-factory.d.ts +81 -0
  544. package/dist/utils/response-factory.d.ts.map +1 -0
  545. package/dist/utils/response-factory.js +86 -0
  546. package/dist/utils/response-factory.js.map +1 -0
  547. package/dist/utils/retry.d.ts +160 -0
  548. package/dist/utils/retry.d.ts.map +1 -0
  549. package/dist/utils/retry.js +316 -0
  550. package/dist/utils/retry.js.map +1 -0
  551. package/dist/utils/security.d.ts +70 -0
  552. package/dist/utils/security.d.ts.map +1 -0
  553. package/dist/utils/security.js +358 -0
  554. package/dist/utils/security.js.map +1 -0
  555. package/dist/utils/simple-response.d.ts +75 -0
  556. package/dist/utils/simple-response.d.ts.map +1 -0
  557. package/dist/utils/simple-response.js +311 -0
  558. package/dist/utils/simple-response.js.map +1 -0
  559. package/dist/utils/storage-errors.d.ts +9 -0
  560. package/dist/utils/storage-errors.d.ts.map +1 -0
  561. package/dist/utils/storage-errors.js +20 -0
  562. package/dist/utils/storage-errors.js.map +1 -0
  563. package/dist/utils/task-rest-transport.d.ts +28 -0
  564. package/dist/utils/task-rest-transport.d.ts.map +1 -0
  565. package/dist/utils/task-rest-transport.js +33 -0
  566. package/dist/utils/task-rest-transport.js.map +1 -0
  567. package/dist/utils/unicode-fix.d.ts +19 -0
  568. package/dist/utils/unicode-fix.d.ts.map +1 -0
  569. package/dist/utils/unicode-fix.js +70 -0
  570. package/dist/utils/unicode-fix.js.map +1 -0
  571. package/dist/utils/validation.d.ts +75 -0
  572. package/dist/utils/validation.d.ts.map +1 -0
  573. package/dist/utils/validation.js +758 -0
  574. package/dist/utils/validation.js.map +1 -0
  575. package/dist/utils/vikunja-rest.d.ts +159 -0
  576. package/dist/utils/vikunja-rest.d.ts.map +1 -0
  577. package/dist/utils/vikunja-rest.js +378 -0
  578. package/dist/utils/vikunja-rest.js.map +1 -0
  579. package/docs/CONFIGURATION.md +957 -0
  580. package/docs/DOCKER-DESKTOP-MCP.md +207 -0
  581. package/docs/TOOLS.md +422 -0
  582. package/package.json +145 -0
@@ -0,0 +1,416 @@
1
+ "use strict";
2
+ /**
3
+ * Simplified bulk operations for tasks (~250 lines)
4
+ *
5
+ * This superseded the old bulk/ implementation (BulkOperationProcessor,
6
+ * BulkOperationErrorHandler, BatchProcessorFactory), which was dead code -
7
+ * unreachable from src/tools/index.ts or src/tools/tasks/index.ts - and has
8
+ * since been deleted. Only BulkOperationValidator survives from that folder,
9
+ * reused here for its field/value validation.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.bulkUpdateTasks = bulkUpdateTasks;
13
+ exports.bulkDeleteTasks = bulkDeleteTasks;
14
+ exports.bulkCreateTasks = bulkCreateTasks;
15
+ const index_1 = require("../../index");
16
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
17
+ const task_rest_transport_1 = require("../../utils/task-rest-transport");
18
+ const retry_1 = require("../../utils/retry");
19
+ const label_bulk_1 = require("../../utils/label-bulk");
20
+ const batch_processor_1 = require("../../utils/performance/batch-processor");
21
+ const validation_1 = require("./validation");
22
+ const response_factory_1 = require("../../utils/response-factory");
23
+ const constants_1 = require("./constants");
24
+ const BulkOperationValidator_1 = require("./bulk/BulkOperationValidator");
25
+ // ==================== BATCH PROCESSORS ====================
26
+ const processors = {
27
+ update: new batch_processor_1.BatchProcessor({ maxConcurrency: 5, batchSize: 10, enableMetrics: true, batchDelay: 0 }),
28
+ delete: new batch_processor_1.BatchProcessor({ maxConcurrency: 3, batchSize: 5, enableMetrics: true, batchDelay: 100 }),
29
+ create: new batch_processor_1.BatchProcessor({ maxConcurrency: 8, batchSize: 15, enableMetrics: true, batchDelay: 0 }),
30
+ };
31
+ // ==================== VALIDATION WRAPPERS ====================
32
+ // Re-use validation logic from BulkOperationValidator to eliminate duplication
33
+ const validateBulkUpdate = (args) => {
34
+ BulkOperationValidator_1.bulkOperationValidator.validateBulkUpdate(args);
35
+ BulkOperationValidator_1.bulkOperationValidator.preprocessFieldValue(args);
36
+ BulkOperationValidator_1.bulkOperationValidator.validateFieldConstraints(args);
37
+ };
38
+ const validateBulkCreate = (args) => BulkOperationValidator_1.bulkOperationValidator.validateBulkCreate(args);
39
+ const validateBulkDelete = (args) => BulkOperationValidator_1.bulkOperationValidator.validateBulkDelete(args);
40
+ const successResponse = (op, msg, tasks, meta) => ({
41
+ content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)((0, index_1.createStandardResponse)(op, msg, { tasks }, { timestamp: new Date().toISOString(), ...meta })) }]
42
+ });
43
+ /**
44
+ * Resolve bulk-update field value for Vikunja's updateTask payload.
45
+ * Native bulk API used a numeric repeat_mode map; keep that conversion when merging.
46
+ */
47
+ function resolveBulkUpdateValue(field, value) {
48
+ if (field === 'repeat_mode' && typeof value === 'string') {
49
+ return constants_1.REPEAT_MODE_MAP[value] ?? value;
50
+ }
51
+ return value;
52
+ }
53
+ // ==================== BULK UPDATE ====================
54
+ /**
55
+ * Bulk-update.
56
+ *
57
+ * Scalar fields go through Vikunja's native `POST /tasks/bulk` in ONE request.
58
+ * The endpoint's real contract (see `models.BulkTask` in the generated OpenAPI
59
+ * types) is `{ task_ids, fields: string[], values: models.Task }` — the server
60
+ * applies exactly the listed fields and preserves everything else. The old
61
+ * belief that the endpoint full-replaces tasks came from node-vikunja's stale
62
+ * `{ task_ids, field, value }` type (democratize-technology/vikunja-mcp#46):
63
+ * with that malformed payload the server sees `fields: null` and applies a
64
+ * zero-value task. A single request also sidesteps the `database is locked`
65
+ * partial failures that concurrent per-task updates hit on SQLite-backed
66
+ * instances (democratize-technology/vikunja-mcp#79).
67
+ *
68
+ * Two server-side caveats handled here — source-verified against
69
+ * go-vikunja/vikunja's `pkg/models/tasks.go` and `task_assignees.go`, not
70
+ * just observed live behavior:
71
+ * - **Assignees**: `updateSingleTask()` calls `updateTaskAssignees(s,
72
+ * t.Assignees, a)` *before* the `fields`-allowlist gate is even evaluated,
73
+ * reconciling to whatever `values.assignees` decoded to. A scalar-only
74
+ * bulk request never sets that field, so it decodes to `nil`, which trips
75
+ * the unconditional full-delete branch in `task_assignees.go` for every
76
+ * task in `task_ids` — regardless of what `fields` lists. So assignees are
77
+ * snapshotted first and restored afterwards (see below).
78
+ * - **Labels**: genuinely inert, not merely unscoped — the label-sync call
79
+ * in that same `updateSingleTask()` is literally commented out upstream
80
+ * (`// Maybe FIXME:`, an acknowledged, unresolved refactor need), for both
81
+ * `POST /tasks/bulk` and single-task `POST /tasks/{id}`. So labels always
82
+ * use the dedicated per-task label endpoint, not because the bulk
83
+ * endpoint clears them, but because it never touches them at all.
84
+ */
85
+ async function bulkUpdateTasks(args, authManager) {
86
+ try {
87
+ validateBulkUpdate(args);
88
+ // Validation ensures taskIds exists
89
+ const taskIds = args.taskIds ?? [];
90
+ const fieldValue = resolveBulkUpdateValue(args.field, args.value);
91
+ const perTaskUpdate = async () => {
92
+ const updateResult = await processors.update.processBatches(taskIds, async (taskId) => {
93
+ const current = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${taskId}`);
94
+ // Spread current task so fields not being changed survive Vikunja's full replace
95
+ const update = (0, validation_1.applyFieldUpdate)({ ...current }, args.field, fieldValue);
96
+ const updated = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/tasks/${taskId}`, update);
97
+ if (args.field === 'assignees' && Array.isArray(args.value)) {
98
+ const currentTask = await (0, task_rest_transport_1.getTaskViaRest)(authManager, taskId);
99
+ const currentAssignees = (currentTask.assignees ?? [])
100
+ .map((a) => a.id)
101
+ .filter((id) => typeof id === 'number');
102
+ if (args.value.length > 0) {
103
+ try {
104
+ // Per-user additive assign (PUT /tasks/{taskID}/assignees, body
105
+ // { user_id }, models.TaskAssginee) instead of the bulk endpoint,
106
+ // which REPLACES the whole list and would silently unassign
107
+ // everyone (democratize-technology/vikunja-mcp#15). Sequential
108
+ // on purpose (post-#89 pattern sweep, mirrors the removal loop
109
+ // directly below): concurrent per-user writes to the same task
110
+ // risk "database is locked" 500s on SQLite-backed instances.
111
+ for (const userId of args.value) {
112
+ await (0, retry_1.withRetry)(() => (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/tasks/${taskId}/assignees`, { user_id: userId }), { ...index_1.RETRY_CONFIG.AUTH_ERRORS, shouldRetry: index_1.isAuthenticationError });
113
+ }
114
+ }
115
+ catch (assigneeError) {
116
+ if ((0, index_1.isAuthenticationError)(assigneeError))
117
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, 'Assignee operations may have authentication issues');
118
+ throw assigneeError;
119
+ }
120
+ }
121
+ // DELETE /tasks/{taskID}/assignees/{userID} per the OpenAPI spec — no body.
122
+ for (const userId of currentAssignees) {
123
+ try {
124
+ await (0, retry_1.withRetry)(() => (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${taskId}/assignees/${userId}`), { ...index_1.RETRY_CONFIG.AUTH_ERRORS, shouldRetry: index_1.isAuthenticationError });
125
+ }
126
+ catch (e) {
127
+ if ((0, index_1.isAuthenticationError)(e))
128
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, `${constants_1.AUTH_ERROR_MESSAGES.ASSIGNEE_REMOVE_PARTIAL} (Retried ${index_1.RETRY_CONFIG.AUTH_ERRORS.maxRetries} times)`);
129
+ throw e;
130
+ }
131
+ }
132
+ }
133
+ // Labels are never applied by Vikunja's task update payload; persist them
134
+ // explicitly via setTaskLabels (correct labels payload shape) — re-impl #49.
135
+ if (args.field === 'labels' && Array.isArray(args.value)) {
136
+ await (0, retry_1.withRetry)(() => (0, label_bulk_1.setTaskLabels)(authManager, taskId, args.value), { ...index_1.RETRY_CONFIG.AUTH_ERRORS, shouldRetry: index_1.isAuthenticationError });
137
+ }
138
+ return updated;
139
+ });
140
+ if (updateResult.failed.length > 0 && updateResult.successful.length === 0) {
141
+ const firstError = updateResult.failed[0]?.error;
142
+ // Preserve MCPError instances with auth messages
143
+ if (firstError instanceof index_1.MCPError && firstError.message.includes('authentication'))
144
+ throw firstError;
145
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, `Bulk update failed. Could not update any tasks. Failed IDs: ${updateResult.failed.map(f => f.originalItem).join(', ')}`);
146
+ }
147
+ // Report partial failure honestly (mirrors bulkDeleteTasks) instead of
148
+ // claiming every task was updated.
149
+ if (updateResult.failed.length > 0) {
150
+ const failedIds = updateResult.failed.map(f => f.originalItem);
151
+ return successResponse('update-task', `Bulk update partially completed. Successfully updated ${updateResult.successful.length} tasks. Failed task IDs: ${failedIds.join(', ')}`, updateResult.successful, {
152
+ count: updateResult.successful.length, failedCount: updateResult.failed.length, failedIds, affectedFields: [args.field], success: false,
153
+ });
154
+ }
155
+ return successResponse('update-task', `Successfully updated ${taskIds.length} tasks`, updateResult.successful, {
156
+ count: taskIds.length, affectedFields: [args.field], performanceMetrics: {
157
+ totalDuration: updateResult.metrics.totalDuration, operationsPerSecond: updateResult.metrics.operationsPerSecond,
158
+ apiCallsUsed: updateResult.metrics.successfulOperations + updateResult.metrics.failedOperations,
159
+ },
160
+ });
161
+ };
162
+ // Assignees and labels have their own endpoints; the native bulk endpoint
163
+ // does not handle them.
164
+ if (args.field === 'assignees' || args.field === 'labels') {
165
+ return await perTaskUpdate();
166
+ }
167
+ try {
168
+ // Snapshot assignees first. Verified mechanism (not just observed
169
+ // behavior): `updateTaskAssignees` runs before the `fields` gate and
170
+ // reconciles to `values.assignees`, which is `nil` for a scalar-only
171
+ // bulk request, triggering a full delete (`task_assignees.go`'s
172
+ // full-delete branch) for every task in `task_ids`, regardless of
173
+ // `fields`.
174
+ const preFetch = await processors.update.processBatches(taskIds, async (id) => await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${id}`));
175
+ const assigneesByTask = new Map();
176
+ for (const t of preFetch.successful) {
177
+ if (!t?.id)
178
+ continue;
179
+ const ids = (t.assignees ?? []).map((a) => a.id).filter((id) => typeof id === 'number');
180
+ if (ids.length > 0)
181
+ assigneesByTask.set(t.id, ids);
182
+ }
183
+ const payload = {
184
+ task_ids: taskIds,
185
+ fields: [args.field],
186
+ values: { [args.field]: fieldValue },
187
+ };
188
+ const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/tasks/bulk', payload);
189
+ // 2.x echoes { task_ids, fields, values, tasks }; tolerate a bare Task[] too.
190
+ // The honesty check below is derived from THIS array — the server's own
191
+ // account of what it updated — never from the requested taskIds.
192
+ const updatedTasks = Array.isArray(result) ? result : (result?.tasks ?? []);
193
+ // Sanity-check the server actually applied the value — guards against
194
+ // running into an older server that ignores fields/values.
195
+ const verifiable = ['priority', 'done', 'project_id'].includes(args.field);
196
+ const applied = updatedTasks.length > 0 && (!verifiable || updatedTasks.every((t) => t[args.field] === fieldValue));
197
+ if (!applied) {
198
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, 'Native bulk update did not apply the requested value');
199
+ }
200
+ // A server that silently drops a subset of the requested IDs
201
+ // (permissions, partial bulk transaction) must not be reported as a
202
+ // full success. Match the server-returned IDs against what was asked for.
203
+ const returnedIds = new Set(updatedTasks.map((t) => t.id).filter((id) => typeof id === 'number'));
204
+ const missingIds = taskIds.filter((id) => !returnedIds.has(id));
205
+ // Re-add the assignees the bulk endpoint cleared. This is a
206
+ // restore-to-snapshot, not a general assign flow: `userIds` is the
207
+ // task's own complete pre-update assignee list, so ONE
208
+ // `POST /tasks/{taskID}/assignees/bulk` (`models.BulkAssignees`,
209
+ // REPLACE semantics) call per task sets it back to exactly that list —
210
+ // safe here precisely because the whole set is known, unlike the
211
+ // additive per-user `PUT /assignees` loop used everywhere else for
212
+ // general assign/unassign (where replace semantics would silently
213
+ // unassign everyone else — upstream issue democratize-technology/
214
+ // vikunja-mcp#15; see the PARKED note in docs/ENDPOINT-TAIL-RETRIAGE.md
215
+ // line ~87). Sequential across tasks on purpose: concurrent writes 500
216
+ // with "database is locked" on SQLite backends. Failures are collected
217
+ // (not just logged) so a lost assignee is surfaced to the caller
218
+ // rather than silently swallowed — same {taskId, userId} failure
219
+ // surface as before (PR #95's assigneeRestoreFailures contract),
220
+ // just populated per-task instead of per-user-per-task.
221
+ const assigneeRestoreFailures = [];
222
+ for (const [taskId, userIds] of assigneesByTask) {
223
+ const body = { assignees: userIds.map((userId) => ({ id: userId })) };
224
+ try {
225
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/tasks/${taskId}/assignees/bulk`, body);
226
+ }
227
+ catch (e) {
228
+ index_1.logger.warn('Could not restore assignees after bulk update', { taskId, userIds, error: e instanceof Error ? e.message : String(e) });
229
+ for (const userId of userIds) {
230
+ assigneeRestoreFailures.push({ taskId, userId });
231
+ }
232
+ }
233
+ }
234
+ // Re-fetch when assignees were restored so the response reflects them.
235
+ // This is presentation only — it does not feed the honesty check above,
236
+ // which stays fixed to what POST /tasks/bulk itself returned.
237
+ const responseTasks = assigneesByTask.size > 0
238
+ ? (await processors.update.processBatches(taskIds, async (id) => await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${id}`))).successful
239
+ : updatedTasks;
240
+ if (missingIds.length > 0 || assigneeRestoreFailures.length > 0) {
241
+ const messages = [
242
+ missingIds.length > 0
243
+ ? `Bulk update partially completed. Successfully updated ${updatedTasks.length} tasks. Failed task IDs: ${missingIds.join(', ')}`
244
+ : `Successfully updated ${updatedTasks.length} tasks`,
245
+ ];
246
+ if (assigneeRestoreFailures.length > 0) {
247
+ const restoreFailedTaskIds = [...new Set(assigneeRestoreFailures.map((f) => f.taskId))];
248
+ messages.push(`Assignee restoration failed for task(s): ${restoreFailedTaskIds.join(', ')}.`);
249
+ }
250
+ return successResponse('update-task', messages.join(' '), responseTasks, {
251
+ count: updatedTasks.length,
252
+ affectedFields: [args.field],
253
+ success: false,
254
+ ...(missingIds.length > 0 && { failedCount: missingIds.length, failedIds: missingIds }),
255
+ ...(assigneeRestoreFailures.length > 0 && { assigneeRestoreFailures }),
256
+ });
257
+ }
258
+ return successResponse('update-task', `Successfully updated ${taskIds.length} tasks`, responseTasks, { count: taskIds.length, affectedFields: [args.field] });
259
+ }
260
+ catch (nativeError) {
261
+ if (nativeError instanceof index_1.MCPError && nativeError.message.includes('authentication'))
262
+ throw nativeError;
263
+ index_1.logger.warn('Native bulk update failed; falling back to per-task merge', { error: nativeError instanceof Error ? nativeError.message : String(nativeError), field: args.field });
264
+ return await perTaskUpdate();
265
+ }
266
+ }
267
+ catch (error) {
268
+ if (error instanceof index_1.MCPError)
269
+ throw error;
270
+ if (error instanceof Error && (error.message.includes('fetch failed') || error.message.includes('ECONNREFUSED') || error.message.includes('ENOTFOUND')))
271
+ throw (0, index_1.handleFetchError)(error, 'bulk update tasks');
272
+ throw (0, index_1.transformApiError)(error, 'Failed to bulk update tasks');
273
+ }
274
+ }
275
+ // ==================== BULK DELETE ====================
276
+ async function bulkDeleteTasks(args, authManager) {
277
+ try {
278
+ validateBulkDelete(args);
279
+ // Validation ensures taskIds exists
280
+ const taskIds = args.taskIds ?? [];
281
+ const fetchResult = await processors.delete.processBatches(taskIds, async (id) => await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${id}`));
282
+ const deletionResult = await processors.delete.processBatches(taskIds, async (id) => { await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${id}`); return { taskId: id, deleted: true }; });
283
+ if (deletionResult.failed.length > 0) {
284
+ const failedIds = deletionResult.failed.map(f => f.originalItem);
285
+ if (deletionResult.successful.length > 0) {
286
+ return successResponse('delete-task', `Bulk delete partially completed. Successfully deleted ${deletionResult.successful.length} tasks. Failed to delete task IDs: ${failedIds.join(', ')}`, [], {
287
+ count: deletionResult.successful.length, failedCount: deletionResult.failed.length, failedIds, previousState: fetchResult.successful, success: false,
288
+ });
289
+ }
290
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, `Bulk delete failed. Could not delete any tasks. Failed IDs: ${failedIds.join(', ')}`);
291
+ }
292
+ return successResponse('delete-task', `Successfully deleted ${taskIds.length} tasks`, [], { count: taskIds.length, deletedTaskIds: taskIds, previousState: fetchResult.successful });
293
+ }
294
+ catch (error) {
295
+ if (error instanceof index_1.MCPError)
296
+ throw error;
297
+ if (error instanceof Error && (error.message.includes('fetch failed') || error.message.includes('ECONNREFUSED') || error.message.includes('ENOTFOUND')))
298
+ throw (0, index_1.handleFetchError)(error, 'bulk delete tasks');
299
+ throw (0, index_1.transformApiError)(error, 'Failed to bulk delete tasks');
300
+ }
301
+ }
302
+ // ==================== BULK CREATE ====================
303
+ async function bulkCreateTasks(args, authManager) {
304
+ try {
305
+ validateBulkCreate(args);
306
+ }
307
+ catch (error) {
308
+ // Preserve validation errors
309
+ if (error instanceof index_1.MCPError)
310
+ throw error;
311
+ throw error;
312
+ }
313
+ try {
314
+ // Validation ensures projectId and tasks exist
315
+ const projectId = args.projectId ?? 0;
316
+ const tasks = args.tasks ?? [];
317
+ const creationResult = await processors.create.processBatches(tasks.map((_, i) => i), async (index) => {
318
+ const t = tasks[index];
319
+ if (!t)
320
+ throw new Error(`Task data at index ${index} is undefined`);
321
+ const newTask = { title: t.title, project_id: projectId };
322
+ if (t.description !== undefined)
323
+ newTask.description = t.description;
324
+ if (t.dueDate !== undefined)
325
+ newTask.due_date = t.dueDate;
326
+ if (t.priority !== undefined)
327
+ newTask.priority = t.priority;
328
+ if (t.repeatAfter !== undefined || t.repeatMode !== undefined) {
329
+ const rc = (0, validation_1.convertRepeatConfiguration)(t.repeatAfter, t.repeatMode);
330
+ if (rc.repeat_after !== undefined)
331
+ newTask.repeat_after = rc.repeat_after;
332
+ if (rc.repeat_mode !== undefined)
333
+ newTask.repeat_mode = rc.repeat_mode;
334
+ }
335
+ // PUT /projects/{id}/tasks per the OpenAPI spec (models.Task body).
336
+ const created = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/projects/${projectId}/tasks`, newTask);
337
+ if (!created.id)
338
+ return created;
339
+ // Narrow type - id is guaranteed to exist after early return
340
+ const createdId = created.id;
341
+ try {
342
+ const labels = t.labels;
343
+ if (labels && labels.length > 0)
344
+ await (0, retry_1.withRetry)(() => (0, label_bulk_1.setTaskLabels)(authManager, createdId, labels), { maxRetries: index_1.RETRY_CONFIG.AUTH_ERRORS.maxRetries ?? 3, timeout: (index_1.RETRY_CONFIG.AUTH_ERRORS.initialDelay ?? 1000) + (index_1.RETRY_CONFIG.AUTH_ERRORS.maxDelay ?? 10000), shouldRetry: index_1.isAuthenticationError });
345
+ const assignees = t.assignees;
346
+ if (assignees && assignees.length > 0) {
347
+ try {
348
+ // Per-user additive assign (PUT /tasks/{taskID}/assignees, body
349
+ // { user_id }, models.TaskAssginee) instead of the bulk endpoint,
350
+ // which REPLACES the list and would silently unassign everyone
351
+ // (democratize-technology/vikunja-mcp#15). Sequential on
352
+ // purpose (post-#89 pattern sweep): concurrent per-user writes
353
+ // to the same task risk "database is locked" 500s on
354
+ // SQLite-backed instances.
355
+ for (const userId of assignees) {
356
+ await (0, retry_1.withRetry)(() => (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/tasks/${createdId}/assignees`, { user_id: userId }), { maxRetries: index_1.RETRY_CONFIG.AUTH_ERRORS.maxRetries ?? 3, timeout: (index_1.RETRY_CONFIG.AUTH_ERRORS.initialDelay ?? 1000) + (index_1.RETRY_CONFIG.AUTH_ERRORS.maxDelay ?? 10000), shouldRetry: index_1.isAuthenticationError });
357
+ }
358
+ }
359
+ catch (assigneeError) {
360
+ if ((0, index_1.isAuthenticationError)(assigneeError)) {
361
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, 'Assignee operations may have authentication issues');
362
+ }
363
+ // Wrap assignee errors to distinguish from createTask errors
364
+ if (assigneeError instanceof Error) {
365
+ const wrappedError = new index_1.MCPError(index_1.ErrorCode.API_ERROR, assigneeError.message);
366
+ wrappedError.isLabelAssigneeError = true;
367
+ throw wrappedError;
368
+ }
369
+ throw assigneeError;
370
+ }
371
+ }
372
+ return await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${createdId}`);
373
+ }
374
+ catch (updateError) {
375
+ // Clean up the created task since labels/assignees failed
376
+ try {
377
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${createdId}`);
378
+ }
379
+ catch (deleteError) {
380
+ index_1.logger.error('Cleanup failed', deleteError);
381
+ }
382
+ // Wrap label errors to distinguish from createTask errors
383
+ if (updateError instanceof Error && !(updateError instanceof index_1.MCPError)) {
384
+ const wrappedError = new index_1.MCPError(index_1.ErrorCode.API_ERROR, updateError.message);
385
+ wrappedError.isLabelAssigneeError = true;
386
+ throw wrappedError;
387
+ }
388
+ throw updateError;
389
+ }
390
+ });
391
+ const failedTasks = creationResult.failed.map(f => ({ index: f.originalItem, error: f.error instanceof Error ? f.error.message : String(f.error) }));
392
+ if (failedTasks.length > 0 && creationResult.successful.length === 0) {
393
+ const firstError = creationResult.failed[0]?.error;
394
+ // Preserve MCPError instances with auth messages or label/assignee marker
395
+ if (firstError instanceof index_1.MCPError && (firstError.message.includes('authentication') || firstError.isLabelAssigneeError === true))
396
+ throw firstError;
397
+ // Transform all other errors (including API errors) into generic bulk create error
398
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, `Bulk create failed. Could not create any tasks`);
399
+ }
400
+ return successResponse('create-tasks', failedTasks.length > 0 ? `Bulk create partially completed. Successfully created ${creationResult.successful.length} tasks, ${failedTasks.length} failed.` : `Successfully created ${creationResult.successful.length} tasks`, creationResult.successful, {
401
+ count: creationResult.successful.length, success: failedTasks.length === 0, ...(failedTasks.length > 0 && { failedCount: failedTasks.length, failures: failedTasks }),
402
+ });
403
+ }
404
+ catch (error) {
405
+ // Preserve MCPError instances from validation
406
+ if (error instanceof index_1.MCPError)
407
+ throw error;
408
+ // Preserve fetch/connection errors
409
+ if (error instanceof Error && (error.message.includes('fetch failed') || error.message.includes('ECONNREFUSED') || error.message.includes('ENOTFOUND'))) {
410
+ throw (0, index_1.handleFetchError)(error, 'bulk create tasks');
411
+ }
412
+ // Transform all other errors into generic bulk create error
413
+ throw new index_1.MCPError(index_1.ErrorCode.API_ERROR, 'Bulk create failed. Could not create any tasks');
414
+ }
415
+ }
416
+ //# sourceMappingURL=bulk-operations-simplified.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-operations-simplified.js","sourceRoot":"","sources":["../../../src/tools/tasks/bulk-operations-simplified.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Bulk operations for tasks with performance optimizations
3
+ *
4
+ * This file maintains backward compatibility while using the simplified implementation.
5
+ */
6
+ export { bulkUpdateTasks, bulkDeleteTasks, bulkCreateTasks } from './bulk-operations-simplified';
7
+ export type { BulkUpdateArgs, BulkDeleteArgs, BulkCreateArgs, BulkCreateTaskData } from './bulk/BulkOperationValidator';
8
+ //# sourceMappingURL=bulk-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-operations.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/bulk-operations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGjG,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EACnB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ /**
3
+ * Bulk operations for tasks with performance optimizations
4
+ *
5
+ * This file maintains backward compatibility while using the simplified implementation.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.bulkCreateTasks = exports.bulkDeleteTasks = exports.bulkUpdateTasks = void 0;
9
+ var bulk_operations_simplified_1 = require("./bulk-operations-simplified");
10
+ Object.defineProperty(exports, "bulkUpdateTasks", { enumerable: true, get: function () { return bulk_operations_simplified_1.bulkUpdateTasks; } });
11
+ Object.defineProperty(exports, "bulkDeleteTasks", { enumerable: true, get: function () { return bulk_operations_simplified_1.bulkDeleteTasks; } });
12
+ Object.defineProperty(exports, "bulkCreateTasks", { enumerable: true, get: function () { return bulk_operations_simplified_1.bulkCreateTasks; } });
13
+ //# sourceMappingURL=bulk-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-operations.js","sourceRoot":"","sources":["../../../src/tools/tasks/bulk-operations.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2EAAiG;AAAxF,6HAAA,eAAe,OAAA;AAAE,6HAAA,eAAe,OAAA;AAAE,6HAAA,eAAe,OAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Task by-index lookup
3
+ *
4
+ * Implements `get-by-index`, which resolves a task by its human-facing
5
+ * per-project index (`GET /projects/{project}/tasks/by-index/{index}`) —
6
+ * useful for resolving references like "PROJ-42" to a canonical task
7
+ * object. Per the spec, task indexes are reassigned when a task moves
8
+ * between projects, so long-lived references should use the returned
9
+ * task's numeric `id` instead of re-resolving by index later.
10
+ *
11
+ * legacy client does not expose this endpoint, so this calls the Vikunja
12
+ * REST API directly via the shared `vikunja-rest` helper.
13
+ */
14
+ import type { AuthManager } from '../../auth/AuthManager';
15
+ export interface GetTaskByIndexArgs {
16
+ /** Numeric id of the project the task's index is scoped to. */
17
+ projectId?: number;
18
+ /** The task's per-project index (e.g. the "42" in "PROJ-42"). */
19
+ index?: number;
20
+ /** Session id for response tracking. */
21
+ sessionId?: string;
22
+ }
23
+ /**
24
+ * Looks up a task by its per-project index.
25
+ *
26
+ * @param args - Project id and per-project task index
27
+ * @param authManager - Active auth manager holding session credentials
28
+ * @returns MCP response containing the resolved task
29
+ */
30
+ export declare function getTaskByIndex(args: GetTaskByIndexArgs, authManager: AuthManager): Promise<{
31
+ content: Array<{
32
+ type: 'text';
33
+ text: string;
34
+ }>;
35
+ }>;
36
+ //# sourceMappingURL=by-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"by-index.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/by-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0C7D"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * Task by-index lookup
4
+ *
5
+ * Implements `get-by-index`, which resolves a task by its human-facing
6
+ * per-project index (`GET /projects/{project}/tasks/by-index/{index}`) —
7
+ * useful for resolving references like "PROJ-42" to a canonical task
8
+ * object. Per the spec, task indexes are reassigned when a task moves
9
+ * between projects, so long-lived references should use the returned
10
+ * task's numeric `id` instead of re-resolving by index later.
11
+ *
12
+ * legacy client does not expose this endpoint, so this calls the Vikunja
13
+ * REST API directly via the shared `vikunja-rest` helper.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.getTaskByIndex = getTaskByIndex;
17
+ const types_1 = require("../../types");
18
+ const validation_1 = require("../../utils/validation");
19
+ const response_factory_1 = require("../../utils/response-factory");
20
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
21
+ /**
22
+ * Looks up a task by its per-project index.
23
+ *
24
+ * @param args - Project id and per-project task index
25
+ * @param authManager - Active auth manager holding session credentials
26
+ * @returns MCP response containing the resolved task
27
+ */
28
+ async function getTaskByIndex(args, authManager) {
29
+ if (args.projectId === undefined || args.projectId === null) {
30
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'projectId is required for get-by-index operation');
31
+ }
32
+ if (args.index === undefined || args.index === null) {
33
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'index is required for get-by-index operation');
34
+ }
35
+ (0, validation_1.validateId)(args.projectId, 'projectId');
36
+ (0, validation_1.validateId)(args.index, 'index');
37
+ const task = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/projects/${args.projectId}/tasks/by-index/${args.index}`);
38
+ const response = (0, response_factory_1.createStandardResponse)('get-task-by-index', `Resolved task at index ${args.index} in project ${args.projectId}`, { task }, {
39
+ timestamp: new Date().toISOString(),
40
+ projectId: args.projectId,
41
+ index: args.index,
42
+ }, args.sessionId);
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ //# sourceMappingURL=by-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"by-index.js","sourceRoot":"","sources":["../../../src/tools/tasks/by-index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAwBH,wCA6CC;AAlED,uCAAkD;AAClD,uDAAoD;AACpD,mEAA4F;AAC5F,2DAA8D;AAW9D;;;;;;GAMG;AACI,KAAK,UAAU,cAAc,CAClC,IAAwB,EACxB,WAAwB;IAExB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,kDAAkD,CACnD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IACD,IAAA,uBAAU,EAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,IAAA,uBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAkB,EACnC,WAAW,EACX,KAAK,EACL,aAAa,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC,KAAK,EAAE,CAC3D,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,yCAAsB,EACrC,mBAAmB,EACnB,0BAA0B,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,SAAS,EAAE,EACnE,EAAE,IAAI,EAAE,EACR;QACE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,QAAQ,CAAC;aACrC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Comment operations service
3
+ * Handles core business logic for task comment management
4
+ */
5
+ import type { Message, TaskComment } from '../../../types/vikunja';
6
+ import type { AuthManager } from '../../../auth/AuthManager';
7
+ /**
8
+ * Service for managing task comment operations
9
+ */
10
+ export declare const CommentOperationsService: {
11
+ /**
12
+ * Create a new comment on a task via `PUT /tasks/{taskID}/comments`. The
13
+ * request body is `models.TaskComment`, which per the spec carries only
14
+ * `comment` as a writable field (`task_id` comes from the URL, not the
15
+ * body).
16
+ */
17
+ createComment(authManager: AuthManager, taskId: number, commentText: string): Promise<TaskComment>;
18
+ /**
19
+ * Fetch all comments for a task via `GET /tasks/{taskID}/comments`.
20
+ */
21
+ fetchTaskComments(authManager: AuthManager, taskId: number): Promise<TaskComment[]>;
22
+ /**
23
+ * Fetch a single comment on a task via
24
+ * `GET /tasks/{taskID}/comments/{commentID}`.
25
+ */
26
+ getComment(authManager: AuthManager, taskId: number, commentId: number): Promise<TaskComment>;
27
+ /**
28
+ * Update an existing comment on a task via
29
+ * `POST /tasks/{taskID}/comments/{commentID}`. The spec omits an explicit
30
+ * body schema for this endpoint's parameters, but its behavior mirrors the
31
+ * create endpoint's `models.TaskComment` — only `comment` is sent.
32
+ */
33
+ updateComment(authManager: AuthManager, taskId: number, commentId: number, commentText: string): Promise<TaskComment>;
34
+ /**
35
+ * Delete a comment from a task via
36
+ * `DELETE /tasks/{taskID}/comments/{commentID}`.
37
+ */
38
+ deleteComment(authManager: AuthManager, taskId: number, commentId: number): Promise<Message>;
39
+ /**
40
+ * Get comment count from comments array
41
+ */
42
+ getCommentCount(comments: TaskComment[]): number;
43
+ };
44
+ //# sourceMappingURL=CommentOperationsService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentOperationsService.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/comments/CommentOperationsService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AA4B7D;;GAEG;AACH,eAAO,MAAM,wBAAwB;IACnC;;;;;OAKG;+BAEY,WAAW,UAChB,MAAM,eACD,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC;IAUvB;;OAEG;mCACkC,WAAW,UAAU,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IASzF;;;OAGG;4BAEY,WAAW,UAChB,MAAM,aACH,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC;IASvB;;;;;OAKG;+BAEY,WAAW,UAChB,MAAM,aACH,MAAM,eACJ,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC;IAUvB;;;OAGG;+BAEY,WAAW,UAChB,MAAM,aACH,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IASnB;;OAEG;8BACuB,WAAW,EAAE,GAAG,MAAM;CAGjD,CAAC"}