vikunja-mcp-ng 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/auth/AuthManager.d.ts +63 -0
  4. package/dist/auth/AuthManager.d.ts.map +1 -0
  5. package/dist/auth/AuthManager.js +137 -0
  6. package/dist/auth/AuthManager.js.map +1 -0
  7. package/dist/auth/index.d.ts +7 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/index.js +14 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/auth/permissions.d.ts +60 -0
  12. package/dist/auth/permissions.d.ts.map +1 -0
  13. package/dist/auth/permissions.js +173 -0
  14. package/dist/auth/permissions.js.map +1 -0
  15. package/dist/client/VikunjaClientFactory.d.ts +41 -0
  16. package/dist/client/VikunjaClientFactory.d.ts.map +1 -0
  17. package/dist/client/VikunjaClientFactory.js +58 -0
  18. package/dist/client/VikunjaClientFactory.js.map +1 -0
  19. package/dist/client.d.ts +70 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +136 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/config/ConfigurationManager.d.ts +106 -0
  24. package/dist/config/ConfigurationManager.d.ts.map +1 -0
  25. package/dist/config/ConfigurationManager.js +509 -0
  26. package/dist/config/ConfigurationManager.js.map +1 -0
  27. package/dist/config/index.d.ts +9 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +36 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/secrets.d.ts +33 -0
  32. package/dist/config/secrets.d.ts.map +1 -0
  33. package/dist/config/secrets.js +90 -0
  34. package/dist/config/secrets.js.map +1 -0
  35. package/dist/config/types.d.ts +1113 -0
  36. package/dist/config/types.d.ts.map +1 -0
  37. package/dist/config/types.js +189 -0
  38. package/dist/config/types.js.map +1 -0
  39. package/dist/formatters/BatchImportResponseFormatter.d.ts +89 -0
  40. package/dist/formatters/BatchImportResponseFormatter.d.ts.map +1 -0
  41. package/dist/formatters/BatchImportResponseFormatter.js +125 -0
  42. package/dist/formatters/BatchImportResponseFormatter.js.map +1 -0
  43. package/dist/index.d.ts +20 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +130 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/middleware/direct-middleware.d.ts +9 -0
  48. package/dist/middleware/direct-middleware.d.ts.map +1 -0
  49. package/dist/middleware/direct-middleware.js +49 -0
  50. package/dist/middleware/direct-middleware.js.map +1 -0
  51. package/dist/middleware/index.d.ts +8 -0
  52. package/dist/middleware/index.d.ts.map +1 -0
  53. package/dist/middleware/index.js +21 -0
  54. package/dist/middleware/index.js.map +1 -0
  55. package/dist/middleware/simplified-rate-limit.d.ts +147 -0
  56. package/dist/middleware/simplified-rate-limit.d.ts.map +1 -0
  57. package/dist/middleware/simplified-rate-limit.js +533 -0
  58. package/dist/middleware/simplified-rate-limit.js.map +1 -0
  59. package/dist/parsers/CSVParser.d.ts +36 -0
  60. package/dist/parsers/CSVParser.d.ts.map +1 -0
  61. package/dist/parsers/CSVParser.js +69 -0
  62. package/dist/parsers/CSVParser.js.map +1 -0
  63. package/dist/parsers/InputParserFactory.d.ts +17 -0
  64. package/dist/parsers/InputParserFactory.d.ts.map +1 -0
  65. package/dist/parsers/InputParserFactory.js +137 -0
  66. package/dist/parsers/InputParserFactory.js.map +1 -0
  67. package/dist/parsers/JSONParser.d.ts +74 -0
  68. package/dist/parsers/JSONParser.d.ts.map +1 -0
  69. package/dist/parsers/JSONParser.js +69 -0
  70. package/dist/parsers/JSONParser.js.map +1 -0
  71. package/dist/services/EntityResolver.d.ts +92 -0
  72. package/dist/services/EntityResolver.d.ts.map +1 -0
  73. package/dist/services/EntityResolver.js +201 -0
  74. package/dist/services/EntityResolver.js.map +1 -0
  75. package/dist/services/TaskCreationService.d.ts +99 -0
  76. package/dist/services/TaskCreationService.d.ts.map +1 -0
  77. package/dist/services/TaskCreationService.js +392 -0
  78. package/dist/services/TaskCreationService.js.map +1 -0
  79. package/dist/storage/SimpleFilterStorage.d.ts +103 -0
  80. package/dist/storage/SimpleFilterStorage.d.ts.map +1 -0
  81. package/dist/storage/SimpleFilterStorage.js +350 -0
  82. package/dist/storage/SimpleFilterStorage.js.map +1 -0
  83. package/dist/storage/filtering/FilterSerializer.d.ts +45 -0
  84. package/dist/storage/filtering/FilterSerializer.d.ts.map +1 -0
  85. package/dist/storage/filtering/FilterSerializer.js +171 -0
  86. package/dist/storage/filtering/FilterSerializer.js.map +1 -0
  87. package/dist/storage/filtering/FilterValidator.d.ts +59 -0
  88. package/dist/storage/filtering/FilterValidator.d.ts.map +1 -0
  89. package/dist/storage/filtering/FilterValidator.js +183 -0
  90. package/dist/storage/filtering/FilterValidator.js.map +1 -0
  91. package/dist/storage/index.d.ts +61 -0
  92. package/dist/storage/index.d.ts.map +1 -0
  93. package/dist/storage/index.js +125 -0
  94. package/dist/storage/index.js.map +1 -0
  95. package/dist/storage/templateFileStore.d.ts +62 -0
  96. package/dist/storage/templateFileStore.d.ts.map +1 -0
  97. package/dist/storage/templateFileStore.js +151 -0
  98. package/dist/storage/templateFileStore.js.map +1 -0
  99. package/dist/tools/admin.d.ts +51 -0
  100. package/dist/tools/admin.d.ts.map +1 -0
  101. package/dist/tools/admin.js +207 -0
  102. package/dist/tools/admin.js.map +1 -0
  103. package/dist/tools/auth.d.ts +9 -0
  104. package/dist/tools/auth.d.ts.map +1 -0
  105. package/dist/tools/auth.js +175 -0
  106. package/dist/tools/auth.js.map +1 -0
  107. package/dist/tools/batch-import.d.ts +5 -0
  108. package/dist/tools/batch-import.d.ts.map +1 -0
  109. package/dist/tools/batch-import.js +153 -0
  110. package/dist/tools/batch-import.js.map +1 -0
  111. package/dist/tools/caldav-tokens.d.ts +45 -0
  112. package/dist/tools/caldav-tokens.d.ts.map +1 -0
  113. package/dist/tools/caldav-tokens.js +93 -0
  114. package/dist/tools/caldav-tokens.js.map +1 -0
  115. package/dist/tools/export.d.ts +14 -0
  116. package/dist/tools/export.d.ts.map +1 -0
  117. package/dist/tools/export.js +252 -0
  118. package/dist/tools/export.js.map +1 -0
  119. package/dist/tools/filters.d.ts +50 -0
  120. package/dist/tools/filters.d.ts.map +1 -0
  121. package/dist/tools/filters.js +512 -0
  122. package/dist/tools/filters.js.map +1 -0
  123. package/dist/tools/index.d.ts +53 -0
  124. package/dist/tools/index.d.ts.map +1 -0
  125. package/dist/tools/index.js +217 -0
  126. package/dist/tools/index.js.map +1 -0
  127. package/dist/tools/labels.d.ts +22 -0
  128. package/dist/tools/labels.d.ts.map +1 -0
  129. package/dist/tools/labels.js +206 -0
  130. package/dist/tools/labels.js.map +1 -0
  131. package/dist/tools/notifications.d.ts +17 -0
  132. package/dist/tools/notifications.d.ts.map +1 -0
  133. package/dist/tools/notifications.js +171 -0
  134. package/dist/tools/notifications.js.map +1 -0
  135. package/dist/tools/projects/backgrounds.d.ts +80 -0
  136. package/dist/tools/projects/backgrounds.d.ts.map +1 -0
  137. package/dist/tools/projects/backgrounds.js +154 -0
  138. package/dist/tools/projects/backgrounds.js.map +1 -0
  139. package/dist/tools/projects/buckets.d.ts +147 -0
  140. package/dist/tools/projects/buckets.d.ts.map +1 -0
  141. package/dist/tools/projects/buckets.js +291 -0
  142. package/dist/tools/projects/buckets.js.map +1 -0
  143. package/dist/tools/projects/crud.d.ts +145 -0
  144. package/dist/tools/projects/crud.d.ts.map +1 -0
  145. package/dist/tools/projects/crud.js +425 -0
  146. package/dist/tools/projects/crud.js.map +1 -0
  147. package/dist/tools/projects/duplicate.d.ts +41 -0
  148. package/dist/tools/projects/duplicate.d.ts.map +1 -0
  149. package/dist/tools/projects/duplicate.js +49 -0
  150. package/dist/tools/projects/duplicate.js.map +1 -0
  151. package/dist/tools/projects/hierarchy.d.ts +77 -0
  152. package/dist/tools/projects/hierarchy.d.ts.map +1 -0
  153. package/dist/tools/projects/hierarchy.js +300 -0
  154. package/dist/tools/projects/hierarchy.js.map +1 -0
  155. package/dist/tools/projects/index.d.ts +34 -0
  156. package/dist/tools/projects/index.d.ts.map +1 -0
  157. package/dist/tools/projects/index.js +522 -0
  158. package/dist/tools/projects/index.js.map +1 -0
  159. package/dist/tools/projects/permission.d.ts +26 -0
  160. package/dist/tools/projects/permission.d.ts.map +1 -0
  161. package/dist/tools/projects/permission.js +53 -0
  162. package/dist/tools/projects/permission.js.map +1 -0
  163. package/dist/tools/projects/response-formatter.d.ts +54 -0
  164. package/dist/tools/projects/response-formatter.d.ts.map +1 -0
  165. package/dist/tools/projects/response-formatter.js +139 -0
  166. package/dist/tools/projects/response-formatter.js.map +1 -0
  167. package/dist/tools/projects/sharing-access.d.ts +165 -0
  168. package/dist/tools/projects/sharing-access.d.ts.map +1 -0
  169. package/dist/tools/projects/sharing-access.js +450 -0
  170. package/dist/tools/projects/sharing-access.js.map +1 -0
  171. package/dist/tools/projects/sharing.d.ts +105 -0
  172. package/dist/tools/projects/sharing.d.ts.map +1 -0
  173. package/dist/tools/projects/sharing.js +258 -0
  174. package/dist/tools/projects/sharing.js.map +1 -0
  175. package/dist/tools/projects/validation.d.ts +51 -0
  176. package/dist/tools/projects/validation.d.ts.map +1 -0
  177. package/dist/tools/projects/validation.js +160 -0
  178. package/dist/tools/projects/validation.js.map +1 -0
  179. package/dist/tools/projects/views.d.ts +161 -0
  180. package/dist/tools/projects/views.d.ts.map +1 -0
  181. package/dist/tools/projects/views.js +234 -0
  182. package/dist/tools/projects/views.js.map +1 -0
  183. package/dist/tools/projects.d.ts +20 -0
  184. package/dist/tools/projects.d.ts.map +1 -0
  185. package/dist/tools/projects.js +66 -0
  186. package/dist/tools/projects.js.map +1 -0
  187. package/dist/tools/reactions.d.ts +25 -0
  188. package/dist/tools/reactions.d.ts.map +1 -0
  189. package/dist/tools/reactions.js +108 -0
  190. package/dist/tools/reactions.js.map +1 -0
  191. package/dist/tools/subscriptions.d.ts +23 -0
  192. package/dist/tools/subscriptions.d.ts.map +1 -0
  193. package/dist/tools/subscriptions.js +111 -0
  194. package/dist/tools/subscriptions.js.map +1 -0
  195. package/dist/tools/task-assignees.d.ts +13 -0
  196. package/dist/tools/task-assignees.d.ts.map +1 -0
  197. package/dist/tools/task-assignees.js +74 -0
  198. package/dist/tools/task-assignees.js.map +1 -0
  199. package/dist/tools/task-bulk.d.ts +13 -0
  200. package/dist/tools/task-bulk.d.ts.map +1 -0
  201. package/dist/tools/task-bulk.js +117 -0
  202. package/dist/tools/task-bulk.js.map +1 -0
  203. package/dist/tools/task-comments.d.ts +12 -0
  204. package/dist/tools/task-comments.d.ts.map +1 -0
  205. package/dist/tools/task-comments.js +65 -0
  206. package/dist/tools/task-comments.js.map +1 -0
  207. package/dist/tools/task-crud.d.ts +13 -0
  208. package/dist/tools/task-crud.d.ts.map +1 -0
  209. package/dist/tools/task-crud.js +168 -0
  210. package/dist/tools/task-crud.js.map +1 -0
  211. package/dist/tools/task-labels.d.ts +13 -0
  212. package/dist/tools/task-labels.d.ts.map +1 -0
  213. package/dist/tools/task-labels.js +64 -0
  214. package/dist/tools/task-labels.js.map +1 -0
  215. package/dist/tools/task-relations.d.ts +13 -0
  216. package/dist/tools/task-relations.d.ts.map +1 -0
  217. package/dist/tools/task-relations.js +74 -0
  218. package/dist/tools/task-relations.js.map +1 -0
  219. package/dist/tools/task-reminders.d.ts +13 -0
  220. package/dist/tools/task-reminders.d.ts.map +1 -0
  221. package/dist/tools/task-reminders.js +69 -0
  222. package/dist/tools/task-reminders.js.map +1 -0
  223. package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts +63 -0
  224. package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts.map +1 -0
  225. package/dist/tools/tasks/assignees/AssigneeOperationsService.js +152 -0
  226. package/dist/tools/tasks/assignees/AssigneeOperationsService.js.map +1 -0
  227. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts +28 -0
  228. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts.map +1 -0
  229. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js +73 -0
  230. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js.map +1 -0
  231. package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts +46 -0
  232. package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts.map +1 -0
  233. package/dist/tools/tasks/assignees/AssigneeValidationService.js +70 -0
  234. package/dist/tools/tasks/assignees/AssigneeValidationService.js.map +1 -0
  235. package/dist/tools/tasks/assignees/index.d.ts +52 -0
  236. package/dist/tools/tasks/assignees/index.d.ts.map +1 -0
  237. package/dist/tools/tasks/assignees/index.js +103 -0
  238. package/dist/tools/tasks/assignees/index.js.map +1 -0
  239. package/dist/tools/tasks/attach.d.ts +39 -0
  240. package/dist/tools/tasks/attach.d.ts.map +1 -0
  241. package/dist/tools/tasks/attach.js +90 -0
  242. package/dist/tools/tasks/attach.js.map +1 -0
  243. package/dist/tools/tasks/attachments.d.ts +67 -0
  244. package/dist/tools/tasks/attachments.d.ts.map +1 -0
  245. package/dist/tools/tasks/attachments.js +153 -0
  246. package/dist/tools/tasks/attachments.js.map +1 -0
  247. package/dist/tools/tasks/buckets.d.ts +41 -0
  248. package/dist/tools/tasks/buckets.d.ts.map +1 -0
  249. package/dist/tools/tasks/buckets.js +75 -0
  250. package/dist/tools/tasks/buckets.js.map +1 -0
  251. package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts +30 -0
  252. package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts.map +1 -0
  253. package/dist/tools/tasks/bulk/BatchProcessorFactory.js +69 -0
  254. package/dist/tools/tasks/bulk/BatchProcessorFactory.js.map +1 -0
  255. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts +50 -0
  256. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts.map +1 -0
  257. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js +183 -0
  258. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js.map +1 -0
  259. package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts +101 -0
  260. package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts.map +1 -0
  261. package/dist/tools/tasks/bulk/BulkOperationProcessor.js +416 -0
  262. package/dist/tools/tasks/bulk/BulkOperationProcessor.js.map +1 -0
  263. package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts +50 -0
  264. package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts.map +1 -0
  265. package/dist/tools/tasks/bulk/BulkOperationTypes.js +6 -0
  266. package/dist/tools/tasks/bulk/BulkOperationTypes.js.map +1 -0
  267. package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts +53 -0
  268. package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts.map +1 -0
  269. package/dist/tools/tasks/bulk/BulkOperationValidator.js +216 -0
  270. package/dist/tools/tasks/bulk/BulkOperationValidator.js.map +1 -0
  271. package/dist/tools/tasks/bulk/index.d.ts +9 -0
  272. package/dist/tools/tasks/bulk/index.d.ts.map +1 -0
  273. package/dist/tools/tasks/bulk/index.js +15 -0
  274. package/dist/tools/tasks/bulk/index.js.map +1 -0
  275. package/dist/tools/tasks/bulk-operations-simplified.d.ts +62 -0
  276. package/dist/tools/tasks/bulk-operations-simplified.d.ts.map +1 -0
  277. package/dist/tools/tasks/bulk-operations-simplified.js +416 -0
  278. package/dist/tools/tasks/bulk-operations-simplified.js.map +1 -0
  279. package/dist/tools/tasks/bulk-operations.d.ts +8 -0
  280. package/dist/tools/tasks/bulk-operations.d.ts.map +1 -0
  281. package/dist/tools/tasks/bulk-operations.js +13 -0
  282. package/dist/tools/tasks/bulk-operations.js.map +1 -0
  283. package/dist/tools/tasks/by-index.d.ts +36 -0
  284. package/dist/tools/tasks/by-index.d.ts.map +1 -0
  285. package/dist/tools/tasks/by-index.js +52 -0
  286. package/dist/tools/tasks/by-index.js.map +1 -0
  287. package/dist/tools/tasks/comments/CommentOperationsService.d.ts +44 -0
  288. package/dist/tools/tasks/comments/CommentOperationsService.d.ts.map +1 -0
  289. package/dist/tools/tasks/comments/CommentOperationsService.js +86 -0
  290. package/dist/tools/tasks/comments/CommentOperationsService.js.map +1 -0
  291. package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts +41 -0
  292. package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts.map +1 -0
  293. package/dist/tools/tasks/comments/CommentResponseFormatter.js +114 -0
  294. package/dist/tools/tasks/comments/CommentResponseFormatter.js.map +1 -0
  295. package/dist/tools/tasks/comments/CommentValidationService.d.ts +62 -0
  296. package/dist/tools/tasks/comments/CommentValidationService.d.ts.map +1 -0
  297. package/dist/tools/tasks/comments/CommentValidationService.js +105 -0
  298. package/dist/tools/tasks/comments/CommentValidationService.js.map +1 -0
  299. package/dist/tools/tasks/comments/index.d.ts +66 -0
  300. package/dist/tools/tasks/comments/index.d.ts.map +1 -0
  301. package/dist/tools/tasks/comments/index.js +99 -0
  302. package/dist/tools/tasks/comments/index.js.map +1 -0
  303. package/dist/tools/tasks/constants.d.ts +19 -0
  304. package/dist/tools/tasks/constants.d.ts.map +1 -0
  305. package/dist/tools/tasks/constants.js +82 -0
  306. package/dist/tools/tasks/constants.js.map +1 -0
  307. package/dist/tools/tasks/crud/TaskCreationService.d.ts +29 -0
  308. package/dist/tools/tasks/crud/TaskCreationService.d.ts.map +1 -0
  309. package/dist/tools/tasks/crud/TaskCreationService.js +274 -0
  310. package/dist/tools/tasks/crud/TaskCreationService.js.map +1 -0
  311. package/dist/tools/tasks/crud/TaskDeletionService.d.ts +19 -0
  312. package/dist/tools/tasks/crud/TaskDeletionService.d.ts.map +1 -0
  313. package/dist/tools/tasks/crud/TaskDeletionService.js +96 -0
  314. package/dist/tools/tasks/crud/TaskDeletionService.js.map +1 -0
  315. package/dist/tools/tasks/crud/TaskReadService.d.ts +19 -0
  316. package/dist/tools/tasks/crud/TaskReadService.d.ts.map +1 -0
  317. package/dist/tools/tasks/crud/TaskReadService.js +66 -0
  318. package/dist/tools/tasks/crud/TaskReadService.js.map +1 -0
  319. package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts +18 -0
  320. package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts.map +1 -0
  321. package/dist/tools/tasks/crud/TaskResponseFormatter.js +248 -0
  322. package/dist/tools/tasks/crud/TaskResponseFormatter.js.map +1 -0
  323. package/dist/tools/tasks/crud/TaskUpdateService.d.ts +33 -0
  324. package/dist/tools/tasks/crud/TaskUpdateService.d.ts.map +1 -0
  325. package/dist/tools/tasks/crud/TaskUpdateService.js +294 -0
  326. package/dist/tools/tasks/crud/TaskUpdateService.js.map +1 -0
  327. package/dist/tools/tasks/crud/index.d.ts +17 -0
  328. package/dist/tools/tasks/crud/index.d.ts.map +1 -0
  329. package/dist/tools/tasks/crud/index.js +20 -0
  330. package/dist/tools/tasks/crud/index.js.map +1 -0
  331. package/dist/tools/tasks/duplicate.d.ts +28 -0
  332. package/dist/tools/tasks/duplicate.d.ts.map +1 -0
  333. package/dist/tools/tasks/duplicate.js +41 -0
  334. package/dist/tools/tasks/duplicate.js.map +1 -0
  335. package/dist/tools/tasks/filtering/FilterExecutor.d.ts +39 -0
  336. package/dist/tools/tasks/filtering/FilterExecutor.d.ts.map +1 -0
  337. package/dist/tools/tasks/filtering/FilterExecutor.js +214 -0
  338. package/dist/tools/tasks/filtering/FilterExecutor.js.map +1 -0
  339. package/dist/tools/tasks/filtering/FilterValidator.d.ts +59 -0
  340. package/dist/tools/tasks/filtering/FilterValidator.d.ts.map +1 -0
  341. package/dist/tools/tasks/filtering/FilterValidator.js +257 -0
  342. package/dist/tools/tasks/filtering/FilterValidator.js.map +1 -0
  343. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts +78 -0
  344. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts.map +1 -0
  345. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js +195 -0
  346. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js.map +1 -0
  347. package/dist/tools/tasks/filtering/evaluators.d.ts +41 -0
  348. package/dist/tools/tasks/filtering/evaluators.d.ts.map +1 -0
  349. package/dist/tools/tasks/filtering/evaluators.js +224 -0
  350. package/dist/tools/tasks/filtering/evaluators.js.map +1 -0
  351. package/dist/tools/tasks/filtering/index.d.ts +11 -0
  352. package/dist/tools/tasks/filtering/index.d.ts.map +1 -0
  353. package/dist/tools/tasks/filtering/index.js +26 -0
  354. package/dist/tools/tasks/filtering/index.js.map +1 -0
  355. package/dist/tools/tasks/index.d.ts +9 -0
  356. package/dist/tools/tasks/index.d.ts.map +1 -0
  357. package/dist/tools/tasks/index.js +337 -0
  358. package/dist/tools/tasks/index.js.map +1 -0
  359. package/dist/tools/tasks/labels.d.ts +49 -0
  360. package/dist/tools/tasks/labels.d.ts.map +1 -0
  361. package/dist/tools/tasks/labels.js +223 -0
  362. package/dist/tools/tasks/labels.js.map +1 -0
  363. package/dist/tools/tasks/mark-read.d.ts +27 -0
  364. package/dist/tools/tasks/mark-read.d.ts.map +1 -0
  365. package/dist/tools/tasks/mark-read.js +38 -0
  366. package/dist/tools/tasks/mark-read.js.map +1 -0
  367. package/dist/tools/tasks/position.d.ts +53 -0
  368. package/dist/tools/tasks/position.d.ts.map +1 -0
  369. package/dist/tools/tasks/position.js +83 -0
  370. package/dist/tools/tasks/position.js.map +1 -0
  371. package/dist/tools/tasks/reminders.d.ts +56 -0
  372. package/dist/tools/tasks/reminders.d.ts.map +1 -0
  373. package/dist/tools/tasks/reminders.js +213 -0
  374. package/dist/tools/tasks/reminders.js.map +1 -0
  375. package/dist/tools/tasks/subtasks.d.ts +85 -0
  376. package/dist/tools/tasks/subtasks.d.ts.map +1 -0
  377. package/dist/tools/tasks/subtasks.js +286 -0
  378. package/dist/tools/tasks/subtasks.js.map +1 -0
  379. package/dist/tools/tasks/types/filters.d.ts +136 -0
  380. package/dist/tools/tasks/types/filters.d.ts.map +1 -0
  381. package/dist/tools/tasks/types/filters.js +7 -0
  382. package/dist/tools/tasks/types/filters.js.map +1 -0
  383. package/dist/tools/tasks/validation.d.ts +47 -0
  384. package/dist/tools/tasks/validation.d.ts.map +1 -0
  385. package/dist/tools/tasks/validation.js +131 -0
  386. package/dist/tools/tasks/validation.js.map +1 -0
  387. package/dist/tools/tasks-relations.d.ts +25 -0
  388. package/dist/tools/tasks-relations.d.ts.map +1 -0
  389. package/dist/tools/tasks-relations.js +271 -0
  390. package/dist/tools/tasks-relations.js.map +1 -0
  391. package/dist/tools/tasks.d.ts +6 -0
  392. package/dist/tools/tasks.d.ts.map +1 -0
  393. package/dist/tools/tasks.js +10 -0
  394. package/dist/tools/tasks.js.map +1 -0
  395. package/dist/tools/teams.d.ts +9 -0
  396. package/dist/tools/teams.d.ts.map +1 -0
  397. package/dist/tools/teams.js +255 -0
  398. package/dist/tools/teams.js.map +1 -0
  399. package/dist/tools/templates.d.ts +9 -0
  400. package/dist/tools/templates.d.ts.map +1 -0
  401. package/dist/tools/templates.js +450 -0
  402. package/dist/tools/templates.js.map +1 -0
  403. package/dist/tools/tokens.d.ts +37 -0
  404. package/dist/tools/tokens.d.ts.map +1 -0
  405. package/dist/tools/tokens.js +122 -0
  406. package/dist/tools/tokens.js.map +1 -0
  407. package/dist/tools/user-deletion.d.ts +41 -0
  408. package/dist/tools/user-deletion.d.ts.map +1 -0
  409. package/dist/tools/user-deletion.js +126 -0
  410. package/dist/tools/user-deletion.js.map +1 -0
  411. package/dist/tools/users.d.ts +9 -0
  412. package/dist/tools/users.d.ts.map +1 -0
  413. package/dist/tools/users.js +418 -0
  414. package/dist/tools/users.js.map +1 -0
  415. package/dist/tools/webhooks.d.ts +31 -0
  416. package/dist/tools/webhooks.d.ts.map +1 -0
  417. package/dist/tools/webhooks.js +414 -0
  418. package/dist/tools/webhooks.js.map +1 -0
  419. package/dist/transforms/base.d.ts +204 -0
  420. package/dist/transforms/base.d.ts.map +1 -0
  421. package/dist/transforms/base.js +175 -0
  422. package/dist/transforms/base.js.map +1 -0
  423. package/dist/transforms/field-selector.d.ts +27 -0
  424. package/dist/transforms/field-selector.d.ts.map +1 -0
  425. package/dist/transforms/field-selector.js +91 -0
  426. package/dist/transforms/field-selector.js.map +1 -0
  427. package/dist/transforms/index.d.ts +15 -0
  428. package/dist/transforms/index.d.ts.map +1 -0
  429. package/dist/transforms/index.js +50 -0
  430. package/dist/transforms/index.js.map +1 -0
  431. package/dist/transforms/size-calculator.d.ts +131 -0
  432. package/dist/transforms/size-calculator.d.ts.map +1 -0
  433. package/dist/transforms/size-calculator.js +284 -0
  434. package/dist/transforms/size-calculator.js.map +1 -0
  435. package/dist/transforms/task.d.ts +207 -0
  436. package/dist/transforms/task.d.ts.map +1 -0
  437. package/dist/transforms/task.js +259 -0
  438. package/dist/transforms/task.js.map +1 -0
  439. package/dist/types/errors.d.ts +65 -0
  440. package/dist/types/errors.d.ts.map +1 -0
  441. package/dist/types/errors.js +44 -0
  442. package/dist/types/errors.js.map +1 -0
  443. package/dist/types/filters.d.ts +149 -0
  444. package/dist/types/filters.d.ts.map +1 -0
  445. package/dist/types/filters.js +26 -0
  446. package/dist/types/filters.js.map +1 -0
  447. package/dist/types/index.d.ts +147 -0
  448. package/dist/types/index.d.ts.map +1 -0
  449. package/dist/types/index.js +24 -0
  450. package/dist/types/index.js.map +1 -0
  451. package/dist/types/node-vikunja-extended.d.ts +36 -0
  452. package/dist/types/node-vikunja-extended.d.ts.map +1 -0
  453. package/dist/types/node-vikunja-extended.js +25 -0
  454. package/dist/types/node-vikunja-extended.js.map +1 -0
  455. package/dist/types/responses.d.ts +121 -0
  456. package/dist/types/responses.d.ts.map +1 -0
  457. package/dist/types/responses.js +26 -0
  458. package/dist/types/responses.js.map +1 -0
  459. package/dist/types/vikunja.d.ts +319 -0
  460. package/dist/types/vikunja.d.ts.map +1 -0
  461. package/dist/types/vikunja.js +7 -0
  462. package/dist/types/vikunja.js.map +1 -0
  463. package/dist/utils/auth-error-handler.d.ts +23 -0
  464. package/dist/utils/auth-error-handler.d.ts.map +1 -0
  465. package/dist/utils/auth-error-handler.js +162 -0
  466. package/dist/utils/auth-error-handler.js.map +1 -0
  467. package/dist/utils/composite-operation.d.ts +184 -0
  468. package/dist/utils/composite-operation.d.ts.map +1 -0
  469. package/dist/utils/composite-operation.js +293 -0
  470. package/dist/utils/composite-operation.js.map +1 -0
  471. package/dist/utils/error-handler.d.ts +39 -0
  472. package/dist/utils/error-handler.d.ts.map +1 -0
  473. package/dist/utils/error-handler.js +336 -0
  474. package/dist/utils/error-handler.js.map +1 -0
  475. package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts +13 -0
  476. package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts.map +1 -0
  477. package/dist/utils/filtering/ClientSideFilteringStrategy.js +129 -0
  478. package/dist/utils/filtering/ClientSideFilteringStrategy.js.map +1 -0
  479. package/dist/utils/filtering/FilteringContext.d.ts +40 -0
  480. package/dist/utils/filtering/FilteringContext.d.ts.map +1 -0
  481. package/dist/utils/filtering/FilteringContext.js +58 -0
  482. package/dist/utils/filtering/FilteringContext.js.map +1 -0
  483. package/dist/utils/filtering/HybridFilteringStrategy.d.ts +15 -0
  484. package/dist/utils/filtering/HybridFilteringStrategy.d.ts.map +1 -0
  485. package/dist/utils/filtering/HybridFilteringStrategy.js +55 -0
  486. package/dist/utils/filtering/HybridFilteringStrategy.js.map +1 -0
  487. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts +42 -0
  488. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts.map +1 -0
  489. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js +120 -0
  490. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js.map +1 -0
  491. package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts +13 -0
  492. package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts.map +1 -0
  493. package/dist/utils/filtering/ServerSideFilteringStrategy.js +88 -0
  494. package/dist/utils/filtering/ServerSideFilteringStrategy.js.map +1 -0
  495. package/dist/utils/filtering/TaskFilteringStrategy.d.ts +19 -0
  496. package/dist/utils/filtering/TaskFilteringStrategy.d.ts.map +1 -0
  497. package/dist/utils/filtering/TaskFilteringStrategy.js +10 -0
  498. package/dist/utils/filtering/TaskFilteringStrategy.js.map +1 -0
  499. package/dist/utils/filtering/index.d.ts +14 -0
  500. package/dist/utils/filtering/index.d.ts.map +1 -0
  501. package/dist/utils/filtering/index.js +22 -0
  502. package/dist/utils/filtering/index.js.map +1 -0
  503. package/dist/utils/filtering/types.d.ts +108 -0
  504. package/dist/utils/filtering/types.d.ts.map +1 -0
  505. package/dist/utils/filtering/types.js +6 -0
  506. package/dist/utils/filtering/types.js.map +1 -0
  507. package/dist/utils/filters.d.ts +70 -0
  508. package/dist/utils/filters.d.ts.map +1 -0
  509. package/dist/utils/filters.js +812 -0
  510. package/dist/utils/filters.js.map +1 -0
  511. package/dist/utils/http-error-detail.d.ts +28 -0
  512. package/dist/utils/http-error-detail.d.ts.map +1 -0
  513. package/dist/utils/http-error-detail.js +67 -0
  514. package/dist/utils/http-error-detail.js.map +1 -0
  515. package/dist/utils/label-bulk.d.ts +21 -0
  516. package/dist/utils/label-bulk.d.ts.map +1 -0
  517. package/dist/utils/label-bulk.js +51 -0
  518. package/dist/utils/label-bulk.js.map +1 -0
  519. package/dist/utils/logger.d.ts +20 -0
  520. package/dist/utils/logger.d.ts.map +1 -0
  521. package/dist/utils/logger.js +66 -0
  522. package/dist/utils/logger.js.map +1 -0
  523. package/dist/utils/memory.d.ts +73 -0
  524. package/dist/utils/memory.d.ts.map +1 -0
  525. package/dist/utils/memory.js +194 -0
  526. package/dist/utils/memory.js.map +1 -0
  527. package/dist/utils/performance/batch-processor.d.ts +77 -0
  528. package/dist/utils/performance/batch-processor.d.ts.map +1 -0
  529. package/dist/utils/performance/batch-processor.js +218 -0
  530. package/dist/utils/performance/batch-processor.js.map +1 -0
  531. package/dist/utils/performance/index.d.ts +42 -0
  532. package/dist/utils/performance/index.d.ts.map +1 -0
  533. package/dist/utils/performance/index.js +49 -0
  534. package/dist/utils/performance/index.js.map +1 -0
  535. package/dist/utils/performance/performance-monitor.d.ts +116 -0
  536. package/dist/utils/performance/performance-monitor.d.ts.map +1 -0
  537. package/dist/utils/performance/performance-monitor.js +307 -0
  538. package/dist/utils/performance/performance-monitor.js.map +1 -0
  539. package/dist/utils/read-only.d.ts +111 -0
  540. package/dist/utils/read-only.d.ts.map +1 -0
  541. package/dist/utils/read-only.js +503 -0
  542. package/dist/utils/read-only.js.map +1 -0
  543. package/dist/utils/response-factory.d.ts +81 -0
  544. package/dist/utils/response-factory.d.ts.map +1 -0
  545. package/dist/utils/response-factory.js +86 -0
  546. package/dist/utils/response-factory.js.map +1 -0
  547. package/dist/utils/retry.d.ts +160 -0
  548. package/dist/utils/retry.d.ts.map +1 -0
  549. package/dist/utils/retry.js +316 -0
  550. package/dist/utils/retry.js.map +1 -0
  551. package/dist/utils/security.d.ts +70 -0
  552. package/dist/utils/security.d.ts.map +1 -0
  553. package/dist/utils/security.js +358 -0
  554. package/dist/utils/security.js.map +1 -0
  555. package/dist/utils/simple-response.d.ts +75 -0
  556. package/dist/utils/simple-response.d.ts.map +1 -0
  557. package/dist/utils/simple-response.js +311 -0
  558. package/dist/utils/simple-response.js.map +1 -0
  559. package/dist/utils/storage-errors.d.ts +9 -0
  560. package/dist/utils/storage-errors.d.ts.map +1 -0
  561. package/dist/utils/storage-errors.js +20 -0
  562. package/dist/utils/storage-errors.js.map +1 -0
  563. package/dist/utils/task-rest-transport.d.ts +28 -0
  564. package/dist/utils/task-rest-transport.d.ts.map +1 -0
  565. package/dist/utils/task-rest-transport.js +33 -0
  566. package/dist/utils/task-rest-transport.js.map +1 -0
  567. package/dist/utils/unicode-fix.d.ts +19 -0
  568. package/dist/utils/unicode-fix.d.ts.map +1 -0
  569. package/dist/utils/unicode-fix.js +70 -0
  570. package/dist/utils/unicode-fix.js.map +1 -0
  571. package/dist/utils/validation.d.ts +75 -0
  572. package/dist/utils/validation.d.ts.map +1 -0
  573. package/dist/utils/validation.js +758 -0
  574. package/dist/utils/validation.js.map +1 -0
  575. package/dist/utils/vikunja-rest.d.ts +159 -0
  576. package/dist/utils/vikunja-rest.d.ts.map +1 -0
  577. package/dist/utils/vikunja-rest.js +378 -0
  578. package/dist/utils/vikunja-rest.js.map +1 -0
  579. package/docs/CONFIGURATION.md +957 -0
  580. package/docs/DOCKER-DESKTOP-MCP.md +207 -0
  581. package/docs/TOOLS.md +422 -0
  582. package/package.json +145 -0
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ /**
3
+ * Simple Response Formatter
4
+ * Replaces the over-engineered 2,925-line AORP system with direct, clean responses
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createSuccessResponse = createSuccessResponse;
8
+ exports.createErrorResponse = createErrorResponse;
9
+ exports.formatSuccessMessage = formatSuccessMessage;
10
+ exports.formatErrorMessage = formatErrorMessage;
11
+ exports.formatMcpResponse = formatMcpResponse;
12
+ /**
13
+ * Create a simple success response
14
+ * Replaces complex AORP factory with direct formatting
15
+ */
16
+ function createSuccessResponse(operation, message, data, metadata) {
17
+ const content = formatSuccessMessage(operation, message, data, metadata);
18
+ return {
19
+ content,
20
+ metadata: {
21
+ timestamp: new Date().toISOString(),
22
+ success: true,
23
+ operation,
24
+ ...metadata,
25
+ },
26
+ };
27
+ }
28
+ /**
29
+ * Create a simple error response
30
+ * Replaces complex AORP error handling with direct formatting
31
+ */
32
+ function createErrorResponse(operation, message, errorCode = 'UNKNOWN_ERROR', metadata) {
33
+ const content = formatErrorMessage(operation, message, errorCode, metadata);
34
+ return {
35
+ content,
36
+ metadata: {
37
+ timestamp: new Date().toISOString(),
38
+ success: false,
39
+ operation,
40
+ error: {
41
+ code: errorCode,
42
+ message,
43
+ },
44
+ ...metadata,
45
+ },
46
+ };
47
+ }
48
+ /**
49
+ * Format success message in clean markdown
50
+ * Replaces complex AORP markdown formatting
51
+ */
52
+ function formatSuccessMessage(operation, message, data, metadata) {
53
+ let content = `## ✅ Success\n\n${message}\n\n**Operation:** ${operation}\n\n`;
54
+ // Include metadata first if provided
55
+ if (metadata && typeof metadata === 'object') {
56
+ const metadataEntries = Object.entries(metadata).filter(([_, value]) => value !== undefined && value !== null);
57
+ if (metadataEntries.length > 0) {
58
+ content += formatObjectData(metadata);
59
+ }
60
+ }
61
+ if (data) {
62
+ // Detect single resources (id + title|name, not an array) BEFORE the
63
+ // collection extraction. A single Task object has its own `.labels`
64
+ // array (the labels assigned to that task), which collides with the
65
+ // "labels collection" check below and causes get/create responses to
66
+ // silently drop description, project_id, priority, due_date, etc.
67
+ const looksLikeSingleResource = !Array.isArray(data) &&
68
+ typeof data === 'object' &&
69
+ data.id !== undefined &&
70
+ (data.title !== undefined || data.name !== undefined);
71
+ // Check for known collection types first (skipped for single resources).
72
+ const collection = looksLikeSingleResource
73
+ ? null
74
+ : (data.tasks || data.projects || data.labels || data.users || data.items);
75
+ if (collection && Array.isArray(collection)) {
76
+ content += `**Results:** ${collection.length} item(s)\n\n`;
77
+ content += formatDataItemsList(collection);
78
+ }
79
+ else if (Array.isArray(data)) {
80
+ content += `**Results:** ${data.length} item(s)\n\n`;
81
+ content += formatDataItemsList(data);
82
+ }
83
+ else if (looksLikeSingleResource) {
84
+ // Route single resources through formatSingleDataItem, which uses the
85
+ // rich formatTaskItem heading renderer for Task-shaped objects and a
86
+ // compact id/title line for everything else. This is a single-item
87
+ // ("get") response, so the heading layout stays legitimate here — only
88
+ // multi-item list rendering (formatDataItemsList) changes.
89
+ content += formatSingleDataItem(data);
90
+ }
91
+ else if (data && typeof data === 'object') {
92
+ content += formatObjectData(data);
93
+ }
94
+ }
95
+ return content;
96
+ }
97
+ /**
98
+ * Format error message in clean markdown
99
+ * Replaces complex AORP error formatting
100
+ */
101
+ function formatErrorMessage(operation, message, errorCode, metadata) {
102
+ let output = `## ❌ Error\n\n${message}\n\n**Error Code:** ${errorCode}`;
103
+ // Include important metadata fields in error output
104
+ if (metadata) {
105
+ // Add operation if different from default
106
+ if (metadata.operation && metadata.operation !== operation) {
107
+ output += `\n\n**Operation:** ${metadata.operation}`;
108
+ }
109
+ // Add failed IDs if present
110
+ if (metadata.failedIds && Array.isArray(metadata.failedIds)) {
111
+ output += `\n\n**FailedIds**:\n${JSON.stringify(metadata.failedIds)}`;
112
+ }
113
+ // Add failed count if present
114
+ if (typeof metadata.failedCount === 'number') {
115
+ output += `\n\n**FailedCount**:\n${metadata.failedCount}`;
116
+ }
117
+ // Add failures array if present
118
+ if (metadata.failures && Array.isArray(metadata.failures)) {
119
+ output += `\n\n**Failures**:\n${JSON.stringify(metadata.failures, null, 2)}`;
120
+ }
121
+ // Add count if present
122
+ if (metadata.count !== undefined) {
123
+ output += `\n\n**count:** ${metadata.count}`;
124
+ }
125
+ }
126
+ output += '\n\n';
127
+ return output;
128
+ }
129
+ /**
130
+ * Format a single Task object with rich details as a markdown heading block.
131
+ *
132
+ * This heading layout (`### N. **Title**` + detail bullets) is used ONLY for
133
+ * single-item ("get"/"create"/"update") responses via formatSingleDataItem,
134
+ * where a lone `###` section header is legitimate document structure. It
135
+ * must NOT be used for multi-item lists (see formatDataItemsList /
136
+ * formatListItemLine below) — mixing heading blocks into a numbered list is
137
+ * issue #86.
138
+ */
139
+ function formatTaskItem(task, index) {
140
+ const parts = [];
141
+ // Header with title and ID
142
+ parts.push(`### ${index + 1}. **${task.title}** (ID: ${task.id})`);
143
+ parts.push(...formatTaskDetailLines(task).map(line => `- ${line}`));
144
+ return parts.join('\n') + '\n';
145
+ }
146
+ /**
147
+ * Build the optional detail bullet lines (status/priority/due date/progress/
148
+ * project/labels/assignees/description) for a Task-shaped item. Shared by
149
+ * both the single-item heading renderer (formatTaskItem) and the list-item
150
+ * renderer (formatListItemLine) so the *content* of the details stays
151
+ * identical between the two layouts — only their surrounding structure
152
+ * (heading vs. indented sub-bullets) differs.
153
+ */
154
+ function formatTaskDetailLines(task) {
155
+ const parts = [];
156
+ // Status
157
+ const status = task.done ? '✅ Done' : '❌ Not Done';
158
+ parts.push(`**Status:** ${status}`);
159
+ // Priority (if set)
160
+ if (task.priority !== undefined && task.priority > 0) {
161
+ const stars = '⭐'.repeat(Math.min(task.priority, 5));
162
+ parts.push(`**Priority:** ${stars} (${task.priority}/5)`);
163
+ }
164
+ // Due date (if set)
165
+ if (task.due_date) {
166
+ parts.push(`**Due:** ${task.due_date}`);
167
+ }
168
+ // Progress (if set)
169
+ if (task.percent_done !== undefined && task.percent_done > 0) {
170
+ parts.push(`**Progress:** ${task.percent_done}%`);
171
+ }
172
+ // Project ID (if set)
173
+ if (task.project_id) {
174
+ parts.push(`**Project:** ${task.project_id}`);
175
+ }
176
+ // Labels (if any)
177
+ if (task.labels && task.labels.length > 0) {
178
+ const labelTitles = task.labels.map(l => l.title).join(', ');
179
+ parts.push(`**Labels:** ${labelTitles}`);
180
+ }
181
+ // Assignees (if any)
182
+ if (task.assignees && task.assignees.length > 0) {
183
+ const assigneeNames = task.assignees.map(a => {
184
+ const email = a.email ? ` (${a.email})` : '';
185
+ return `${a.username}${email}`;
186
+ }).join(', ');
187
+ parts.push(`**Assignees:** ${assigneeNames}`);
188
+ }
189
+ // Description (if exists)
190
+ if (task.description) {
191
+ parts.push(`**Description:** ${task.description}`);
192
+ }
193
+ return parts;
194
+ }
195
+ /**
196
+ * True when an item carries enough Task-shaped detail to justify rendering
197
+ * extra fields (status/priority/due date/labels/assignees/description)
198
+ * alongside its title/ID line.
199
+ */
200
+ function isRichTaskItem(item) {
201
+ const task = item;
202
+ return Boolean(task.title &&
203
+ (task.description ||
204
+ task.priority !== undefined ||
205
+ task.due_date ||
206
+ task.labels ||
207
+ task.assignees ||
208
+ task.done !== undefined));
209
+ }
210
+ /**
211
+ * Format a single item's list line, uniformly, regardless of how much
212
+ * optional detail it carries (issue #86 fix). Every item — rich or sparse —
213
+ * renders as the SAME plain numbered line:
214
+ *
215
+ * N. **Title** (ID: id)
216
+ *
217
+ * with any available detail (status/priority/due date/labels/assignees/
218
+ * description) rendered as indented sub-bullets directly underneath, never
219
+ * as a `###` document heading. This keeps consecutive list items visually
220
+ * uniform instead of alternating between heading blocks and plain lines.
221
+ */
222
+ function formatListItemLine(item, index) {
223
+ if (typeof item !== 'object' || item === null) {
224
+ return `${index + 1}. ${JSON.stringify(item)}`;
225
+ }
226
+ const id = item.id || index + 1;
227
+ const title = item.title || item.name || JSON.stringify(item);
228
+ const header = `${index + 1}. **${title}** (ID: ${id})`;
229
+ if (!isRichTaskItem(item)) {
230
+ return header;
231
+ }
232
+ // formatTaskDetailLines always emits at least a **Status:** line once
233
+ // isRichTaskItem() is true, so `details` is never empty here.
234
+ const details = formatTaskDetailLines(item);
235
+ return [header, ...details.map(line => ` - ${line}`)].join('\n');
236
+ }
237
+ /**
238
+ * Format a single ("get"/"create"/"update") resource. This is NOT a list, so
239
+ * the richer `### ` heading layout (formatTaskItem) remains legitimate here
240
+ * — issue #86 only changes how *multiple* items are rendered together (see
241
+ * formatDataItemsList).
242
+ *
243
+ * Callers only reach this function via the `looksLikeSingleResource` gate in
244
+ * formatSuccessMessage, which already guarantees `item` is a non-null object
245
+ * with an `id` and a `title`/`name` — so no primitive/non-object fallback is
246
+ * needed (or reachable) here.
247
+ */
248
+ function formatSingleDataItem(item) {
249
+ if (isRichTaskItem(item)) {
250
+ return formatTaskItem(item, 0) + '\n\n';
251
+ }
252
+ const id = item.id || 1;
253
+ const title = item.title || item.name || JSON.stringify(item);
254
+ return `1. **${title}** (ID: ${id})\n\n`;
255
+ }
256
+ /**
257
+ * Maximum number of items to render individually in a list response. This
258
+ * keeps responses token-safe: a hard cap protects against unbounded output
259
+ * for very large collections while still being generous enough to cover the
260
+ * vast majority of real Vikunja projects/task lists without truncation.
261
+ * Anything beyond the cap gets an explicit truncation notice instead of
262
+ * being silently dropped (issue #85) — the caller can always page further
263
+ * with `page`/`perPage`.
264
+ */
265
+ const LIST_ITEM_RENDER_CAP = 50;
266
+ /**
267
+ * Format a list ("list"/bulk) response body. Renders every item up to
268
+ * LIST_ITEM_RENDER_CAP; for larger collections it renders the first
269
+ * LIST_ITEM_RENDER_CAP items followed by an explicit truncation notice, so a
270
+ * non-empty collection NEVER silently renders an empty body (issue #85).
271
+ */
272
+ function formatDataItemsList(items, cap = LIST_ITEM_RENDER_CAP) {
273
+ if (items.length === 0) {
274
+ return '';
275
+ }
276
+ const shown = items.slice(0, cap);
277
+ let content = shown.map((item, index) => formatListItemLine(item, index)).join('\n') + '\n\n';
278
+ if (items.length > cap) {
279
+ content += `_Showing ${cap} of ${items.length} — use page/perPage to see more._\n\n`;
280
+ }
281
+ return content;
282
+ }
283
+ /**
284
+ * Format object data
285
+ */
286
+ function formatObjectData(data) {
287
+ const entries = Object.entries(data);
288
+ if (entries.length === 0)
289
+ return '';
290
+ return entries
291
+ .filter(([_, value]) => value !== undefined && value !== null)
292
+ .map(([key, value]) => {
293
+ const formattedValue = typeof value === 'object' && value !== null
294
+ ? JSON.stringify(value, null, 2)
295
+ : String(value);
296
+ return `**${key}:** ${formattedValue}`;
297
+ })
298
+ .join('\n') + '\n\n';
299
+ }
300
+ /**
301
+ * Format response as MCP content array
302
+ * Direct replacement for AORP formatting
303
+ */
304
+ function formatMcpResponse(response) {
305
+ return [{
306
+ type: 'text',
307
+ text: response.content,
308
+ }];
309
+ }
310
+ // Note: ResponseData and DataItem are exported from types/index.ts
311
+ //# sourceMappingURL=simple-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-response.js","sourceRoot":"","sources":["../../src/utils/simple-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Error classes for storage operations
3
+ * Separated to avoid circular imports with storage system
4
+ */
5
+ export declare class StorageDataError extends Error {
6
+ readonly code: string;
7
+ constructor(message: string, code?: string, cause?: Error);
8
+ }
9
+ //# sourceMappingURL=storage-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-errors.d.ts","sourceRoot":"","sources":["../../src/utils/storage-errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAA6B,EAAE,KAAK,CAAC,EAAE,KAAK;CAQhF"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Error classes for storage operations
4
+ * Separated to avoid circular imports with storage system
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.StorageDataError = void 0;
8
+ class StorageDataError extends Error {
9
+ code;
10
+ constructor(message, code = 'STORAGE_DATA_ERROR', cause) {
11
+ super(message);
12
+ this.name = 'StorageDataError';
13
+ this.code = code;
14
+ if (cause) {
15
+ this.cause = cause;
16
+ }
17
+ }
18
+ }
19
+ exports.StorageDataError = StorageDataError;
20
+ //# sourceMappingURL=storage-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-errors.js","sourceRoot":"","sources":["../../src/utils/storage-errors.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,MAAa,gBAAiB,SAAQ,KAAK;IACzB,IAAI,CAAS;IAE7B,YAAY,OAAe,EAAE,OAAe,oBAAoB,EAAE,KAAa;QAC7E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAXD,4CAWC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared direct-REST transport for reading/writing a full task object.
3
+ *
4
+ * `src/tools/tasks/reminders.ts` needs this because Vikunja has no dedicated
5
+ * reminder sub-resource endpoint — reminders "ride on" the full task-update
6
+ * endpoint (`POST /tasks/{id}`, a full-model-replace: fetch → merge
7
+ * `reminders` → POST the whole task back, per the same pattern documented
8
+ * for `buildProjectUpdatePayload` in docs/ENDPOINT-PLAYBOOK.md §4). That
9
+ * endpoint is also task CRUD's own update endpoint
10
+ * (`src/tools/tasks/crud/TaskUpdateService.ts`), which this Wave D
11
+ * sub-resource migration must not edit — so this is a standalone helper
12
+ * rather than a change to that service, per the playbook's guidance to add
13
+ * a new shared transport file when one is genuinely needed.
14
+ */
15
+ import type { AuthManager } from '../auth/AuthManager';
16
+ import type { components } from '../types/generated/vikunja-openapi';
17
+ /** `models.Task` per the OpenAPI spec. */
18
+ export type VikunjaRestTask = components['schemas']['models.Task'];
19
+ /** `GET /tasks/{id}`. */
20
+ export declare function getTaskViaRest(authManager: AuthManager, taskId: number): Promise<VikunjaRestTask>;
21
+ /**
22
+ * `POST /tasks/{id}` — full-model-replace. Callers must send the complete
23
+ * desired task object (typically the result of fetching via
24
+ * `getTaskViaRest`, spreading it, then overlaying only the changed fields),
25
+ * not a bare partial body.
26
+ */
27
+ export declare function updateTaskViaRest(authManager: AuthManager, taskId: number, task: VikunjaRestTask): Promise<VikunjaRestTask>;
28
+ //# sourceMappingURL=task-rest-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-rest-transport.d.ts","sourceRoot":"","sources":["../../src/utils/task-rest-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAEnE,yBAAyB;AACzB,wBAAsB,cAAc,CAClC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,eAAe,CAAC,CAE1B"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * Shared direct-REST transport for reading/writing a full task object.
4
+ *
5
+ * `src/tools/tasks/reminders.ts` needs this because Vikunja has no dedicated
6
+ * reminder sub-resource endpoint — reminders "ride on" the full task-update
7
+ * endpoint (`POST /tasks/{id}`, a full-model-replace: fetch → merge
8
+ * `reminders` → POST the whole task back, per the same pattern documented
9
+ * for `buildProjectUpdatePayload` in docs/ENDPOINT-PLAYBOOK.md §4). That
10
+ * endpoint is also task CRUD's own update endpoint
11
+ * (`src/tools/tasks/crud/TaskUpdateService.ts`), which this Wave D
12
+ * sub-resource migration must not edit — so this is a standalone helper
13
+ * rather than a change to that service, per the playbook's guidance to add
14
+ * a new shared transport file when one is genuinely needed.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.getTaskViaRest = getTaskViaRest;
18
+ exports.updateTaskViaRest = updateTaskViaRest;
19
+ const vikunja_rest_1 = require("./vikunja-rest");
20
+ /** `GET /tasks/{id}`. */
21
+ async function getTaskViaRest(authManager, taskId) {
22
+ return (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${taskId}`);
23
+ }
24
+ /**
25
+ * `POST /tasks/{id}` — full-model-replace. Callers must send the complete
26
+ * desired task object (typically the result of fetching via
27
+ * `getTaskViaRest`, spreading it, then overlaying only the changed fields),
28
+ * not a bare partial body.
29
+ */
30
+ async function updateTaskViaRest(authManager, taskId, task) {
31
+ return (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/tasks/${taskId}`, task);
32
+ }
33
+ //# sourceMappingURL=task-rest-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-rest-transport.js","sourceRoot":"","sources":["../../src/utils/task-rest-transport.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAUH,wCAKC;AAQD,8CAMC;AA1BD,iDAAoD;AAMpD,yBAAyB;AAClB,KAAK,UAAU,cAAc,CAClC,WAAwB,EACxB,MAAc;IAEd,OAAO,IAAA,iCAAkB,EAAkB,WAAW,EAAE,KAAK,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,iBAAiB,CACrC,WAAwB,EACxB,MAAc,EACd,IAAqB;IAErB,OAAO,IAAA,iCAAkB,EAAkB,WAAW,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Unicode Fix Utility
3
+ *
4
+ * Handles literal unicode escape sequences in data that may come from
5
+ * API responses containing escaped unicode characters.
6
+ */
7
+ /**
8
+ * Check if a string contains literal unicode escape sequences
9
+ */
10
+ export declare function hasLiteralUnicodeEscapes(input: unknown): boolean;
11
+ /**
12
+ * Fix literal unicode escape sequences in a string
13
+ */
14
+ export declare function fixLiteralUnicodeEscapes(input: unknown): unknown;
15
+ /**
16
+ * Fix literal unicode escape sequences in nested data structures
17
+ */
18
+ export declare function fixLiteralUnicodeEscapesInData(input: unknown): unknown;
19
+ //# sourceMappingURL=unicode-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicode-fix.d.ts","sourceRoot":"","sources":["../../src/utils/unicode-fix.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOhE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiBhE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA2BtE"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Unicode Fix Utility
4
+ *
5
+ * Handles literal unicode escape sequences in data that may come from
6
+ * API responses containing escaped unicode characters.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.hasLiteralUnicodeEscapes = hasLiteralUnicodeEscapes;
10
+ exports.fixLiteralUnicodeEscapes = fixLiteralUnicodeEscapes;
11
+ exports.fixLiteralUnicodeEscapesInData = fixLiteralUnicodeEscapesInData;
12
+ /**
13
+ * Check if a string contains literal unicode escape sequences
14
+ */
15
+ function hasLiteralUnicodeEscapes(input) {
16
+ if (typeof input !== 'string') {
17
+ return false;
18
+ }
19
+ // Look for literal unicode patterns like \ud83d\udc65 or \u26a1
20
+ return /\\u[0-9a-fA-F]{4,6}/g.test(input);
21
+ }
22
+ /**
23
+ * Fix literal unicode escape sequences in a string
24
+ */
25
+ function fixLiteralUnicodeEscapes(input) {
26
+ if (typeof input !== 'string') {
27
+ return input;
28
+ }
29
+ // Replace literal unicode escapes with actual unicode characters
30
+ // Handle both 4-digit and longer sequences
31
+ return input.replace(/\\u([0-9a-fA-F]{4,6})/g, (match, hex) => {
32
+ try {
33
+ // Parse the hex value and convert to unicode character
34
+ const codePoint = parseInt(hex, 16);
35
+ return String.fromCodePoint(codePoint);
36
+ }
37
+ catch {
38
+ // If parsing fails, return the original match
39
+ return match;
40
+ }
41
+ });
42
+ }
43
+ /**
44
+ * Fix literal unicode escape sequences in nested data structures
45
+ */
46
+ function fixLiteralUnicodeEscapesInData(input) {
47
+ // Handle primitive values
48
+ if (typeof input === 'string') {
49
+ return fixLiteralUnicodeEscapes(input);
50
+ }
51
+ // Handle null/undefined
52
+ if (input === null || input === undefined) {
53
+ return input;
54
+ }
55
+ // Handle arrays
56
+ if (Array.isArray(input)) {
57
+ return input.map(item => fixLiteralUnicodeEscapesInData(item));
58
+ }
59
+ // Handle objects
60
+ if (typeof input === 'object' && input !== null && !Array.isArray(input)) {
61
+ const result = {};
62
+ for (const [key, value] of Object.entries(input)) {
63
+ result[key] = fixLiteralUnicodeEscapesInData(value);
64
+ }
65
+ return result;
66
+ }
67
+ // Handle other primitives (numbers, booleans)
68
+ return input;
69
+ }
70
+ //# sourceMappingURL=unicode-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicode-fix.js","sourceRoot":"","sources":["../../src/utils/unicode-fix.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAKH,4DAOC;AAKD,4DAiBC;AAKD,wEA2BC;AAhED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,KAAc;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gEAAgE;IAChE,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,KAAc;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iEAAiE;IACjE,2CAA2C;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,uDAAuD;YACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,8BAA8B,CAAC,KAAc;IAC3D,0BAA0B;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8CAA8C;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Comprehensive Input Sanitization and Security Validation Layer
3
+ *
4
+ * Provides enterprise-grade protection against:
5
+ * - XSS attacks (script injection, HTML injection)
6
+ * - SQL injection (UNION, boolean-based, time-based)
7
+ * - Command injection (shell command execution)
8
+ * - Path traversal attacks
9
+ * - LDAP injection
10
+ * - NoSQL injection
11
+ * - Unicode and encoding bypasses
12
+ * - Content Security Policy violations
13
+ *
14
+ * Integration: Works seamlessly with existing security.ts credential masking
15
+ */
16
+ import type { FilterExpression, FilterField, FilterOperator, LogicalOperator } from '../types/filters';
17
+ /**
18
+ * Server-appropriate security validation patterns
19
+ * Created fresh each call to avoid regex state issues
20
+ */
21
+ /**
22
+ * Allowed characters for additional strictness (optional, can be relaxed)
23
+ */
24
+ /**
25
+ * Validate and sanitize a string value to prevent XSS using pattern matching + HTML escaping
26
+ * Server-appropriate approach that avoids DOM parsing while providing comprehensive protection
27
+ */
28
+ export declare function sanitizeString(value: string): string;
29
+ /**
30
+ * Validate a field name against Zod schema
31
+ */
32
+ export declare function validateField(field: string): FilterField;
33
+ /**
34
+ * Validate an operator against Zod schema
35
+ */
36
+ export declare function validateOperator(operator: string): FilterOperator;
37
+ /**
38
+ * Validate a logical operator against Zod schema
39
+ */
40
+ export declare function validateLogicalOperator(operator: string): LogicalOperator;
41
+ /**
42
+ * Validate and normalize a value using custom logic (more comprehensive than Zod for this use case)
43
+ */
44
+ export declare function validateValue(value: unknown): string | number | boolean | string[] | number[];
45
+ /**
46
+ * Validate a filter condition object using Zod schema
47
+ */
48
+ export declare function validateCondition(condition: unknown): {
49
+ field: FilterField;
50
+ operator: FilterOperator;
51
+ value: string | number | boolean | string[] | number[] | null;
52
+ };
53
+ /**
54
+ * Validate a filter expression using Zod schema with comprehensive type safety
55
+ */
56
+ export declare function validateFilterExpression(expression: unknown): FilterExpression;
57
+ /**
58
+ * Safely stringify JSON with comprehensive protection
59
+ * Prevents prototype pollution and sanitizes string values
60
+ */
61
+ export declare function safeJsonStringify(obj: unknown): string;
62
+ /**
63
+ * Safely parse JSON with comprehensive protection
64
+ * Prevents prototype pollution and validates against dangerous content
65
+ */
66
+ export declare function safeJsonParse(jsonString: string): FilterExpression;
67
+ /**
68
+ * Validate ID parameters
69
+ */
70
+ export declare function validateId(id: number, fieldName: string): void;
71
+ /**
72
+ * Validate and convert ID from various formats
73
+ */
74
+ export declare function validateAndConvertId(id: unknown, fieldName: string): number;
75
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiCvG;;;GAGG;AAEH;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmNpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAoBxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAcjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAczE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CA4F7F;AAkBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG;IACrD,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/D,CAUA;AA2BD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,CA0F9E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAwBtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAgClE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAI9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAyB3E"}