@langadventurellc/task-trellis-mcp 1.0.1 → 1.1.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 (207) hide show
  1. package/README.md +47 -67
  2. package/dist/__tests__/e2e/crud/createObject.e2e.test.js +64 -12
  3. package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
  4. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +260 -90
  5. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js.map +1 -1
  6. package/dist/__tests__/e2e/utils/extractObjectIds.d.ts +5 -0
  7. package/dist/__tests__/e2e/utils/extractObjectIds.d.ts.map +1 -0
  8. package/dist/__tests__/e2e/utils/extractObjectIds.js +12 -0
  9. package/dist/__tests__/e2e/utils/extractObjectIds.js.map +1 -0
  10. package/dist/__tests__/e2e/utils/index.d.ts +1 -0
  11. package/dist/__tests__/e2e/utils/index.d.ts.map +1 -1
  12. package/dist/__tests__/e2e/utils/index.js +3 -1
  13. package/dist/__tests__/e2e/utils/index.js.map +1 -1
  14. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts +2 -1
  15. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -1
  16. package/dist/__tests__/e2e/utils/mcpTestClient.js +14 -8
  17. package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
  18. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +3 -1
  19. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts.map +1 -1
  20. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +1 -0
  21. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js.map +1 -1
  22. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts +2 -0
  23. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts.map +1 -0
  24. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +597 -0
  25. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -0
  26. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +189 -0
  27. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
  28. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +446 -0
  29. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
  30. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +3 -7
  31. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
  32. package/dist/configuration/ServerConfig.d.ts +1 -0
  33. package/dist/configuration/ServerConfig.d.ts.map +1 -1
  34. package/dist/models/TrellisObjectSummary.d.ts +16 -0
  35. package/dist/models/TrellisObjectSummary.d.ts.map +1 -0
  36. package/dist/models/TrellisObjectSummary.js +3 -0
  37. package/dist/models/TrellisObjectSummary.js.map +1 -0
  38. package/dist/models/index.d.ts +1 -0
  39. package/dist/models/index.d.ts.map +1 -1
  40. package/dist/models/index.js.map +1 -1
  41. package/dist/repositories/local/__tests__/getObjectFilePath.test.js +9 -6
  42. package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
  43. package/dist/repositories/local/__tests__/getObjects.test.js +40 -10
  44. package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -1
  45. package/dist/repositories/local/getObjectFilePath.d.ts.map +1 -1
  46. package/dist/repositories/local/getObjectFilePath.js +8 -4
  47. package/dist/repositories/local/getObjectFilePath.js.map +1 -1
  48. package/dist/repositories/local/getObjects.d.ts.map +1 -1
  49. package/dist/repositories/local/getObjects.js +6 -1
  50. package/dist/repositories/local/getObjects.js.map +1 -1
  51. package/dist/server.js +23 -9
  52. package/dist/server.js.map +1 -1
  53. package/dist/services/TaskTrellisService.d.ts +87 -0
  54. package/dist/services/TaskTrellisService.d.ts.map +1 -0
  55. package/dist/services/TaskTrellisService.js +3 -0
  56. package/dist/services/TaskTrellisService.js.map +1 -0
  57. package/dist/services/local/LocalTaskTrellisService.d.ts +61 -0
  58. package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -0
  59. package/dist/services/local/LocalTaskTrellisService.js +77 -0
  60. package/dist/services/local/LocalTaskTrellisService.js.map +1 -0
  61. package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts +2 -0
  62. package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts.map +1 -0
  63. package/dist/services/local/__tests__/appendAffectedFiles.test.js +202 -0
  64. package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -0
  65. package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts +2 -0
  66. package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts.map +1 -0
  67. package/dist/services/local/__tests__/appendModifiedFiles.test.js +161 -0
  68. package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -0
  69. package/dist/services/local/__tests__/appendObjectLog.test.d.ts +2 -0
  70. package/dist/services/local/__tests__/appendObjectLog.test.d.ts.map +1 -0
  71. package/dist/services/local/__tests__/appendObjectLog.test.js +104 -0
  72. package/dist/services/local/__tests__/appendObjectLog.test.js.map +1 -0
  73. package/dist/services/local/__tests__/claimTask.test.d.ts +2 -0
  74. package/dist/services/local/__tests__/claimTask.test.d.ts.map +1 -0
  75. package/dist/services/local/__tests__/claimTask.test.js +463 -0
  76. package/dist/services/local/__tests__/claimTask.test.js.map +1 -0
  77. package/dist/services/local/__tests__/completeTask.test.d.ts +2 -0
  78. package/dist/services/local/__tests__/completeTask.test.d.ts.map +1 -0
  79. package/dist/services/local/__tests__/completeTask.test.js +468 -0
  80. package/dist/services/local/__tests__/completeTask.test.js.map +1 -0
  81. package/dist/services/local/__tests__/createObject.test.d.ts +2 -0
  82. package/dist/services/local/__tests__/createObject.test.d.ts.map +1 -0
  83. package/dist/services/local/__tests__/createObject.test.js +332 -0
  84. package/dist/services/local/__tests__/createObject.test.js.map +1 -0
  85. package/dist/services/local/__tests__/listObjects.test.d.ts +2 -0
  86. package/dist/services/local/__tests__/listObjects.test.d.ts.map +1 -0
  87. package/dist/services/local/__tests__/listObjects.test.js +226 -0
  88. package/dist/services/local/__tests__/listObjects.test.js.map +1 -0
  89. package/dist/services/local/__tests__/pruneClosed.test.d.ts +2 -0
  90. package/dist/services/local/__tests__/pruneClosed.test.d.ts.map +1 -0
  91. package/dist/services/local/__tests__/pruneClosed.test.js +213 -0
  92. package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -0
  93. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts +2 -0
  94. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts.map +1 -0
  95. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js +283 -0
  96. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js.map +1 -0
  97. package/dist/services/local/__tests__/updateObject.test.d.ts +2 -0
  98. package/dist/services/local/__tests__/updateObject.test.d.ts.map +1 -0
  99. package/dist/services/local/__tests__/updateObject.test.js +314 -0
  100. package/dist/services/local/__tests__/updateObject.test.js.map +1 -0
  101. package/dist/services/local/appendAffectedFiles.d.ts +12 -0
  102. package/dist/services/local/appendAffectedFiles.d.ts.map +1 -0
  103. package/dist/services/local/appendAffectedFiles.js +34 -0
  104. package/dist/services/local/appendAffectedFiles.js.map +1 -0
  105. package/dist/services/local/appendModifiedFiles.d.ts +15 -0
  106. package/dist/services/local/appendModifiedFiles.d.ts.map +1 -0
  107. package/dist/services/local/appendModifiedFiles.js +39 -0
  108. package/dist/services/local/appendModifiedFiles.js.map +1 -0
  109. package/dist/services/local/appendObjectLog.d.ts +8 -0
  110. package/dist/services/local/appendObjectLog.d.ts.map +1 -0
  111. package/dist/services/local/appendObjectLog.js +45 -0
  112. package/dist/services/local/appendObjectLog.js.map +1 -0
  113. package/dist/services/local/claimTask.d.ts +8 -0
  114. package/dist/services/local/claimTask.d.ts.map +1 -0
  115. package/dist/services/local/claimTask.js +118 -0
  116. package/dist/services/local/claimTask.js.map +1 -0
  117. package/dist/services/local/completeTask.d.ts +9 -0
  118. package/dist/services/local/completeTask.d.ts.map +1 -0
  119. package/dist/services/local/completeTask.js +74 -0
  120. package/dist/services/local/completeTask.js.map +1 -0
  121. package/dist/services/local/createObject.d.ts +9 -0
  122. package/dist/services/local/createObject.d.ts.map +1 -0
  123. package/dist/services/local/createObject.js +44 -0
  124. package/dist/services/local/createObject.js.map +1 -0
  125. package/dist/services/local/listObjects.d.ts +9 -0
  126. package/dist/services/local/listObjects.d.ts.map +1 -0
  127. package/dist/services/local/listObjects.js +43 -0
  128. package/dist/services/local/listObjects.js.map +1 -0
  129. package/dist/services/local/pruneClosed.d.ts +8 -0
  130. package/dist/services/local/pruneClosed.d.ts.map +1 -0
  131. package/dist/services/local/pruneClosed.js +55 -0
  132. package/dist/services/local/pruneClosed.js.map +1 -0
  133. package/dist/services/local/replaceObjectBodyRegex.d.ts +8 -0
  134. package/dist/services/local/replaceObjectBodyRegex.d.ts.map +1 -0
  135. package/dist/services/local/replaceObjectBodyRegex.js +85 -0
  136. package/dist/services/local/replaceObjectBodyRegex.js.map +1 -0
  137. package/dist/services/local/updateObject.d.ts +9 -0
  138. package/dist/services/local/updateObject.d.ts.map +1 -0
  139. package/dist/services/local/updateObject.js +53 -0
  140. package/dist/services/local/updateObject.js.map +1 -0
  141. package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts +2 -0
  142. package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts.map +1 -0
  143. package/dist/tools/__tests__/appendModifiedFilesTool.test.js +177 -0
  144. package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -0
  145. package/dist/tools/__tests__/appendObjectLogTool.test.js +33 -101
  146. package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
  147. package/dist/tools/__tests__/claimTaskTool.test.js +98 -311
  148. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
  149. package/dist/tools/__tests__/completeTaskTool.test.js +134 -184
  150. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  151. package/dist/tools/__tests__/createObjectTool.test.js +61 -325
  152. package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
  153. package/dist/tools/__tests__/listObjectsTool.test.js +70 -109
  154. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
  155. package/dist/tools/__tests__/pruneClosedTool.test.js +87 -146
  156. package/dist/tools/__tests__/pruneClosedTool.test.js.map +1 -1
  157. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +56 -225
  158. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +1 -1
  159. package/dist/tools/__tests__/updateObjectTool.test.js +48 -166
  160. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
  161. package/dist/tools/appendModifiedFilesTool.d.ts +30 -0
  162. package/dist/tools/appendModifiedFilesTool.d.ts.map +1 -0
  163. package/dist/tools/appendModifiedFilesTool.js +55 -0
  164. package/dist/tools/appendModifiedFilesTool.js.map +1 -0
  165. package/dist/tools/appendObjectLogTool.d.ts +4 -3
  166. package/dist/tools/appendObjectLogTool.d.ts.map +1 -1
  167. package/dist/tools/appendObjectLogTool.js +2 -40
  168. package/dist/tools/appendObjectLogTool.js.map +1 -1
  169. package/dist/tools/claimTaskTool.d.ts +4 -3
  170. package/dist/tools/claimTaskTool.d.ts.map +1 -1
  171. package/dist/tools/claimTaskTool.js +2 -80
  172. package/dist/tools/claimTaskTool.js.map +1 -1
  173. package/dist/tools/completeTaskTool.d.ts +5 -3
  174. package/dist/tools/completeTaskTool.d.ts.map +1 -1
  175. package/dist/tools/completeTaskTool.js +3 -29
  176. package/dist/tools/completeTaskTool.js.map +1 -1
  177. package/dist/tools/createObjectTool.d.ts +7 -6
  178. package/dist/tools/createObjectTool.d.ts.map +1 -1
  179. package/dist/tools/createObjectTool.js +11 -44
  180. package/dist/tools/createObjectTool.js.map +1 -1
  181. package/dist/tools/index.d.ts +1 -0
  182. package/dist/tools/index.d.ts.map +1 -1
  183. package/dist/tools/index.js +4 -1
  184. package/dist/tools/index.js.map +1 -1
  185. package/dist/tools/listObjectsTool.d.ts +5 -4
  186. package/dist/tools/listObjectsTool.d.ts.map +1 -1
  187. package/dist/tools/listObjectsTool.js +5 -13
  188. package/dist/tools/listObjectsTool.js.map +1 -1
  189. package/dist/tools/pruneClosedTool.d.ts +4 -3
  190. package/dist/tools/pruneClosedTool.d.ts.map +1 -1
  191. package/dist/tools/pruneClosedTool.js +2 -51
  192. package/dist/tools/pruneClosedTool.js.map +1 -1
  193. package/dist/tools/replaceObjectBodyRegexTool.d.ts +4 -3
  194. package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +1 -1
  195. package/dist/tools/replaceObjectBodyRegexTool.js +2 -80
  196. package/dist/tools/replaceObjectBodyRegexTool.js.map +1 -1
  197. package/dist/tools/updateObjectTool.d.ts +5 -4
  198. package/dist/tools/updateObjectTool.d.ts.map +1 -1
  199. package/dist/tools/updateObjectTool.js +3 -49
  200. package/dist/tools/updateObjectTool.js.map +1 -1
  201. package/dist/validation/__tests__/validateParentType.test.js +5 -5
  202. package/dist/validation/__tests__/validateParentType.test.js.map +1 -1
  203. package/dist/validation/validateParentType.d.ts +1 -1
  204. package/dist/validation/validateParentType.d.ts.map +1 -1
  205. package/dist/validation/validateParentType.js +2 -5
  206. package/dist/validation/validateParentType.js.map +1 -1
  207. package/package.json +1 -1
@@ -0,0 +1,597 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../utils");
4
+ describe("E2E Workflow - appendModifiedFiles", () => {
5
+ let testEnv;
6
+ let client;
7
+ beforeEach(async () => {
8
+ testEnv = new utils_1.TestEnvironment();
9
+ testEnv.setup();
10
+ client = new utils_1.McpTestClient(testEnv.projectRoot);
11
+ await client.connect();
12
+ await client.callTool("activate", {
13
+ mode: "local",
14
+ projectRoot: testEnv.projectRoot,
15
+ });
16
+ }, 30000);
17
+ afterEach(async () => {
18
+ await client?.disconnect();
19
+ testEnv?.cleanup();
20
+ });
21
+ describe("Appending Modified Files to Different Object Types", () => {
22
+ it("should append modified files to task", async () => {
23
+ const taskData = {
24
+ id: "T-files-test",
25
+ title: "Files Test Task",
26
+ status: "in-progress",
27
+ priority: "medium",
28
+ affectedFiles: {
29
+ "existing.ts": "Original implementation",
30
+ },
31
+ };
32
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-files-test", (0, utils_1.createObjectContent)(taskData));
33
+ const result = await client.callTool("append_modified_files", {
34
+ id: "T-files-test",
35
+ filesChanged: {
36
+ "src/components/Button.tsx": "Added new button component",
37
+ "src/utils/helpers.ts": "Created utility functions",
38
+ },
39
+ });
40
+ expect(result.content[0].text).toContain("Successfully appended");
41
+ expect(result.content[0].text).toContain("2 modified files");
42
+ expect(result.content[0].text).toContain("T-files-test");
43
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-files-test.md");
44
+ expect(file.yaml.affectedFiles).toEqual({
45
+ "existing.ts": "Original implementation",
46
+ "src/components/Button.tsx": "Added new button component",
47
+ "src/utils/helpers.ts": "Created utility functions",
48
+ });
49
+ });
50
+ it("should append modified files to project", async () => {
51
+ const result = await client.callTool("create_object", {
52
+ type: "project",
53
+ title: "Files Test Project",
54
+ });
55
+ const projectId = result.content[0].text.match(/ID: (P-[a-z-]+)/)[1];
56
+ const filesResult = await client.callTool("append_modified_files", {
57
+ id: projectId,
58
+ filesChanged: {
59
+ "README.md": "Updated project documentation",
60
+ "package.json": "Added new dependencies",
61
+ },
62
+ });
63
+ expect(filesResult.content[0].text).toContain("Successfully appended");
64
+ expect(filesResult.content[0].text).toContain("2 modified files");
65
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `p/${projectId}/${projectId}.md`);
66
+ expect(file.yaml.affectedFiles).toEqual({
67
+ "README.md": "Updated project documentation",
68
+ "package.json": "Added new dependencies",
69
+ });
70
+ });
71
+ it("should append modified files to epic", async () => {
72
+ // Create project first
73
+ const projectResult = await client.callTool("create_object", {
74
+ type: "project",
75
+ title: "Parent Project",
76
+ });
77
+ const projectId = projectResult.content[0].text.match(/ID: (P-[a-z-]+)/)[1];
78
+ // Create epic
79
+ const epicResult = await client.callTool("create_object", {
80
+ type: "epic",
81
+ title: "Files Test Epic",
82
+ parent: projectId,
83
+ });
84
+ const epicId = epicResult.content[0].text.match(/ID: (E-[a-z-]+)/)[1];
85
+ const filesResult = await client.callTool("append_modified_files", {
86
+ id: epicId,
87
+ filesChanged: {
88
+ "src/features/auth/index.ts": "Authentication feature implementation",
89
+ },
90
+ });
91
+ expect(filesResult.content[0].text).toContain("Successfully appended");
92
+ expect(filesResult.content[0].text).toContain("1 modified file");
93
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `p/${projectId}/e/${epicId}/${epicId}.md`);
94
+ expect(file.yaml.affectedFiles).toEqual({
95
+ "src/features/auth/index.ts": "Authentication feature implementation",
96
+ });
97
+ });
98
+ it("should append modified files to feature", async () => {
99
+ const result = await client.callTool("create_object", {
100
+ type: "feature",
101
+ title: "Files Test Feature",
102
+ });
103
+ const featureId = result.content[0].text.match(/ID: (F-[a-z-]+)/)[1];
104
+ const filesResult = await client.callTool("append_modified_files", {
105
+ id: featureId,
106
+ filesChanged: {
107
+ "src/components/Modal.tsx": "Implemented modal component",
108
+ "src/hooks/useModal.ts": "Custom hook for modal state",
109
+ "tests/Modal.test.tsx": "Unit tests for modal component",
110
+ },
111
+ });
112
+ expect(filesResult.content[0].text).toContain("Successfully appended");
113
+ expect(filesResult.content[0].text).toContain("3 modified files");
114
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `f/${featureId}/${featureId}.md`);
115
+ expect(file.yaml.affectedFiles).toEqual({
116
+ "src/components/Modal.tsx": "Implemented modal component",
117
+ "src/hooks/useModal.ts": "Custom hook for modal state",
118
+ "tests/Modal.test.tsx": "Unit tests for modal component",
119
+ });
120
+ });
121
+ });
122
+ describe("File Merging Behavior", () => {
123
+ it("should merge descriptions for existing files", async () => {
124
+ const taskData = {
125
+ id: "T-merge-test",
126
+ title: "Merge Test Task",
127
+ status: "open",
128
+ priority: "low",
129
+ affectedFiles: {
130
+ "src/utils/helpers.ts": "Initial helper functions",
131
+ "src/components/Button.tsx": "Basic button component",
132
+ },
133
+ };
134
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-merge-test", (0, utils_1.createObjectContent)(taskData));
135
+ await client.callTool("append_modified_files", {
136
+ id: "T-merge-test",
137
+ filesChanged: {
138
+ "src/utils/helpers.ts": "Added validation functions",
139
+ "src/components/Input.tsx": "New input component",
140
+ },
141
+ });
142
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-merge-test.md");
143
+ expect(file.yaml.affectedFiles).toEqual({
144
+ "src/utils/helpers.ts": "Initial helper functions; Added validation functions",
145
+ "src/components/Button.tsx": "Basic button component",
146
+ "src/components/Input.tsx": "New input component",
147
+ });
148
+ });
149
+ it("should handle complex file paths and descriptions", async () => {
150
+ const taskData = {
151
+ id: "T-complex-paths",
152
+ title: "Complex Paths Task",
153
+ status: "in-progress",
154
+ priority: "high",
155
+ };
156
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-complex-paths", (0, utils_1.createObjectContent)(taskData));
157
+ const complexFiles = {
158
+ "src/components/forms/auth/LoginForm.tsx": "Implemented login form with validation & error handling",
159
+ "tests/e2e/auth/login.spec.ts": "E2E tests for login flow",
160
+ "docs/api/authentication.md": "API documentation for auth endpoints",
161
+ "config/webpack.config.js": "Updated webpack config for new build process",
162
+ };
163
+ await client.callTool("append_modified_files", {
164
+ id: "T-complex-paths",
165
+ filesChanged: complexFiles,
166
+ });
167
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-complex-paths.md");
168
+ expect(file.yaml.affectedFiles).toEqual(complexFiles);
169
+ });
170
+ it("should preserve special characters in descriptions", async () => {
171
+ const taskData = {
172
+ id: "T-special-chars",
173
+ title: "Special Characters Task",
174
+ status: "open",
175
+ priority: "medium",
176
+ };
177
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-special-chars", (0, utils_1.createObjectContent)(taskData));
178
+ const specialDescriptions = {
179
+ "src/components/Modal.tsx": "Added modal with escape key handling & backdrop click",
180
+ "src/styles/globals.css": "Updated CSS variables for theme switching; added dark mode support",
181
+ "src/utils/api.ts": "API client with retry logic (3 attempts) & error handling",
182
+ };
183
+ await client.callTool("append_modified_files", {
184
+ id: "T-special-chars",
185
+ filesChanged: specialDescriptions,
186
+ });
187
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-special-chars.md");
188
+ expect(file.yaml.affectedFiles).toEqual(specialDescriptions);
189
+ });
190
+ });
191
+ describe("Edge Cases", () => {
192
+ it("should handle empty filesChanged object", async () => {
193
+ const taskData = {
194
+ id: "T-empty-files",
195
+ title: "Empty Files Task",
196
+ status: "open",
197
+ priority: "medium",
198
+ };
199
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-empty-files", (0, utils_1.createObjectContent)(taskData));
200
+ const result = await client.callTool("append_modified_files", {
201
+ id: "T-empty-files",
202
+ filesChanged: {},
203
+ });
204
+ expect(result.content[0].text).toContain("Successfully appended");
205
+ expect(result.content[0].text).toContain("0 modified files");
206
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-empty-files.md");
207
+ expect(file.yaml.affectedFiles || {}).toEqual({});
208
+ });
209
+ it("should handle single file modification", async () => {
210
+ const taskData = {
211
+ id: "T-single-file",
212
+ title: "Single File Task",
213
+ status: "open",
214
+ priority: "low",
215
+ };
216
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-single-file", (0, utils_1.createObjectContent)(taskData));
217
+ const result = await client.callTool("append_modified_files", {
218
+ id: "T-single-file",
219
+ filesChanged: {
220
+ "CHANGELOG.md": "Added release notes for v1.2.0",
221
+ },
222
+ });
223
+ expect(result.content[0].text).toContain("Successfully appended");
224
+ expect(result.content[0].text).toContain("1 modified file");
225
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-single-file.md");
226
+ expect(file.yaml.affectedFiles).toEqual({
227
+ "CHANGELOG.md": "Added release notes for v1.2.0",
228
+ });
229
+ });
230
+ it("should handle files with empty descriptions", async () => {
231
+ const taskData = {
232
+ id: "T-empty-descriptions",
233
+ title: "Empty Descriptions Task",
234
+ status: "open",
235
+ priority: "medium",
236
+ };
237
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-empty-descriptions", (0, utils_1.createObjectContent)(taskData));
238
+ await client.callTool("append_modified_files", {
239
+ id: "T-empty-descriptions",
240
+ filesChanged: {
241
+ "empty.ts": "",
242
+ "normal.ts": "Normal description",
243
+ },
244
+ });
245
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-empty-descriptions.md");
246
+ expect(file.yaml.affectedFiles).toEqual({
247
+ "empty.ts": "",
248
+ "normal.ts": "Normal description",
249
+ });
250
+ });
251
+ });
252
+ describe("Error Handling", () => {
253
+ it("should fail to append files to non-existent object", async () => {
254
+ const result = await client.callTool("append_modified_files", {
255
+ id: "T-nonexistent",
256
+ filesChanged: {
257
+ "test.ts": "This should fail",
258
+ },
259
+ });
260
+ expect(result.content[0].text).toContain("not found");
261
+ });
262
+ it("should handle invalid object IDs", async () => {
263
+ const result = await client.callTool("append_modified_files", {
264
+ id: "invalid-id-format",
265
+ filesChanged: {
266
+ "test.ts": "Invalid ID test",
267
+ },
268
+ });
269
+ expect(result.content[0].text).toContain("not found");
270
+ });
271
+ });
272
+ describe("Multiple Operations", () => {
273
+ it("should handle multiple sequential append operations", async () => {
274
+ const taskData = {
275
+ id: "T-sequential",
276
+ title: "Sequential Operations Task",
277
+ status: "in-progress",
278
+ priority: "high",
279
+ affectedFiles: {
280
+ "initial.ts": "Initial file",
281
+ },
282
+ };
283
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-sequential", (0, utils_1.createObjectContent)(taskData));
284
+ // First append
285
+ await client.callTool("append_modified_files", {
286
+ id: "T-sequential",
287
+ filesChanged: {
288
+ "first.ts": "First modification",
289
+ "initial.ts": "Updated initial file",
290
+ },
291
+ });
292
+ // Second append
293
+ await client.callTool("append_modified_files", {
294
+ id: "T-sequential",
295
+ filesChanged: {
296
+ "second.ts": "Second modification",
297
+ "first.ts": "Updated first file",
298
+ },
299
+ });
300
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-sequential.md");
301
+ expect(file.yaml.affectedFiles).toEqual({
302
+ "initial.ts": "Initial file; Updated initial file",
303
+ "first.ts": "First modification; Updated first file",
304
+ "second.ts": "Second modification",
305
+ });
306
+ });
307
+ it("should maintain affected files across different operations", async () => {
308
+ const taskData = {
309
+ id: "T-mixed-operations",
310
+ title: "Mixed Operations Task",
311
+ status: "open",
312
+ priority: "medium",
313
+ };
314
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-mixed-operations", (0, utils_1.createObjectContent)(taskData));
315
+ // Append files
316
+ await client.callTool("append_modified_files", {
317
+ id: "T-mixed-operations",
318
+ filesChanged: {
319
+ "file1.ts": "First implementation",
320
+ },
321
+ });
322
+ // Append log (should not affect files)
323
+ await client.callTool("append_object_log", {
324
+ id: "T-mixed-operations",
325
+ contents: "Added initial implementation",
326
+ });
327
+ // Append more files
328
+ await client.callTool("append_modified_files", {
329
+ id: "T-mixed-operations",
330
+ filesChanged: {
331
+ "file2.ts": "Second implementation",
332
+ },
333
+ });
334
+ const file = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "t/open/T-mixed-operations.md");
335
+ expect(file.yaml.affectedFiles).toEqual({
336
+ "file1.ts": "First implementation",
337
+ "file2.ts": "Second implementation",
338
+ });
339
+ expect(file.yaml.log).toContain("Added initial implementation");
340
+ });
341
+ });
342
+ describe("Recursive Parent File Updates", () => {
343
+ it("should recursively update parent objects when appending files to a task", async () => {
344
+ // Create project
345
+ const projectResult = await client.callTool("create_object", {
346
+ type: "project",
347
+ title: "Recursive Files Test Project",
348
+ });
349
+ const projectId = projectResult.content[0].text.match(/ID: (P-[a-z-]+)/)[1];
350
+ // Create epic
351
+ const epicResult = await client.callTool("create_object", {
352
+ type: "epic",
353
+ title: "Recursive Files Epic",
354
+ parent: projectId,
355
+ });
356
+ const epicId = epicResult.content[0].text.match(/ID: (E-[a-z-]+)/)[1];
357
+ // Create feature
358
+ const featureResult = await client.callTool("create_object", {
359
+ type: "feature",
360
+ title: "Recursive Files Feature",
361
+ parent: epicId,
362
+ });
363
+ const featureId = featureResult.content[0].text.match(/ID: (F-[a-z-]+)/)[1];
364
+ // Create task
365
+ const taskResult = await client.callTool("create_object", {
366
+ type: "task",
367
+ title: "Recursive Files Task",
368
+ parent: featureId,
369
+ });
370
+ const taskId = taskResult.content[0].text.match(/ID: (T-[a-z-]+)/)[1];
371
+ // Append files to the task
372
+ const result = await client.callTool("append_modified_files", {
373
+ id: taskId,
374
+ filesChanged: {
375
+ "src/api/endpoints.ts": "Implemented REST API endpoints",
376
+ "src/models/User.ts": "User data model definition",
377
+ "tests/api.test.ts": "API integration tests",
378
+ },
379
+ });
380
+ expect(result.content[0].text).toContain("Successfully appended");
381
+ expect(result.content[0].text).toContain("3 modified files");
382
+ // Verify task has the affected files
383
+ const taskFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `p/${projectId}/e/${epicId}/f/${featureId}/t/open/${taskId}.md`);
384
+ expect(taskFile.yaml.affectedFiles).toEqual({
385
+ "src/api/endpoints.ts": "Implemented REST API endpoints",
386
+ "src/models/User.ts": "User data model definition",
387
+ "tests/api.test.ts": "API integration tests",
388
+ });
389
+ // Verify feature inherited the same affected files
390
+ const featureFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `p/${projectId}/e/${epicId}/f/${featureId}/${featureId}.md`);
391
+ expect(featureFile.yaml.affectedFiles).toEqual({
392
+ "src/api/endpoints.ts": "Implemented REST API endpoints",
393
+ "src/models/User.ts": "User data model definition",
394
+ "tests/api.test.ts": "API integration tests",
395
+ });
396
+ // Verify epic inherited the same affected files
397
+ const epicFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `p/${projectId}/e/${epicId}/${epicId}.md`);
398
+ expect(epicFile.yaml.affectedFiles).toEqual({
399
+ "src/api/endpoints.ts": "Implemented REST API endpoints",
400
+ "src/models/User.ts": "User data model definition",
401
+ "tests/api.test.ts": "API integration tests",
402
+ });
403
+ // Verify project inherited the same affected files
404
+ const projectFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `p/${projectId}/${projectId}.md`);
405
+ expect(projectFile.yaml.affectedFiles).toEqual({
406
+ "src/api/endpoints.ts": "Implemented REST API endpoints",
407
+ "src/models/User.ts": "User data model definition",
408
+ "tests/api.test.ts": "API integration tests",
409
+ });
410
+ });
411
+ it("should merge files with existing parent affected files", async () => {
412
+ // Create feature with existing affected files
413
+ const featureData = {
414
+ id: "F-merge-parent-files",
415
+ title: "Merge Parent Files Feature",
416
+ status: "open",
417
+ priority: "medium",
418
+ childrenIds: ["T-merge-parent-task"],
419
+ affectedFiles: {
420
+ "src/core/engine.ts": "Core engine implementation",
421
+ "README.md": "Project documentation",
422
+ },
423
+ };
424
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "feature", "F-merge-parent-files", (0, utils_1.createObjectContent)(featureData));
425
+ // Create task
426
+ const taskData = {
427
+ id: "T-merge-parent-task",
428
+ title: "Merge Parent Task",
429
+ status: "open",
430
+ priority: "medium",
431
+ parent: "F-merge-parent-files",
432
+ };
433
+ await (0, utils_1.createObjectFile)(testEnv.projectRoot, "task", "T-merge-parent-task", (0, utils_1.createObjectContent)(taskData), { featureId: "F-merge-parent-files", status: "open" });
434
+ // Append files to task (including one that overlaps with feature)
435
+ await client.callTool("append_modified_files", {
436
+ id: "T-merge-parent-task",
437
+ filesChanged: {
438
+ "src/core/engine.ts": "Enhanced engine with new algorithms",
439
+ "src/utils/helpers.ts": "Utility helper functions",
440
+ "tests/engine.test.ts": "Engine unit tests",
441
+ },
442
+ });
443
+ // Verify task has its affected files
444
+ const taskFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "f/F-merge-parent-files/t/open/T-merge-parent-task.md");
445
+ expect(taskFile.yaml.affectedFiles).toEqual({
446
+ "src/core/engine.ts": "Enhanced engine with new algorithms",
447
+ "src/utils/helpers.ts": "Utility helper functions",
448
+ "tests/engine.test.ts": "Engine unit tests",
449
+ });
450
+ // Verify feature has merged files (original + task files, with overlap merged)
451
+ const featureFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, "f/F-merge-parent-files/F-merge-parent-files.md");
452
+ expect(featureFile.yaml.affectedFiles).toEqual({
453
+ "src/core/engine.ts": "Core engine implementation; Enhanced engine with new algorithms",
454
+ "README.md": "Project documentation",
455
+ "src/utils/helpers.ts": "Utility helper functions",
456
+ "tests/engine.test.ts": "Engine unit tests",
457
+ });
458
+ });
459
+ it("should handle feature with no parent (partial hierarchy)", async () => {
460
+ // Create standalone feature
461
+ const featureResult = await client.callTool("create_object", {
462
+ type: "feature",
463
+ title: "Standalone Parent Test Feature",
464
+ });
465
+ const featureId = featureResult.content[0].text.match(/ID: (F-[a-z-]+)/)[1];
466
+ // Create task under the feature
467
+ const taskResult = await client.callTool("create_object", {
468
+ type: "task",
469
+ title: "Standalone Parent Task",
470
+ parent: featureId,
471
+ });
472
+ const taskId = taskResult.content[0].text.match(/ID: (T-[a-z-]+)/)[1];
473
+ // Append files to task
474
+ await client.callTool("append_modified_files", {
475
+ id: taskId,
476
+ filesChanged: {
477
+ "src/standalone.ts": "Standalone feature implementation",
478
+ "docs/standalone.md": "Standalone feature documentation",
479
+ },
480
+ });
481
+ // Verify task has the files
482
+ const taskFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `f/${featureId}/t/open/${taskId}.md`);
483
+ expect(taskFile.yaml.affectedFiles).toEqual({
484
+ "src/standalone.ts": "Standalone feature implementation",
485
+ "docs/standalone.md": "Standalone feature documentation",
486
+ });
487
+ // Verify feature also has the files
488
+ const featureFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `f/${featureId}/${featureId}.md`);
489
+ expect(featureFile.yaml.affectedFiles).toEqual({
490
+ "src/standalone.ts": "Standalone feature implementation",
491
+ "docs/standalone.md": "Standalone feature documentation",
492
+ });
493
+ });
494
+ it("should work when appending files to a feature (not just tasks)", async () => {
495
+ // Create epic
496
+ const epicResult = await client.callTool("create_object", {
497
+ type: "epic",
498
+ title: "Feature Parent Test Epic",
499
+ });
500
+ const epicId = epicResult.content[0].text.match(/ID: (E-[a-z-]+)/)[1];
501
+ // Create feature under epic
502
+ const featureResult = await client.callTool("create_object", {
503
+ type: "feature",
504
+ title: "Feature Parent Test Feature",
505
+ parent: epicId,
506
+ });
507
+ const featureId = featureResult.content[0].text.match(/ID: (F-[a-z-]+)/)[1];
508
+ // Append files directly to the feature
509
+ await client.callTool("append_modified_files", {
510
+ id: featureId,
511
+ filesChanged: {
512
+ "src/feature/core.ts": "Feature core implementation",
513
+ "src/feature/utils.ts": "Feature utility functions",
514
+ },
515
+ });
516
+ // Verify feature has the files
517
+ const featureFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `e/${epicId}/f/${featureId}/${featureId}.md`);
518
+ expect(featureFile.yaml.affectedFiles).toEqual({
519
+ "src/feature/core.ts": "Feature core implementation",
520
+ "src/feature/utils.ts": "Feature utility functions",
521
+ });
522
+ // Verify epic also inherited the files
523
+ const epicFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `e/${epicId}/${epicId}.md`);
524
+ expect(epicFile.yaml.affectedFiles).toEqual({
525
+ "src/feature/core.ts": "Feature core implementation",
526
+ "src/feature/utils.ts": "Feature utility functions",
527
+ });
528
+ });
529
+ it("should handle object with no parent gracefully", async () => {
530
+ // Create standalone task (no parent hierarchy)
531
+ const taskResult = await client.callTool("create_object", {
532
+ type: "task",
533
+ title: "Standalone No Parent Task",
534
+ });
535
+ const taskId = taskResult.content[0].text.match(/ID: (T-[a-z-]+)/)[1];
536
+ // Append files to standalone task
537
+ const result = await client.callTool("append_modified_files", {
538
+ id: taskId,
539
+ filesChanged: {
540
+ "src/isolated.ts": "Isolated functionality",
541
+ },
542
+ });
543
+ expect(result.content[0].text).toContain("Successfully appended");
544
+ expect(result.content[0].text).toContain("1 modified file");
545
+ // Verify task has the files (and no parent to propagate to)
546
+ const taskFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `t/open/${taskId}.md`);
547
+ expect(taskFile.yaml.affectedFiles).toEqual({
548
+ "src/isolated.ts": "Isolated functionality",
549
+ });
550
+ });
551
+ it("should handle multiple sequential append operations with parent propagation", async () => {
552
+ // Create feature and task
553
+ const featureResult = await client.callTool("create_object", {
554
+ type: "feature",
555
+ title: "Sequential Parent Updates Feature",
556
+ });
557
+ const featureId = featureResult.content[0].text.match(/ID: (F-[a-z-]+)/)[1];
558
+ const taskResult = await client.callTool("create_object", {
559
+ type: "task",
560
+ title: "Sequential Parent Updates Task",
561
+ parent: featureId,
562
+ });
563
+ const taskId = taskResult.content[0].text.match(/ID: (T-[a-z-]+)/)[1];
564
+ // First append operation
565
+ await client.callTool("append_modified_files", {
566
+ id: taskId,
567
+ filesChanged: {
568
+ "src/module1.ts": "First module implementation",
569
+ "tests/module1.test.ts": "First module tests",
570
+ },
571
+ });
572
+ // Second append operation
573
+ await client.callTool("append_modified_files", {
574
+ id: taskId,
575
+ filesChanged: {
576
+ "src/module2.ts": "Second module implementation",
577
+ "src/module1.ts": "Enhanced first module",
578
+ },
579
+ });
580
+ // Verify task has merged results from both operations
581
+ const taskFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `f/${featureId}/t/open/${taskId}.md`);
582
+ expect(taskFile.yaml.affectedFiles).toEqual({
583
+ "src/module1.ts": "First module implementation; Enhanced first module",
584
+ "tests/module1.test.ts": "First module tests",
585
+ "src/module2.ts": "Second module implementation",
586
+ });
587
+ // Verify feature also has the merged results
588
+ const featureFile = await (0, utils_1.readObjectFile)(testEnv.projectRoot, `f/${featureId}/${featureId}.md`);
589
+ expect(featureFile.yaml.affectedFiles).toEqual({
590
+ "src/module1.ts": "First module implementation; Enhanced first module",
591
+ "tests/module1.test.ts": "First module tests",
592
+ "src/module2.ts": "Second module implementation",
593
+ });
594
+ });
595
+ });
596
+ });
597
+ //# sourceMappingURL=appendModifiedFiles.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appendModifiedFiles.e2e.test.js","sourceRoot":"","sources":["../../../../src/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.ts"],"names":[],"mappings":"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"}