@langadventurellc/task-trellis-mcp 1.0.1 → 1.2.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 (331) hide show
  1. package/README.md +52 -263
  2. package/dist/__tests__/e2e/autoPrune.e2e.test.d.ts +2 -0
  3. package/dist/__tests__/e2e/autoPrune.e2e.test.d.ts.map +1 -0
  4. package/dist/__tests__/e2e/autoPrune.e2e.test.js +533 -0
  5. package/dist/__tests__/e2e/autoPrune.e2e.test.js.map +1 -0
  6. package/dist/__tests__/e2e/configuration/activation.e2e.test.js +6 -6
  7. package/dist/__tests__/e2e/configuration/activation.e2e.test.js.map +1 -1
  8. package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js +55 -6
  9. package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js.map +1 -1
  10. package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js +19 -19
  11. package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js.map +1 -1
  12. package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js +9 -9
  13. package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js.map +1 -1
  14. package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js +15 -15
  15. package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js.map +1 -1
  16. package/dist/__tests__/e2e/crud/createObject.e2e.test.js +94 -42
  17. package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
  18. package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js +19 -19
  19. package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js.map +1 -1
  20. package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js +32 -32
  21. package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js.map +1 -1
  22. package/dist/__tests__/e2e/crud/getObject.e2e.test.js +143 -22
  23. package/dist/__tests__/e2e/crud/getObject.e2e.test.js.map +1 -1
  24. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +810 -121
  25. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js.map +1 -1
  26. package/dist/__tests__/e2e/crud/updateObject.e2e.test.js +497 -25
  27. package/dist/__tests__/e2e/crud/updateObject.e2e.test.js.map +1 -1
  28. package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.d.ts +2 -0
  29. package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.d.ts.map +1 -0
  30. package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.js +319 -0
  31. package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.js.map +1 -0
  32. package/dist/__tests__/e2e/infrastructure/client.e2e.test.js +4 -4
  33. package/dist/__tests__/e2e/infrastructure/client.e2e.test.js.map +1 -1
  34. package/dist/__tests__/e2e/infrastructure/server.e2e.test.js +6 -6
  35. package/dist/__tests__/e2e/infrastructure/server.e2e.test.js.map +1 -1
  36. package/dist/__tests__/e2e/utils/extractObjectIds.d.ts +5 -0
  37. package/dist/__tests__/e2e/utils/extractObjectIds.d.ts.map +1 -0
  38. package/dist/__tests__/e2e/utils/extractObjectIds.js +12 -0
  39. package/dist/__tests__/e2e/utils/extractObjectIds.js.map +1 -0
  40. package/dist/__tests__/e2e/utils/index.d.ts +1 -0
  41. package/dist/__tests__/e2e/utils/index.d.ts.map +1 -1
  42. package/dist/__tests__/e2e/utils/index.js +3 -1
  43. package/dist/__tests__/e2e/utils/index.js.map +1 -1
  44. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts +2 -1
  45. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -1
  46. package/dist/__tests__/e2e/utils/mcpTestClient.js +15 -8
  47. package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
  48. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +4 -2
  49. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts.map +1 -1
  50. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +2 -1
  51. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js.map +1 -1
  52. package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.d.ts +1 -1
  53. package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.js +1 -1
  54. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +4 -4
  55. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -1
  56. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts +2 -0
  57. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts.map +1 -0
  58. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +597 -0
  59. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -0
  60. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +233 -0
  61. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
  62. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +447 -1
  63. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
  64. package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js +43 -43
  65. package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js.map +1 -1
  66. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +22 -26
  67. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
  68. package/dist/__tests__/serverStartup.test.d.ts +2 -0
  69. package/dist/__tests__/serverStartup.test.d.ts.map +1 -0
  70. package/dist/__tests__/serverStartup.test.js +171 -0
  71. package/dist/__tests__/serverStartup.test.js.map +1 -0
  72. package/dist/configuration/ServerConfig.d.ts +2 -0
  73. package/dist/configuration/ServerConfig.d.ts.map +1 -1
  74. package/dist/models/TrellisObjectSummary.d.ts +16 -0
  75. package/dist/models/TrellisObjectSummary.d.ts.map +1 -0
  76. package/dist/{utils/ReplaceStringOptions.js → models/TrellisObjectSummary.js} +1 -1
  77. package/dist/models/TrellisObjectSummary.js.map +1 -0
  78. package/dist/models/index.d.ts +1 -0
  79. package/dist/models/index.d.ts.map +1 -1
  80. package/dist/models/index.js.map +1 -1
  81. package/dist/repositories/Repository.d.ts +2 -1
  82. package/dist/repositories/Repository.d.ts.map +1 -1
  83. package/dist/repositories/local/LocalRepository.d.ts +2 -1
  84. package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
  85. package/dist/repositories/local/LocalRepository.js +4 -0
  86. package/dist/repositories/local/LocalRepository.js.map +1 -1
  87. package/dist/repositories/local/__tests__/getChildrenOf.test.d.ts +2 -0
  88. package/dist/repositories/local/__tests__/getChildrenOf.test.d.ts.map +1 -0
  89. package/dist/repositories/local/__tests__/getChildrenOf.test.js +306 -0
  90. package/dist/repositories/local/__tests__/getChildrenOf.test.js.map +1 -0
  91. package/dist/repositories/local/__tests__/getObjectFilePath.test.js +9 -6
  92. package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
  93. package/dist/repositories/local/__tests__/getObjects.test.js +349 -10
  94. package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -1
  95. package/dist/repositories/local/deleteObjectById.d.ts.map +1 -1
  96. package/dist/repositories/local/deleteObjectById.js +2 -0
  97. package/dist/repositories/local/deleteObjectById.js.map +1 -1
  98. package/dist/repositories/local/getChildrenOf.d.ts +11 -0
  99. package/dist/repositories/local/getChildrenOf.d.ts.map +1 -0
  100. package/dist/repositories/local/getChildrenOf.js +73 -0
  101. package/dist/repositories/local/getChildrenOf.js.map +1 -0
  102. package/dist/repositories/local/getObjectFilePath.d.ts.map +1 -1
  103. package/dist/repositories/local/getObjectFilePath.js +8 -4
  104. package/dist/repositories/local/getObjectFilePath.js.map +1 -1
  105. package/dist/repositories/local/getObjects.d.ts +1 -1
  106. package/dist/repositories/local/getObjects.d.ts.map +1 -1
  107. package/dist/repositories/local/getObjects.js +31 -7
  108. package/dist/repositories/local/getObjects.js.map +1 -1
  109. package/dist/server.js +57 -19
  110. package/dist/server.js.map +1 -1
  111. package/dist/services/TaskTrellisService.d.ts +78 -0
  112. package/dist/services/TaskTrellisService.d.ts.map +1 -0
  113. package/dist/services/TaskTrellisService.js +3 -0
  114. package/dist/services/TaskTrellisService.js.map +1 -0
  115. package/dist/services/local/LocalTaskTrellisService.d.ts +55 -0
  116. package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -0
  117. package/dist/services/local/LocalTaskTrellisService.js +73 -0
  118. package/dist/services/local/LocalTaskTrellisService.js.map +1 -0
  119. package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts +2 -0
  120. package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts.map +1 -0
  121. package/dist/services/local/__tests__/appendAffectedFiles.test.js +202 -0
  122. package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -0
  123. package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts +2 -0
  124. package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts.map +1 -0
  125. package/dist/services/local/__tests__/appendModifiedFiles.test.js +162 -0
  126. package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -0
  127. package/dist/services/local/__tests__/appendObjectLog.test.d.ts +2 -0
  128. package/dist/services/local/__tests__/appendObjectLog.test.d.ts.map +1 -0
  129. package/dist/services/local/__tests__/appendObjectLog.test.js +105 -0
  130. package/dist/services/local/__tests__/appendObjectLog.test.js.map +1 -0
  131. package/dist/services/local/__tests__/claimTask.test.d.ts +2 -0
  132. package/dist/services/local/__tests__/claimTask.test.d.ts.map +1 -0
  133. package/dist/services/local/__tests__/claimTask.test.js +459 -0
  134. package/dist/services/local/__tests__/claimTask.test.js.map +1 -0
  135. package/dist/services/local/__tests__/completeTask.test.d.ts +2 -0
  136. package/dist/services/local/__tests__/completeTask.test.d.ts.map +1 -0
  137. package/dist/services/local/__tests__/completeTask.test.js +470 -0
  138. package/dist/services/local/__tests__/completeTask.test.js.map +1 -0
  139. package/dist/services/local/__tests__/createObject.test.d.ts +2 -0
  140. package/dist/services/local/__tests__/createObject.test.d.ts.map +1 -0
  141. package/dist/services/local/__tests__/createObject.test.js +333 -0
  142. package/dist/services/local/__tests__/createObject.test.js.map +1 -0
  143. package/dist/services/local/__tests__/listObjects.test.d.ts +2 -0
  144. package/dist/services/local/__tests__/listObjects.test.d.ts.map +1 -0
  145. package/dist/services/local/__tests__/listObjects.test.js +351 -0
  146. package/dist/services/local/__tests__/listObjects.test.js.map +1 -0
  147. package/dist/services/local/__tests__/pruneClosed.test.d.ts +2 -0
  148. package/dist/services/local/__tests__/pruneClosed.test.d.ts.map +1 -0
  149. package/dist/services/local/__tests__/pruneClosed.test.js +473 -0
  150. package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -0
  151. package/dist/services/local/__tests__/updateObject.test.d.ts +2 -0
  152. package/dist/services/local/__tests__/updateObject.test.d.ts.map +1 -0
  153. package/dist/services/local/__tests__/updateObject.test.js +521 -0
  154. package/dist/services/local/__tests__/updateObject.test.js.map +1 -0
  155. package/dist/services/local/appendAffectedFiles.d.ts +12 -0
  156. package/dist/services/local/appendAffectedFiles.d.ts.map +1 -0
  157. package/dist/services/local/appendAffectedFiles.js +34 -0
  158. package/dist/services/local/appendAffectedFiles.js.map +1 -0
  159. package/dist/services/local/appendModifiedFiles.d.ts +15 -0
  160. package/dist/services/local/appendModifiedFiles.d.ts.map +1 -0
  161. package/dist/services/local/appendModifiedFiles.js +39 -0
  162. package/dist/services/local/appendModifiedFiles.js.map +1 -0
  163. package/dist/services/local/appendObjectLog.d.ts +8 -0
  164. package/dist/services/local/appendObjectLog.d.ts.map +1 -0
  165. package/dist/services/local/appendObjectLog.js +45 -0
  166. package/dist/services/local/appendObjectLog.js.map +1 -0
  167. package/dist/services/local/claimTask.d.ts +8 -0
  168. package/dist/services/local/claimTask.d.ts.map +1 -0
  169. package/dist/services/local/claimTask.js +109 -0
  170. package/dist/services/local/claimTask.js.map +1 -0
  171. package/dist/services/local/completeTask.d.ts +9 -0
  172. package/dist/services/local/completeTask.d.ts.map +1 -0
  173. package/dist/services/local/completeTask.js +38 -0
  174. package/dist/services/local/completeTask.js.map +1 -0
  175. package/dist/services/local/createObject.d.ts +9 -0
  176. package/dist/services/local/createObject.d.ts.map +1 -0
  177. package/dist/services/local/createObject.js +44 -0
  178. package/dist/services/local/createObject.js.map +1 -0
  179. package/dist/services/local/listObjects.d.ts +9 -0
  180. package/dist/services/local/listObjects.d.ts.map +1 -0
  181. package/dist/services/local/listObjects.js +52 -0
  182. package/dist/services/local/listObjects.js.map +1 -0
  183. package/dist/services/local/pruneClosed.d.ts +8 -0
  184. package/dist/services/local/pruneClosed.d.ts.map +1 -0
  185. package/dist/services/local/pruneClosed.js +112 -0
  186. package/dist/services/local/pruneClosed.js.map +1 -0
  187. package/dist/services/local/updateObject.d.ts +10 -0
  188. package/dist/services/local/updateObject.d.ts.map +1 -0
  189. package/dist/services/local/updateObject.js +80 -0
  190. package/dist/services/local/updateObject.js.map +1 -0
  191. package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts +2 -0
  192. package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts.map +1 -0
  193. package/dist/tools/__tests__/appendModifiedFilesTool.test.js +178 -0
  194. package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -0
  195. package/dist/tools/__tests__/appendObjectLogTool.test.js +34 -101
  196. package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
  197. package/dist/tools/__tests__/claimTaskTool.test.js +98 -311
  198. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
  199. package/dist/tools/__tests__/completeTaskTool.test.js +140 -183
  200. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  201. package/dist/tools/__tests__/createObjectTool.test.js +62 -325
  202. package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
  203. package/dist/tools/__tests__/deleteObjectTool.test.js +1 -0
  204. package/dist/tools/__tests__/deleteObjectTool.test.js.map +1 -1
  205. package/dist/tools/__tests__/getObjectTool.test.js +1 -0
  206. package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
  207. package/dist/tools/__tests__/listObjectsTool.test.js +228 -108
  208. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
  209. package/dist/tools/__tests__/updateObjectTool.test.js +78 -167
  210. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
  211. package/dist/tools/appendModifiedFilesTool.d.ts +30 -0
  212. package/dist/tools/appendModifiedFilesTool.d.ts.map +1 -0
  213. package/dist/tools/appendModifiedFilesTool.js +55 -0
  214. package/dist/tools/appendModifiedFilesTool.js.map +1 -0
  215. package/dist/tools/appendObjectLogTool.d.ts +7 -6
  216. package/dist/tools/appendObjectLogTool.d.ts.map +1 -1
  217. package/dist/tools/appendObjectLogTool.js +6 -44
  218. package/dist/tools/appendObjectLogTool.js.map +1 -1
  219. package/dist/tools/claimTaskTool.d.ts +4 -3
  220. package/dist/tools/claimTaskTool.d.ts.map +1 -1
  221. package/dist/tools/claimTaskTool.js +2 -80
  222. package/dist/tools/claimTaskTool.js.map +1 -1
  223. package/dist/tools/completeTaskTool.d.ts +5 -3
  224. package/dist/tools/completeTaskTool.d.ts.map +1 -1
  225. package/dist/tools/completeTaskTool.js +3 -29
  226. package/dist/tools/completeTaskTool.js.map +1 -1
  227. package/dist/tools/createObjectTool.d.ts +13 -12
  228. package/dist/tools/createObjectTool.d.ts.map +1 -1
  229. package/dist/tools/createObjectTool.js +22 -55
  230. package/dist/tools/createObjectTool.js.map +1 -1
  231. package/dist/tools/deleteObjectTool.d.ts +3 -3
  232. package/dist/tools/deleteObjectTool.js +12 -12
  233. package/dist/tools/deleteObjectTool.js.map +1 -1
  234. package/dist/tools/getObjectTool.d.ts +3 -3
  235. package/dist/tools/getObjectTool.d.ts.map +1 -1
  236. package/dist/tools/getObjectTool.js +12 -7
  237. package/dist/tools/getObjectTool.js.map +1 -1
  238. package/dist/tools/index.d.ts +7 -8
  239. package/dist/tools/index.d.ts.map +1 -1
  240. package/dist/tools/index.js +22 -25
  241. package/dist/tools/index.js.map +1 -1
  242. package/dist/tools/listObjectsTool.d.ts +24 -14
  243. package/dist/tools/listObjectsTool.d.ts.map +1 -1
  244. package/dist/tools/listObjectsTool.js +114 -50
  245. package/dist/tools/listObjectsTool.js.map +1 -1
  246. package/dist/tools/updateObjectTool.d.ts +15 -9
  247. package/dist/tools/updateObjectTool.d.ts.map +1 -1
  248. package/dist/tools/updateObjectTool.js +20 -60
  249. package/dist/tools/updateObjectTool.js.map +1 -1
  250. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.d.ts +2 -0
  251. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.d.ts.map +1 -0
  252. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js +206 -0
  253. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js.map +1 -0
  254. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +5 -0
  255. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
  256. package/dist/utils/__tests__/filterUnavailableObjects.test.js +51 -25
  257. package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
  258. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +5 -0
  259. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
  260. package/dist/utils/__tests__/updateParentHierarchy.test.d.ts +2 -0
  261. package/dist/utils/__tests__/updateParentHierarchy.test.d.ts.map +1 -0
  262. package/dist/utils/__tests__/updateParentHierarchy.test.js +137 -0
  263. package/dist/utils/__tests__/updateParentHierarchy.test.js.map +1 -0
  264. package/dist/utils/autoCompleteParentHierarchy.d.ts +11 -0
  265. package/dist/utils/autoCompleteParentHierarchy.d.ts.map +1 -0
  266. package/dist/utils/autoCompleteParentHierarchy.js +49 -0
  267. package/dist/utils/autoCompleteParentHierarchy.js.map +1 -0
  268. package/dist/utils/checkHierarchicalPrerequisitesComplete.d.ts +14 -0
  269. package/dist/utils/checkHierarchicalPrerequisitesComplete.d.ts.map +1 -0
  270. package/dist/utils/checkHierarchicalPrerequisitesComplete.js +47 -0
  271. package/dist/utils/checkHierarchicalPrerequisitesComplete.js.map +1 -0
  272. package/dist/utils/filterUnavailableObjects.d.ts +6 -4
  273. package/dist/utils/filterUnavailableObjects.d.ts.map +1 -1
  274. package/dist/utils/filterUnavailableObjects.js +16 -22
  275. package/dist/utils/filterUnavailableObjects.js.map +1 -1
  276. package/dist/utils/index.d.ts +3 -2
  277. package/dist/utils/index.d.ts.map +1 -1
  278. package/dist/utils/index.js +7 -3
  279. package/dist/utils/index.js.map +1 -1
  280. package/dist/utils/updateParentHierarchy.d.ts +11 -0
  281. package/dist/utils/updateParentHierarchy.d.ts.map +1 -0
  282. package/dist/utils/updateParentHierarchy.js +40 -0
  283. package/dist/utils/updateParentHierarchy.js.map +1 -0
  284. package/dist/validation/__tests__/validateObjectCreation.test.js +1 -0
  285. package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
  286. package/dist/validation/__tests__/validateParentExists.test.js +1 -0
  287. package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
  288. package/dist/validation/__tests__/validateParentType.test.js +5 -5
  289. package/dist/validation/__tests__/validateParentType.test.js.map +1 -1
  290. package/dist/validation/__tests__/validateStatusTransition.test.js +1 -0
  291. package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -1
  292. package/dist/validation/validateParentType.d.ts +1 -1
  293. package/dist/validation/validateParentType.d.ts.map +1 -1
  294. package/dist/validation/validateParentType.js +2 -5
  295. package/dist/validation/validateParentType.js.map +1 -1
  296. package/package.json +1 -1
  297. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts +0 -2
  298. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts.map +0 -1
  299. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js +0 -693
  300. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js.map +0 -1
  301. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts +0 -2
  302. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts.map +0 -1
  303. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js +0 -352
  304. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js.map +0 -1
  305. package/dist/tools/__tests__/pruneClosedTool.test.d.ts +0 -2
  306. package/dist/tools/__tests__/pruneClosedTool.test.d.ts.map +0 -1
  307. package/dist/tools/__tests__/pruneClosedTool.test.js +0 -171
  308. package/dist/tools/__tests__/pruneClosedTool.test.js.map +0 -1
  309. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts +0 -2
  310. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts.map +0 -1
  311. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +0 -258
  312. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +0 -1
  313. package/dist/tools/pruneClosedTool.d.ts +0 -26
  314. package/dist/tools/pruneClosedTool.d.ts.map +0 -1
  315. package/dist/tools/pruneClosedTool.js +0 -106
  316. package/dist/tools/pruneClosedTool.js.map +0 -1
  317. package/dist/tools/replaceObjectBodyRegexTool.d.ts +0 -35
  318. package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +0 -1
  319. package/dist/tools/replaceObjectBodyRegexTool.js +0 -145
  320. package/dist/tools/replaceObjectBodyRegexTool.js.map +0 -1
  321. package/dist/utils/ReplaceStringOptions.d.ts +0 -12
  322. package/dist/utils/ReplaceStringOptions.d.ts.map +0 -1
  323. package/dist/utils/ReplaceStringOptions.js.map +0 -1
  324. package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts +0 -2
  325. package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts.map +0 -1
  326. package/dist/utils/__tests__/replaceStringWithRegex.test.js +0 -281
  327. package/dist/utils/__tests__/replaceStringWithRegex.test.js.map +0 -1
  328. package/dist/utils/replaceStringWithRegex.d.ts +0 -45
  329. package/dist/utils/replaceStringWithRegex.d.ts.map +0 -1
  330. package/dist/utils/replaceStringWithRegex.js +0 -91
  331. package/dist/utils/replaceStringWithRegex.js.map +0 -1
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const models_1 = require("../../../models");
4
+ const pruneClosed_1 = require("../pruneClosed");
5
+ describe("pruneClosed", () => {
6
+ let mockRepository;
7
+ const mockDate = new Date("2025-01-15T12:00:00Z");
8
+ beforeEach(() => {
9
+ mockRepository = {
10
+ getObjectById: jest.fn(),
11
+ getObjects: jest.fn(),
12
+ saveObject: jest.fn(),
13
+ deleteObject: jest.fn(),
14
+ getChildrenOf: jest.fn(),
15
+ };
16
+ jest.clearAllMocks();
17
+ jest.useFakeTimers();
18
+ jest.setSystemTime(mockDate);
19
+ });
20
+ afterEach(() => {
21
+ jest.useRealTimers();
22
+ });
23
+ const createMockObject = (id, status, daysAgo) => {
24
+ const updatedTime = new Date(mockDate.getTime() - daysAgo * 24 * 60 * 60 * 1000);
25
+ return {
26
+ id,
27
+ type: models_1.TrellisObjectType.TASK,
28
+ title: `Test ${id}`,
29
+ status,
30
+ priority: models_1.TrellisObjectPriority.MEDIUM,
31
+ prerequisites: [],
32
+ affectedFiles: new Map(),
33
+ log: [],
34
+ schema: "v1.0",
35
+ childrenIds: [],
36
+ body: "",
37
+ created: updatedTime.toISOString(),
38
+ updated: updatedTime.toISOString(),
39
+ };
40
+ };
41
+ describe("day-based age calculation", () => {
42
+ it("should delete objects older than 1 day", async () => {
43
+ const objects = [
44
+ createMockObject("T-old", models_1.TrellisObjectStatus.DONE, 2), // 2 days old
45
+ createMockObject("T-recent", models_1.TrellisObjectStatus.DONE, 0), // Today
46
+ ];
47
+ mockRepository.getObjects.mockResolvedValue(objects);
48
+ mockRepository.getChildrenOf.mockResolvedValue([]);
49
+ mockRepository.deleteObject.mockResolvedValue();
50
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
51
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(1);
52
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-old", true);
53
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 1 days");
54
+ expect(result.content[0].text).toContain("Deleted objects: T-old");
55
+ });
56
+ it("should delete objects older than 7 days", async () => {
57
+ const objects = [
58
+ createMockObject("T-very-old", models_1.TrellisObjectStatus.DONE, 10), // 10 days old
59
+ createMockObject("T-old", models_1.TrellisObjectStatus.DONE, 5), // 5 days old
60
+ createMockObject("T-recent", models_1.TrellisObjectStatus.DONE, 1), // 1 day old
61
+ ];
62
+ mockRepository.getObjects.mockResolvedValue(objects);
63
+ mockRepository.getChildrenOf.mockResolvedValue([]);
64
+ mockRepository.deleteObject.mockResolvedValue();
65
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 7);
66
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(1);
67
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-very-old", true);
68
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 7 days");
69
+ });
70
+ it("should delete objects older than 30 days", async () => {
71
+ const objects = [
72
+ createMockObject("T-ancient", models_1.TrellisObjectStatus.DONE, 45), // 45 days old
73
+ createMockObject("T-old", models_1.TrellisObjectStatus.DONE, 20), // 20 days old
74
+ ];
75
+ mockRepository.getObjects.mockResolvedValue(objects);
76
+ mockRepository.getChildrenOf.mockResolvedValue([]);
77
+ mockRepository.deleteObject.mockResolvedValue();
78
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 30);
79
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(1);
80
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-ancient", true);
81
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 30 days");
82
+ });
83
+ });
84
+ describe("objects with no children", () => {
85
+ it("should delete closed objects with no children (existing behavior)", async () => {
86
+ const objects = [
87
+ createMockObject("T-done", models_1.TrellisObjectStatus.DONE, 5),
88
+ createMockObject("T-wont-do", models_1.TrellisObjectStatus.WONT_DO, 3),
89
+ ];
90
+ mockRepository.getObjects.mockResolvedValue(objects);
91
+ mockRepository.getChildrenOf.mockResolvedValue([]);
92
+ mockRepository.deleteObject.mockResolvedValue();
93
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
94
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(2);
95
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-done", true);
96
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-wont-do", true);
97
+ expect(result.content[0].text).toContain("Pruned 2 closed objects older than 1 days");
98
+ expect(result.content[0].text).toContain("Deleted objects: T-done, T-wont-do");
99
+ });
100
+ it("should not delete open objects", async () => {
101
+ const objects = [
102
+ createMockObject("T-open", models_1.TrellisObjectStatus.OPEN, 5),
103
+ createMockObject("T-in-progress", models_1.TrellisObjectStatus.IN_PROGRESS, 5),
104
+ createMockObject("T-done", models_1.TrellisObjectStatus.DONE, 5),
105
+ ];
106
+ mockRepository.getObjects.mockResolvedValue(objects);
107
+ mockRepository.getChildrenOf.mockResolvedValue([]);
108
+ mockRepository.deleteObject.mockResolvedValue();
109
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
110
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(1);
111
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-done", true);
112
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 1 days");
113
+ });
114
+ });
115
+ describe("hierarchical child validation", () => {
116
+ it("should skip closed parent with open children", async () => {
117
+ const parentObject = createMockObject("F-parent", models_1.TrellisObjectStatus.DONE, 5);
118
+ const openChild = createMockObject("T-open-child", models_1.TrellisObjectStatus.OPEN, 1);
119
+ mockRepository.getObjects.mockResolvedValue([parentObject]);
120
+ mockRepository.getChildrenOf.mockResolvedValue([openChild]);
121
+ mockRepository.deleteObject.mockResolvedValue();
122
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
123
+ expect(mockRepository.getChildrenOf).toHaveBeenCalledWith("F-parent", true);
124
+ expect(mockRepository.deleteObject).not.toHaveBeenCalled();
125
+ expect(result.content[0].text).toContain("Pruned 0 closed objects older than 1 days");
126
+ expect(result.content[0].text).toContain("Skipped 1 objects with open children: F-parent");
127
+ });
128
+ it("should delete closed parent with only closed children", async () => {
129
+ const parentObject = createMockObject("F-parent", models_1.TrellisObjectStatus.DONE, 5);
130
+ const closedChild1 = createMockObject("T-done-child", models_1.TrellisObjectStatus.DONE, 3);
131
+ const closedChild2 = createMockObject("T-wont-do-child", models_1.TrellisObjectStatus.WONT_DO, 2);
132
+ mockRepository.getObjects.mockResolvedValue([parentObject]);
133
+ mockRepository.getChildrenOf.mockResolvedValue([
134
+ closedChild1,
135
+ closedChild2,
136
+ ]);
137
+ mockRepository.deleteObject.mockResolvedValue();
138
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
139
+ expect(mockRepository.getChildrenOf).toHaveBeenCalledWith("F-parent", true);
140
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(1);
141
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-parent", true);
142
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 1 days");
143
+ expect(result.content[0].text).toContain("Deleted objects: F-parent");
144
+ });
145
+ it("should handle mixed scenarios with some parents having open children and others not", async () => {
146
+ const parentWithOpenChild = createMockObject("F-parent-1", models_1.TrellisObjectStatus.DONE, 5);
147
+ const parentWithClosedChildren = createMockObject("F-parent-2", models_1.TrellisObjectStatus.DONE, 5);
148
+ const parentWithNoChildren = createMockObject("T-orphan", models_1.TrellisObjectStatus.DONE, 5);
149
+ const openChild = createMockObject("T-open", models_1.TrellisObjectStatus.OPEN, 1);
150
+ const closedChild = createMockObject("T-closed", models_1.TrellisObjectStatus.DONE, 1);
151
+ mockRepository.getObjects.mockResolvedValue([
152
+ parentWithOpenChild,
153
+ parentWithClosedChildren,
154
+ parentWithNoChildren,
155
+ ]);
156
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
157
+ if (parentId === "F-parent-1")
158
+ return Promise.resolve([openChild]);
159
+ if (parentId === "F-parent-2")
160
+ return Promise.resolve([closedChild]);
161
+ return Promise.resolve([]); // No children for T-orphan
162
+ });
163
+ mockRepository.deleteObject.mockResolvedValue();
164
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
165
+ // With recursive checking, we call getChildrenOf for each object and their descendants
166
+ expect(mockRepository.getChildrenOf).toHaveBeenCalledTimes(4);
167
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(2);
168
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-parent-2", true);
169
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-orphan", true);
170
+ expect(result.content[0].text).toContain("Pruned 2 closed objects older than 1 days");
171
+ expect(result.content[0].text).toContain("Deleted objects: F-parent-2, T-orphan");
172
+ expect(result.content[0].text).toContain("Skipped 1 objects with open children: F-parent-1");
173
+ });
174
+ });
175
+ describe("multi-level hierarchies", () => {
176
+ it("should handle grandparent → parent → child hierarchy correctly", async () => {
177
+ const grandparent = createMockObject("E-grandparent", models_1.TrellisObjectStatus.DONE, 5);
178
+ const parent = createMockObject("F-parent", models_1.TrellisObjectStatus.DONE, 4);
179
+ const openChild = createMockObject("T-open-child", models_1.TrellisObjectStatus.OPEN, 1);
180
+ mockRepository.getObjects.mockResolvedValue([grandparent, parent]);
181
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
182
+ if (parentId === "E-grandparent")
183
+ return Promise.resolve([parent]); // Parent is closed
184
+ if (parentId === "F-parent")
185
+ return Promise.resolve([openChild]); // Child is open
186
+ return Promise.resolve([]);
187
+ });
188
+ mockRepository.deleteObject.mockResolvedValue();
189
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
190
+ // Both grandparent and parent should be skipped because they have open descendants
191
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(0);
192
+ expect(result.content[0].text).toContain("Pruned 0 closed objects older than 1 days");
193
+ expect(result.content[0].text).toContain("Skipped 2 objects with open children: E-grandparent, F-parent");
194
+ });
195
+ });
196
+ describe("deep hierarchy recursive descendant checking", () => {
197
+ it("should protect ancestors when deep descendant is open (4+ levels)", async () => {
198
+ const project = createMockObject("P-project", models_1.TrellisObjectStatus.DONE, 10);
199
+ const epic = createMockObject("E-epic", models_1.TrellisObjectStatus.DONE, 8);
200
+ const feature = createMockObject("F-feature", models_1.TrellisObjectStatus.DONE, 6);
201
+ const task = createMockObject("T-task", models_1.TrellisObjectStatus.DONE, 4);
202
+ const subtask = createMockObject("ST-subtask", models_1.TrellisObjectStatus.OPEN, 2);
203
+ mockRepository.getObjects.mockResolvedValue([
204
+ project,
205
+ epic,
206
+ feature,
207
+ task,
208
+ ]);
209
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
210
+ if (parentId === "P-project")
211
+ return Promise.resolve([epic]);
212
+ if (parentId === "E-epic")
213
+ return Promise.resolve([feature]);
214
+ if (parentId === "F-feature")
215
+ return Promise.resolve([task]);
216
+ if (parentId === "T-task")
217
+ return Promise.resolve([subtask]);
218
+ return Promise.resolve([]);
219
+ });
220
+ mockRepository.deleteObject.mockResolvedValue();
221
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
222
+ // All ancestors should be protected due to the open subtask at the deepest level
223
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(0);
224
+ expect(result.content[0].text).toContain("Pruned 0 closed objects older than 1 days");
225
+ expect(result.content[0].text).toContain("Skipped 4 objects with open children: P-project, E-epic, F-feature, T-task");
226
+ });
227
+ it("should allow deletion when all deep descendants are closed", async () => {
228
+ const project = createMockObject("P-project", models_1.TrellisObjectStatus.DONE, 10);
229
+ const epic = createMockObject("E-epic", models_1.TrellisObjectStatus.DONE, 8);
230
+ const feature = createMockObject("F-feature", models_1.TrellisObjectStatus.DONE, 6);
231
+ const task1 = createMockObject("T-task1", models_1.TrellisObjectStatus.DONE, 4);
232
+ const task2 = createMockObject("T-task2", models_1.TrellisObjectStatus.WONT_DO, 3);
233
+ const subtask1 = createMockObject("ST-subtask1", models_1.TrellisObjectStatus.DONE, 2);
234
+ const subtask2 = createMockObject("ST-subtask2", models_1.TrellisObjectStatus.WONT_DO, 1);
235
+ mockRepository.getObjects.mockResolvedValue([
236
+ project,
237
+ epic,
238
+ feature,
239
+ task1,
240
+ task2,
241
+ ]);
242
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
243
+ if (parentId === "P-project")
244
+ return Promise.resolve([epic]);
245
+ if (parentId === "E-epic")
246
+ return Promise.resolve([feature]);
247
+ if (parentId === "F-feature")
248
+ return Promise.resolve([task1, task2]);
249
+ if (parentId === "T-task1")
250
+ return Promise.resolve([subtask1]);
251
+ if (parentId === "T-task2")
252
+ return Promise.resolve([subtask2]);
253
+ return Promise.resolve([]);
254
+ });
255
+ mockRepository.deleteObject.mockResolvedValue();
256
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
257
+ // All objects should be deleted since all descendants are closed
258
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(5);
259
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("P-project", true);
260
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("E-epic", true);
261
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-feature", true);
262
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-task1", true);
263
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-task2", true);
264
+ expect(result.content[0].text).toContain("Pruned 5 closed objects older than 1 days");
265
+ });
266
+ it("should handle mixed branches - some with open descendants, some without", async () => {
267
+ const epic = createMockObject("E-epic", models_1.TrellisObjectStatus.DONE, 8);
268
+ const feature1 = createMockObject("F-feature1", models_1.TrellisObjectStatus.DONE, 6);
269
+ const feature2 = createMockObject("F-feature2", models_1.TrellisObjectStatus.DONE, 6);
270
+ const task1 = createMockObject("T-task1", models_1.TrellisObjectStatus.OPEN, 4); // Open task
271
+ const task2 = createMockObject("T-task2", models_1.TrellisObjectStatus.DONE, 4); // Closed task
272
+ const subtask = createMockObject("ST-subtask", models_1.TrellisObjectStatus.DONE, 2);
273
+ mockRepository.getObjects.mockResolvedValue([
274
+ epic,
275
+ feature1,
276
+ feature2,
277
+ task2,
278
+ ]);
279
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
280
+ if (parentId === "E-epic")
281
+ return Promise.resolve([feature1, feature2]);
282
+ if (parentId === "F-feature1")
283
+ return Promise.resolve([task1]); // Branch with open task
284
+ if (parentId === "F-feature2")
285
+ return Promise.resolve([task2]); // Branch with closed task
286
+ if (parentId === "T-task2")
287
+ return Promise.resolve([subtask]);
288
+ return Promise.resolve([]);
289
+ });
290
+ mockRepository.deleteObject.mockResolvedValue();
291
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
292
+ // Epic and feature1 should be protected due to open task1
293
+ // Feature2 and task2 should be deleted (all descendants closed)
294
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(2);
295
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-feature2", true);
296
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("T-task2", true);
297
+ expect(result.content[0].text).toContain("Pruned 2 closed objects older than 1 days");
298
+ expect(result.content[0].text).toContain("Skipped 2 objects with open children: E-epic, F-feature1");
299
+ });
300
+ it("should handle circular reference protection gracefully", async () => {
301
+ const obj1 = createMockObject("T-obj1", models_1.TrellisObjectStatus.DONE, 5);
302
+ const obj2 = createMockObject("T-obj2", models_1.TrellisObjectStatus.DONE, 5);
303
+ mockRepository.getObjects.mockResolvedValue([obj1, obj2]);
304
+ // Create circular reference: obj1 -> obj2 -> obj1
305
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
306
+ if (parentId === "T-obj1")
307
+ return Promise.resolve([obj2]);
308
+ if (parentId === "T-obj2")
309
+ return Promise.resolve([obj1]);
310
+ return Promise.resolve([]);
311
+ });
312
+ mockRepository.deleteObject.mockResolvedValue();
313
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
314
+ // Should complete without infinite loop and delete both objects
315
+ // (since they're all closed, the circular reference shouldn't prevent deletion)
316
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(2);
317
+ expect(result.content[0].text).toContain("Pruned 2 closed objects older than 1 days");
318
+ });
319
+ it("should handle empty hierarchy levels gracefully", async () => {
320
+ const parent = createMockObject("F-parent", models_1.TrellisObjectStatus.DONE, 5);
321
+ const middleChild = createMockObject("T-middle", models_1.TrellisObjectStatus.DONE, 4);
322
+ const leafChild = createMockObject("ST-leaf", models_1.TrellisObjectStatus.OPEN, 2);
323
+ mockRepository.getObjects.mockResolvedValue([parent, middleChild]);
324
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
325
+ if (parentId === "F-parent")
326
+ return Promise.resolve([middleChild]);
327
+ if (parentId === "T-middle")
328
+ return Promise.resolve([leafChild]);
329
+ return Promise.resolve([]);
330
+ });
331
+ mockRepository.deleteObject.mockResolvedValue();
332
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
333
+ // Both parent and middle should be protected due to open leaf
334
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(0);
335
+ expect(result.content[0].text).toContain("Skipped 2 objects with open children: F-parent, T-middle");
336
+ });
337
+ it("should handle child query errors gracefully in recursive checking", async () => {
338
+ const parent = createMockObject("F-parent", models_1.TrellisObjectStatus.DONE, 5);
339
+ const failingChild = createMockObject("T-failing", models_1.TrellisObjectStatus.DONE, 4);
340
+ mockRepository.getObjects.mockResolvedValue([parent]);
341
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
342
+ if (parentId === "F-parent")
343
+ return Promise.resolve([failingChild]);
344
+ if (parentId === "T-failing")
345
+ return Promise.reject(new Error("Query failed"));
346
+ return Promise.resolve([]);
347
+ });
348
+ mockRepository.deleteObject.mockResolvedValue();
349
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
350
+ const _result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
351
+ // Should handle error gracefully and proceed with deletion
352
+ // (when we can't check descendants, we err on the side of deletion)
353
+ expect(consoleSpy).toHaveBeenCalledWith("Error checking descendants for T-failing:", expect.any(Error));
354
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(1);
355
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-parent", true);
356
+ consoleSpy.mockRestore();
357
+ });
358
+ });
359
+ describe("error handling", () => {
360
+ it("should handle errors when child queries fail gracefully", async () => {
361
+ const objects = [
362
+ createMockObject("F-parent-1", models_1.TrellisObjectStatus.DONE, 5),
363
+ createMockObject("F-parent-2", models_1.TrellisObjectStatus.DONE, 5),
364
+ ];
365
+ mockRepository.getObjects.mockResolvedValue(objects);
366
+ mockRepository.getChildrenOf.mockImplementation((parentId) => {
367
+ if (parentId === "F-parent-1") {
368
+ return Promise.reject(new Error("Failed to query children"));
369
+ }
370
+ return Promise.resolve([]); // No children for parent-2
371
+ });
372
+ mockRepository.deleteObject.mockResolvedValue();
373
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
374
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
375
+ // Should continue processing other objects even if one child query fails
376
+ // With recursive checking, parent-1 gets deleted too (error in descendant check is handled gracefully)
377
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(2);
378
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-parent-1", true);
379
+ expect(mockRepository.deleteObject).toHaveBeenCalledWith("F-parent-2", true);
380
+ expect(consoleSpy).toHaveBeenCalledWith("Error checking descendants for F-parent-1:", expect.any(Error));
381
+ expect(result.content[0].text).toContain("Pruned 2 closed objects older than 1 days");
382
+ consoleSpy.mockRestore();
383
+ });
384
+ it("should handle repository deletion errors gracefully", async () => {
385
+ const objects = [
386
+ createMockObject("T-fail", models_1.TrellisObjectStatus.DONE, 5),
387
+ createMockObject("T-success", models_1.TrellisObjectStatus.DONE, 5),
388
+ ];
389
+ mockRepository.getObjects.mockResolvedValue(objects);
390
+ mockRepository.getChildrenOf.mockResolvedValue([]);
391
+ mockRepository.deleteObject.mockImplementation((id) => {
392
+ if (id === "T-fail") {
393
+ return Promise.reject(new Error("Deletion failed"));
394
+ }
395
+ return Promise.resolve();
396
+ });
397
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
398
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
399
+ expect(mockRepository.deleteObject).toHaveBeenCalledTimes(2);
400
+ expect(consoleSpy).toHaveBeenCalledWith("Failed to delete object T-fail:", expect.any(Error));
401
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 1 days");
402
+ expect(result.content[0].text).toContain("Deleted objects: T-success");
403
+ consoleSpy.mockRestore();
404
+ });
405
+ it("should handle repository getObjects error gracefully", async () => {
406
+ mockRepository.getObjects.mockRejectedValue(new Error("Failed to fetch objects"));
407
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
408
+ expect(result.content[0].text).toContain("Error pruning closed objects: Failed to fetch objects");
409
+ expect(mockRepository.deleteObject).not.toHaveBeenCalled();
410
+ });
411
+ });
412
+ describe("scope filtering", () => {
413
+ it("should include scope in message when provided", async () => {
414
+ const objects = [
415
+ createMockObject("T-scoped", models_1.TrellisObjectStatus.DONE, 5),
416
+ ];
417
+ mockRepository.getObjects.mockResolvedValue(objects);
418
+ mockRepository.getChildrenOf.mockResolvedValue([]);
419
+ mockRepository.deleteObject.mockResolvedValue();
420
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1, "P-test-project");
421
+ expect(mockRepository.getObjects).toHaveBeenCalledWith(true, "P-test-project");
422
+ expect(result.content[0].text).toContain("Pruned 1 closed objects older than 1 days in scope P-test-project");
423
+ });
424
+ it("should handle empty results with scope", async () => {
425
+ mockRepository.getObjects.mockResolvedValue([]);
426
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1, "P-empty-project");
427
+ expect(result.content[0].text).toContain("Pruned 0 closed objects older than 1 days in scope P-empty-project");
428
+ });
429
+ });
430
+ describe("edge cases", () => {
431
+ it("should handle objects with no updated timestamp gracefully", async () => {
432
+ const objectWithoutTimestamp = {
433
+ ...createMockObject("T-no-timestamp", models_1.TrellisObjectStatus.DONE, 0),
434
+ updated: "", // Invalid timestamp
435
+ };
436
+ mockRepository.getObjects.mockResolvedValue([objectWithoutTimestamp]);
437
+ mockRepository.getChildrenOf.mockResolvedValue([]);
438
+ mockRepository.deleteObject.mockResolvedValue();
439
+ const _result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
440
+ // Invalid date comparisons result in false, so object won't be considered old enough
441
+ expect(mockRepository.deleteObject).not.toHaveBeenCalled();
442
+ });
443
+ it("should return disabled message for zero age threshold", async () => {
444
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 0);
445
+ // Should return disabled message without calling any repository methods
446
+ expect(mockRepository.getObjects).not.toHaveBeenCalled();
447
+ expect(mockRepository.getChildrenOf).not.toHaveBeenCalled();
448
+ expect(mockRepository.deleteObject).not.toHaveBeenCalled();
449
+ expect(result.content[0].text).toBe("Auto-prune disabled (threshold: 0 days)");
450
+ });
451
+ it("should return disabled message for negative age threshold", async () => {
452
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, -1);
453
+ // Should return disabled message without calling any repository methods
454
+ expect(mockRepository.getObjects).not.toHaveBeenCalled();
455
+ expect(mockRepository.getChildrenOf).not.toHaveBeenCalled();
456
+ expect(mockRepository.deleteObject).not.toHaveBeenCalled();
457
+ expect(result.content[0].text).toBe("Auto-prune disabled (threshold: -1 days)");
458
+ });
459
+ it("should include scope in disabled message when provided", async () => {
460
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 0, "P-test-project");
461
+ expect(mockRepository.getObjects).not.toHaveBeenCalled();
462
+ expect(result.content[0].text).toBe("Auto-prune disabled (threshold: 0 days) in scope P-test-project");
463
+ });
464
+ it("should handle empty object list", async () => {
465
+ mockRepository.getObjects.mockResolvedValue([]);
466
+ const result = await (0, pruneClosed_1.pruneClosed)(mockRepository, 1);
467
+ expect(mockRepository.getChildrenOf).not.toHaveBeenCalled();
468
+ expect(mockRepository.deleteObject).not.toHaveBeenCalled();
469
+ expect(result.content[0].text).toContain("Pruned 0 closed objects older than 1 days");
470
+ });
471
+ });
472
+ });
473
+ //# sourceMappingURL=pruneClosed.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pruneClosed.test.js","sourceRoot":"","sources":["../../../../src/services/local/__tests__/pruneClosed.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=updateObject.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateObject.test.d.ts","sourceRoot":"","sources":["../../../../src/services/local/__tests__/updateObject.test.ts"],"names":[],"mappings":""}