@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
@@ -1,16 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const models_1 = require("../../models");
4
3
  const updateObjectTool_1 = require("../updateObjectTool");
5
- // Mock the validateStatusTransition function
6
- jest.mock("../../validation/validateStatusTransition", () => ({
7
- validateStatusTransition: jest.fn(),
8
- }));
9
- const validateStatusTransition_1 = require("../../validation/validateStatusTransition");
10
- const mockValidateStatusTransition = validateStatusTransition_1.validateStatusTransition;
11
4
  describe("updateObjectTool", () => {
5
+ let mockService;
12
6
  let mockRepository;
13
7
  beforeEach(() => {
8
+ mockService = {
9
+ updateObject: jest.fn(),
10
+ };
14
11
  mockRepository = {
15
12
  getObjectById: jest.fn(),
16
13
  getObjects: jest.fn(),
@@ -20,190 +17,75 @@ describe("updateObjectTool", () => {
20
17
  jest.clearAllMocks();
21
18
  });
22
19
  describe("handleUpdateObject", () => {
23
- const mockTrellisObject = {
24
- id: "T-test-task",
25
- type: models_1.TrellisObjectType.TASK,
26
- title: "Test Task",
27
- status: models_1.TrellisObjectStatus.OPEN,
28
- priority: models_1.TrellisObjectPriority.MEDIUM,
29
- parent: "F-test-feature",
30
- prerequisites: [],
31
- affectedFiles: new Map(),
32
- log: [],
33
- schema: "1.0",
34
- childrenIds: [],
35
- body: "This is a test task",
36
- created: "2025-01-15T10:00:00Z",
37
- updated: "2025-01-15T10:00:00Z",
20
+ const mockResult = {
21
+ content: [
22
+ {
23
+ type: "text",
24
+ text: "Successfully updated object: {...}",
25
+ },
26
+ ],
38
27
  };
39
- it("should successfully update an object with all properties", async () => {
40
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
41
- mockRepository.saveObject.mockResolvedValue();
42
- mockValidateStatusTransition.mockResolvedValue();
43
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
28
+ it("should call service.updateObject with correct parameters for all properties", async () => {
29
+ mockService.updateObject.mockResolvedValue(mockResult);
30
+ const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
44
31
  id: "T-test-task",
45
32
  priority: "high",
46
33
  prerequisites: ["T-prereq-1", "T-prereq-2"],
47
34
  body: "Updated body content",
48
35
  status: "draft",
36
+ force: true,
49
37
  });
50
- const expectedUpdatedObject = {
51
- ...mockTrellisObject,
52
- priority: "high",
53
- prerequisites: ["T-prereq-1", "T-prereq-2"],
54
- body: "Updated body content",
55
- status: "draft",
56
- };
57
- expect(mockRepository.getObjectById).toHaveBeenCalledWith("T-test-task");
58
- expect(mockValidateStatusTransition).toHaveBeenCalledWith(expectedUpdatedObject, mockRepository);
59
- expect(mockRepository.saveObject).toHaveBeenCalledWith(expectedUpdatedObject);
60
- expect(result.content[0].text).toContain("Successfully updated object:");
61
- expect(result.content[0].text).toContain("T-test-task");
38
+ expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, "T-test-task", "high", ["T-prereq-1", "T-prereq-2"], "Updated body content", "draft", true);
39
+ expect(result).toBe(mockResult);
62
40
  });
63
- it("should successfully update only specified properties", async () => {
64
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
65
- mockRepository.saveObject.mockResolvedValue();
66
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
41
+ it("should call service.updateObject with only specified properties", async () => {
42
+ mockService.updateObject.mockResolvedValue(mockResult);
43
+ const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
67
44
  id: "T-test-task",
68
45
  priority: "low",
69
46
  });
70
- const expectedUpdatedObject = {
71
- ...mockTrellisObject,
72
- priority: "low",
73
- };
74
- expect(mockRepository.saveObject).toHaveBeenCalledWith(expectedUpdatedObject);
75
- expect(mockValidateStatusTransition).not.toHaveBeenCalled();
76
- expect(result.content[0].text).toContain("Successfully updated object:");
47
+ expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, "T-test-task", "low", undefined, undefined, undefined, false);
48
+ expect(result).toBe(mockResult);
77
49
  });
78
- it("should return error when object is not found", async () => {
79
- mockRepository.getObjectById.mockResolvedValue(null);
80
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
81
- id: "T-nonexistent",
82
- priority: "high",
83
- });
84
- expect(mockRepository.getObjectById).toHaveBeenCalledWith("T-nonexistent");
85
- expect(mockRepository.saveObject).not.toHaveBeenCalled();
86
- expect(mockValidateStatusTransition).not.toHaveBeenCalled();
87
- expect(result.content[0].text).toBe("Error: Object with ID 'T-nonexistent' not found");
88
- });
89
- it("should validate status transition when status changes to in-progress", async () => {
90
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
91
- mockRepository.saveObject.mockResolvedValue();
92
- mockValidateStatusTransition.mockResolvedValue();
93
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
50
+ it("should handle missing optional parameters correctly", async () => {
51
+ mockService.updateObject.mockResolvedValue(mockResult);
52
+ const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
94
53
  id: "T-test-task",
95
54
  status: "in-progress",
96
55
  });
97
- expect(mockValidateStatusTransition).toHaveBeenCalledWith(expect.objectContaining({
98
- ...mockTrellisObject,
99
- status: "in-progress",
100
- }), mockRepository);
101
- expect(mockRepository.saveObject).toHaveBeenCalled();
102
- expect(result.content[0].text).toContain("Successfully updated object:");
56
+ expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, "T-test-task", undefined, undefined, undefined, "in-progress", false);
57
+ expect(result).toBe(mockResult);
103
58
  });
104
- it("should validate status transition when status changes to done", async () => {
105
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
106
- mockRepository.saveObject.mockResolvedValue();
107
- mockValidateStatusTransition.mockResolvedValue();
108
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
59
+ it("should default force to false when not provided", async () => {
60
+ mockService.updateObject.mockResolvedValue(mockResult);
61
+ await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
109
62
  id: "T-test-task",
110
63
  status: "done",
111
64
  });
112
- expect(mockValidateStatusTransition).toHaveBeenCalledWith(expect.objectContaining({
113
- ...mockTrellisObject,
114
- status: "done",
115
- }), mockRepository);
116
- expect(mockRepository.saveObject).toHaveBeenCalled();
117
- expect(result.content[0].text).toContain("Successfully updated object:");
65
+ expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, "T-test-task", undefined, undefined, undefined, "done", false);
118
66
  });
119
- it("should reject status change when validation fails", async () => {
120
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
121
- const validationError = new Error("Cannot update status to 'in-progress' - prerequisites are not complete. Use force=true to override.");
122
- mockValidateStatusTransition.mockRejectedValue(validationError);
123
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
124
- id: "T-test-task",
125
- status: "in-progress",
126
- });
127
- expect(mockValidateStatusTransition).toHaveBeenCalled();
128
- expect(mockRepository.saveObject).not.toHaveBeenCalled();
129
- expect(result.content[0].text).toBe("Error updating object: Cannot update status to 'in-progress' - prerequisites are not complete. Use force=true to override.");
130
- });
131
- it("should bypass validation when force is true", async () => {
132
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
133
- mockRepository.saveObject.mockResolvedValue();
134
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
135
- id: "T-test-task",
136
- status: "in-progress",
137
- force: true,
138
- });
139
- expect(mockValidateStatusTransition).not.toHaveBeenCalled();
140
- expect(mockRepository.saveObject).toHaveBeenCalled();
141
- expect(result.content[0].text).toContain("Successfully updated object:");
142
- });
143
- it("should not validate status transitions for non-status updates", async () => {
144
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
145
- mockRepository.saveObject.mockResolvedValue();
146
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
147
- id: "T-test-task",
67
+ it("should pass through service errors", async () => {
68
+ const errorResult = {
69
+ content: [
70
+ {
71
+ type: "text",
72
+ text: "Error updating object: Object not found",
73
+ },
74
+ ],
75
+ };
76
+ mockService.updateObject.mockResolvedValue(errorResult);
77
+ const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
78
+ id: "T-nonexistent",
148
79
  priority: "high",
149
- body: "Updated body",
150
80
  });
151
- expect(mockValidateStatusTransition).not.toHaveBeenCalled();
152
- expect(mockRepository.saveObject).toHaveBeenCalled();
153
- expect(result.content[0].text).toContain("Successfully updated object:");
81
+ expect(result).toBe(errorResult);
154
82
  });
155
- it("should handle repository errors gracefully", async () => {
156
- mockRepository.getObjectById.mockRejectedValue(new Error("Database connection failed"));
157
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
83
+ it("should handle service rejections", async () => {
84
+ mockService.updateObject.mockRejectedValue(new Error("Service error"));
85
+ await expect((0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
158
86
  id: "T-test-task",
159
87
  status: "done",
160
- });
161
- expect(result.content[0].text).toBe("Error updating object: Database connection failed");
162
- });
163
- it("should handle saveObject errors gracefully", async () => {
164
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
165
- mockRepository.saveObject.mockRejectedValue(new Error("Failed to save"));
166
- mockValidateStatusTransition.mockResolvedValue();
167
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
168
- id: "T-test-task",
169
- status: "done",
170
- });
171
- expect(result.content[0].text).toBe("Error updating object: Failed to save");
172
- });
173
- it("should handle validation errors gracefully", async () => {
174
- mockRepository.getObjectById.mockResolvedValue(mockTrellisObject);
175
- mockValidateStatusTransition.mockRejectedValue(new Error("Validation failed"));
176
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
177
- id: "T-test-task",
178
- status: "in-progress",
179
- });
180
- expect(result.content[0].text).toBe("Error updating object: Validation failed");
181
- });
182
- it("should handle complex update with multiple properties and status validation", async () => {
183
- const objectWithPrereqs = {
184
- ...mockTrellisObject,
185
- prerequisites: ["T-prereq-1"],
186
- };
187
- mockRepository.getObjectById.mockResolvedValue(objectWithPrereqs);
188
- mockRepository.saveObject.mockResolvedValue();
189
- mockValidateStatusTransition.mockResolvedValue();
190
- const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
191
- id: "T-test-task",
192
- priority: "high",
193
- prerequisites: ["T-prereq-1", "T-prereq-2", "T-prereq-3"],
194
- body: "Updated body with new requirements",
195
- status: "in-progress",
196
- });
197
- const expectedUpdatedObject = {
198
- ...objectWithPrereqs,
199
- priority: "high",
200
- prerequisites: ["T-prereq-1", "T-prereq-2", "T-prereq-3"],
201
- body: "Updated body with new requirements",
202
- status: "in-progress",
203
- };
204
- expect(mockValidateStatusTransition).toHaveBeenCalledWith(expectedUpdatedObject, mockRepository);
205
- expect(mockRepository.saveObject).toHaveBeenCalledWith(expectedUpdatedObject);
206
- expect(result.content[0].text).toContain("Successfully updated object:");
88
+ })).rejects.toThrow("Service error");
207
89
  });
208
90
  });
209
91
  });
@@ -1 +1 @@
1
- {"version":3,"file":"updateObjectTool.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/updateObjectTool.test.ts"],"names":[],"mappings":";;AACA,yCAKsB;AACtB,0DAAyD;AAEzD,6CAA6C;AAC7C,IAAI,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,wBAAwB,EAAE,IAAI,CAAC,EAAE,EAAE;CACpC,CAAC,CAAC,CAAC;AAEJ,wFAAqF;AAErF,MAAM,4BAA4B,GAChC,mDAEC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,cAAuC,CAAC;IAE5C,UAAU,CAAC,GAAG,EAAE;QACd,cAAc,GAAG;YACf,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;YACxB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;YACrB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;YACrB,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE;SACxB,CAAC;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,MAAM,iBAAiB,GAAkB;YACvC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,0BAAiB,CAAC,IAAI;YAC5B,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,4BAAmB,CAAC,IAAI;YAChC,QAAQ,EAAE,8BAAqB,CAAC,MAAM;YACtC,MAAM,EAAE,gBAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,sBAAsB;SAChC,CAAC;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAC9C,4BAA4B,CAAC,iBAAiB,EAAE,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;gBAC3C,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YAEH,MAAM,qBAAqB,GAAG;gBAC5B,GAAG,iBAAiB;gBACpB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;gBAC3C,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,OAAO;aAChB,CAAC;YAEF,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YACzE,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,qBAAqB,EACrB,cAAc,CACf,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACpD,qBAAqB,CACtB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAE9C,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,MAAM,qBAAqB,GAAG;gBAC5B,GAAG,iBAAiB;gBACpB,QAAQ,EAAE,KAAK;aAChB,CAAC;YAEF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACpD,qBAAqB,CACtB,CAAC;YACF,MAAM,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,eAAe;gBACnB,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACvD,eAAe,CAChB,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACzD,MAAM,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,iDAAiD,CAClD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAC9C,4BAA4B,CAAC,iBAAiB,EAAE,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,MAAM,CAAC,gBAAgB,CAAC;gBACtB,GAAG,iBAAiB;gBACpB,MAAM,EAAE,aAAa;aACtB,CAAC,EACF,cAAc,CACf,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAC9C,4BAA4B,CAAC,iBAAiB,EAAE,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,MAAM,CAAC,gBAAgB,CAAC;gBACtB,GAAG,iBAAiB;gBACpB,MAAM,EAAE,MAAM;aACf,CAAC,EACF,cAAc,CACf,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,IAAI,KAAK,CAC/B,qGAAqG,CACtG,CAAC;YACF,4BAA4B,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAEhE,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,4BAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACxD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,4HAA4H,CAC7H,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAE9C,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5D,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAE9C,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;YAEH,MAAM,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5D,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAC5C,IAAI,KAAK,CAAC,4BAA4B,CAAC,CACxC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,mDAAmD,CACpD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACzE,4BAA4B,CAAC,iBAAiB,EAAE,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,uCAAuC,CACxC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,4BAA4B,CAAC,iBAAiB,CAC5C,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAC/B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,0CAA0C,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,iBAAiB,GAAG;gBACxB,GAAG,iBAAiB;gBACpB,aAAa,EAAE,CAAC,YAAY,CAAC;aAC9B,CAAC;YAEF,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClE,cAAc,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAC9C,4BAA4B,CAAC,iBAAiB,EAAE,CAAC;YAEjD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAkB,EAAC,cAAc,EAAE;gBACtD,EAAE,EAAE,aAAa;gBACjB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;gBACzD,IAAI,EAAE,oCAAoC;gBAC1C,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YAEH,MAAM,qBAAqB,GAAG;gBAC5B,GAAG,iBAAiB;gBACpB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;gBACzD,IAAI,EAAE,oCAAoC;gBAC1C,MAAM,EAAE,aAAa;aACtB,CAAC;YAEF,MAAM,CAAC,4BAA4B,CAAC,CAAC,oBAAoB,CACvD,qBAAqB,EACrB,cAAc,CACf,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACpD,qBAAqB,CACtB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"updateObjectTool.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/updateObjectTool.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Repository } from "../repositories";
2
+ import { TaskTrellisService } from "../services/TaskTrellisService";
3
+ export declare const appendModifiedFilesTool: {
4
+ readonly name: "append_modified_files";
5
+ readonly description: "Appends modified files information to a trellis object in the task trellis system\n\nUse this tool to record files that have been modified during task execution, along with descriptions of the modifications made. This helps maintain a comprehensive record of changes associated with each work item for tracking and audit purposes.\n\nFile modification tracking purposes:\n- Record which files were changed during task execution\n- Document the nature of changes made to each file\n- Maintain audit trail of file-level modifications\n- Support code review and change management processes\n- Enable impact analysis for future changes\n\nInput requirements:\n- Object ID: The unique identifier of the trellis object to update\n- Files Changed: A record mapping file paths to descriptions of modifications\n\nFile path guidelines:\n- Use relative paths from project root (e.g., \"src/components/Button.tsx\")\n- Include file extensions for clarity\n- Use forward slashes for path separators\n\nDescription guidelines:\n- Provide clear, concise descriptions of what was changed\n- Focus on the purpose and impact of changes rather than implementation details\n- Use consistent terminology across related modifications\n\nThe tool automatically merges descriptions for files that were previously modified, creating a comprehensive change history for each file within the context of the trellis object.";
6
+ readonly inputSchema: {
7
+ readonly type: "object";
8
+ readonly properties: {
9
+ readonly id: {
10
+ readonly type: "string";
11
+ readonly description: "ID of the trellis object to update with modified files information";
12
+ };
13
+ readonly filesChanged: {
14
+ readonly type: "object";
15
+ readonly description: "Record of file paths to descriptions of modifications made";
16
+ readonly additionalProperties: {
17
+ readonly type: "string";
18
+ };
19
+ };
20
+ };
21
+ readonly required: readonly ["id", "filesChanged"];
22
+ };
23
+ };
24
+ export declare function handleAppendModifiedFiles(service: TaskTrellisService, repository: Repository, args: unknown): Promise<{
25
+ content: Array<{
26
+ type: string;
27
+ text: string;
28
+ }>;
29
+ }>;
30
+ //# sourceMappingURL=appendModifiedFilesTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appendModifiedFilesTool.d.ts","sourceRoot":"","sources":["../../src/tools/appendModifiedFilesTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;CA+C1B,CAAC;AAEX,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAO7D"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appendModifiedFilesTool = void 0;
4
+ exports.handleAppendModifiedFiles = handleAppendModifiedFiles;
5
+ exports.appendModifiedFilesTool = {
6
+ name: "append_modified_files",
7
+ description: `Appends modified files information to a trellis object in the task trellis system
8
+
9
+ Use this tool to record files that have been modified during task execution, along with descriptions of the modifications made. This helps maintain a comprehensive record of changes associated with each work item for tracking and audit purposes.
10
+
11
+ File modification tracking purposes:
12
+ - Record which files were changed during task execution
13
+ - Document the nature of changes made to each file
14
+ - Maintain audit trail of file-level modifications
15
+ - Support code review and change management processes
16
+ - Enable impact analysis for future changes
17
+
18
+ Input requirements:
19
+ - Object ID: The unique identifier of the trellis object to update
20
+ - Files Changed: A record mapping file paths to descriptions of modifications
21
+
22
+ File path guidelines:
23
+ - Use relative paths from project root (e.g., "src/components/Button.tsx")
24
+ - Include file extensions for clarity
25
+ - Use forward slashes for path separators
26
+
27
+ Description guidelines:
28
+ - Provide clear, concise descriptions of what was changed
29
+ - Focus on the purpose and impact of changes rather than implementation details
30
+ - Use consistent terminology across related modifications
31
+
32
+ The tool automatically merges descriptions for files that were previously modified, creating a comprehensive change history for each file within the context of the trellis object.`,
33
+ inputSchema: {
34
+ type: "object",
35
+ properties: {
36
+ id: {
37
+ type: "string",
38
+ description: "ID of the trellis object to update with modified files information",
39
+ },
40
+ filesChanged: {
41
+ type: "object",
42
+ description: "Record of file paths to descriptions of modifications made",
43
+ additionalProperties: {
44
+ type: "string",
45
+ },
46
+ },
47
+ },
48
+ required: ["id", "filesChanged"],
49
+ },
50
+ };
51
+ async function handleAppendModifiedFiles(service, repository, args) {
52
+ const { id, filesChanged } = args;
53
+ return await service.appendModifiedFiles(repository, id, filesChanged);
54
+ }
55
+ //# sourceMappingURL=appendModifiedFilesTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appendModifiedFilesTool.js","sourceRoot":"","sources":["../../src/tools/appendModifiedFilesTool.ts"],"names":[],"mappings":";;;AAoDA,8DAWC;AA5DY,QAAA,uBAAuB,GAAG;IACrC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;oLAyBqK;IAClL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,oEAAoE;aACvE;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,4DAA4D;gBAC9D,oBAAoB,EAAE;oBACpB,IAAI,EAAE,QAAQ;iBACf;aACF;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC;KACjC;CACO,CAAC;AAEJ,KAAK,UAAU,yBAAyB,CAC7C,OAA2B,EAC3B,UAAsB,EACtB,IAAa;IAEb,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,IAG5B,CAAC;IAEF,OAAO,MAAM,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;AACzE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Repository } from "../repositories";
2
+ import { TaskTrellisService } from "../services/TaskTrellisService";
2
3
  export declare const appendObjectLogTool: {
3
4
  readonly name: "append_object_log";
4
5
  readonly description: "Appends content to an object's log in the task trellis system\n\nUse this tool to add progress updates, notes, or activity records to an object's audit trail. Essential for tracking work history, documenting decisions, and maintaining transparency in task execution.\n\nLog entry purposes:\n- Record progress milestones and status changes\n- Document challenges encountered and solutions applied\n- Note important decisions or changes in approach\n- Track time spent or resources used\n- Log external dependencies or blockers\n- Record completion details and outcomes\n\nLog content guidelines:\n- Use clear, descriptive entries with context\n- Include timestamps (automatically added by system)\n- Reference specific files, commits, or external resources when relevant\n- Note any changes to scope, requirements, or approach\n- Document lessons learned or insights gained\n\nActivity tracking patterns:\n- Starting work: \"Started implementation of feature X\"\n- Progress updates: \"Completed database schema changes, moving to API layer\"\n- Blocking issues: \"Blocked on external API access, contacted team\"\n- Problem resolution: \"Resolved memory leak by optimizing data structure\"\n- Completion: \"Task completed, all tests passing, PR submitted\"\n\nThe log creates a permanent audit trail that helps with project retrospectives, debugging issues, and understanding work evolution over time.";
@@ -17,10 +18,10 @@ export declare const appendObjectLogTool: {
17
18
  readonly required: readonly ["id", "contents"];
18
19
  };
19
20
  };
20
- export declare function handleAppendObjectLog(repository: Repository, args: unknown): Promise<{
21
- content: {
21
+ export declare function handleAppendObjectLog(service: TaskTrellisService, repository: Repository, args: unknown): Promise<{
22
+ content: Array<{
22
23
  type: string;
23
24
  text: string;
24
- }[];
25
+ }>;
25
26
  }>;
26
27
  //# sourceMappingURL=appendObjectLogTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appendObjectLogTool.d.ts","sourceRoot":"","sources":["../../src/tools/appendObjectLogTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CA2CtB,CAAC;AAEX,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,OAAO;;;;;GAoDd"}
1
+ {"version":3,"file":"appendObjectLogTool.d.ts","sourceRoot":"","sources":["../../src/tools/appendObjectLogTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CA2CtB,CAAC;AAEX,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,OAAO;;;;;GAQd"}
@@ -46,46 +46,8 @@ The log creates a permanent audit trail that helps with project retrospectives,
46
46
  required: ["id", "contents"],
47
47
  },
48
48
  };
49
- async function handleAppendObjectLog(repository, args) {
49
+ async function handleAppendObjectLog(service, repository, args) {
50
50
  const { id, contents } = args;
51
- try {
52
- // Load the existing object
53
- const existingObject = await repository.getObjectById(id);
54
- if (!existingObject) {
55
- return {
56
- content: [
57
- {
58
- type: "text",
59
- text: `Error: Object with ID '${id}' not found`,
60
- },
61
- ],
62
- };
63
- }
64
- // Create updated object with new log entry appended
65
- const updatedObject = {
66
- ...existingObject,
67
- log: [...existingObject.log, contents],
68
- };
69
- // Save the updated object
70
- await repository.saveObject(updatedObject);
71
- return {
72
- content: [
73
- {
74
- type: "text",
75
- text: `Successfully appended to object log: ${JSON.stringify({ id, contents, totalLogEntries: updatedObject.log.length }, null, 2)}`,
76
- },
77
- ],
78
- };
79
- }
80
- catch (error) {
81
- return {
82
- content: [
83
- {
84
- type: "text",
85
- text: `Error appending to object log: ${error instanceof Error ? error.message : String(error)}`,
86
- },
87
- ],
88
- };
89
- }
51
+ return service.appendObjectLog(repository, id, contents);
90
52
  }
91
53
  //# sourceMappingURL=appendObjectLogTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appendObjectLogTool.js","sourceRoot":"","sources":["../../src/tools/appendObjectLogTool.ts"],"names":[],"mappings":";;;AA+CA,sDAsDC;AAnGY,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;8IA0B+H;IAC5I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;aAC7C;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;KAC7B;CACO,CAAC;AAEJ,KAAK,UAAU,qBAAqB,CACzC,UAAsB,EACtB,IAAa;IAEb,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAGxB,CAAC;IAEF,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0BAA0B,EAAE,aAAa;qBAChD;iBACF;aACF,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,MAAM,aAAa,GAAG;YACpB,GAAG,cAAc;YACjB,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC;SACvC,CAAC;QAEF,0BAA0B;QAC1B,MAAM,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE3C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,wCAAwC,IAAI,CAAC,SAAS,CAC1D,EAAE,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAC3D,IAAI,EACJ,CAAC,CACF,EAAE;iBACJ;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACjG;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"appendObjectLogTool.js","sourceRoot":"","sources":["../../src/tools/appendObjectLogTool.ts"],"names":[],"mappings":";;;AAgDA,sDAWC;AAxDY,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;8IA0B+H;IAC5I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;aAC7C;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;KAC7B;CACO,CAAC;AAEJ,KAAK,UAAU,qBAAqB,CACzC,OAA2B,EAC3B,UAAsB,EACtB,IAAa;IAEb,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAGxB,CAAC;IAEF,OAAO,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Repository } from "../repositories";
2
+ import { TaskTrellisService } from "../services/TaskTrellisService";
2
3
  export declare const claimTaskTool: {
3
4
  readonly name: "claim_task";
4
5
  readonly description: "Claims a task in the task trellis system\n\nUse this tool to assign yourself to available tasks for execution. Essential for AI agents to pick up work items from the task queue and begin execution.\n\nClaiming behavior:\n- Without 'taskId': Claims the next available task based on priority and readiness\n- With 'taskId': Claims a specific task by ID if available and ready\n- 'scope': Limits claiming to tasks within a specific project or area\n- 'force': Overrides normal claiming restrictions (use with caution)\n\nTask readiness criteria:\n- Task status allows claiming (typically 'draft' or 'open' states)\n- All prerequisites are satisfied (prerequisite tasks completed)\n- Task is not already claimed by another agent\n- Task falls within specified scope if provided\n\nClaiming workflow:\n1. System evaluates available tasks against readiness criteria\n2. Selects highest priority task that meets requirements\n3. Updates task status to 'in-progress\n4. Associates task with the claiming agent\n5. Returns claimed task details for execution\n\nCommon patterns:\n- Claim any ready task: (no parameters)\n- Claim from project: scope='P-project-name'\n- Claim specific task: taskId='T-specific-task-id'\n- Force claim blocked task: taskId='T-task-id', force=true\n\nEssential for autonomous task execution workflows where agents need to discover and claim work items dynamically.";
@@ -21,10 +22,10 @@ export declare const claimTaskTool: {
21
22
  };
22
23
  };
23
24
  };
24
- export declare function handleClaimTask(repository: Repository, args: unknown): Promise<{
25
- content: {
25
+ export declare function handleClaimTask(service: TaskTrellisService, repository: Repository, args: unknown): Promise<{
26
+ content: Array<{
26
27
  type: string;
27
28
  text: string;
28
- }[];
29
+ }>;
29
30
  }>;
30
31
  //# sourceMappingURL=claimTaskTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claimTaskTool.d.ts","sourceRoot":"","sources":["../../src/tools/claimTaskTool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK7C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;CAkDhB,CAAC;AAEX,wBAAsB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO;;;;;GAwC1E"}
1
+ {"version":3,"file":"claimTaskTool.d.ts","sourceRoot":"","sources":["../../src/tools/claimTaskTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;CAkDhB,CAAC;AAEX,wBAAsB,eAAe,CACnC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,OAAO;;;;;GAad"}
@@ -2,12 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.claimTaskTool = void 0;
4
4
  exports.handleClaimTask = handleClaimTask;
5
- const models_1 = require("../models");
6
- const TrellisObjectStatus_1 = require("../models/TrellisObjectStatus");
7
- const TrellisObjectType_1 = require("../models/TrellisObjectType");
8
- const checkPrerequisitesComplete_1 = require("../utils/checkPrerequisitesComplete");
9
- const filterUnavailableObjects_1 = require("../utils/filterUnavailableObjects");
10
- const sortTrellisObjects_1 = require("../utils/sortTrellisObjects");
11
5
  exports.claimTaskTool = {
12
6
  name: "claim_task",
13
7
  description: `Claims a task in the task trellis system
@@ -59,80 +53,8 @@ Essential for autonomous task execution workflows where agents need to discover
59
53
  },
60
54
  },
61
55
  };
62
- async function handleClaimTask(repository, args) {
56
+ async function handleClaimTask(service, repository, args) {
63
57
  const { scope, taskId, force = false, } = args;
64
- try {
65
- let claimedTask;
66
- if (taskId) {
67
- claimedTask = await claimSpecificTask(taskId, force, repository);
68
- }
69
- else {
70
- claimedTask = await findNextAvailableTask(scope, repository);
71
- }
72
- const updatedTask = await updateTaskStatus(claimedTask, repository);
73
- return {
74
- content: [
75
- {
76
- type: "text",
77
- text: `Successfully claimed task: ${JSON.stringify(updatedTask, null, 2)}`,
78
- },
79
- ],
80
- };
81
- }
82
- catch (error) {
83
- return {
84
- content: [
85
- {
86
- type: "text",
87
- text: `Error claiming task: ${error instanceof Error ? error.message : String(error)}`,
88
- },
89
- ],
90
- };
91
- }
92
- }
93
- async function validateTaskForClaiming(task, taskId, force, repository) {
94
- // Validate it's a task
95
- if (task.type !== TrellisObjectType_1.TrellisObjectType.TASK) {
96
- throw new Error(`Object with ID "${taskId}" is not a task (type: ${task.type})`);
97
- }
98
- if (!force) {
99
- // Validate status is draft or open
100
- if (!(0, models_1.isClaimable)(task)) {
101
- throw new Error(`Task "${taskId}" cannot be claimed (status: ${task.status}). Task must be in draft or open status.`);
102
- }
103
- // Validate all prerequisites are complete
104
- const prerequisitesComplete = await (0, checkPrerequisitesComplete_1.checkPrerequisitesComplete)(task, repository);
105
- if (!prerequisitesComplete) {
106
- throw new Error(`Task "${taskId}" cannot be claimed. Not all prerequisites are complete.`);
107
- }
108
- }
109
- }
110
- async function claimSpecificTask(taskId, force, repository) {
111
- const object = await repository.getObjectById(taskId);
112
- if (!object) {
113
- throw new Error(`Task with ID "${taskId}" not found`);
114
- }
115
- await validateTaskForClaiming(object, taskId, force, repository);
116
- return object;
117
- }
118
- async function findNextAvailableTask(scope, repository) {
119
- const objects = await repository.getObjects(false, // includeClosed
120
- scope, TrellisObjectType_1.TrellisObjectType.TASK);
121
- // Filter to get only available tasks
122
- const availableTasks = (0, filterUnavailableObjects_1.filterUnavailableObjects)(objects);
123
- if (availableTasks.length === 0) {
124
- throw new Error("No available tasks to claim");
125
- }
126
- // Sort by priority and return the top one
127
- const sortedTasks = (0, sortTrellisObjects_1.sortTrellisObjects)(availableTasks);
128
- return sortedTasks[0];
129
- }
130
- async function updateTaskStatus(task, repository) {
131
- const updatedTask = {
132
- ...task,
133
- status: TrellisObjectStatus_1.TrellisObjectStatus.IN_PROGRESS,
134
- };
135
- await repository.saveObject(updatedTask);
136
- return updatedTask;
58
+ return service.claimTask(repository, scope, taskId, force);
137
59
  }
138
60
  //# sourceMappingURL=claimTaskTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claimTaskTool.js","sourceRoot":"","sources":["../../src/tools/claimTaskTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claimTaskTool.js","sourceRoot":"","sources":["../../src/tools/claimTaskTool.ts"],"names":[],"mappings":";;;AAuDA,0CAgBC;AApEY,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kHA6BmG;IAChH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qCAAqC;aACnD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,sCAAsC;gBACnD,OAAO,EAAE,KAAK;aACf;SACF;KACF;CACO,CAAC;AAEJ,KAAK,UAAU,eAAe,CACnC,OAA2B,EAC3B,UAAsB,EACtB,IAAa;IAEb,MAAM,EACJ,KAAK,EACL,MAAM,EACN,KAAK,GAAG,KAAK,GACd,GAAG,IAIH,CAAC;IAEF,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC"}