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.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/dist/auth/AuthManager.d.ts +63 -0
- package/dist/auth/AuthManager.d.ts.map +1 -0
- package/dist/auth/AuthManager.js +137 -0
- package/dist/auth/AuthManager.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/permissions.d.ts +60 -0
- package/dist/auth/permissions.d.ts.map +1 -0
- package/dist/auth/permissions.js +173 -0
- package/dist/auth/permissions.js.map +1 -0
- package/dist/client/VikunjaClientFactory.d.ts +41 -0
- package/dist/client/VikunjaClientFactory.d.ts.map +1 -0
- package/dist/client/VikunjaClientFactory.js +58 -0
- package/dist/client/VikunjaClientFactory.js.map +1 -0
- package/dist/client.d.ts +70 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +136 -0
- package/dist/client.js.map +1 -0
- package/dist/config/ConfigurationManager.d.ts +106 -0
- package/dist/config/ConfigurationManager.d.ts.map +1 -0
- package/dist/config/ConfigurationManager.js +509 -0
- package/dist/config/ConfigurationManager.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +36 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/secrets.d.ts +33 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +90 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/config/types.d.ts +1113 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +189 -0
- package/dist/config/types.js.map +1 -0
- package/dist/formatters/BatchImportResponseFormatter.d.ts +89 -0
- package/dist/formatters/BatchImportResponseFormatter.d.ts.map +1 -0
- package/dist/formatters/BatchImportResponseFormatter.js +125 -0
- package/dist/formatters/BatchImportResponseFormatter.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +130 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/direct-middleware.d.ts +9 -0
- package/dist/middleware/direct-middleware.d.ts.map +1 -0
- package/dist/middleware/direct-middleware.js +49 -0
- package/dist/middleware/direct-middleware.js.map +1 -0
- package/dist/middleware/index.d.ts +8 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +21 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/simplified-rate-limit.d.ts +147 -0
- package/dist/middleware/simplified-rate-limit.d.ts.map +1 -0
- package/dist/middleware/simplified-rate-limit.js +533 -0
- package/dist/middleware/simplified-rate-limit.js.map +1 -0
- package/dist/parsers/CSVParser.d.ts +36 -0
- package/dist/parsers/CSVParser.d.ts.map +1 -0
- package/dist/parsers/CSVParser.js +69 -0
- package/dist/parsers/CSVParser.js.map +1 -0
- package/dist/parsers/InputParserFactory.d.ts +17 -0
- package/dist/parsers/InputParserFactory.d.ts.map +1 -0
- package/dist/parsers/InputParserFactory.js +137 -0
- package/dist/parsers/InputParserFactory.js.map +1 -0
- package/dist/parsers/JSONParser.d.ts +74 -0
- package/dist/parsers/JSONParser.d.ts.map +1 -0
- package/dist/parsers/JSONParser.js +69 -0
- package/dist/parsers/JSONParser.js.map +1 -0
- package/dist/services/EntityResolver.d.ts +92 -0
- package/dist/services/EntityResolver.d.ts.map +1 -0
- package/dist/services/EntityResolver.js +201 -0
- package/dist/services/EntityResolver.js.map +1 -0
- package/dist/services/TaskCreationService.d.ts +99 -0
- package/dist/services/TaskCreationService.d.ts.map +1 -0
- package/dist/services/TaskCreationService.js +392 -0
- package/dist/services/TaskCreationService.js.map +1 -0
- package/dist/storage/SimpleFilterStorage.d.ts +103 -0
- package/dist/storage/SimpleFilterStorage.d.ts.map +1 -0
- package/dist/storage/SimpleFilterStorage.js +350 -0
- package/dist/storage/SimpleFilterStorage.js.map +1 -0
- package/dist/storage/filtering/FilterSerializer.d.ts +45 -0
- package/dist/storage/filtering/FilterSerializer.d.ts.map +1 -0
- package/dist/storage/filtering/FilterSerializer.js +171 -0
- package/dist/storage/filtering/FilterSerializer.js.map +1 -0
- package/dist/storage/filtering/FilterValidator.d.ts +59 -0
- package/dist/storage/filtering/FilterValidator.d.ts.map +1 -0
- package/dist/storage/filtering/FilterValidator.js +183 -0
- package/dist/storage/filtering/FilterValidator.js.map +1 -0
- package/dist/storage/index.d.ts +61 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +125 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/templateFileStore.d.ts +62 -0
- package/dist/storage/templateFileStore.d.ts.map +1 -0
- package/dist/storage/templateFileStore.js +151 -0
- package/dist/storage/templateFileStore.js.map +1 -0
- package/dist/tools/admin.d.ts +51 -0
- package/dist/tools/admin.d.ts.map +1 -0
- package/dist/tools/admin.js +207 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/auth.d.ts +9 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +175 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/batch-import.d.ts +5 -0
- package/dist/tools/batch-import.d.ts.map +1 -0
- package/dist/tools/batch-import.js +153 -0
- package/dist/tools/batch-import.js.map +1 -0
- package/dist/tools/caldav-tokens.d.ts +45 -0
- package/dist/tools/caldav-tokens.d.ts.map +1 -0
- package/dist/tools/caldav-tokens.js +93 -0
- package/dist/tools/caldav-tokens.js.map +1 -0
- package/dist/tools/export.d.ts +14 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +252 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/filters.d.ts +50 -0
- package/dist/tools/filters.d.ts.map +1 -0
- package/dist/tools/filters.js +512 -0
- package/dist/tools/filters.js.map +1 -0
- package/dist/tools/index.d.ts +53 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +217 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/labels.d.ts +22 -0
- package/dist/tools/labels.d.ts.map +1 -0
- package/dist/tools/labels.js +206 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/notifications.d.ts +17 -0
- package/dist/tools/notifications.d.ts.map +1 -0
- package/dist/tools/notifications.js +171 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/tools/projects/backgrounds.d.ts +80 -0
- package/dist/tools/projects/backgrounds.d.ts.map +1 -0
- package/dist/tools/projects/backgrounds.js +154 -0
- package/dist/tools/projects/backgrounds.js.map +1 -0
- package/dist/tools/projects/buckets.d.ts +147 -0
- package/dist/tools/projects/buckets.d.ts.map +1 -0
- package/dist/tools/projects/buckets.js +291 -0
- package/dist/tools/projects/buckets.js.map +1 -0
- package/dist/tools/projects/crud.d.ts +145 -0
- package/dist/tools/projects/crud.d.ts.map +1 -0
- package/dist/tools/projects/crud.js +425 -0
- package/dist/tools/projects/crud.js.map +1 -0
- package/dist/tools/projects/duplicate.d.ts +41 -0
- package/dist/tools/projects/duplicate.d.ts.map +1 -0
- package/dist/tools/projects/duplicate.js +49 -0
- package/dist/tools/projects/duplicate.js.map +1 -0
- package/dist/tools/projects/hierarchy.d.ts +77 -0
- package/dist/tools/projects/hierarchy.d.ts.map +1 -0
- package/dist/tools/projects/hierarchy.js +300 -0
- package/dist/tools/projects/hierarchy.js.map +1 -0
- package/dist/tools/projects/index.d.ts +34 -0
- package/dist/tools/projects/index.d.ts.map +1 -0
- package/dist/tools/projects/index.js +522 -0
- package/dist/tools/projects/index.js.map +1 -0
- package/dist/tools/projects/permission.d.ts +26 -0
- package/dist/tools/projects/permission.d.ts.map +1 -0
- package/dist/tools/projects/permission.js +53 -0
- package/dist/tools/projects/permission.js.map +1 -0
- package/dist/tools/projects/response-formatter.d.ts +54 -0
- package/dist/tools/projects/response-formatter.d.ts.map +1 -0
- package/dist/tools/projects/response-formatter.js +139 -0
- package/dist/tools/projects/response-formatter.js.map +1 -0
- package/dist/tools/projects/sharing-access.d.ts +165 -0
- package/dist/tools/projects/sharing-access.d.ts.map +1 -0
- package/dist/tools/projects/sharing-access.js +450 -0
- package/dist/tools/projects/sharing-access.js.map +1 -0
- package/dist/tools/projects/sharing.d.ts +105 -0
- package/dist/tools/projects/sharing.d.ts.map +1 -0
- package/dist/tools/projects/sharing.js +258 -0
- package/dist/tools/projects/sharing.js.map +1 -0
- package/dist/tools/projects/validation.d.ts +51 -0
- package/dist/tools/projects/validation.d.ts.map +1 -0
- package/dist/tools/projects/validation.js +160 -0
- package/dist/tools/projects/validation.js.map +1 -0
- package/dist/tools/projects/views.d.ts +161 -0
- package/dist/tools/projects/views.d.ts.map +1 -0
- package/dist/tools/projects/views.js +234 -0
- package/dist/tools/projects/views.js.map +1 -0
- package/dist/tools/projects.d.ts +20 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +66 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/reactions.d.ts +25 -0
- package/dist/tools/reactions.d.ts.map +1 -0
- package/dist/tools/reactions.js +108 -0
- package/dist/tools/reactions.js.map +1 -0
- package/dist/tools/subscriptions.d.ts +23 -0
- package/dist/tools/subscriptions.d.ts.map +1 -0
- package/dist/tools/subscriptions.js +111 -0
- package/dist/tools/subscriptions.js.map +1 -0
- package/dist/tools/task-assignees.d.ts +13 -0
- package/dist/tools/task-assignees.d.ts.map +1 -0
- package/dist/tools/task-assignees.js +74 -0
- package/dist/tools/task-assignees.js.map +1 -0
- package/dist/tools/task-bulk.d.ts +13 -0
- package/dist/tools/task-bulk.d.ts.map +1 -0
- package/dist/tools/task-bulk.js +117 -0
- package/dist/tools/task-bulk.js.map +1 -0
- package/dist/tools/task-comments.d.ts +12 -0
- package/dist/tools/task-comments.d.ts.map +1 -0
- package/dist/tools/task-comments.js +65 -0
- package/dist/tools/task-comments.js.map +1 -0
- package/dist/tools/task-crud.d.ts +13 -0
- package/dist/tools/task-crud.d.ts.map +1 -0
- package/dist/tools/task-crud.js +168 -0
- package/dist/tools/task-crud.js.map +1 -0
- package/dist/tools/task-labels.d.ts +13 -0
- package/dist/tools/task-labels.d.ts.map +1 -0
- package/dist/tools/task-labels.js +64 -0
- package/dist/tools/task-labels.js.map +1 -0
- package/dist/tools/task-relations.d.ts +13 -0
- package/dist/tools/task-relations.d.ts.map +1 -0
- package/dist/tools/task-relations.js +74 -0
- package/dist/tools/task-relations.js.map +1 -0
- package/dist/tools/task-reminders.d.ts +13 -0
- package/dist/tools/task-reminders.d.ts.map +1 -0
- package/dist/tools/task-reminders.js +69 -0
- package/dist/tools/task-reminders.js.map +1 -0
- package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts +63 -0
- package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts.map +1 -0
- package/dist/tools/tasks/assignees/AssigneeOperationsService.js +152 -0
- package/dist/tools/tasks/assignees/AssigneeOperationsService.js.map +1 -0
- package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts +28 -0
- package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts.map +1 -0
- package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js +73 -0
- package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js.map +1 -0
- package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts +46 -0
- package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts.map +1 -0
- package/dist/tools/tasks/assignees/AssigneeValidationService.js +70 -0
- package/dist/tools/tasks/assignees/AssigneeValidationService.js.map +1 -0
- package/dist/tools/tasks/assignees/index.d.ts +52 -0
- package/dist/tools/tasks/assignees/index.d.ts.map +1 -0
- package/dist/tools/tasks/assignees/index.js +103 -0
- package/dist/tools/tasks/assignees/index.js.map +1 -0
- package/dist/tools/tasks/attach.d.ts +39 -0
- package/dist/tools/tasks/attach.d.ts.map +1 -0
- package/dist/tools/tasks/attach.js +90 -0
- package/dist/tools/tasks/attach.js.map +1 -0
- package/dist/tools/tasks/attachments.d.ts +67 -0
- package/dist/tools/tasks/attachments.d.ts.map +1 -0
- package/dist/tools/tasks/attachments.js +153 -0
- package/dist/tools/tasks/attachments.js.map +1 -0
- package/dist/tools/tasks/buckets.d.ts +41 -0
- package/dist/tools/tasks/buckets.d.ts.map +1 -0
- package/dist/tools/tasks/buckets.js +75 -0
- package/dist/tools/tasks/buckets.js.map +1 -0
- package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts +30 -0
- package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts.map +1 -0
- package/dist/tools/tasks/bulk/BatchProcessorFactory.js +69 -0
- package/dist/tools/tasks/bulk/BatchProcessorFactory.js.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts +50 -0
- package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js +183 -0
- package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts +101 -0
- package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationProcessor.js +416 -0
- package/dist/tools/tasks/bulk/BulkOperationProcessor.js.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts +50 -0
- package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationTypes.js +6 -0
- package/dist/tools/tasks/bulk/BulkOperationTypes.js.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts +53 -0
- package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts.map +1 -0
- package/dist/tools/tasks/bulk/BulkOperationValidator.js +216 -0
- package/dist/tools/tasks/bulk/BulkOperationValidator.js.map +1 -0
- package/dist/tools/tasks/bulk/index.d.ts +9 -0
- package/dist/tools/tasks/bulk/index.d.ts.map +1 -0
- package/dist/tools/tasks/bulk/index.js +15 -0
- package/dist/tools/tasks/bulk/index.js.map +1 -0
- package/dist/tools/tasks/bulk-operations-simplified.d.ts +62 -0
- package/dist/tools/tasks/bulk-operations-simplified.d.ts.map +1 -0
- package/dist/tools/tasks/bulk-operations-simplified.js +416 -0
- package/dist/tools/tasks/bulk-operations-simplified.js.map +1 -0
- package/dist/tools/tasks/bulk-operations.d.ts +8 -0
- package/dist/tools/tasks/bulk-operations.d.ts.map +1 -0
- package/dist/tools/tasks/bulk-operations.js +13 -0
- package/dist/tools/tasks/bulk-operations.js.map +1 -0
- package/dist/tools/tasks/by-index.d.ts +36 -0
- package/dist/tools/tasks/by-index.d.ts.map +1 -0
- package/dist/tools/tasks/by-index.js +52 -0
- package/dist/tools/tasks/by-index.js.map +1 -0
- package/dist/tools/tasks/comments/CommentOperationsService.d.ts +44 -0
- package/dist/tools/tasks/comments/CommentOperationsService.d.ts.map +1 -0
- package/dist/tools/tasks/comments/CommentOperationsService.js +86 -0
- package/dist/tools/tasks/comments/CommentOperationsService.js.map +1 -0
- package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts +41 -0
- package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts.map +1 -0
- package/dist/tools/tasks/comments/CommentResponseFormatter.js +114 -0
- package/dist/tools/tasks/comments/CommentResponseFormatter.js.map +1 -0
- package/dist/tools/tasks/comments/CommentValidationService.d.ts +62 -0
- package/dist/tools/tasks/comments/CommentValidationService.d.ts.map +1 -0
- package/dist/tools/tasks/comments/CommentValidationService.js +105 -0
- package/dist/tools/tasks/comments/CommentValidationService.js.map +1 -0
- package/dist/tools/tasks/comments/index.d.ts +66 -0
- package/dist/tools/tasks/comments/index.d.ts.map +1 -0
- package/dist/tools/tasks/comments/index.js +99 -0
- package/dist/tools/tasks/comments/index.js.map +1 -0
- package/dist/tools/tasks/constants.d.ts +19 -0
- package/dist/tools/tasks/constants.d.ts.map +1 -0
- package/dist/tools/tasks/constants.js +82 -0
- package/dist/tools/tasks/constants.js.map +1 -0
- package/dist/tools/tasks/crud/TaskCreationService.d.ts +29 -0
- package/dist/tools/tasks/crud/TaskCreationService.d.ts.map +1 -0
- package/dist/tools/tasks/crud/TaskCreationService.js +274 -0
- package/dist/tools/tasks/crud/TaskCreationService.js.map +1 -0
- package/dist/tools/tasks/crud/TaskDeletionService.d.ts +19 -0
- package/dist/tools/tasks/crud/TaskDeletionService.d.ts.map +1 -0
- package/dist/tools/tasks/crud/TaskDeletionService.js +96 -0
- package/dist/tools/tasks/crud/TaskDeletionService.js.map +1 -0
- package/dist/tools/tasks/crud/TaskReadService.d.ts +19 -0
- package/dist/tools/tasks/crud/TaskReadService.d.ts.map +1 -0
- package/dist/tools/tasks/crud/TaskReadService.js +66 -0
- package/dist/tools/tasks/crud/TaskReadService.js.map +1 -0
- package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts +18 -0
- package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts.map +1 -0
- package/dist/tools/tasks/crud/TaskResponseFormatter.js +248 -0
- package/dist/tools/tasks/crud/TaskResponseFormatter.js.map +1 -0
- package/dist/tools/tasks/crud/TaskUpdateService.d.ts +33 -0
- package/dist/tools/tasks/crud/TaskUpdateService.d.ts.map +1 -0
- package/dist/tools/tasks/crud/TaskUpdateService.js +294 -0
- package/dist/tools/tasks/crud/TaskUpdateService.js.map +1 -0
- package/dist/tools/tasks/crud/index.d.ts +17 -0
- package/dist/tools/tasks/crud/index.d.ts.map +1 -0
- package/dist/tools/tasks/crud/index.js +20 -0
- package/dist/tools/tasks/crud/index.js.map +1 -0
- package/dist/tools/tasks/duplicate.d.ts +28 -0
- package/dist/tools/tasks/duplicate.d.ts.map +1 -0
- package/dist/tools/tasks/duplicate.js +41 -0
- package/dist/tools/tasks/duplicate.js.map +1 -0
- package/dist/tools/tasks/filtering/FilterExecutor.d.ts +39 -0
- package/dist/tools/tasks/filtering/FilterExecutor.d.ts.map +1 -0
- package/dist/tools/tasks/filtering/FilterExecutor.js +214 -0
- package/dist/tools/tasks/filtering/FilterExecutor.js.map +1 -0
- package/dist/tools/tasks/filtering/FilterValidator.d.ts +59 -0
- package/dist/tools/tasks/filtering/FilterValidator.d.ts.map +1 -0
- package/dist/tools/tasks/filtering/FilterValidator.js +257 -0
- package/dist/tools/tasks/filtering/FilterValidator.js.map +1 -0
- package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts +78 -0
- package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts.map +1 -0
- package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js +195 -0
- package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js.map +1 -0
- package/dist/tools/tasks/filtering/evaluators.d.ts +41 -0
- package/dist/tools/tasks/filtering/evaluators.d.ts.map +1 -0
- package/dist/tools/tasks/filtering/evaluators.js +224 -0
- package/dist/tools/tasks/filtering/evaluators.js.map +1 -0
- package/dist/tools/tasks/filtering/index.d.ts +11 -0
- package/dist/tools/tasks/filtering/index.d.ts.map +1 -0
- package/dist/tools/tasks/filtering/index.js +26 -0
- package/dist/tools/tasks/filtering/index.js.map +1 -0
- package/dist/tools/tasks/index.d.ts +9 -0
- package/dist/tools/tasks/index.d.ts.map +1 -0
- package/dist/tools/tasks/index.js +337 -0
- package/dist/tools/tasks/index.js.map +1 -0
- package/dist/tools/tasks/labels.d.ts +49 -0
- package/dist/tools/tasks/labels.d.ts.map +1 -0
- package/dist/tools/tasks/labels.js +223 -0
- package/dist/tools/tasks/labels.js.map +1 -0
- package/dist/tools/tasks/mark-read.d.ts +27 -0
- package/dist/tools/tasks/mark-read.d.ts.map +1 -0
- package/dist/tools/tasks/mark-read.js +38 -0
- package/dist/tools/tasks/mark-read.js.map +1 -0
- package/dist/tools/tasks/position.d.ts +53 -0
- package/dist/tools/tasks/position.d.ts.map +1 -0
- package/dist/tools/tasks/position.js +83 -0
- package/dist/tools/tasks/position.js.map +1 -0
- package/dist/tools/tasks/reminders.d.ts +56 -0
- package/dist/tools/tasks/reminders.d.ts.map +1 -0
- package/dist/tools/tasks/reminders.js +213 -0
- package/dist/tools/tasks/reminders.js.map +1 -0
- package/dist/tools/tasks/subtasks.d.ts +85 -0
- package/dist/tools/tasks/subtasks.d.ts.map +1 -0
- package/dist/tools/tasks/subtasks.js +286 -0
- package/dist/tools/tasks/subtasks.js.map +1 -0
- package/dist/tools/tasks/types/filters.d.ts +136 -0
- package/dist/tools/tasks/types/filters.d.ts.map +1 -0
- package/dist/tools/tasks/types/filters.js +7 -0
- package/dist/tools/tasks/types/filters.js.map +1 -0
- package/dist/tools/tasks/validation.d.ts +47 -0
- package/dist/tools/tasks/validation.d.ts.map +1 -0
- package/dist/tools/tasks/validation.js +131 -0
- package/dist/tools/tasks/validation.js.map +1 -0
- package/dist/tools/tasks-relations.d.ts +25 -0
- package/dist/tools/tasks-relations.d.ts.map +1 -0
- package/dist/tools/tasks-relations.js +271 -0
- package/dist/tools/tasks-relations.js.map +1 -0
- package/dist/tools/tasks.d.ts +6 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +10 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/teams.d.ts +9 -0
- package/dist/tools/teams.d.ts.map +1 -0
- package/dist/tools/teams.js +255 -0
- package/dist/tools/teams.js.map +1 -0
- package/dist/tools/templates.d.ts +9 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +450 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/tokens.d.ts +37 -0
- package/dist/tools/tokens.d.ts.map +1 -0
- package/dist/tools/tokens.js +122 -0
- package/dist/tools/tokens.js.map +1 -0
- package/dist/tools/user-deletion.d.ts +41 -0
- package/dist/tools/user-deletion.d.ts.map +1 -0
- package/dist/tools/user-deletion.js +126 -0
- package/dist/tools/user-deletion.js.map +1 -0
- package/dist/tools/users.d.ts +9 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +418 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/tools/webhooks.d.ts +31 -0
- package/dist/tools/webhooks.d.ts.map +1 -0
- package/dist/tools/webhooks.js +414 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/transforms/base.d.ts +204 -0
- package/dist/transforms/base.d.ts.map +1 -0
- package/dist/transforms/base.js +175 -0
- package/dist/transforms/base.js.map +1 -0
- package/dist/transforms/field-selector.d.ts +27 -0
- package/dist/transforms/field-selector.d.ts.map +1 -0
- package/dist/transforms/field-selector.js +91 -0
- package/dist/transforms/field-selector.js.map +1 -0
- package/dist/transforms/index.d.ts +15 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/dist/transforms/index.js +50 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/size-calculator.d.ts +131 -0
- package/dist/transforms/size-calculator.d.ts.map +1 -0
- package/dist/transforms/size-calculator.js +284 -0
- package/dist/transforms/size-calculator.js.map +1 -0
- package/dist/transforms/task.d.ts +207 -0
- package/dist/transforms/task.d.ts.map +1 -0
- package/dist/transforms/task.js +259 -0
- package/dist/transforms/task.js.map +1 -0
- package/dist/types/errors.d.ts +65 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +44 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/filters.d.ts +149 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/filters.js +26 -0
- package/dist/types/filters.js.map +1 -0
- package/dist/types/index.d.ts +147 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/node-vikunja-extended.d.ts +36 -0
- package/dist/types/node-vikunja-extended.d.ts.map +1 -0
- package/dist/types/node-vikunja-extended.js +25 -0
- package/dist/types/node-vikunja-extended.js.map +1 -0
- package/dist/types/responses.d.ts +121 -0
- package/dist/types/responses.d.ts.map +1 -0
- package/dist/types/responses.js +26 -0
- package/dist/types/responses.js.map +1 -0
- package/dist/types/vikunja.d.ts +319 -0
- package/dist/types/vikunja.d.ts.map +1 -0
- package/dist/types/vikunja.js +7 -0
- package/dist/types/vikunja.js.map +1 -0
- package/dist/utils/auth-error-handler.d.ts +23 -0
- package/dist/utils/auth-error-handler.d.ts.map +1 -0
- package/dist/utils/auth-error-handler.js +162 -0
- package/dist/utils/auth-error-handler.js.map +1 -0
- package/dist/utils/composite-operation.d.ts +184 -0
- package/dist/utils/composite-operation.d.ts.map +1 -0
- package/dist/utils/composite-operation.js +293 -0
- package/dist/utils/composite-operation.js.map +1 -0
- package/dist/utils/error-handler.d.ts +39 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +336 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts +13 -0
- package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts.map +1 -0
- package/dist/utils/filtering/ClientSideFilteringStrategy.js +129 -0
- package/dist/utils/filtering/ClientSideFilteringStrategy.js.map +1 -0
- package/dist/utils/filtering/FilteringContext.d.ts +40 -0
- package/dist/utils/filtering/FilteringContext.d.ts.map +1 -0
- package/dist/utils/filtering/FilteringContext.js +58 -0
- package/dist/utils/filtering/FilteringContext.js.map +1 -0
- package/dist/utils/filtering/HybridFilteringStrategy.d.ts +15 -0
- package/dist/utils/filtering/HybridFilteringStrategy.d.ts.map +1 -0
- package/dist/utils/filtering/HybridFilteringStrategy.js +55 -0
- package/dist/utils/filtering/HybridFilteringStrategy.js.map +1 -0
- package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts +42 -0
- package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts.map +1 -0
- package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js +120 -0
- package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js.map +1 -0
- package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts +13 -0
- package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts.map +1 -0
- package/dist/utils/filtering/ServerSideFilteringStrategy.js +88 -0
- package/dist/utils/filtering/ServerSideFilteringStrategy.js.map +1 -0
- package/dist/utils/filtering/TaskFilteringStrategy.d.ts +19 -0
- package/dist/utils/filtering/TaskFilteringStrategy.d.ts.map +1 -0
- package/dist/utils/filtering/TaskFilteringStrategy.js +10 -0
- package/dist/utils/filtering/TaskFilteringStrategy.js.map +1 -0
- package/dist/utils/filtering/index.d.ts +14 -0
- package/dist/utils/filtering/index.d.ts.map +1 -0
- package/dist/utils/filtering/index.js +22 -0
- package/dist/utils/filtering/index.js.map +1 -0
- package/dist/utils/filtering/types.d.ts +108 -0
- package/dist/utils/filtering/types.d.ts.map +1 -0
- package/dist/utils/filtering/types.js +6 -0
- package/dist/utils/filtering/types.js.map +1 -0
- package/dist/utils/filters.d.ts +70 -0
- package/dist/utils/filters.d.ts.map +1 -0
- package/dist/utils/filters.js +812 -0
- package/dist/utils/filters.js.map +1 -0
- package/dist/utils/http-error-detail.d.ts +28 -0
- package/dist/utils/http-error-detail.d.ts.map +1 -0
- package/dist/utils/http-error-detail.js +67 -0
- package/dist/utils/http-error-detail.js.map +1 -0
- package/dist/utils/label-bulk.d.ts +21 -0
- package/dist/utils/label-bulk.d.ts.map +1 -0
- package/dist/utils/label-bulk.js +51 -0
- package/dist/utils/label-bulk.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +66 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/memory.d.ts +73 -0
- package/dist/utils/memory.d.ts.map +1 -0
- package/dist/utils/memory.js +194 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/performance/batch-processor.d.ts +77 -0
- package/dist/utils/performance/batch-processor.d.ts.map +1 -0
- package/dist/utils/performance/batch-processor.js +218 -0
- package/dist/utils/performance/batch-processor.js.map +1 -0
- package/dist/utils/performance/index.d.ts +42 -0
- package/dist/utils/performance/index.d.ts.map +1 -0
- package/dist/utils/performance/index.js +49 -0
- package/dist/utils/performance/index.js.map +1 -0
- package/dist/utils/performance/performance-monitor.d.ts +116 -0
- package/dist/utils/performance/performance-monitor.d.ts.map +1 -0
- package/dist/utils/performance/performance-monitor.js +307 -0
- package/dist/utils/performance/performance-monitor.js.map +1 -0
- package/dist/utils/read-only.d.ts +111 -0
- package/dist/utils/read-only.d.ts.map +1 -0
- package/dist/utils/read-only.js +503 -0
- package/dist/utils/read-only.js.map +1 -0
- package/dist/utils/response-factory.d.ts +81 -0
- package/dist/utils/response-factory.d.ts.map +1 -0
- package/dist/utils/response-factory.js +86 -0
- package/dist/utils/response-factory.js.map +1 -0
- package/dist/utils/retry.d.ts +160 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +316 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/security.d.ts +70 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +358 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/simple-response.d.ts +75 -0
- package/dist/utils/simple-response.d.ts.map +1 -0
- package/dist/utils/simple-response.js +311 -0
- package/dist/utils/simple-response.js.map +1 -0
- package/dist/utils/storage-errors.d.ts +9 -0
- package/dist/utils/storage-errors.d.ts.map +1 -0
- package/dist/utils/storage-errors.js +20 -0
- package/dist/utils/storage-errors.js.map +1 -0
- package/dist/utils/task-rest-transport.d.ts +28 -0
- package/dist/utils/task-rest-transport.d.ts.map +1 -0
- package/dist/utils/task-rest-transport.js +33 -0
- package/dist/utils/task-rest-transport.js.map +1 -0
- package/dist/utils/unicode-fix.d.ts +19 -0
- package/dist/utils/unicode-fix.d.ts.map +1 -0
- package/dist/utils/unicode-fix.js +70 -0
- package/dist/utils/unicode-fix.js.map +1 -0
- package/dist/utils/validation.d.ts +75 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +758 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/vikunja-rest.d.ts +159 -0
- package/dist/utils/vikunja-rest.d.ts.map +1 -0
- package/dist/utils/vikunja-rest.js +378 -0
- package/dist/utils/vikunja-rest.js.map +1 -0
- package/docs/CONFIGURATION.md +957 -0
- package/docs/DOCKER-DESKTOP-MCP.md +207 -0
- package/docs/TOOLS.md +422 -0
- package/package.json +145 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task-specific filtering type definitions
|
|
3
|
+
* Extends the base filter types with task-specific functionality
|
|
4
|
+
*/
|
|
5
|
+
import type { FilterExpression, SavedFilter, FilterValidationConfig } from '../../../types/filters';
|
|
6
|
+
import type { AorpBuilderConfig } from '../../../types';
|
|
7
|
+
import type { SimpleFilterStorage } from '../../../storage';
|
|
8
|
+
import type { AuthManager } from '../../../auth/AuthManager';
|
|
9
|
+
import type { VikunjaTask, TaskListApiParams } from '../../../utils/filtering/types';
|
|
10
|
+
/** `models.Task` per the OpenAPI spec. */
|
|
11
|
+
type Task = VikunjaTask;
|
|
12
|
+
/** Query params shared by the task-listing endpoints. */
|
|
13
|
+
type GetTasksParams = TaskListApiParams;
|
|
14
|
+
/**
|
|
15
|
+
* Arguments for filtering operations
|
|
16
|
+
*/
|
|
17
|
+
export interface FilteringArgs {
|
|
18
|
+
projectId?: number;
|
|
19
|
+
page?: number;
|
|
20
|
+
perPage?: number;
|
|
21
|
+
search?: string;
|
|
22
|
+
sort?: string;
|
|
23
|
+
filter?: string;
|
|
24
|
+
filterId?: string;
|
|
25
|
+
allProjects?: boolean;
|
|
26
|
+
done?: boolean;
|
|
27
|
+
/** GET /tasks `order_by` param. Only honored for cross-project listing (direct REST). */
|
|
28
|
+
orderBy?: 'asc' | 'desc';
|
|
29
|
+
/** GET /tasks `filter_timezone` param. Only honored for cross-project listing (direct REST). */
|
|
30
|
+
filterTimezone?: string;
|
|
31
|
+
/** GET /tasks `filter_include_nulls` param. Only honored for cross-project listing (direct REST). */
|
|
32
|
+
filterIncludeNulls?: boolean;
|
|
33
|
+
/** GET /tasks `expand` param (repeatable). Only honored for cross-project listing (direct REST). */
|
|
34
|
+
expand?: string[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parameters passed to filtering strategies
|
|
38
|
+
*/
|
|
39
|
+
export interface FilteringParams {
|
|
40
|
+
args: FilteringArgs;
|
|
41
|
+
filterExpression: FilterExpression | null;
|
|
42
|
+
filterString: string | undefined;
|
|
43
|
+
params: GetTasksParams;
|
|
44
|
+
/** See `utils/filtering/types.ts`'s `FilteringParams.authManager` doc comment. */
|
|
45
|
+
authManager?: AuthManager;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Metadata about the filtering operation performed
|
|
49
|
+
*/
|
|
50
|
+
export interface FilteringMetadata {
|
|
51
|
+
serverSideFilteringUsed: boolean;
|
|
52
|
+
serverSideFilteringAttempted: boolean;
|
|
53
|
+
clientSideFiltering: boolean;
|
|
54
|
+
filteringNote: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Result of a filtering operation
|
|
58
|
+
*/
|
|
59
|
+
export interface FilteringResult {
|
|
60
|
+
tasks: Task[];
|
|
61
|
+
metadata: FilteringMetadata;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Task listing arguments with filtering support
|
|
65
|
+
*/
|
|
66
|
+
export interface TaskListingArgs extends FilteringArgs {
|
|
67
|
+
verbosity?: string;
|
|
68
|
+
useOptimizedFormat?: boolean;
|
|
69
|
+
useAorp?: boolean;
|
|
70
|
+
aorpConfig?: AorpBuilderConfig;
|
|
71
|
+
sessionId?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Enhanced filtering parameters for task operations
|
|
75
|
+
*/
|
|
76
|
+
export interface TaskFilteringParams extends FilteringParams {
|
|
77
|
+
args: TaskListingArgs;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Enhanced filtering result with task-specific metadata
|
|
81
|
+
*/
|
|
82
|
+
export type TaskFilteringResult = FilteringResult;
|
|
83
|
+
/**
|
|
84
|
+
* Task filtering validation configuration
|
|
85
|
+
*/
|
|
86
|
+
export interface TaskFilterValidationConfig extends FilterValidationConfig {
|
|
87
|
+
/** Enable memory usage validation */
|
|
88
|
+
enableMemoryValidation?: boolean;
|
|
89
|
+
/** Task count limit for validation */
|
|
90
|
+
maxTaskCount?: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Task filtering storage interface
|
|
94
|
+
*/
|
|
95
|
+
export interface TaskFilterStorage {
|
|
96
|
+
list(): Promise<SavedFilter[]>;
|
|
97
|
+
get(id: string): Promise<SavedFilter | null>;
|
|
98
|
+
create(filter: Omit<SavedFilter, 'id' | 'created' | 'updated'>): Promise<SavedFilter>;
|
|
99
|
+
update(id: string, filter: Partial<Omit<SavedFilter, 'id' | 'created' | 'updated'>>): Promise<SavedFilter>;
|
|
100
|
+
delete(id: string): Promise<void>;
|
|
101
|
+
findByName(name: string): Promise<SavedFilter | null>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Task filtering execution context
|
|
105
|
+
*/
|
|
106
|
+
export interface TaskFilteringContext {
|
|
107
|
+
/** Vikunja API parameters */
|
|
108
|
+
params: GetTasksParams;
|
|
109
|
+
/** Filter expression if provided */
|
|
110
|
+
filterExpression: FilterExpression | null;
|
|
111
|
+
/** Raw filter string */
|
|
112
|
+
filterString: string | undefined;
|
|
113
|
+
/** Task listing arguments */
|
|
114
|
+
args: TaskListingArgs;
|
|
115
|
+
/** Storage interface for saved filters */
|
|
116
|
+
storage: SimpleFilterStorage;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Task filtering result with metadata
|
|
120
|
+
*/
|
|
121
|
+
export interface TaskFilterExecutionResult {
|
|
122
|
+
/** Whether the filtering operation was successful */
|
|
123
|
+
success: boolean;
|
|
124
|
+
/** Filtered tasks */
|
|
125
|
+
tasks: Task[];
|
|
126
|
+
/** Filtering metadata */
|
|
127
|
+
metadata: FilteringMetadata;
|
|
128
|
+
/** Memory usage information */
|
|
129
|
+
memoryInfo?: {
|
|
130
|
+
actualCount: number;
|
|
131
|
+
maxAllowed: number;
|
|
132
|
+
estimatedMemoryMB: number;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/types/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../src/tools/tasks/types/filters.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation utilities for task operations
|
|
3
|
+
*/
|
|
4
|
+
import type { components } from '../../types/generated/vikunja-openapi';
|
|
5
|
+
import { validateId as validateSharedId } from '../../utils/validation';
|
|
6
|
+
/** `models.Task` per the OpenAPI spec. */
|
|
7
|
+
type Task = components['schemas']['models.Task'];
|
|
8
|
+
/**
|
|
9
|
+
* Validates that a date string is in valid ISO 8601 format
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateDateString(date: string, fieldName: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Validates that an ID is a positive integer
|
|
14
|
+
* @deprecated Use validateSharedId from '../../../utils/validation' instead
|
|
15
|
+
*/
|
|
16
|
+
export declare const validateId: typeof validateSharedId;
|
|
17
|
+
/**
|
|
18
|
+
* Convert repeat configuration from user-friendly format to Vikunja API format
|
|
19
|
+
*
|
|
20
|
+
* Vikunja API expects:
|
|
21
|
+
* - repeat_after: time in seconds
|
|
22
|
+
* - repeat_mode: 0 = default (use repeat_after), 1 = monthly, 2 = from current date
|
|
23
|
+
*
|
|
24
|
+
* We accept:
|
|
25
|
+
* - repeatAfter: number (interpreted based on repeatMode)
|
|
26
|
+
* - repeatMode: 'day' | 'week' | 'month' | 'year'
|
|
27
|
+
*/
|
|
28
|
+
export declare function convertRepeatConfiguration(repeatAfter?: number, repeatMode?: 'day' | 'week' | 'month' | 'year'): {
|
|
29
|
+
repeat_after?: number;
|
|
30
|
+
repeat_mode?: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Process an array in batches
|
|
34
|
+
*/
|
|
35
|
+
export declare function processBatches<T, R>(items: T[], batchSize: number, processor: (batch: T[]) => Promise<R[]>): Promise<R[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Apply field update to a task object for bulk operations
|
|
38
|
+
* Maps field names to their corresponding task properties
|
|
39
|
+
*
|
|
40
|
+
* @param task - The task object to update (will be mutated)
|
|
41
|
+
* @param field - The field name to update (optional, will be checked)
|
|
42
|
+
* @param value - The new value
|
|
43
|
+
* @returns The same task object with the field applied
|
|
44
|
+
*/
|
|
45
|
+
export declare function applyFieldUpdate(task: Task, field: string | undefined, value: unknown): Task;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAExE,0CAA0C;AAC1C,KAAK,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAEjD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQxE;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,yBAAmB,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAC7C;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CA+BjD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,CAAC,EACvC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GACtC,OAAO,CAAC,CAAC,EAAE,CAAC,CAQd;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAyC5F"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation utilities for task operations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateId = void 0;
|
|
7
|
+
exports.validateDateString = validateDateString;
|
|
8
|
+
exports.convertRepeatConfiguration = convertRepeatConfiguration;
|
|
9
|
+
exports.processBatches = processBatches;
|
|
10
|
+
exports.applyFieldUpdate = applyFieldUpdate;
|
|
11
|
+
const types_1 = require("../../types");
|
|
12
|
+
const validation_1 = require("../../utils/validation");
|
|
13
|
+
/**
|
|
14
|
+
* Validates that a date string is in valid ISO 8601 format
|
|
15
|
+
*/
|
|
16
|
+
function validateDateString(date, fieldName) {
|
|
17
|
+
const parsed = new Date(date);
|
|
18
|
+
if (isNaN(parsed.getTime())) {
|
|
19
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `${fieldName} must be a valid ISO 8601 date string (e.g., 2024-05-24T10:00:00Z)`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validates that an ID is a positive integer
|
|
24
|
+
* @deprecated Use validateSharedId from '../../../utils/validation' instead
|
|
25
|
+
*/
|
|
26
|
+
exports.validateId = validation_1.validateId;
|
|
27
|
+
/**
|
|
28
|
+
* Convert repeat configuration from user-friendly format to Vikunja API format
|
|
29
|
+
*
|
|
30
|
+
* Vikunja API expects:
|
|
31
|
+
* - repeat_after: time in seconds
|
|
32
|
+
* - repeat_mode: 0 = default (use repeat_after), 1 = monthly, 2 = from current date
|
|
33
|
+
*
|
|
34
|
+
* We accept:
|
|
35
|
+
* - repeatAfter: number (interpreted based on repeatMode)
|
|
36
|
+
* - repeatMode: 'day' | 'week' | 'month' | 'year'
|
|
37
|
+
*/
|
|
38
|
+
function convertRepeatConfiguration(repeatAfter, repeatMode) {
|
|
39
|
+
const result = {};
|
|
40
|
+
if (repeatMode === 'month') {
|
|
41
|
+
// For monthly repeat, use repeat_mode = 1 (ignores repeat_after)
|
|
42
|
+
result.repeat_mode = 1;
|
|
43
|
+
// Still set repeat_after for consistency, though it will be ignored
|
|
44
|
+
if (repeatAfter !== undefined) {
|
|
45
|
+
result.repeat_after = repeatAfter * 30 * 24 * 60 * 60; // Approximate month in seconds
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (repeatAfter !== undefined) {
|
|
49
|
+
// For other modes, use repeat_mode = 0 and convert to seconds
|
|
50
|
+
result.repeat_mode = 0;
|
|
51
|
+
switch (repeatMode) {
|
|
52
|
+
case 'day':
|
|
53
|
+
result.repeat_after = repeatAfter * 24 * 60 * 60; // Days to seconds
|
|
54
|
+
break;
|
|
55
|
+
case 'week':
|
|
56
|
+
result.repeat_after = repeatAfter * 7 * 24 * 60 * 60; // Weeks to seconds
|
|
57
|
+
break;
|
|
58
|
+
case 'year':
|
|
59
|
+
result.repeat_after = repeatAfter * 365 * 24 * 60 * 60; // Years to seconds (approximate)
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
// If no mode specified, assume the value is already in seconds
|
|
63
|
+
result.repeat_after = repeatAfter;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Process an array in batches
|
|
70
|
+
*/
|
|
71
|
+
async function processBatches(items, batchSize, processor) {
|
|
72
|
+
const results = [];
|
|
73
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
74
|
+
const batch = items.slice(i, i + batchSize);
|
|
75
|
+
const batchResults = await processor(batch);
|
|
76
|
+
results.push(...batchResults);
|
|
77
|
+
}
|
|
78
|
+
return results;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Apply field update to a task object for bulk operations
|
|
82
|
+
* Maps field names to their corresponding task properties
|
|
83
|
+
*
|
|
84
|
+
* @param task - The task object to update (will be mutated)
|
|
85
|
+
* @param field - The field name to update (optional, will be checked)
|
|
86
|
+
* @param value - The new value
|
|
87
|
+
* @returns The same task object with the field applied
|
|
88
|
+
*/
|
|
89
|
+
function applyFieldUpdate(task, field, value) {
|
|
90
|
+
if (!field)
|
|
91
|
+
return task;
|
|
92
|
+
switch (field) {
|
|
93
|
+
case 'done':
|
|
94
|
+
task.done = value;
|
|
95
|
+
break;
|
|
96
|
+
case 'priority':
|
|
97
|
+
task.priority = value;
|
|
98
|
+
break;
|
|
99
|
+
case 'due_date':
|
|
100
|
+
task.due_date = value;
|
|
101
|
+
break;
|
|
102
|
+
// Accept both snake_case (Vikunja API form) and camelCase (MCP schema form):
|
|
103
|
+
// bulk-update routes snake_case here, but per-task update may pass camelCase.
|
|
104
|
+
case 'start_date':
|
|
105
|
+
case 'startDate':
|
|
106
|
+
task.start_date = value;
|
|
107
|
+
break;
|
|
108
|
+
case 'end_date':
|
|
109
|
+
case 'endDate':
|
|
110
|
+
task.end_date = value;
|
|
111
|
+
break;
|
|
112
|
+
case 'project_id':
|
|
113
|
+
task.project_id = value;
|
|
114
|
+
break;
|
|
115
|
+
case 'repeat_after':
|
|
116
|
+
task.repeat_after = value;
|
|
117
|
+
break;
|
|
118
|
+
case 'repeat_mode':
|
|
119
|
+
task.repeat_mode = value;
|
|
120
|
+
break;
|
|
121
|
+
case 'assignees':
|
|
122
|
+
case 'labels':
|
|
123
|
+
// These are handled separately with special API calls
|
|
124
|
+
break;
|
|
125
|
+
default:
|
|
126
|
+
// Unknown field - leave task unchanged
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
return task;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/tools/tasks/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Relations Extensions
|
|
3
|
+
* Handles task relation operations for Vikunja
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { AuthManager } from '../auth/AuthManager';
|
|
7
|
+
export declare const relationSchema: {
|
|
8
|
+
otherTaskId: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
relationKind: z.ZodOptional<z.ZodEnum<["unknown", "subtask", "parenttask", "related", "duplicateof", "duplicates", "blocking", "blocked", "precedes", "follows", "copiedfrom", "copiedto"]>>;
|
|
10
|
+
};
|
|
11
|
+
export declare const relationSubcommands: string[];
|
|
12
|
+
interface RelationArgs {
|
|
13
|
+
subcommand: string;
|
|
14
|
+
id?: number | undefined;
|
|
15
|
+
otherTaskId?: number | undefined;
|
|
16
|
+
relationKind?: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare function handleRelationSubcommands(args: RelationArgs, authManager: AuthManager): Promise<{
|
|
19
|
+
content: Array<{
|
|
20
|
+
type: 'text';
|
|
21
|
+
text: string;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=tasks-relations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-relations.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-relations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA0BvD,eAAO,MAAM,cAAc;;;CAmB1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAsC,CAAC;AAEvE,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,YAAY,EAClB,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,CA0Q7D"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Task Relations Extensions
|
|
4
|
+
* Handles task relation operations for Vikunja
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.relationSubcommands = exports.relationSchema = void 0;
|
|
8
|
+
exports.handleRelationSubcommands = handleRelationSubcommands;
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const types_1 = require("../types");
|
|
11
|
+
const vikunja_rest_1 = require("../utils/vikunja-rest");
|
|
12
|
+
const task_rest_transport_1 = require("../utils/task-rest-transport");
|
|
13
|
+
const logger_1 = require("../utils/logger");
|
|
14
|
+
const validation_1 = require("../utils/validation");
|
|
15
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
16
|
+
const response_factory_1 = require("../utils/response-factory");
|
|
17
|
+
// Use shared validateId from utils/validation
|
|
18
|
+
// Relation kind mapping - matches the legacy client RelationKind enum
|
|
19
|
+
const RELATION_KIND_MAP = {
|
|
20
|
+
unknown: 'unknown',
|
|
21
|
+
subtask: 'subtask',
|
|
22
|
+
parenttask: 'parenttask',
|
|
23
|
+
related: 'related',
|
|
24
|
+
duplicateof: 'duplicateof',
|
|
25
|
+
duplicates: 'duplicates',
|
|
26
|
+
blocking: 'blocking',
|
|
27
|
+
blocked: 'blocked',
|
|
28
|
+
precedes: 'precedes',
|
|
29
|
+
follows: 'follows',
|
|
30
|
+
copiedfrom: 'copiedfrom',
|
|
31
|
+
copiedto: 'copiedto',
|
|
32
|
+
};
|
|
33
|
+
exports.relationSchema = {
|
|
34
|
+
// Relation fields
|
|
35
|
+
otherTaskId: zod_1.z.number().optional(),
|
|
36
|
+
relationKind: zod_1.z
|
|
37
|
+
.enum([
|
|
38
|
+
'unknown',
|
|
39
|
+
'subtask',
|
|
40
|
+
'parenttask',
|
|
41
|
+
'related',
|
|
42
|
+
'duplicateof',
|
|
43
|
+
'duplicates',
|
|
44
|
+
'blocking',
|
|
45
|
+
'blocked',
|
|
46
|
+
'precedes',
|
|
47
|
+
'follows',
|
|
48
|
+
'copiedfrom',
|
|
49
|
+
'copiedto',
|
|
50
|
+
])
|
|
51
|
+
.optional(),
|
|
52
|
+
};
|
|
53
|
+
exports.relationSubcommands = ['relate', 'unrelate', 'relations'];
|
|
54
|
+
async function handleRelationSubcommands(args, authManager) {
|
|
55
|
+
switch (args.subcommand) {
|
|
56
|
+
case 'relate': {
|
|
57
|
+
try {
|
|
58
|
+
if (!args.id) {
|
|
59
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task ID is required');
|
|
60
|
+
}
|
|
61
|
+
(0, validation_1.validateId)(args.id, 'Task ID');
|
|
62
|
+
if (!args.otherTaskId) {
|
|
63
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Other task ID is required');
|
|
64
|
+
}
|
|
65
|
+
(0, validation_1.validateId)(args.otherTaskId, 'Other task ID');
|
|
66
|
+
if (!args.relationKind) {
|
|
67
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Relation kind is required');
|
|
68
|
+
}
|
|
69
|
+
const relationKind = RELATION_KIND_MAP[args.relationKind];
|
|
70
|
+
if (!relationKind) {
|
|
71
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid relation kind: ${args.relationKind}`);
|
|
72
|
+
}
|
|
73
|
+
// Create the relation via PUT /tasks/{taskID}/relations, body
|
|
74
|
+
// models.TaskRelation, per the OpenAPI spec.
|
|
75
|
+
await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/tasks/${args.id}/relations`, {
|
|
76
|
+
task_id: args.id,
|
|
77
|
+
other_task_id: args.otherTaskId,
|
|
78
|
+
relation_kind: relationKind,
|
|
79
|
+
});
|
|
80
|
+
// Fetch the updated task to show all relations via GET /tasks/{id}
|
|
81
|
+
// (direct-REST), kept only to refresh the response payload.
|
|
82
|
+
const updatedTask = await (0, task_rest_transport_1.getTaskViaRest)(authManager, args.id);
|
|
83
|
+
const response = {
|
|
84
|
+
success: true,
|
|
85
|
+
operation: 'relate',
|
|
86
|
+
message: `Successfully created ${args.relationKind} relation between task ${args.id} and task ${args.otherTaskId}`,
|
|
87
|
+
task: updatedTask,
|
|
88
|
+
metadata: {
|
|
89
|
+
timestamp: new Date().toISOString(),
|
|
90
|
+
affectedFields: ['related_tasks'],
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
logger_1.logger.debug('Task relation created', {
|
|
94
|
+
taskId: args.id,
|
|
95
|
+
otherTaskId: args.otherTaskId,
|
|
96
|
+
relationKind: args.relationKind,
|
|
97
|
+
});
|
|
98
|
+
// Convert StandardTaskResponse to proper AORP response before formatting
|
|
99
|
+
const aorpResponse = (0, response_factory_1.createStandardResponse)(response.operation || 'unknown', response.message || 'Operation completed',
|
|
100
|
+
// StandardTaskResponse carries the generated `models.Task` (all
|
|
101
|
+
// fields spec-optional); the response formatter's `ResponseData`
|
|
102
|
+
// wants the richer local `Task`. The formatter only reads fields
|
|
103
|
+
// defensively, so narrow via the parameter type.
|
|
104
|
+
response, response.metadata);
|
|
105
|
+
return {
|
|
106
|
+
content: [
|
|
107
|
+
{
|
|
108
|
+
type: 'text',
|
|
109
|
+
text: (0, response_factory_1.formatAorpAsMarkdown)(aorpResponse),
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
// This tool's own validation errors pass through unmodified; a
|
|
116
|
+
// REST-origin MCPError (e.g. the task-refresh GET failing) gets the
|
|
117
|
+
// conventional "Failed to ..." wrapping restored (see
|
|
118
|
+
// wrapIfRestOrigin's doc comment for why this distinction matters).
|
|
119
|
+
if (error instanceof types_1.MCPError) {
|
|
120
|
+
throw (0, error_handler_1.wrapIfRestOrigin)(error, 'create task relation');
|
|
121
|
+
}
|
|
122
|
+
throw (0, error_handler_1.handleStatusCodeError)(error, 'create task relation', `${args.id}-${args.otherTaskId}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
case 'unrelate': {
|
|
126
|
+
try {
|
|
127
|
+
if (!args.id) {
|
|
128
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task ID is required');
|
|
129
|
+
}
|
|
130
|
+
(0, validation_1.validateId)(args.id, 'Task ID');
|
|
131
|
+
if (!args.otherTaskId) {
|
|
132
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Other task ID is required');
|
|
133
|
+
}
|
|
134
|
+
(0, validation_1.validateId)(args.otherTaskId, 'Other task ID');
|
|
135
|
+
if (!args.relationKind) {
|
|
136
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Relation kind is required');
|
|
137
|
+
}
|
|
138
|
+
const relationKind = RELATION_KIND_MAP[args.relationKind];
|
|
139
|
+
if (!relationKind) {
|
|
140
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid relation kind: ${args.relationKind}`);
|
|
141
|
+
}
|
|
142
|
+
// Delete the relation via
|
|
143
|
+
// DELETE /tasks/{taskID}/relations/{relationKind}/{otherTaskID}. The
|
|
144
|
+
// spec also declares a required models.TaskRelation body for this
|
|
145
|
+
// endpoint (alongside the path params), so the full relation is sent
|
|
146
|
+
// rather than relying on the path segments alone.
|
|
147
|
+
await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${args.id}/relations/${relationKind}/${args.otherTaskId}`, {
|
|
148
|
+
task_id: args.id,
|
|
149
|
+
other_task_id: args.otherTaskId,
|
|
150
|
+
relation_kind: relationKind,
|
|
151
|
+
});
|
|
152
|
+
// Fetch the updated task to show remaining relations via
|
|
153
|
+
// GET /tasks/{id} (direct-REST) — see the matching comment in the
|
|
154
|
+
// 'relate' case above.
|
|
155
|
+
const updatedTask = await (0, task_rest_transport_1.getTaskViaRest)(authManager, args.id);
|
|
156
|
+
const response = {
|
|
157
|
+
success: true,
|
|
158
|
+
operation: 'unrelate',
|
|
159
|
+
message: `Successfully removed ${args.relationKind} relation between task ${args.id} and task ${args.otherTaskId}`,
|
|
160
|
+
task: updatedTask,
|
|
161
|
+
metadata: {
|
|
162
|
+
timestamp: new Date().toISOString(),
|
|
163
|
+
affectedFields: ['related_tasks'],
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
logger_1.logger.debug('Task relation removed', {
|
|
167
|
+
taskId: args.id,
|
|
168
|
+
otherTaskId: args.otherTaskId,
|
|
169
|
+
relationKind: args.relationKind,
|
|
170
|
+
});
|
|
171
|
+
// Convert StandardTaskResponse to proper AORP response before formatting
|
|
172
|
+
const aorpResponse = (0, response_factory_1.createStandardResponse)(response.operation || 'unknown', response.message || 'Operation completed',
|
|
173
|
+
// StandardTaskResponse carries the generated `models.Task` (all
|
|
174
|
+
// fields spec-optional); the response formatter's `ResponseData`
|
|
175
|
+
// wants the richer local `Task`. The formatter only reads fields
|
|
176
|
+
// defensively, so narrow via the parameter type.
|
|
177
|
+
response, response.metadata);
|
|
178
|
+
return {
|
|
179
|
+
content: [
|
|
180
|
+
{
|
|
181
|
+
type: 'text',
|
|
182
|
+
text: (0, response_factory_1.formatAorpAsMarkdown)(aorpResponse),
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
// This tool's own validation errors pass through unmodified; a
|
|
189
|
+
// REST-origin MCPError (e.g. the task-refresh GET failing) gets the
|
|
190
|
+
// conventional "Failed to ..." wrapping restored (see
|
|
191
|
+
// wrapIfRestOrigin's doc comment for why this distinction matters).
|
|
192
|
+
if (error instanceof types_1.MCPError) {
|
|
193
|
+
throw (0, error_handler_1.wrapIfRestOrigin)(error, 'remove task relation');
|
|
194
|
+
}
|
|
195
|
+
throw (0, error_handler_1.handleStatusCodeError)(error, 'remove task relation', `${args.id}-${args.otherTaskId}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
case 'relations': {
|
|
199
|
+
try {
|
|
200
|
+
if (!args.id) {
|
|
201
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task ID is required');
|
|
202
|
+
}
|
|
203
|
+
(0, validation_1.validateId)(args.id, 'Task ID');
|
|
204
|
+
// Fetch the task with its relations via GET /tasks/{id} (direct-REST)
|
|
205
|
+
const task = await (0, task_rest_transport_1.getTaskViaRest)(authManager, args.id);
|
|
206
|
+
// Vikunja's API returns `related_tasks` as a map of relation kind to
|
|
207
|
+
// Task[] (models.RelatedTaskMap), not a flat array, so `.length` on it
|
|
208
|
+
// as a whole is undefined; iterate the map's entries to count.
|
|
209
|
+
const relatedTasksMap = (task.related_tasks ?? {});
|
|
210
|
+
const relationCounts = {};
|
|
211
|
+
let totalRelations = 0;
|
|
212
|
+
for (const [kind, kindTasks] of Object.entries(relatedTasksMap)) {
|
|
213
|
+
const count = Array.isArray(kindTasks) ? kindTasks.length : 0;
|
|
214
|
+
if (count > 0) {
|
|
215
|
+
relationCounts[kind] = count;
|
|
216
|
+
}
|
|
217
|
+
totalRelations += count;
|
|
218
|
+
}
|
|
219
|
+
const relationBreakdown = Object.entries(relationCounts)
|
|
220
|
+
.map(([kind, count]) => `${kind}: ${count}`)
|
|
221
|
+
.join(', ');
|
|
222
|
+
const relationsMessage = relationBreakdown
|
|
223
|
+
? `Found ${totalRelations} relation(s) for task ${args.id} (${relationBreakdown})`
|
|
224
|
+
: `Found ${totalRelations} relation(s) for task ${args.id}`;
|
|
225
|
+
const response = {
|
|
226
|
+
success: true,
|
|
227
|
+
operation: 'relations',
|
|
228
|
+
message: relationsMessage,
|
|
229
|
+
task: task,
|
|
230
|
+
metadata: {
|
|
231
|
+
timestamp: new Date().toISOString(),
|
|
232
|
+
count: totalRelations,
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
logger_1.logger.debug('Task relations retrieved', {
|
|
236
|
+
taskId: args.id,
|
|
237
|
+
relationCount: totalRelations,
|
|
238
|
+
relationCounts,
|
|
239
|
+
});
|
|
240
|
+
// Convert StandardTaskResponse to proper AORP response before formatting
|
|
241
|
+
const aorpResponse = (0, response_factory_1.createStandardResponse)(response.operation || 'unknown', response.message || 'Operation completed',
|
|
242
|
+
// StandardTaskResponse carries the generated `models.Task` (all
|
|
243
|
+
// fields spec-optional); the response formatter's `ResponseData`
|
|
244
|
+
// wants the richer local `Task`. The formatter only reads fields
|
|
245
|
+
// defensively, so narrow via the parameter type.
|
|
246
|
+
response, response.metadata);
|
|
247
|
+
return {
|
|
248
|
+
content: [
|
|
249
|
+
{
|
|
250
|
+
type: 'text',
|
|
251
|
+
text: (0, response_factory_1.formatAorpAsMarkdown)(aorpResponse),
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
// This tool's own validation errors pass through unmodified; a
|
|
258
|
+
// REST-origin MCPError (e.g. the task-refresh GET failing) gets the
|
|
259
|
+
// conventional "Failed to ..." wrapping restored (see
|
|
260
|
+
// wrapIfRestOrigin's doc comment for why this distinction matters).
|
|
261
|
+
if (error instanceof types_1.MCPError) {
|
|
262
|
+
throw (0, error_handler_1.wrapIfRestOrigin)(error, 'get task relations');
|
|
263
|
+
}
|
|
264
|
+
throw (0, error_handler_1.handleStatusCodeError)(error, 'get task relations', args.id);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
default:
|
|
268
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Invalid relation subcommand');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=tasks-relations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-relations.js","sourceRoot":"","sources":["../../src/tools/tasks-relations.ts"],"names":[],"mappings":"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"}
|