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,503 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Global Read-Only Safety Mode + MCP Tool Annotations
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth for two related things, per
|
|
6
|
+
* docs/ENDPOINT-PLAYBOOK.md's "one classification table per tool" guidance:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Read-only gating.** When the server's `readOnly` config flag is
|
|
9
|
+
* active (`vikunja-mcp.config.json`'s `readOnly`, or the
|
|
10
|
+
* `VIKUNJA_MCP_READ_ONLY` env var — env always wins, see
|
|
11
|
+
* docs/CONFIGURATION.md), every write/destructive subcommand across
|
|
12
|
+
* every tool is rejected at dispatch with a clear, consistent error.
|
|
13
|
+
* Read subcommands continue to work normally. Each tool dispatcher
|
|
14
|
+
* calls `assertWriteAllowed(toolName, subcommand)` exactly once, right
|
|
15
|
+
* after its existing auth check — a single shared guard, not 24
|
|
16
|
+
* copy-pasted `if (readOnly) throw` checks.
|
|
17
|
+
*
|
|
18
|
+
* 2. **MCP tool annotations.** `readOnlyHint` / `destructiveHint` /
|
|
19
|
+
* `idempotentHint` (see the SDK's `ToolAnnotations`) are derived from
|
|
20
|
+
* the same per-subcommand classification tables via
|
|
21
|
+
* `getToolAnnotations(toolName)`, so the two features can never drift
|
|
22
|
+
* out of sync with each other.
|
|
23
|
+
*
|
|
24
|
+
* Classification rubric (`SubcommandClassification`):
|
|
25
|
+
* - 'read': never mutates Vikunja server state. Always allowed;
|
|
26
|
+
* never contributes to `destructiveHint`.
|
|
27
|
+
* - 'write': creates or updates state (create, update, set-*,
|
|
28
|
+
* archive, move, duplicate, subscribe, ...). Rejected
|
|
29
|
+
* when `readOnly` is active.
|
|
30
|
+
* - 'destructive': removes/deletes a resource or relationship (delete,
|
|
31
|
+
* remove-*, unassign, unrelate, unsubscribe,
|
|
32
|
+
* bulk-delete, ...). Rejected when `readOnly` is
|
|
33
|
+
* active; any 'destructive' entry makes the whole tool's
|
|
34
|
+
* `destructiveHint` true.
|
|
35
|
+
*
|
|
36
|
+
* Annotation mapping rationale: annotations are per-TOOL, but our tools
|
|
37
|
+
* mix read/write/destructive subcommands behind one MCP tool name, so:
|
|
38
|
+
* - `readOnlyHint` is true only for a tool whose *entire* subcommand
|
|
39
|
+
* surface is 'read' (e.g. `vikunja_auth` — see below).
|
|
40
|
+
* - `destructiveHint` is true if *any* subcommand is 'destructive'.
|
|
41
|
+
* - `idempotentHint` is only ever set true via the explicit
|
|
42
|
+
* `IDEMPOTENT_TOOLS` allowlist below, and only when every write
|
|
43
|
+
* subcommand on that tool is genuinely idempotent — see its comment.
|
|
44
|
+
*
|
|
45
|
+
* `vikunja_auth` special case: connect/status/refresh/disconnect/info only
|
|
46
|
+
* manage the MCP server's local in-memory session — none of them mutate a
|
|
47
|
+
* Vikunja resource — so every subcommand is classified 'read' and
|
|
48
|
+
* read-only mode never blocks it (and `readOnlyHint` is honestly true).
|
|
49
|
+
*/
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.TOOL_CLASSIFICATIONS = void 0;
|
|
52
|
+
exports.classifySubcommand = classifySubcommand;
|
|
53
|
+
exports.isToolReadOnly = isToolReadOnly;
|
|
54
|
+
exports.isToolDestructive = isToolDestructive;
|
|
55
|
+
exports.getToolAnnotations = getToolAnnotations;
|
|
56
|
+
exports.isReadOnlyModeActive = isReadOnlyModeActive;
|
|
57
|
+
exports.assertWriteAllowed = assertWriteAllowed;
|
|
58
|
+
exports.withReadOnlyNote = withReadOnlyNote;
|
|
59
|
+
const types_1 = require("../types");
|
|
60
|
+
const ConfigurationManager_1 = require("../config/ConfigurationManager");
|
|
61
|
+
const logger_1 = require("./logger");
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Per-tool classification tables
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
const AUTH = {
|
|
66
|
+
connect: 'read',
|
|
67
|
+
status: 'read',
|
|
68
|
+
refresh: 'read',
|
|
69
|
+
disconnect: 'read',
|
|
70
|
+
info: 'read',
|
|
71
|
+
};
|
|
72
|
+
const TASKS = {
|
|
73
|
+
create: 'write',
|
|
74
|
+
get: 'read',
|
|
75
|
+
update: 'write',
|
|
76
|
+
delete: 'destructive',
|
|
77
|
+
list: 'read',
|
|
78
|
+
assign: 'write',
|
|
79
|
+
unassign: 'destructive',
|
|
80
|
+
'list-assignees': 'read',
|
|
81
|
+
attach: 'write',
|
|
82
|
+
'list-attachments': 'read',
|
|
83
|
+
'get-attachment-info': 'read',
|
|
84
|
+
'delete-attachment': 'destructive',
|
|
85
|
+
'download-attachment': 'read',
|
|
86
|
+
// Dual-purpose: creates a comment when `comment` text is supplied,
|
|
87
|
+
// otherwise falls back to listing comments (see
|
|
88
|
+
// src/tools/tasks/comments/index.ts handleComment). Dispatchers pass a
|
|
89
|
+
// dynamic override computed from `args.comment` instead of relying on
|
|
90
|
+
// this static default.
|
|
91
|
+
comment: 'write',
|
|
92
|
+
'bulk-create': 'write',
|
|
93
|
+
'bulk-update': 'write',
|
|
94
|
+
'bulk-delete': 'destructive',
|
|
95
|
+
relate: 'write',
|
|
96
|
+
unrelate: 'destructive',
|
|
97
|
+
relations: 'read',
|
|
98
|
+
'add-reminder': 'write',
|
|
99
|
+
'remove-reminder': 'destructive',
|
|
100
|
+
'list-reminders': 'read',
|
|
101
|
+
'apply-label': 'write',
|
|
102
|
+
'remove-label': 'destructive',
|
|
103
|
+
'list-labels': 'read',
|
|
104
|
+
'set-bucket': 'write',
|
|
105
|
+
'set-position': 'write',
|
|
106
|
+
'get-by-index': 'read',
|
|
107
|
+
// Subtask composites (PR #77). create-subtask performs a real task
|
|
108
|
+
// creation + relation write; list-subtasks is a pure read.
|
|
109
|
+
'create-subtask': 'write',
|
|
110
|
+
'list-subtasks': 'read',
|
|
111
|
+
// duplicate copies a task (labels, assignees, attachments, reminders)
|
|
112
|
+
// into a brand-new task — a genuine write, direct parallel to
|
|
113
|
+
// vikunja_projects' duplicate below.
|
|
114
|
+
duplicate: 'write',
|
|
115
|
+
// mark-read mutates state (deletes the unread-status row for the current
|
|
116
|
+
// user) even though the task's own fields are unchanged — a write-ish
|
|
117
|
+
// state change, not a pure read. Classified 'write' (not 'destructive':
|
|
118
|
+
// no resource/relationship is removed from the caller's perspective).
|
|
119
|
+
'mark-read': 'write',
|
|
120
|
+
};
|
|
121
|
+
const TASK_BULK = {
|
|
122
|
+
'bulk-create': 'write',
|
|
123
|
+
'bulk-update': 'write',
|
|
124
|
+
'bulk-delete': 'destructive',
|
|
125
|
+
};
|
|
126
|
+
const TASK_ASSIGNEES = {
|
|
127
|
+
assign: 'write',
|
|
128
|
+
unassign: 'destructive',
|
|
129
|
+
'list-assignees': 'read',
|
|
130
|
+
};
|
|
131
|
+
const TASK_COMMENTS = {
|
|
132
|
+
// See TASKS.comment above — same dual-purpose create-or-list behavior.
|
|
133
|
+
comment: 'write',
|
|
134
|
+
list: 'read',
|
|
135
|
+
get: 'read',
|
|
136
|
+
update: 'write',
|
|
137
|
+
delete: 'destructive',
|
|
138
|
+
};
|
|
139
|
+
const TASK_REMINDERS = {
|
|
140
|
+
'add-reminder': 'write',
|
|
141
|
+
'remove-reminder': 'destructive',
|
|
142
|
+
'list-reminders': 'read',
|
|
143
|
+
};
|
|
144
|
+
const TASK_LABELS = {
|
|
145
|
+
'apply-label': 'write',
|
|
146
|
+
'remove-label': 'destructive',
|
|
147
|
+
'list-labels': 'read',
|
|
148
|
+
};
|
|
149
|
+
const TASK_RELATIONS = {
|
|
150
|
+
relate: 'write',
|
|
151
|
+
unrelate: 'destructive',
|
|
152
|
+
relations: 'read',
|
|
153
|
+
};
|
|
154
|
+
const PROJECTS = {
|
|
155
|
+
list: 'read',
|
|
156
|
+
get: 'read',
|
|
157
|
+
create: 'write',
|
|
158
|
+
update: 'write',
|
|
159
|
+
delete: 'destructive',
|
|
160
|
+
archive: 'write',
|
|
161
|
+
unarchive: 'write',
|
|
162
|
+
'get-children': 'read',
|
|
163
|
+
'get-tree': 'read',
|
|
164
|
+
'get-breadcrumb': 'read',
|
|
165
|
+
move: 'write',
|
|
166
|
+
'create-share': 'write',
|
|
167
|
+
'list-shares': 'read',
|
|
168
|
+
'get-share': 'read',
|
|
169
|
+
'delete-share': 'destructive',
|
|
170
|
+
// Authenticates against a share link/password — reads project data
|
|
171
|
+
// through the share, does not mutate it.
|
|
172
|
+
'auth-share': 'read',
|
|
173
|
+
'list-project-users': 'read',
|
|
174
|
+
'search-project-users': 'read',
|
|
175
|
+
'add-project-user': 'write',
|
|
176
|
+
'update-project-user-permission': 'write',
|
|
177
|
+
'remove-project-user': 'destructive',
|
|
178
|
+
'list-project-teams': 'read',
|
|
179
|
+
'add-project-team': 'write',
|
|
180
|
+
'update-project-team-permission': 'write',
|
|
181
|
+
'remove-project-team': 'destructive',
|
|
182
|
+
'share-with-user': 'write',
|
|
183
|
+
'share-with-team': 'write',
|
|
184
|
+
'list-members': 'read',
|
|
185
|
+
'list-buckets': 'read',
|
|
186
|
+
'create-bucket': 'write',
|
|
187
|
+
'update-bucket': 'write',
|
|
188
|
+
'delete-bucket': 'destructive',
|
|
189
|
+
'list-view-tasks': 'read',
|
|
190
|
+
'list-views': 'read',
|
|
191
|
+
'get-view': 'read',
|
|
192
|
+
'create-view': 'write',
|
|
193
|
+
'update-view': 'write',
|
|
194
|
+
'delete-view': 'destructive',
|
|
195
|
+
'set-done-bucket': 'write',
|
|
196
|
+
duplicate: 'write',
|
|
197
|
+
// Project backgrounds (G7, opt-in `backgrounds` module — see
|
|
198
|
+
// src/tools/projects/backgrounds.ts). remove-background deletes the
|
|
199
|
+
// currently-set background (destructive); set-unsplash-background writes
|
|
200
|
+
// a new one; search-unsplash is a pure read (queries unsplash, never
|
|
201
|
+
// touches a project).
|
|
202
|
+
'remove-background': 'destructive',
|
|
203
|
+
'set-unsplash-background': 'write',
|
|
204
|
+
'search-unsplash': 'read',
|
|
205
|
+
};
|
|
206
|
+
const LABELS = {
|
|
207
|
+
list: 'read',
|
|
208
|
+
get: 'read',
|
|
209
|
+
create: 'write',
|
|
210
|
+
update: 'write',
|
|
211
|
+
delete: 'destructive',
|
|
212
|
+
};
|
|
213
|
+
// vikunja_teams' 'members' subcommand fans out to a second enum
|
|
214
|
+
// (`memberSubcommand`). Dispatchers pass a composite key
|
|
215
|
+
// (`members:${memberSubcommand}`) to `assertWriteAllowed` for that case.
|
|
216
|
+
const TEAMS = {
|
|
217
|
+
list: 'read',
|
|
218
|
+
create: 'write',
|
|
219
|
+
get: 'read',
|
|
220
|
+
update: 'write',
|
|
221
|
+
delete: 'destructive',
|
|
222
|
+
'members:list': 'read',
|
|
223
|
+
'members:add': 'write',
|
|
224
|
+
'members:remove': 'destructive',
|
|
225
|
+
// Flips the member's admin flag (POST .../admin takes no body) rather
|
|
226
|
+
// than setting it to a caller-supplied value — explicitly NOT idempotent
|
|
227
|
+
// (calling it twice toggles back). Still a 'write' (not 'destructive'):
|
|
228
|
+
// no resource or relationship is removed.
|
|
229
|
+
'members:toggleAdmin': 'write',
|
|
230
|
+
};
|
|
231
|
+
const USERS = {
|
|
232
|
+
current: 'read',
|
|
233
|
+
search: 'read',
|
|
234
|
+
settings: 'read',
|
|
235
|
+
'update-settings': 'write',
|
|
236
|
+
timezones: 'read',
|
|
237
|
+
'get-avatar': 'read',
|
|
238
|
+
'set-avatar': 'write',
|
|
239
|
+
'upload-avatar': 'write',
|
|
240
|
+
};
|
|
241
|
+
const FILTERS = {
|
|
242
|
+
list: 'read',
|
|
243
|
+
get: 'read',
|
|
244
|
+
create: 'write',
|
|
245
|
+
update: 'write',
|
|
246
|
+
delete: 'destructive',
|
|
247
|
+
// Pure local utilities — construct/check a filter query string without
|
|
248
|
+
// contacting the server or touching any saved filter.
|
|
249
|
+
build: 'read',
|
|
250
|
+
validate: 'read',
|
|
251
|
+
};
|
|
252
|
+
const TEMPLATES = {
|
|
253
|
+
create: 'write',
|
|
254
|
+
list: 'read',
|
|
255
|
+
get: 'read',
|
|
256
|
+
update: 'write',
|
|
257
|
+
delete: 'destructive',
|
|
258
|
+
// Creates a new project/tasks from the template.
|
|
259
|
+
instantiate: 'write',
|
|
260
|
+
};
|
|
261
|
+
// G4 (docs/ENDPOINT-TAIL-RETRIAGE.md): vikunja_webhooks also takes a
|
|
262
|
+
// `scope: 'user' | 'project'` argument selecting /user/settings/webhooks*
|
|
263
|
+
// vs /projects/{id}/webhooks*. Scope never changes a subcommand's
|
|
264
|
+
// read/write/destructive nature (both scopes' `list`/`get`/`list-events`
|
|
265
|
+
// are pure reads, `create`/`update` are writes, `delete` is destructive),
|
|
266
|
+
// so one table covers every subcommand x scope combination - no
|
|
267
|
+
// scope-suffixed keys needed here.
|
|
268
|
+
const WEBHOOKS = {
|
|
269
|
+
list: 'read',
|
|
270
|
+
get: 'read',
|
|
271
|
+
create: 'write',
|
|
272
|
+
update: 'write',
|
|
273
|
+
delete: 'destructive',
|
|
274
|
+
'list-events': 'read',
|
|
275
|
+
};
|
|
276
|
+
// vikunja_batch_import has no subcommand field (single-purpose tool).
|
|
277
|
+
// Dispatchers use the fixed key 'import' and pass a dynamic override:
|
|
278
|
+
// `dryRun: true` never writes, so it is classified 'read' for that call.
|
|
279
|
+
const BATCH_IMPORT = {
|
|
280
|
+
import: 'write',
|
|
281
|
+
};
|
|
282
|
+
// vikunja_export_project / vikunja_request_user_export /
|
|
283
|
+
// vikunja_download_user_export / vikunja_user_export_status have no
|
|
284
|
+
// subcommand field either — each is registered as its own single-purpose
|
|
285
|
+
// tool. Fixed keys below.
|
|
286
|
+
const EXPORT_PROJECT = {
|
|
287
|
+
// GET-only recursive walk of project/task/label data — never mutates.
|
|
288
|
+
export: 'read',
|
|
289
|
+
};
|
|
290
|
+
const REQUEST_USER_EXPORT = {
|
|
291
|
+
// POST /user/export/request asks the server to start preparing an
|
|
292
|
+
// export — a genuine write (triggers server-side work), even though the
|
|
293
|
+
// response is just a confirmation message.
|
|
294
|
+
request: 'write',
|
|
295
|
+
};
|
|
296
|
+
const DOWNLOAD_USER_EXPORT = {
|
|
297
|
+
// POST /user/export/download only confirms readiness (returns
|
|
298
|
+
// models.Message, never the archive) — no new state is created by this
|
|
299
|
+
// call, so it is classified as a read for read-only-mode purposes.
|
|
300
|
+
download: 'read',
|
|
301
|
+
};
|
|
302
|
+
const USER_EXPORT_STATUS = {
|
|
303
|
+
// GET /user/export returns models.UserExportStatus (id/created/expires/
|
|
304
|
+
// size) — a pure read, never mutates server state.
|
|
305
|
+
status: 'read',
|
|
306
|
+
};
|
|
307
|
+
const NOTIFICATIONS = {
|
|
308
|
+
list: 'read',
|
|
309
|
+
'mark-read': 'write',
|
|
310
|
+
'mark-all-read': 'write',
|
|
311
|
+
};
|
|
312
|
+
const SUBSCRIPTIONS = {
|
|
313
|
+
subscribe: 'write',
|
|
314
|
+
unsubscribe: 'destructive',
|
|
315
|
+
};
|
|
316
|
+
const REACTIONS = {
|
|
317
|
+
list: 'read',
|
|
318
|
+
add: 'write',
|
|
319
|
+
remove: 'destructive',
|
|
320
|
+
};
|
|
321
|
+
const TOKENS = {
|
|
322
|
+
list: 'read',
|
|
323
|
+
create: 'write',
|
|
324
|
+
delete: 'destructive',
|
|
325
|
+
};
|
|
326
|
+
const CALDAV_TOKENS = {
|
|
327
|
+
list: 'read',
|
|
328
|
+
create: 'write',
|
|
329
|
+
delete: 'destructive',
|
|
330
|
+
};
|
|
331
|
+
const ADMIN = {
|
|
332
|
+
overview: 'read',
|
|
333
|
+
'list-projects': 'read',
|
|
334
|
+
'set-project-owner': 'write',
|
|
335
|
+
'list-users': 'read',
|
|
336
|
+
'create-user': 'write',
|
|
337
|
+
'delete-user': 'destructive',
|
|
338
|
+
'set-user-admin': 'write',
|
|
339
|
+
'set-user-status': 'write',
|
|
340
|
+
};
|
|
341
|
+
// vikunja_user_deletion: request/confirm move the current account
|
|
342
|
+
// irreversibly closer to deletion (destructiveHint applies to both, per the
|
|
343
|
+
// tool's design). cancel is the safe "undo" leg — classified 'write' (it
|
|
344
|
+
// mutates server state by aborting the pending request) but deliberately
|
|
345
|
+
// NOT 'destructive', since it removes nothing.
|
|
346
|
+
const USER_DELETION = {
|
|
347
|
+
request: 'destructive',
|
|
348
|
+
confirm: 'destructive',
|
|
349
|
+
cancel: 'write',
|
|
350
|
+
};
|
|
351
|
+
/** Tool name -> subcommand classification table. */
|
|
352
|
+
exports.TOOL_CLASSIFICATIONS = {
|
|
353
|
+
vikunja_auth: AUTH,
|
|
354
|
+
vikunja_tasks: TASKS,
|
|
355
|
+
vikunja_task_bulk: TASK_BULK,
|
|
356
|
+
vikunja_task_assignees: TASK_ASSIGNEES,
|
|
357
|
+
vikunja_task_comments: TASK_COMMENTS,
|
|
358
|
+
vikunja_task_reminders: TASK_REMINDERS,
|
|
359
|
+
vikunja_task_labels: TASK_LABELS,
|
|
360
|
+
vikunja_task_relations: TASK_RELATIONS,
|
|
361
|
+
vikunja_projects: PROJECTS,
|
|
362
|
+
vikunja_labels: LABELS,
|
|
363
|
+
vikunja_teams: TEAMS,
|
|
364
|
+
vikunja_users: USERS,
|
|
365
|
+
vikunja_filters: FILTERS,
|
|
366
|
+
vikunja_templates: TEMPLATES,
|
|
367
|
+
vikunja_webhooks: WEBHOOKS,
|
|
368
|
+
vikunja_batch_import: BATCH_IMPORT,
|
|
369
|
+
vikunja_export_project: EXPORT_PROJECT,
|
|
370
|
+
vikunja_request_user_export: REQUEST_USER_EXPORT,
|
|
371
|
+
vikunja_download_user_export: DOWNLOAD_USER_EXPORT,
|
|
372
|
+
vikunja_user_export_status: USER_EXPORT_STATUS,
|
|
373
|
+
vikunja_notifications: NOTIFICATIONS,
|
|
374
|
+
vikunja_subscriptions: SUBSCRIPTIONS,
|
|
375
|
+
vikunja_reactions: REACTIONS,
|
|
376
|
+
vikunja_tokens: TOKENS,
|
|
377
|
+
vikunja_caldav_tokens: CALDAV_TOKENS,
|
|
378
|
+
vikunja_admin: ADMIN,
|
|
379
|
+
vikunja_user_deletion: USER_DELETION,
|
|
380
|
+
};
|
|
381
|
+
// ---------------------------------------------------------------------------
|
|
382
|
+
// Classification lookups
|
|
383
|
+
// ---------------------------------------------------------------------------
|
|
384
|
+
/**
|
|
385
|
+
* Classify a subcommand for a given tool. Unrecognized tool/subcommand
|
|
386
|
+
* pairs fail closed as 'write' (rather than 'read') so an entry missing
|
|
387
|
+
* from the table above is blocked while read-only mode is active instead
|
|
388
|
+
* of silently slipping through — a table-maintenance bug should surface as
|
|
389
|
+
* an over-eager rejection, never as a read-only bypass.
|
|
390
|
+
*/
|
|
391
|
+
function classifySubcommand(toolName, subcommand) {
|
|
392
|
+
return exports.TOOL_CLASSIFICATIONS[toolName]?.[subcommand] ?? 'write';
|
|
393
|
+
}
|
|
394
|
+
/** True if every subcommand on this tool is classified 'read'. */
|
|
395
|
+
function isToolReadOnly(toolName) {
|
|
396
|
+
const table = exports.TOOL_CLASSIFICATIONS[toolName];
|
|
397
|
+
if (!table) {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
return Object.values(table).every((classification) => classification === 'read');
|
|
401
|
+
}
|
|
402
|
+
/** True if any subcommand on this tool is classified 'destructive'. */
|
|
403
|
+
function isToolDestructive(toolName) {
|
|
404
|
+
const table = exports.TOOL_CLASSIFICATIONS[toolName];
|
|
405
|
+
if (!table) {
|
|
406
|
+
// Unknown tool: no recorded opinion, assume the worst for the hint too.
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
return Object.values(table).some((classification) => classification === 'destructive');
|
|
410
|
+
}
|
|
411
|
+
// Tools whose entire non-read subcommand surface is genuinely idempotent
|
|
412
|
+
// (repeating the same call has no additional effect after the first). This
|
|
413
|
+
// is an explicit opt-in allowlist rather than something inferred from the
|
|
414
|
+
// read/write/destructive table, since idempotency is a per-operation
|
|
415
|
+
// semantic judgment call that the three-way classification above doesn't
|
|
416
|
+
// capture on its own.
|
|
417
|
+
const IDEMPOTENT_TOOLS = new Set([
|
|
418
|
+
// mark-read / mark-all-read: marking an already-read notification as
|
|
419
|
+
// read again is a no-op server-side. `list` is the only other
|
|
420
|
+
// subcommand and is read-only.
|
|
421
|
+
'vikunja_notifications',
|
|
422
|
+
]);
|
|
423
|
+
/**
|
|
424
|
+
* Derive this tool's MCP `ToolAnnotations` from its classification table —
|
|
425
|
+
* see the module doc comment for the readOnlyHint/destructiveHint/
|
|
426
|
+
* idempotentHint mapping rationale.
|
|
427
|
+
*/
|
|
428
|
+
function getToolAnnotations(toolName) {
|
|
429
|
+
const annotations = {
|
|
430
|
+
readOnlyHint: isToolReadOnly(toolName),
|
|
431
|
+
destructiveHint: isToolDestructive(toolName),
|
|
432
|
+
};
|
|
433
|
+
if (IDEMPOTENT_TOOLS.has(toolName)) {
|
|
434
|
+
annotations.idempotentHint = true;
|
|
435
|
+
}
|
|
436
|
+
return annotations;
|
|
437
|
+
}
|
|
438
|
+
// ---------------------------------------------------------------------------
|
|
439
|
+
// Read-only mode guard
|
|
440
|
+
// ---------------------------------------------------------------------------
|
|
441
|
+
/**
|
|
442
|
+
* Whether the server's global read-only safety mode is currently active.
|
|
443
|
+
*
|
|
444
|
+
* Fails safe the same way `resolveModulesConfig` (src/tools/index.ts) does:
|
|
445
|
+
* a broken/unreadable config file must not crash tool registration or
|
|
446
|
+
* dispatch, so a `loadConfiguration()` failure here falls back to the
|
|
447
|
+
* schema default (`readOnly: false`) rather than propagating. This mirrors
|
|
448
|
+
* module gating's fail-safe precedent, not a "fail closed on ambiguity"
|
|
449
|
+
* choice — a config-loading error is an operator misconfiguration to
|
|
450
|
+
* surface via logs, not a signal about write intent.
|
|
451
|
+
*/
|
|
452
|
+
function isReadOnlyModeActive() {
|
|
453
|
+
try {
|
|
454
|
+
return ConfigurationManager_1.ConfigurationManager.getInstance().loadConfiguration().readOnly;
|
|
455
|
+
}
|
|
456
|
+
catch (error) {
|
|
457
|
+
logger_1.logger.error('Failed to load configuration while checking read-only mode; falling back to readOnly=false:', error);
|
|
458
|
+
return false;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* The single shared guard every tool dispatcher calls once — right after
|
|
463
|
+
* its existing auth check, before routing to a subcommand handler — instead
|
|
464
|
+
* of duplicating a read-only check per subcommand.
|
|
465
|
+
*
|
|
466
|
+
* @param toolName - the registered MCP tool name (e.g. `vikunja_tasks`).
|
|
467
|
+
* @param subcommand - the dispatch key for this call. For tools without a
|
|
468
|
+
* `subcommand`/`operation`/`action` field (batch-import, the three export
|
|
469
|
+
* tools), dispatchers pass the tool's single fixed key from its
|
|
470
|
+
* classification table above (e.g. `'import'`).
|
|
471
|
+
* @param classificationOverride - for the handful of subcommands whose
|
|
472
|
+
* classification depends on the call's arguments rather than being
|
|
473
|
+
* static (the comment-or-list dual-purpose `comment` subcommand;
|
|
474
|
+
* batch-import's `dryRun`), dispatchers compute and pass the effective
|
|
475
|
+
* classification directly instead of relying on the static table lookup.
|
|
476
|
+
*/
|
|
477
|
+
function assertWriteAllowed(toolName, subcommand, classificationOverride) {
|
|
478
|
+
const classification = classificationOverride ?? classifySubcommand(toolName, subcommand);
|
|
479
|
+
if (classification === 'read') {
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
if (isReadOnlyModeActive()) {
|
|
483
|
+
throw new types_1.MCPError(types_1.ErrorCode.PERMISSION_DENIED, `server is in read-only mode: '${toolName}' subcommand '${subcommand}' is a ` +
|
|
484
|
+
`${classification} operation and is rejected. Set 'readOnly' to false in ` +
|
|
485
|
+
`vikunja-mcp.config.json (or unset VIKUNJA_MCP_READ_ONLY) to allow writes.`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Appends a short read-only note to a tool's description, but only when
|
|
490
|
+
* read-only mode is active AND the tool actually has write/destructive
|
|
491
|
+
* subcommands to warn about (a fully-exempt tool like `vikunja_auth` never
|
|
492
|
+
* gets the note — it would be noise, not information). Called once at
|
|
493
|
+
* registration time — cheap, since `isReadOnlyModeActive()` just reads the
|
|
494
|
+
* already-loaded, cached configuration.
|
|
495
|
+
*/
|
|
496
|
+
function withReadOnlyNote(toolName, description) {
|
|
497
|
+
if (!isReadOnlyModeActive() || isToolReadOnly(toolName)) {
|
|
498
|
+
return description;
|
|
499
|
+
}
|
|
500
|
+
return (`${description} NOTE: the server is currently in read-only mode — ` +
|
|
501
|
+
`write/destructive subcommands on this tool will be rejected.`);
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=read-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-only.js","sourceRoot":"","sources":["../../src/utils/read-only.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Response Factory
|
|
3
|
+
* Replaces 2,925-line AORP system with clean, direct response formatting
|
|
4
|
+
*/
|
|
5
|
+
import { type SimpleResponse } from './simple-response';
|
|
6
|
+
import type { ResponseMetadata } from '../types/responses';
|
|
7
|
+
import type { ResponseData } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Simple response metadata
|
|
10
|
+
*/
|
|
11
|
+
export interface SimpleResponseMetadata {
|
|
12
|
+
/** Processing information */
|
|
13
|
+
processing?: {
|
|
14
|
+
/** Processing time in ms */
|
|
15
|
+
processingTimeMs?: number;
|
|
16
|
+
/** Operation context */
|
|
17
|
+
operation?: string;
|
|
18
|
+
};
|
|
19
|
+
/** Timestamp */
|
|
20
|
+
timestamp?: string;
|
|
21
|
+
/** Success flag */
|
|
22
|
+
success?: boolean;
|
|
23
|
+
/** Error information */
|
|
24
|
+
error?: {
|
|
25
|
+
code: string;
|
|
26
|
+
message: string;
|
|
27
|
+
};
|
|
28
|
+
/** Session ID */
|
|
29
|
+
sessionId?: string;
|
|
30
|
+
/** Additional metadata */
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a simple response (replaces createAorpResponse)
|
|
35
|
+
* Direct replacement for AORP factory functions
|
|
36
|
+
*/
|
|
37
|
+
export declare function createSimpleResponse(operation: string, message: string, data?: ResponseData, options?: {
|
|
38
|
+
success?: boolean;
|
|
39
|
+
metadata?: ResponseMetadata;
|
|
40
|
+
processingTimeMs?: number;
|
|
41
|
+
}): SimpleResponse;
|
|
42
|
+
/**
|
|
43
|
+
* Format response for MCP (replaces AORP formatting)
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatResponseForMcp(response: SimpleResponse): string;
|
|
46
|
+
/**
|
|
47
|
+
* Create task response (replaces createTaskResponse)
|
|
48
|
+
* Now handles flexible data for backward compatibility
|
|
49
|
+
*/
|
|
50
|
+
export declare function createTaskResponse(operation: string, message: string, data: {
|
|
51
|
+
tasks?: ResponseData[];
|
|
52
|
+
} | ResponseData, metadata?: ResponseMetadata, sessionId?: string): SimpleResponse;
|
|
53
|
+
/**
|
|
54
|
+
* Create error response (replaces createAorpErrorResponse)
|
|
55
|
+
*/
|
|
56
|
+
export declare function createSimpleErrorResponse(operation: string, message: string, errorCode?: string, metadata?: ResponseMetadata): SimpleResponse;
|
|
57
|
+
export { createTaskResponse as createStandardResponse };
|
|
58
|
+
export { createTaskResponse as createTaskAorpResponse };
|
|
59
|
+
export { createSimpleErrorResponse as createAorpErrorResponse };
|
|
60
|
+
export { formatResponseForMcp as formatAorpAsMarkdown };
|
|
61
|
+
export { createSimpleResponse as createAorpResponse };
|
|
62
|
+
export type { SimpleResponse } from './simple-response';
|
|
63
|
+
/**
|
|
64
|
+
* Create AORP response from data (compatibility function)
|
|
65
|
+
* Simple replacement for createAorpFromData
|
|
66
|
+
*/
|
|
67
|
+
export declare function createAorpFromData(operation: string, message: string, success?: boolean, details?: string): SimpleResponse;
|
|
68
|
+
export interface AorpBuilderConfig {
|
|
69
|
+
confidenceMethod?: string;
|
|
70
|
+
enableCaching?: boolean;
|
|
71
|
+
maxCacheSize?: number;
|
|
72
|
+
[key: string]: unknown;
|
|
73
|
+
}
|
|
74
|
+
export type AorpVerbosityLevel = 'minimal' | 'standard' | 'detailed';
|
|
75
|
+
export interface ComplexityFactors {
|
|
76
|
+
dataComplexity: number;
|
|
77
|
+
nestingLevel: number;
|
|
78
|
+
itemCount: number;
|
|
79
|
+
hasNestedArrays: boolean;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=response-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-factory.d.ts","sourceRoot":"","sources":["../../src/utils/response-factory.ts"],"names":[],"mappings":"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"}
|