@langadventurellc/task-trellis-mcp 1.1.0 → 1.2.1

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 (262) hide show
  1. package/README.md +37 -323
  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 +34 -34
  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 +561 -42
  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 +1 -1
  37. package/dist/__tests__/e2e/utils/extractObjectIds.js +1 -1
  38. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -1
  39. package/dist/__tests__/e2e/utils/mcpTestClient.js +3 -2
  40. package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
  41. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +1 -1
  42. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +1 -1
  43. package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.d.ts +1 -1
  44. package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.js +1 -1
  45. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +4 -4
  46. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -1
  47. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +15 -15
  48. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -1
  49. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +44 -0
  50. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
  51. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +4 -4
  52. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
  53. package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js +43 -43
  54. package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js.map +1 -1
  55. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +19 -19
  56. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
  57. package/dist/__tests__/serverStartup.test.d.ts +2 -0
  58. package/dist/__tests__/serverStartup.test.d.ts.map +1 -0
  59. package/dist/__tests__/serverStartup.test.js +171 -0
  60. package/dist/__tests__/serverStartup.test.js.map +1 -0
  61. package/dist/configuration/ServerConfig.d.ts +2 -1
  62. package/dist/configuration/ServerConfig.d.ts.map +1 -1
  63. package/dist/repositories/Repository.d.ts +2 -1
  64. package/dist/repositories/Repository.d.ts.map +1 -1
  65. package/dist/repositories/local/LocalRepository.d.ts +2 -1
  66. package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
  67. package/dist/repositories/local/LocalRepository.js +4 -0
  68. package/dist/repositories/local/LocalRepository.js.map +1 -1
  69. package/dist/repositories/local/__tests__/getChildrenOf.test.d.ts +2 -0
  70. package/dist/repositories/local/__tests__/getChildrenOf.test.d.ts.map +1 -0
  71. package/dist/repositories/local/__tests__/getChildrenOf.test.js +306 -0
  72. package/dist/repositories/local/__tests__/getChildrenOf.test.js.map +1 -0
  73. package/dist/repositories/local/__tests__/getObjects.test.js +309 -0
  74. package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -1
  75. package/dist/repositories/local/deleteObjectById.d.ts.map +1 -1
  76. package/dist/repositories/local/deleteObjectById.js +2 -0
  77. package/dist/repositories/local/deleteObjectById.js.map +1 -1
  78. package/dist/repositories/local/getChildrenOf.d.ts +11 -0
  79. package/dist/repositories/local/getChildrenOf.d.ts.map +1 -0
  80. package/dist/repositories/local/getChildrenOf.js +73 -0
  81. package/dist/repositories/local/getChildrenOf.js.map +1 -0
  82. package/dist/repositories/local/getObjects.d.ts +1 -1
  83. package/dist/repositories/local/getObjects.d.ts.map +1 -1
  84. package/dist/repositories/local/getObjects.js +25 -6
  85. package/dist/repositories/local/getObjects.js.map +1 -1
  86. package/dist/server.js +39 -15
  87. package/dist/server.js.map +1 -1
  88. package/dist/services/TaskTrellisService.d.ts +4 -13
  89. package/dist/services/TaskTrellisService.d.ts.map +1 -1
  90. package/dist/services/local/LocalTaskTrellisService.d.ts +3 -9
  91. package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -1
  92. package/dist/services/local/LocalTaskTrellisService.js +4 -8
  93. package/dist/services/local/LocalTaskTrellisService.js.map +1 -1
  94. package/dist/services/local/__tests__/appendModifiedFiles.test.js +1 -0
  95. package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -1
  96. package/dist/services/local/__tests__/appendObjectLog.test.js +1 -0
  97. package/dist/services/local/__tests__/appendObjectLog.test.js.map +1 -1
  98. package/dist/services/local/__tests__/claimTask.test.js +127 -131
  99. package/dist/services/local/__tests__/claimTask.test.js.map +1 -1
  100. package/dist/services/local/__tests__/completeTask.test.js +30 -28
  101. package/dist/services/local/__tests__/completeTask.test.js.map +1 -1
  102. package/dist/services/local/__tests__/createObject.test.js +1 -0
  103. package/dist/services/local/__tests__/createObject.test.js.map +1 -1
  104. package/dist/services/local/__tests__/listObjects.test.js +135 -10
  105. package/dist/services/local/__tests__/listObjects.test.js.map +1 -1
  106. package/dist/services/local/__tests__/pruneClosed.test.js +446 -186
  107. package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -1
  108. package/dist/services/local/__tests__/updateObject.test.js +234 -27
  109. package/dist/services/local/__tests__/updateObject.test.js.map +1 -1
  110. package/dist/services/local/claimTask.d.ts.map +1 -1
  111. package/dist/services/local/claimTask.js +25 -34
  112. package/dist/services/local/claimTask.js.map +1 -1
  113. package/dist/services/local/completeTask.d.ts +1 -1
  114. package/dist/services/local/completeTask.d.ts.map +1 -1
  115. package/dist/services/local/completeTask.js +4 -40
  116. package/dist/services/local/completeTask.js.map +1 -1
  117. package/dist/services/local/listObjects.d.ts +1 -1
  118. package/dist/services/local/listObjects.d.ts.map +1 -1
  119. package/dist/services/local/listObjects.js +10 -1
  120. package/dist/services/local/listObjects.js.map +1 -1
  121. package/dist/services/local/pruneClosed.d.ts.map +1 -1
  122. package/dist/services/local/pruneClosed.js +63 -6
  123. package/dist/services/local/pruneClosed.js.map +1 -1
  124. package/dist/services/local/updateObject.d.ts +2 -1
  125. package/dist/services/local/updateObject.d.ts.map +1 -1
  126. package/dist/services/local/updateObject.js +28 -1
  127. package/dist/services/local/updateObject.js.map +1 -1
  128. package/dist/tools/__tests__/appendModifiedFilesTool.test.js +1 -0
  129. package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -1
  130. package/dist/tools/__tests__/appendObjectLogTool.test.js +1 -0
  131. package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
  132. package/dist/tools/__tests__/claimTaskTool.test.js +1 -1
  133. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
  134. package/dist/tools/__tests__/completeTaskTool.test.js +23 -16
  135. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  136. package/dist/tools/__tests__/createObjectTool.test.js +1 -0
  137. package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
  138. package/dist/tools/__tests__/deleteObjectTool.test.js +1 -0
  139. package/dist/tools/__tests__/deleteObjectTool.test.js.map +1 -1
  140. package/dist/tools/__tests__/getObjectTool.test.js +1 -0
  141. package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
  142. package/dist/tools/__tests__/listObjectsTool.test.js +160 -1
  143. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
  144. package/dist/tools/__tests__/updateObjectTool.test.js +39 -10
  145. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
  146. package/dist/tools/appendModifiedFilesTool.d.ts +2 -2
  147. package/dist/tools/appendModifiedFilesTool.js +4 -4
  148. package/dist/tools/appendModifiedFilesTool.js.map +1 -1
  149. package/dist/tools/appendObjectLogTool.d.ts +3 -3
  150. package/dist/tools/appendObjectLogTool.js +4 -4
  151. package/dist/tools/appendObjectLogTool.js.map +1 -1
  152. package/dist/tools/completeTaskTool.d.ts +1 -1
  153. package/dist/tools/completeTaskTool.d.ts.map +1 -1
  154. package/dist/tools/completeTaskTool.js +1 -1
  155. package/dist/tools/completeTaskTool.js.map +1 -1
  156. package/dist/tools/createObjectTool.d.ts +8 -8
  157. package/dist/tools/createObjectTool.js +13 -13
  158. package/dist/tools/createObjectTool.js.map +1 -1
  159. package/dist/tools/deleteObjectTool.d.ts +3 -3
  160. package/dist/tools/deleteObjectTool.js +12 -12
  161. package/dist/tools/deleteObjectTool.js.map +1 -1
  162. package/dist/tools/getObjectTool.d.ts +3 -3
  163. package/dist/tools/getObjectTool.d.ts.map +1 -1
  164. package/dist/tools/getObjectTool.js +12 -7
  165. package/dist/tools/getObjectTool.js.map +1 -1
  166. package/dist/tools/index.d.ts +7 -9
  167. package/dist/tools/index.d.ts.map +1 -1
  168. package/dist/tools/index.js +22 -28
  169. package/dist/tools/index.js.map +1 -1
  170. package/dist/tools/listObjectsTool.d.ts +20 -11
  171. package/dist/tools/listObjectsTool.d.ts.map +1 -1
  172. package/dist/tools/listObjectsTool.js +112 -40
  173. package/dist/tools/listObjectsTool.js.map +1 -1
  174. package/dist/tools/updateObjectTool.d.ts +12 -7
  175. package/dist/tools/updateObjectTool.d.ts.map +1 -1
  176. package/dist/tools/updateObjectTool.js +20 -14
  177. package/dist/tools/updateObjectTool.js.map +1 -1
  178. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.d.ts +2 -0
  179. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.d.ts.map +1 -0
  180. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js +206 -0
  181. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js.map +1 -0
  182. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +5 -0
  183. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
  184. package/dist/utils/__tests__/filterUnavailableObjects.test.js +51 -25
  185. package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
  186. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +5 -0
  187. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
  188. package/dist/utils/__tests__/updateParentHierarchy.test.d.ts +2 -0
  189. package/dist/utils/__tests__/updateParentHierarchy.test.d.ts.map +1 -0
  190. package/dist/utils/__tests__/updateParentHierarchy.test.js +137 -0
  191. package/dist/utils/__tests__/updateParentHierarchy.test.js.map +1 -0
  192. package/dist/utils/autoCompleteParentHierarchy.d.ts +11 -0
  193. package/dist/utils/autoCompleteParentHierarchy.d.ts.map +1 -0
  194. package/dist/utils/autoCompleteParentHierarchy.js +49 -0
  195. package/dist/utils/autoCompleteParentHierarchy.js.map +1 -0
  196. package/dist/utils/checkHierarchicalPrerequisitesComplete.d.ts +14 -0
  197. package/dist/utils/checkHierarchicalPrerequisitesComplete.d.ts.map +1 -0
  198. package/dist/utils/checkHierarchicalPrerequisitesComplete.js +47 -0
  199. package/dist/utils/checkHierarchicalPrerequisitesComplete.js.map +1 -0
  200. package/dist/utils/filterUnavailableObjects.d.ts +6 -4
  201. package/dist/utils/filterUnavailableObjects.d.ts.map +1 -1
  202. package/dist/utils/filterUnavailableObjects.js +16 -22
  203. package/dist/utils/filterUnavailableObjects.js.map +1 -1
  204. package/dist/utils/index.d.ts +3 -2
  205. package/dist/utils/index.d.ts.map +1 -1
  206. package/dist/utils/index.js +7 -3
  207. package/dist/utils/index.js.map +1 -1
  208. package/dist/utils/updateParentHierarchy.d.ts +11 -0
  209. package/dist/utils/updateParentHierarchy.d.ts.map +1 -0
  210. package/dist/utils/updateParentHierarchy.js +40 -0
  211. package/dist/utils/updateParentHierarchy.js.map +1 -0
  212. package/dist/validation/__tests__/validateObjectCreation.test.js +1 -0
  213. package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
  214. package/dist/validation/__tests__/validateParentExists.test.js +1 -0
  215. package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
  216. package/dist/validation/__tests__/validateStatusTransition.test.js +1 -0
  217. package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -1
  218. package/package.json +1 -1
  219. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts +0 -2
  220. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts.map +0 -1
  221. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js +0 -693
  222. package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js.map +0 -1
  223. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts +0 -2
  224. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts.map +0 -1
  225. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js +0 -352
  226. package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js.map +0 -1
  227. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts +0 -2
  228. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts.map +0 -1
  229. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js +0 -283
  230. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js.map +0 -1
  231. package/dist/services/local/replaceObjectBodyRegex.d.ts +0 -8
  232. package/dist/services/local/replaceObjectBodyRegex.d.ts.map +0 -1
  233. package/dist/services/local/replaceObjectBodyRegex.js +0 -85
  234. package/dist/services/local/replaceObjectBodyRegex.js.map +0 -1
  235. package/dist/tools/__tests__/pruneClosedTool.test.d.ts +0 -2
  236. package/dist/tools/__tests__/pruneClosedTool.test.d.ts.map +0 -1
  237. package/dist/tools/__tests__/pruneClosedTool.test.js +0 -112
  238. package/dist/tools/__tests__/pruneClosedTool.test.js.map +0 -1
  239. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts +0 -2
  240. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts.map +0 -1
  241. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +0 -89
  242. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +0 -1
  243. package/dist/tools/pruneClosedTool.d.ts +0 -27
  244. package/dist/tools/pruneClosedTool.d.ts.map +0 -1
  245. package/dist/tools/pruneClosedTool.js +0 -57
  246. package/dist/tools/pruneClosedTool.js.map +0 -1
  247. package/dist/tools/replaceObjectBodyRegexTool.d.ts +0 -36
  248. package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +0 -1
  249. package/dist/tools/replaceObjectBodyRegexTool.js +0 -67
  250. package/dist/tools/replaceObjectBodyRegexTool.js.map +0 -1
  251. package/dist/utils/ReplaceStringOptions.d.ts +0 -12
  252. package/dist/utils/ReplaceStringOptions.d.ts.map +0 -1
  253. package/dist/utils/ReplaceStringOptions.js +0 -3
  254. package/dist/utils/ReplaceStringOptions.js.map +0 -1
  255. package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts +0 -2
  256. package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts.map +0 -1
  257. package/dist/utils/__tests__/replaceStringWithRegex.test.js +0 -281
  258. package/dist/utils/__tests__/replaceStringWithRegex.test.js.map +0 -1
  259. package/dist/utils/replaceStringWithRegex.d.ts +0 -45
  260. package/dist/utils/replaceStringWithRegex.d.ts.map +0 -1
  261. package/dist/utils/replaceStringWithRegex.js +0 -91
  262. package/dist/utils/replaceStringWithRegex.js.map +0 -1
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
4
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
5
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
6
+ const utils_1 = require("./utils");
7
+ describe("E2E Auto-Prune Feature", () => {
8
+ let testEnv;
9
+ let client = null;
10
+ let transport = null;
11
+ beforeEach(() => {
12
+ testEnv = new utils_1.TestEnvironment();
13
+ testEnv.setup();
14
+ });
15
+ afterEach(async () => {
16
+ if (client) {
17
+ await client.close();
18
+ client = null;
19
+ }
20
+ if (transport) {
21
+ await transport.close();
22
+ transport = null;
23
+ }
24
+ testEnv?.cleanup();
25
+ });
26
+ async function startServerWithArgs(args) {
27
+ transport = new stdio_js_1.StdioClientTransport({
28
+ command: "node",
29
+ args: ["dist/server.js", ...args],
30
+ });
31
+ client = new index_js_1.Client({ name: "test-client", version: "1.0.0" }, { capabilities: {} });
32
+ await client.connect(transport);
33
+ }
34
+ async function callTool(name, args = {}) {
35
+ if (!client) {
36
+ throw new Error("Client not connected");
37
+ }
38
+ return client.request({
39
+ method: "tools/call",
40
+ params: { name, arguments: args },
41
+ }, types_js_1.CallToolResultSchema);
42
+ }
43
+ function createObjectWithAge(type, title, daysOld, status = "done", parent) {
44
+ const ageInMs = daysOld * 24 * 60 * 60 * 1000;
45
+ const pastDate = new Date(Date.now() - ageInMs);
46
+ // Generate a unique ID based on title
47
+ const prefix = type.charAt(0).toUpperCase();
48
+ const slug = title.toLowerCase().replace(/\s+/g, "-");
49
+ const objectId = `${prefix}-${slug}`;
50
+ // Create the markdown content with past timestamps
51
+ const markdownContent = `---
52
+ id: ${objectId}
53
+ title: ${title}
54
+ status: ${status}
55
+ priority: medium
56
+ schema: v1.0
57
+ created: ${pastDate.toISOString()}
58
+ updated: ${pastDate.toISOString()}
59
+ ${parent ? `parent: ${parent}` : ""}
60
+ ---
61
+
62
+ # ${title}
63
+
64
+ Test object created for auto-prune testing.
65
+ `;
66
+ // Create the appropriate directory structure and file
67
+ const fs = require("fs");
68
+ const path = require("path");
69
+ let filePath;
70
+ if (type === "task") {
71
+ const statusDir = status === "done" ? "closed" : "open";
72
+ const dir = path.join(testEnv.projectRoot, ".trellis", "t", statusDir);
73
+ fs.mkdirSync(dir, { recursive: true });
74
+ filePath = path.join(dir, `${objectId}.md`);
75
+ }
76
+ else if (type === "feature") {
77
+ const dir = path.join(testEnv.projectRoot, ".trellis", "f", objectId);
78
+ fs.mkdirSync(dir, { recursive: true });
79
+ filePath = path.join(dir, `${objectId}.md`);
80
+ }
81
+ else if (type === "epic") {
82
+ const dir = path.join(testEnv.projectRoot, ".trellis", "e", objectId);
83
+ fs.mkdirSync(dir, { recursive: true });
84
+ filePath = path.join(dir, `${objectId}.md`);
85
+ }
86
+ else if (type === "project") {
87
+ const dir = path.join(testEnv.projectRoot, ".trellis", "p", objectId);
88
+ fs.mkdirSync(dir, { recursive: true });
89
+ filePath = path.join(dir, `${objectId}.md`);
90
+ }
91
+ else {
92
+ throw new Error(`Unsupported object type: ${type}`);
93
+ }
94
+ fs.writeFileSync(filePath, markdownContent);
95
+ return objectId;
96
+ }
97
+ describe("Basic Auto-Prune Functionality", () => {
98
+ it("should delete closed objects older than threshold", async () => {
99
+ // Start server with auto-prune disabled first to set up objects
100
+ await startServerWithArgs([
101
+ "--mode",
102
+ "local",
103
+ "--projectRootFolder",
104
+ testEnv.projectRoot,
105
+ "--auto-prune",
106
+ "0",
107
+ ]);
108
+ // Create objects with various ages
109
+ const oldTaskId = createObjectWithAge("task", "Old Task", 10, "done");
110
+ const newTaskId = createObjectWithAge("task", "New Task", 3, "done");
111
+ const veryOldTaskId = createObjectWithAge("task", "Very Old Task", 30, "done");
112
+ // Close connection and restart with auto-prune enabled
113
+ await client.close();
114
+ await transport.close();
115
+ // Start server with auto-prune threshold of 7 days
116
+ await startServerWithArgs([
117
+ "--mode",
118
+ "local",
119
+ "--projectRootFolder",
120
+ testEnv.projectRoot,
121
+ "--auto-prune",
122
+ "7",
123
+ ]);
124
+ // Verify objects older than 7 days are deleted
125
+ const listResult = await callTool("list_issues", {
126
+ type: ["task", "feature", "epic", "project"],
127
+ includeClosed: true,
128
+ });
129
+ const remainingObjects = listResult.content[0].text;
130
+ expect(remainingObjects).toContain(newTaskId); // 3 days old - should remain
131
+ expect(remainingObjects).not.toContain(oldTaskId); // 10 days old - should be deleted
132
+ expect(remainingObjects).not.toContain(veryOldTaskId); // 30 days old - should be deleted
133
+ });
134
+ it("should not delete any objects when auto-prune is disabled", async () => {
135
+ // Start server with auto-prune disabled
136
+ await startServerWithArgs([
137
+ "--mode",
138
+ "local",
139
+ "--projectRootFolder",
140
+ testEnv.projectRoot,
141
+ "--auto-prune",
142
+ "0",
143
+ ]);
144
+ // Create old closed objects
145
+ const oldTaskId = createObjectWithAge("task", "Old Task", 30, "done");
146
+ const veryOldTaskId = createObjectWithAge("task", "Very Old Task", 100, "done");
147
+ // Close and restart with auto-prune still disabled
148
+ await client.close();
149
+ await transport.close();
150
+ await startServerWithArgs([
151
+ "--mode",
152
+ "local",
153
+ "--projectRootFolder",
154
+ testEnv.projectRoot,
155
+ "--auto-prune",
156
+ "0",
157
+ ]);
158
+ // Verify all objects remain
159
+ const listResult = await callTool("list_issues", {
160
+ type: ["task", "feature", "epic", "project"],
161
+ includeClosed: true,
162
+ });
163
+ const remainingObjects = listResult.content[0].text;
164
+ expect(remainingObjects).toContain(oldTaskId);
165
+ expect(remainingObjects).toContain(veryOldTaskId);
166
+ });
167
+ });
168
+ describe("Hierarchical Validation Tests", () => {
169
+ it("should not delete closed parent with open child", async () => {
170
+ // Start server with auto-prune disabled to set up hierarchy
171
+ await startServerWithArgs([
172
+ "--mode",
173
+ "local",
174
+ "--projectRootFolder",
175
+ testEnv.projectRoot,
176
+ "--auto-prune",
177
+ "0",
178
+ ]);
179
+ // Create closed parent that's old
180
+ const parentId = createObjectWithAge("feature", "Old Parent Feature", 10, "done");
181
+ // Create open child under the parent
182
+ const childResult = await callTool("create_issue", {
183
+ type: "task",
184
+ title: "Open Child Task",
185
+ status: "open",
186
+ parent: parentId,
187
+ });
188
+ const childId = childResult.content[0].text.match(/ID: ([A-Z]-[a-z0-9-]+)/)[1];
189
+ // Restart with auto-prune enabled
190
+ await client.close();
191
+ await transport.close();
192
+ await startServerWithArgs([
193
+ "--mode",
194
+ "local",
195
+ "--projectRootFolder",
196
+ testEnv.projectRoot,
197
+ "--auto-prune",
198
+ "7",
199
+ ]);
200
+ // Verify parent is NOT deleted because it has open child
201
+ const listResult = await callTool("list_issues", {
202
+ type: ["task", "feature", "epic", "project"],
203
+ includeClosed: true,
204
+ });
205
+ const remainingObjects = listResult.content[0].text;
206
+ expect(remainingObjects).toContain(parentId); // Should be skipped due to open child
207
+ expect(remainingObjects).toContain(childId); // Open child should remain
208
+ });
209
+ it("should delete closed parent with closed children", async () => {
210
+ // Start server with auto-prune disabled to set up hierarchy
211
+ await startServerWithArgs([
212
+ "--mode",
213
+ "local",
214
+ "--projectRootFolder",
215
+ testEnv.projectRoot,
216
+ "--auto-prune",
217
+ "0",
218
+ ]);
219
+ // Create closed parent that's old
220
+ const parentId = createObjectWithAge("feature", "Old Parent Feature", 10, "done");
221
+ // Create closed child under the parent (also old)
222
+ const childId = createObjectWithAge("task", "Old Child Task", 10, "done", parentId);
223
+ // Restart with auto-prune enabled
224
+ await client.close();
225
+ await transport.close();
226
+ await startServerWithArgs([
227
+ "--mode",
228
+ "local",
229
+ "--projectRootFolder",
230
+ testEnv.projectRoot,
231
+ "--auto-prune",
232
+ "7",
233
+ ]);
234
+ // Verify both parent and child are deleted
235
+ const listResult = await callTool("list_issues", {
236
+ type: ["task", "feature", "epic", "project"],
237
+ includeClosed: true,
238
+ });
239
+ const remainingObjects = listResult.content[0].text;
240
+ expect(remainingObjects).not.toContain(parentId); // Should be deleted
241
+ expect(remainingObjects).not.toContain(childId); // Should be deleted
242
+ });
243
+ it("should handle multi-level hierarchy with open descendant", async () => {
244
+ // Start server with auto-prune disabled to set up complex hierarchy
245
+ await startServerWithArgs([
246
+ "--mode",
247
+ "local",
248
+ "--projectRootFolder",
249
+ testEnv.projectRoot,
250
+ "--auto-prune",
251
+ "0",
252
+ ]);
253
+ // Create grandparent (closed, old)
254
+ const grandparentId = createObjectWithAge("project", "Old Grandparent Project", 15, "done");
255
+ // Create parent under grandparent (closed, old)
256
+ const parentId = createObjectWithAge("epic", "Old Parent Epic", 12, "done", grandparentId);
257
+ // Create open child under parent
258
+ const childResult = await callTool("create_issue", {
259
+ type: "feature",
260
+ title: "Open Child Feature",
261
+ status: "open",
262
+ parent: parentId,
263
+ });
264
+ const childId = childResult.content[0].text.match(/ID: ([A-Z]-[a-z0-9-]+)/)[1];
265
+ // Restart with auto-prune enabled
266
+ await client.close();
267
+ await transport.close();
268
+ await startServerWithArgs([
269
+ "--mode",
270
+ "local",
271
+ "--projectRootFolder",
272
+ testEnv.projectRoot,
273
+ "--auto-prune",
274
+ "7",
275
+ ]);
276
+ // Verify neither grandparent nor parent are deleted due to open descendant
277
+ const listResult = await callTool("list_issues", {
278
+ type: ["task", "feature", "epic", "project"],
279
+ includeClosed: true,
280
+ });
281
+ const remainingObjects = listResult.content[0].text;
282
+ expect(remainingObjects).toContain(grandparentId); // Should be skipped
283
+ expect(remainingObjects).toContain(parentId); // Should be skipped
284
+ expect(remainingObjects).toContain(childId); // Open child should remain
285
+ });
286
+ });
287
+ describe("CLI Integration Tests", () => {
288
+ it("should handle various auto-prune day values", async () => {
289
+ // Test with large value
290
+ await startServerWithArgs([
291
+ "--mode",
292
+ "local",
293
+ "--projectRootFolder",
294
+ testEnv.projectRoot,
295
+ "--auto-prune",
296
+ "365",
297
+ ]);
298
+ const toolsResponse = await client.request({ method: "tools/list" }, types_js_1.ListToolsResultSchema);
299
+ expect(toolsResponse).toBeDefined();
300
+ expect(Array.isArray(toolsResponse.tools)).toBe(true);
301
+ });
302
+ it("should start server with valid auto-prune values", async () => {
303
+ const testValues = ["1", "7", "30", "90"];
304
+ for (const value of testValues) {
305
+ // Close existing connection if any
306
+ if (client) {
307
+ await client.close();
308
+ client = null;
309
+ }
310
+ if (transport) {
311
+ await transport.close();
312
+ transport = null;
313
+ }
314
+ await startServerWithArgs([
315
+ "--mode",
316
+ "local",
317
+ "--projectRootFolder",
318
+ testEnv.projectRoot,
319
+ "--auto-prune",
320
+ value,
321
+ ]);
322
+ const toolsResponse = await client.request({ method: "tools/list" }, types_js_1.ListToolsResultSchema);
323
+ expect(toolsResponse).toBeDefined();
324
+ expect(Array.isArray(toolsResponse.tools)).toBe(true);
325
+ }
326
+ });
327
+ });
328
+ describe("Server Startup Integration", () => {
329
+ it("should run auto-prune before accepting requests", async () => {
330
+ // Create old objects first
331
+ await startServerWithArgs([
332
+ "--mode",
333
+ "local",
334
+ "--projectRootFolder",
335
+ testEnv.projectRoot,
336
+ "--auto-prune",
337
+ "0",
338
+ ]);
339
+ const oldTaskId = createObjectWithAge("task", "Old Task", 15, "done");
340
+ await client.close();
341
+ await transport.close();
342
+ // Start with auto-prune enabled - auto-prune should run during startup
343
+ await startServerWithArgs([
344
+ "--mode",
345
+ "local",
346
+ "--projectRootFolder",
347
+ testEnv.projectRoot,
348
+ "--auto-prune",
349
+ "7",
350
+ ]);
351
+ // First request should show the object is already deleted
352
+ const listResult = await callTool("list_issues", {
353
+ type: ["task", "feature", "epic", "project"],
354
+ includeClosed: true,
355
+ });
356
+ const remainingObjects = listResult.content[0].text;
357
+ expect(remainingObjects).not.toContain(oldTaskId);
358
+ });
359
+ it("should continue startup even if auto-prune encounters errors", async () => {
360
+ // Start server with auto-prune in a directory with potential permission issues
361
+ // This should not crash the server
362
+ await startServerWithArgs([
363
+ "--mode",
364
+ "local",
365
+ "--projectRootFolder",
366
+ testEnv.projectRoot,
367
+ "--auto-prune",
368
+ "7",
369
+ ]);
370
+ // Server should still be functional
371
+ const toolsResponse = await client.request({ method: "tools/list" }, types_js_1.ListToolsResultSchema);
372
+ expect(toolsResponse).toBeDefined();
373
+ expect(Array.isArray(toolsResponse.tools)).toBe(true);
374
+ });
375
+ });
376
+ describe("Complex Workflow Tests", () => {
377
+ it("should handle complex object hierarchy with mixed statuses and ages", async () => {
378
+ // Start server with auto-prune disabled to set up complex scenario
379
+ await startServerWithArgs([
380
+ "--mode",
381
+ "local",
382
+ "--projectRootFolder",
383
+ testEnv.projectRoot,
384
+ "--auto-prune",
385
+ "0",
386
+ ]);
387
+ // Create a complex hierarchy
388
+ const projectId = createObjectWithAge("project", "Old Project", 20, "done");
389
+ const epic1Id = createObjectWithAge("epic", "Old Epic 1", 15, "done", projectId);
390
+ const epic2Id = createObjectWithAge("epic", "Old Epic 2", 10, "done", projectId);
391
+ // Epic 1 has closed children (should allow deletion)
392
+ const feature1Id = createObjectWithAge("feature", "Old Feature 1", 12, "done", epic1Id);
393
+ const task1Id = createObjectWithAge("task", "Old Task 1", 8, "done", feature1Id);
394
+ // Epic 2 has open child (should prevent deletion)
395
+ const feature2Result = await callTool("create_issue", {
396
+ type: "feature",
397
+ title: "Open Feature 2",
398
+ status: "open",
399
+ parent: epic2Id,
400
+ });
401
+ const feature2Id = feature2Result.content[0].text.match(/ID: ([A-Z]-[a-z0-9-]+)/)[1];
402
+ // Restart with auto-prune enabled (7-day threshold)
403
+ await client.close();
404
+ await transport.close();
405
+ await startServerWithArgs([
406
+ "--mode",
407
+ "local",
408
+ "--projectRootFolder",
409
+ testEnv.projectRoot,
410
+ "--auto-prune",
411
+ "7",
412
+ ]);
413
+ // Verify expected behavior
414
+ const listResult = await callTool("list_issues", {
415
+ type: ["task", "feature", "epic", "project"],
416
+ includeClosed: true,
417
+ });
418
+ const remainingObjects = listResult.content[0].text;
419
+ // Epic 1 and its children should be deleted (all closed and old)
420
+ expect(remainingObjects).not.toContain(epic1Id);
421
+ expect(remainingObjects).not.toContain(feature1Id);
422
+ expect(remainingObjects).not.toContain(task1Id);
423
+ // Project, Epic 2, and Feature 2 should remain (Epic 2 has open child)
424
+ expect(remainingObjects).toContain(projectId); // Should be skipped due to Epic 2's open child
425
+ expect(remainingObjects).toContain(epic2Id); // Should be skipped due to open child
426
+ expect(remainingObjects).toContain(feature2Id); // Open, should remain
427
+ });
428
+ it("should be idempotent on multiple runs", async () => {
429
+ // Create test objects
430
+ await startServerWithArgs([
431
+ "--mode",
432
+ "local",
433
+ "--projectRootFolder",
434
+ testEnv.projectRoot,
435
+ "--auto-prune",
436
+ "0",
437
+ ]);
438
+ const oldTaskId = createObjectWithAge("task", "Old Task", 10, "done");
439
+ const newTaskId = createObjectWithAge("task", "New Task", 3, "done");
440
+ // First auto-prune run
441
+ await client.close();
442
+ await transport.close();
443
+ await startServerWithArgs([
444
+ "--mode",
445
+ "local",
446
+ "--projectRootFolder",
447
+ testEnv.projectRoot,
448
+ "--auto-prune",
449
+ "7",
450
+ ]);
451
+ const firstResult = await callTool("list_issues", {
452
+ type: ["task", "feature", "epic", "project"],
453
+ includeClosed: true,
454
+ });
455
+ const firstRemaining = firstResult.content[0].text;
456
+ // Second auto-prune run (restart server)
457
+ await client.close();
458
+ await transport.close();
459
+ await startServerWithArgs([
460
+ "--mode",
461
+ "local",
462
+ "--projectRootFolder",
463
+ testEnv.projectRoot,
464
+ "--auto-prune",
465
+ "7",
466
+ ]);
467
+ const secondResult = await callTool("list_issues", {
468
+ type: ["task", "feature", "epic", "project"],
469
+ includeClosed: true,
470
+ });
471
+ const secondRemaining = secondResult.content[0].text;
472
+ // Results should be identical
473
+ expect(firstRemaining).toBe(secondRemaining);
474
+ expect(secondRemaining).toContain(newTaskId);
475
+ expect(secondRemaining).not.toContain(oldTaskId);
476
+ });
477
+ });
478
+ describe("Performance and Edge Cases", () => {
479
+ it("should handle reasonable data volumes efficiently", async () => {
480
+ // Start server and create multiple objects
481
+ await startServerWithArgs([
482
+ "--mode",
483
+ "local",
484
+ "--projectRootFolder",
485
+ testEnv.projectRoot,
486
+ "--auto-prune",
487
+ "0",
488
+ ]);
489
+ // Create 20 objects of varying ages
490
+ const objectIds = [];
491
+ for (let i = 0; i < 20; i++) {
492
+ const age = i < 10 ? 5 : 15; // Half young, half old
493
+ const status = i % 3 === 0 ? "open" : "done"; // Most closed, some open
494
+ const id = createObjectWithAge("task", `Task ${i}`, age, status);
495
+ objectIds.push(id);
496
+ }
497
+ const startTime = Date.now();
498
+ // Restart with auto-prune enabled
499
+ await client.close();
500
+ await transport.close();
501
+ await startServerWithArgs([
502
+ "--mode",
503
+ "local",
504
+ "--projectRootFolder",
505
+ testEnv.projectRoot,
506
+ "--auto-prune",
507
+ "10",
508
+ ]);
509
+ const endTime = Date.now();
510
+ const duration = endTime - startTime;
511
+ // Should complete within reasonable time (< 30 seconds)
512
+ expect(duration).toBeLessThan(30000);
513
+ // Verify server is responsive
514
+ const toolsResponse = await client.request({ method: "tools/list" }, types_js_1.ListToolsResultSchema);
515
+ expect(toolsResponse).toBeDefined();
516
+ });
517
+ it("should handle edge case with zero objects", async () => {
518
+ // Start server with auto-prune on empty project
519
+ await startServerWithArgs([
520
+ "--mode",
521
+ "local",
522
+ "--projectRootFolder",
523
+ testEnv.projectRoot,
524
+ "--auto-prune",
525
+ "7",
526
+ ]);
527
+ // Should start normally
528
+ const toolsResponse = await client.request({ method: "tools/list" }, types_js_1.ListToolsResultSchema);
529
+ expect(toolsResponse).toBeDefined();
530
+ });
531
+ });
532
+ });
533
+ //# sourceMappingURL=autoPrune.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoPrune.e2e.test.js","sourceRoot":"","sources":["../../../src/__tests__/e2e/autoPrune.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
7
7
  const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
8
8
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
9
- const utils_1 = require("../utils");
10
9
  const path_1 = __importDefault(require("path"));
10
+ const utils_1 = require("../utils");
11
11
  describe("E2E Configuration - Activation", () => {
12
12
  let testEnv;
13
13
  let client = null;
@@ -56,7 +56,7 @@ describe("E2E Configuration - Activation", () => {
56
56
  expect(response.content[0].text).toContain(testEnv.projectRoot);
57
57
  expect(response.content[0].text).toContain("planningRootFolder");
58
58
  // Verify .trellis directory exists after creating an object
59
- await callTool("create_object", {
59
+ await callTool("create_issue", {
60
60
  type: "project",
61
61
  title: "Test Project",
62
62
  });
@@ -66,7 +66,7 @@ describe("E2E Configuration - Activation", () => {
66
66
  it("should allow tool usage after activation", async () => {
67
67
  await connectWithoutProjectRoot();
68
68
  // Try to use tool before activation - should fail
69
- const errorResponse = await callTool("list_objects", {});
69
+ const errorResponse = await callTool("list_issues", {});
70
70
  expect(errorResponse.content[0].text).toContain("Planning root folder is not configured");
71
71
  // Activate
72
72
  await callTool("activate", {
@@ -74,7 +74,7 @@ describe("E2E Configuration - Activation", () => {
74
74
  projectRoot: testEnv.projectRoot,
75
75
  });
76
76
  // Should now work
77
- const response = await callTool("list_objects", { type: "project" });
77
+ const response = await callTool("list_issues", { type: "project" });
78
78
  expect(response.content[0].text).not.toContain("not configured");
79
79
  });
80
80
  it("should handle multiple activations with different paths", async () => {
@@ -85,7 +85,7 @@ describe("E2E Configuration - Activation", () => {
85
85
  projectRoot: testEnv.projectRoot,
86
86
  });
87
87
  // Create an object
88
- await callTool("create_object", {
88
+ await callTool("create_issue", {
89
89
  type: "project",
90
90
  title: "Test Project",
91
91
  });
@@ -96,7 +96,7 @@ describe("E2E Configuration - Activation", () => {
96
96
  projectRoot: newPath,
97
97
  });
98
98
  // Objects from first activation should not be visible
99
- const response = await callTool("list_objects", { type: "project" });
99
+ const response = await callTool("list_issues", { type: "project" });
100
100
  expect(response.content[0].text).toBe("[]");
101
101
  });
102
102
  });
@@ -1 +1 @@
1
- {"version":3,"file":"activation.e2e.test.js","sourceRoot":"","sources":["../../../../src/__tests__/e2e/configuration/activation.e2e.test.ts"],"names":[],"mappings":";;;;;AAAA,wEAAmE;AACnE,wEAAiF;AACjF,iEAA0E;AAC1E,oCAAuD;AACvD,gDAAwB;AAExB,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,IAAI,OAAwB,CAAC;IAC7B,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,SAAS,GAAgC,IAAI,CAAC;IAElD,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,uBAAe,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,yBAAyB;QACtC,SAAS,GAAG,IAAI,+BAAoB,CAAC;YACnC,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,yBAAyB;SACvE,CAAC,CAAC;QAEH,MAAM,GAAG,IAAI,iBAAM,CACjB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,EACzC,EAAE,YAAY,EAAE,EAAE,EAAE,CACrB,CAAC;QAEF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAY,EAAE;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CACnB;YACE,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;SAClC,EACD,+BAAoB,CACrB,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE;gBAC1C,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACpE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAEjE,4DAA4D;YAC5D,MAAM,QAAQ,CAAC,eAAe,EAAE;gBAC9B,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,cAAc;aACtB,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,IAAA,kBAAU,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,yBAAyB,EAAE,CAAC;YAElC,kDAAkD;YAClD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAC7C,wCAAwC,CACzC,CAAC;YAEF,WAAW;YACX,MAAM,QAAQ,CAAC,UAAU,EAAE;gBACzB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,yBAAyB,EAAE,CAAC;YAElC,mBAAmB;YACnB,MAAM,QAAQ,CAAC,UAAU,EAAE;gBACzB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,mBAAmB;YACnB,MAAM,QAAQ,CAAC,eAAe,EAAE;gBAC9B,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,cAAc;aACtB,CAAC,CAAC;YAEH,wCAAwC;YACxC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,QAAQ,CAAC,UAAU,EAAE;gBACzB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,OAAO;aACrB,CAAC,CAAC;YAEH,sDAAsD;YACtD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE;gBAC1C,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,YAAY;gBACtB,GAAG,EAAE,yBAAyB;gBAC9B,eAAe,EAAE,UAAU;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YACrE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACzD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACtE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE;gBAC1C,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,0DAA0D;YAC1D,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACtE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"activation.e2e.test.js","sourceRoot":"","sources":["../../../../src/__tests__/e2e/configuration/activation.e2e.test.ts"],"names":[],"mappings":"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"}