@langadventurellc/task-trellis-mcp 2.1.0 → 2.3.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 (196) hide show
  1. package/README.md +7 -0
  2. package/dist/__tests__/serverStartup.test.js +6 -0
  3. package/dist/__tests__/serverStartup.test.js.map +1 -1
  4. package/dist/http/__tests__/attachmentHandler.test.d.ts +2 -0
  5. package/dist/http/__tests__/attachmentHandler.test.d.ts.map +1 -0
  6. package/dist/http/__tests__/attachmentHandler.test.js +130 -0
  7. package/dist/http/__tests__/attachmentHandler.test.js.map +1 -0
  8. package/dist/http/__tests__/projectTreePage.test.js +65 -1
  9. package/dist/http/__tests__/projectTreePage.test.js.map +1 -1
  10. package/dist/http/index.d.ts.map +1 -1
  11. package/dist/http/index.js +1 -0
  12. package/dist/http/index.js.map +1 -1
  13. package/dist/http/projectTreePage/attachmentHandler.d.ts +4 -0
  14. package/dist/http/projectTreePage/attachmentHandler.d.ts.map +1 -0
  15. package/dist/http/projectTreePage/attachmentHandler.js +73 -0
  16. package/dist/http/projectTreePage/attachmentHandler.js.map +1 -0
  17. package/dist/http/projectTreePage/detailViewHandler.d.ts.map +1 -1
  18. package/dist/http/projectTreePage/detailViewHandler.js +2 -1
  19. package/dist/http/projectTreePage/detailViewHandler.js.map +1 -1
  20. package/dist/http/projectTreePage/index.d.ts +1 -0
  21. package/dist/http/projectTreePage/index.d.ts.map +1 -1
  22. package/dist/http/projectTreePage/index.js +3 -1
  23. package/dist/http/projectTreePage/index.js.map +1 -1
  24. package/dist/http/projectTreePage/renderDetailView.d.ts +1 -1
  25. package/dist/http/projectTreePage/renderDetailView.d.ts.map +1 -1
  26. package/dist/http/projectTreePage/renderDetailView.js +14 -3
  27. package/dist/http/projectTreePage/renderDetailView.js.map +1 -1
  28. package/dist/repositories/Repository.d.ts +4 -0
  29. package/dist/repositories/Repository.d.ts.map +1 -1
  30. package/dist/repositories/local/LocalRepository.d.ts +4 -0
  31. package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
  32. package/dist/repositories/local/LocalRepository.js +20 -0
  33. package/dist/repositories/local/LocalRepository.js.map +1 -1
  34. package/dist/repositories/local/RepoIndex.d.ts +29 -0
  35. package/dist/repositories/local/RepoIndex.d.ts.map +1 -0
  36. package/dist/repositories/local/RepoIndex.js +81 -0
  37. package/dist/repositories/local/RepoIndex.js.map +1 -0
  38. package/dist/repositories/local/RepoIndexEntry.d.ts +5 -0
  39. package/dist/repositories/local/RepoIndexEntry.d.ts.map +1 -0
  40. package/dist/repositories/local/RepoIndexEntry.js +3 -0
  41. package/dist/repositories/local/RepoIndexEntry.js.map +1 -0
  42. package/dist/repositories/local/__tests__/RepoIndex.test.d.ts +2 -0
  43. package/dist/repositories/local/__tests__/RepoIndex.test.d.ts.map +1 -0
  44. package/dist/repositories/local/__tests__/RepoIndex.test.js +93 -0
  45. package/dist/repositories/local/__tests__/RepoIndex.test.js.map +1 -0
  46. package/dist/repositories/local/__tests__/copyAttachment.test.d.ts +2 -0
  47. package/dist/repositories/local/__tests__/copyAttachment.test.d.ts.map +1 -0
  48. package/dist/repositories/local/__tests__/copyAttachment.test.js +102 -0
  49. package/dist/repositories/local/__tests__/copyAttachment.test.js.map +1 -0
  50. package/dist/repositories/local/__tests__/deleteAttachment.test.d.ts +2 -0
  51. package/dist/repositories/local/__tests__/deleteAttachment.test.d.ts.map +1 -0
  52. package/dist/repositories/local/__tests__/deleteAttachment.test.js +87 -0
  53. package/dist/repositories/local/__tests__/deleteAttachment.test.js.map +1 -0
  54. package/dist/repositories/local/__tests__/deleteObjectById.test.js +33 -0
  55. package/dist/repositories/local/__tests__/deleteObjectById.test.js.map +1 -1
  56. package/dist/repositories/local/__tests__/getAttachmentsFolder.test.d.ts +2 -0
  57. package/dist/repositories/local/__tests__/getAttachmentsFolder.test.d.ts.map +1 -0
  58. package/dist/repositories/local/__tests__/getAttachmentsFolder.test.js +105 -0
  59. package/dist/repositories/local/__tests__/getAttachmentsFolder.test.js.map +1 -0
  60. package/dist/repositories/local/__tests__/getChildrenByFilePath.test.js +14 -0
  61. package/dist/repositories/local/__tests__/getChildrenByFilePath.test.js.map +1 -1
  62. package/dist/repositories/local/__tests__/getObjectById.test.js +73 -0
  63. package/dist/repositories/local/__tests__/getObjectById.test.js.map +1 -1
  64. package/dist/repositories/local/__tests__/listAttachments.test.d.ts +2 -0
  65. package/dist/repositories/local/__tests__/listAttachments.test.d.ts.map +1 -0
  66. package/dist/repositories/local/__tests__/listAttachments.test.js +100 -0
  67. package/dist/repositories/local/__tests__/listAttachments.test.js.map +1 -0
  68. package/dist/repositories/local/copyAttachment.d.ts +8 -0
  69. package/dist/repositories/local/copyAttachment.d.ts.map +1 -0
  70. package/dist/repositories/local/copyAttachment.js +42 -0
  71. package/dist/repositories/local/copyAttachment.js.map +1 -0
  72. package/dist/repositories/local/deleteAttachment.d.ts +6 -0
  73. package/dist/repositories/local/deleteAttachment.d.ts.map +1 -0
  74. package/dist/repositories/local/deleteAttachment.js +26 -0
  75. package/dist/repositories/local/deleteAttachment.js.map +1 -0
  76. package/dist/repositories/local/deleteObjectById.d.ts.map +1 -1
  77. package/dist/repositories/local/deleteObjectById.js +18 -0
  78. package/dist/repositories/local/deleteObjectById.js.map +1 -1
  79. package/dist/repositories/local/getAttachmentsFolder.d.ts +8 -0
  80. package/dist/repositories/local/getAttachmentsFolder.d.ts.map +1 -0
  81. package/dist/repositories/local/getAttachmentsFolder.js +62 -0
  82. package/dist/repositories/local/getAttachmentsFolder.js.map +1 -0
  83. package/dist/repositories/local/getChildrenByFilePath.d.ts.map +1 -1
  84. package/dist/repositories/local/getChildrenByFilePath.js +4 -22
  85. package/dist/repositories/local/getChildrenByFilePath.js.map +1 -1
  86. package/dist/repositories/local/getObjectById.d.ts +4 -5
  87. package/dist/repositories/local/getObjectById.d.ts.map +1 -1
  88. package/dist/repositories/local/getObjectById.js +21 -27
  89. package/dist/repositories/local/getObjectById.js.map +1 -1
  90. package/dist/repositories/local/getObjects.d.ts.map +1 -1
  91. package/dist/repositories/local/getObjects.js +63 -76
  92. package/dist/repositories/local/getObjects.js.map +1 -1
  93. package/dist/repositories/local/listAttachments.d.ts +4 -0
  94. package/dist/repositories/local/listAttachments.d.ts.map +1 -0
  95. package/dist/repositories/local/listAttachments.js +26 -0
  96. package/dist/repositories/local/listAttachments.js.map +1 -0
  97. package/dist/server.js +6 -0
  98. package/dist/server.js.map +1 -1
  99. package/dist/services/TaskTrellisService.d.ts +14 -0
  100. package/dist/services/TaskTrellisService.d.ts.map +1 -1
  101. package/dist/services/local/LocalTaskTrellisService.d.ts +12 -0
  102. package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -1
  103. package/dist/services/local/LocalTaskTrellisService.js +8 -0
  104. package/dist/services/local/LocalTaskTrellisService.js.map +1 -1
  105. package/dist/services/local/__tests__/appendAffectedFiles.test.js +35 -0
  106. package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -1
  107. package/dist/services/local/__tests__/appendModifiedFiles.test.js +4 -0
  108. package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -1
  109. package/dist/services/local/__tests__/appendObjectLog.test.js +4 -0
  110. package/dist/services/local/__tests__/appendObjectLog.test.js.map +1 -1
  111. package/dist/services/local/__tests__/claimTask.test.js +4 -0
  112. package/dist/services/local/__tests__/claimTask.test.js.map +1 -1
  113. package/dist/services/local/__tests__/completeTask.test.js +4 -0
  114. package/dist/services/local/__tests__/completeTask.test.js.map +1 -1
  115. package/dist/services/local/__tests__/createObject.test.js +4 -0
  116. package/dist/services/local/__tests__/createObject.test.js.map +1 -1
  117. package/dist/services/local/__tests__/getNextAvailableIssue.test.js +4 -0
  118. package/dist/services/local/__tests__/getNextAvailableIssue.test.js.map +1 -1
  119. package/dist/services/local/__tests__/listObjects.test.js +4 -0
  120. package/dist/services/local/__tests__/listObjects.test.js.map +1 -1
  121. package/dist/services/local/__tests__/pruneClosed.test.js +4 -0
  122. package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -1
  123. package/dist/services/local/__tests__/updateObject.test.js +4 -0
  124. package/dist/services/local/__tests__/updateObject.test.js.map +1 -1
  125. package/dist/services/local/addAttachment.d.ts +9 -0
  126. package/dist/services/local/addAttachment.d.ts.map +1 -0
  127. package/dist/services/local/addAttachment.js +25 -0
  128. package/dist/services/local/addAttachment.js.map +1 -0
  129. package/dist/services/local/appendAffectedFiles.d.ts.map +1 -1
  130. package/dist/services/local/appendAffectedFiles.js +18 -1
  131. package/dist/services/local/appendAffectedFiles.js.map +1 -1
  132. package/dist/services/local/removeAttachment.d.ts +9 -0
  133. package/dist/services/local/removeAttachment.d.ts.map +1 -0
  134. package/dist/services/local/removeAttachment.js +25 -0
  135. package/dist/services/local/removeAttachment.js.map +1 -0
  136. package/dist/tools/__tests__/addAttachmentTool.test.d.ts +2 -0
  137. package/dist/tools/__tests__/addAttachmentTool.test.d.ts.map +1 -0
  138. package/dist/tools/__tests__/addAttachmentTool.test.js +54 -0
  139. package/dist/tools/__tests__/addAttachmentTool.test.js.map +1 -0
  140. package/dist/tools/__tests__/appendModifiedFilesTool.test.js +32 -0
  141. package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -1
  142. package/dist/tools/__tests__/appendObjectLogTool.test.js +4 -0
  143. package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
  144. package/dist/tools/__tests__/claimTaskTool.test.js +6 -0
  145. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
  146. package/dist/tools/__tests__/completeTaskTool.test.js +6 -0
  147. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  148. package/dist/tools/__tests__/createObjectTool.test.js +4 -0
  149. package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
  150. package/dist/tools/__tests__/deleteObjectTool.test.js +4 -0
  151. package/dist/tools/__tests__/deleteObjectTool.test.js.map +1 -1
  152. package/dist/tools/__tests__/getObjectTool.test.js +29 -2
  153. package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
  154. package/dist/tools/__tests__/listObjectsTool.test.js +6 -0
  155. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
  156. package/dist/tools/__tests__/removeAttachmentTool.test.d.ts +2 -0
  157. package/dist/tools/__tests__/removeAttachmentTool.test.d.ts.map +1 -0
  158. package/dist/tools/__tests__/removeAttachmentTool.test.js +57 -0
  159. package/dist/tools/__tests__/removeAttachmentTool.test.js.map +1 -0
  160. package/dist/tools/__tests__/updateObjectTool.test.js +4 -0
  161. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
  162. package/dist/tools/addAttachmentTool.d.ts +27 -0
  163. package/dist/tools/addAttachmentTool.d.ts.map +1 -0
  164. package/dist/tools/addAttachmentTool.js +29 -0
  165. package/dist/tools/addAttachmentTool.js.map +1 -0
  166. package/dist/tools/appendModifiedFilesTool.d.ts.map +1 -1
  167. package/dist/tools/appendModifiedFilesTool.js +45 -0
  168. package/dist/tools/appendModifiedFilesTool.js.map +1 -1
  169. package/dist/tools/getObjectTool.d.ts.map +1 -1
  170. package/dist/tools/getObjectTool.js +1 -0
  171. package/dist/tools/getObjectTool.js.map +1 -1
  172. package/dist/tools/index.d.ts +2 -0
  173. package/dist/tools/index.d.ts.map +1 -1
  174. package/dist/tools/index.js +7 -1
  175. package/dist/tools/index.js.map +1 -1
  176. package/dist/tools/removeAttachmentTool.d.ts +27 -0
  177. package/dist/tools/removeAttachmentTool.d.ts.map +1 -0
  178. package/dist/tools/removeAttachmentTool.js +29 -0
  179. package/dist/tools/removeAttachmentTool.js.map +1 -0
  180. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js +4 -0
  181. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js.map +1 -1
  182. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +16 -0
  183. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
  184. package/dist/utils/__tests__/filterUnavailableObjects.test.js +4 -0
  185. package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
  186. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +16 -0
  187. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
  188. package/dist/utils/__tests__/updateParentHierarchy.test.js +4 -0
  189. package/dist/utils/__tests__/updateParentHierarchy.test.js.map +1 -1
  190. package/dist/validation/__tests__/validateObjectCreation.test.js +4 -0
  191. package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
  192. package/dist/validation/__tests__/validateParentExists.test.js +4 -0
  193. package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
  194. package/dist/validation/__tests__/validateStatusTransition.test.js +4 -0
  195. package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -1
  196. package/package.json +1 -1
@@ -38,6 +38,7 @@ const promises_1 = require("fs/promises");
38
38
  const path_1 = require("path");
39
39
  const utils_1 = require("../../utils");
40
40
  const findMarkdownFiles_1 = require("./findMarkdownFiles");
41
+ const getAttachmentsFolder_1 = require("./getAttachmentsFolder");
41
42
  // Should this be replaced by getObjectById?
42
43
  async function findObjectById(id, planningRoot) {
43
44
  const markdownFiles = await (0, findMarkdownFiles_1.findMarkdownFiles)(planningRoot);
@@ -76,6 +77,7 @@ async function deleteAssociatedFolder(id, filePath) {
76
77
  if (!id.startsWith("P-") && !id.startsWith("E-") && !id.startsWith("F-")) {
77
78
  return;
78
79
  }
80
+ // rm -rf on the object folder also removes the attachments/ subfolder within it.
79
81
  const associatedFolderPath = (0, path_1.dirname)(filePath);
80
82
  try {
81
83
  await (0, promises_1.rm)(associatedFolderPath, { recursive: true, force: true });
@@ -104,7 +106,23 @@ async function deleteObjectById(id, planningRoot, force) {
104
106
  if (!force) {
105
107
  await checkObjectDependencies(object, planningRoot);
106
108
  }
109
+ // Resolve task attachments folder before deletion. Best-effort: tolerate a
110
+ // broken parent chain (e.g., orphaned child during prune) — cleanup is skipped
111
+ // when the path can't be computed.
112
+ let taskAttachmentsFolder = null;
113
+ if (id.startsWith("T-")) {
114
+ try {
115
+ taskAttachmentsFolder = await (0, getAttachmentsFolder_1.getAttachmentsFolder)(foundObject.object, planningRoot);
116
+ }
117
+ catch {
118
+ taskAttachmentsFolder = null;
119
+ }
120
+ }
107
121
  await deleteObjectFile(filePath);
122
+ // For P/E/F, deleteAssociatedFolder rm -rf covers the attachments/ subfolder.
108
123
  await deleteAssociatedFolder(id, filePath);
124
+ if (taskAttachmentsFolder) {
125
+ await (0, promises_1.rm)(taskAttachmentsFolder, { recursive: true, force: true });
126
+ }
109
127
  }
110
128
  //# sourceMappingURL=deleteObjectById.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleteObjectById.js","sourceRoot":"","sources":["../../../src/repositories/local/deleteObjectById.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deleteObjectById.js","sourceRoot":"","sources":["../../../src/repositories/local/deleteObjectById.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type TrellisObject } from "../../models";
2
+ /**
3
+ * Returns the managed attachments folder path for any issue type.
4
+ * Traverses the parent chain for tasks and features to build the correct path.
5
+ * Accepts a pre-loaded object to avoid redundant getObjectById calls.
6
+ */
7
+ export declare function getAttachmentsFolder(obj: TrellisObject, planningRoot: string): Promise<string>;
8
+ //# sourceMappingURL=getAttachmentsFolder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAttachmentsFolder.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getAttachmentsFolder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,cAAc,CAAC;AAqDrE;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAcjB"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAttachmentsFolder = getAttachmentsFolder;
4
+ const path_1 = require("path");
5
+ const models_1 = require("../../models");
6
+ const getObjectById_1 = require("./getObjectById");
7
+ function epicFolder(id, parent, root) {
8
+ if (!parent)
9
+ return (0, path_1.join)(root, "e", id, "attachments");
10
+ return (0, path_1.join)(root, "p", parent, "e", id, "attachments");
11
+ }
12
+ async function featureFolder(id, parent, root) {
13
+ const epic = await (0, getObjectById_1.getObjectById)(parent, root);
14
+ if (!epic)
15
+ throw new Error(`Parent object with ID '${parent}' not found`);
16
+ if (epic.type !== models_1.TrellisObjectType.EPIC)
17
+ throw new Error(`Feature ${id} parent must be an epic`);
18
+ if (!epic.parent)
19
+ return (0, path_1.join)(root, "e", parent, "f", id, "attachments");
20
+ return (0, path_1.join)(root, "p", epic.parent, "e", parent, "f", id, "attachments");
21
+ }
22
+ async function taskFolder(id, parent, root) {
23
+ if (!parent)
24
+ return (0, path_1.join)(root, "t", "attachments", id);
25
+ const feature = await (0, getObjectById_1.getObjectById)(parent, root);
26
+ if (!feature)
27
+ throw new Error(`Parent object with ID '${parent}' not found`);
28
+ if (feature.type !== models_1.TrellisObjectType.FEATURE)
29
+ throw new Error(`Task ${id} parent must be a feature`);
30
+ if (!feature.parent)
31
+ return (0, path_1.join)(root, "f", parent, "t", "attachments", id);
32
+ const epic = await (0, getObjectById_1.getObjectById)(feature.parent, root);
33
+ if (!epic)
34
+ throw new Error(`Parent object with ID '${feature.parent}' not found`);
35
+ if (epic.type !== models_1.TrellisObjectType.EPIC)
36
+ throw new Error(`Feature parent ${feature.parent} must be an epic`);
37
+ if (!epic.parent)
38
+ return (0, path_1.join)(root, "e", feature.parent, "f", parent, "t", "attachments", id);
39
+ return (0, path_1.join)(root, "p", epic.parent, "e", feature.parent, "f", parent, "t", "attachments", id);
40
+ }
41
+ /**
42
+ * Returns the managed attachments folder path for any issue type.
43
+ * Traverses the parent chain for tasks and features to build the correct path.
44
+ * Accepts a pre-loaded object to avoid redundant getObjectById calls.
45
+ */
46
+ async function getAttachmentsFolder(obj, planningRoot) {
47
+ switch (obj.type) {
48
+ case models_1.TrellisObjectType.PROJECT:
49
+ return (0, path_1.join)(planningRoot, "p", obj.id, "attachments");
50
+ case models_1.TrellisObjectType.EPIC:
51
+ return epicFolder(obj.id, obj.parent, planningRoot);
52
+ case models_1.TrellisObjectType.FEATURE:
53
+ if (!obj.parent)
54
+ return (0, path_1.join)(planningRoot, "f", obj.id, "attachments");
55
+ return featureFolder(obj.id, obj.parent, planningRoot);
56
+ case models_1.TrellisObjectType.TASK:
57
+ return taskFolder(obj.id, obj.parent, planningRoot);
58
+ default:
59
+ throw new Error(`Unknown object type: ${String(obj.type)}`);
60
+ }
61
+ }
62
+ //# sourceMappingURL=getAttachmentsFolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAttachmentsFolder.js","sourceRoot":"","sources":["../../../src/repositories/local/getAttachmentsFolder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getChildrenByFilePath.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getChildrenByFilePath.ts"],"names":[],"mappings":"AAkEA;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBnB"}
1
+ {"version":3,"file":"getChildrenByFilePath.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getChildrenByFilePath.ts"],"names":[],"mappings":"AAiDA;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBnB"}
@@ -3,23 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getChildrenByFilePath = getChildrenByFilePath;
4
4
  const promises_1 = require("node:fs/promises");
5
5
  const node_path_1 = require("node:path");
6
- const getObjectByFilePath_1 = require("./getObjectByFilePath");
7
6
  /**
8
7
  * Determines the child folders based on the object type prefix
9
8
  */
10
9
  function getChildFolders(parentDir, objectPrefix) {
11
10
  switch (objectPrefix) {
12
11
  case "P":
13
- // Projects have epics in e/ subfolder
14
12
  return [(0, node_path_1.join)(parentDir, "e")];
15
13
  case "E":
16
- // Epics have features in f/ subfolder
17
14
  return [(0, node_path_1.join)(parentDir, "f")];
18
15
  case "F":
19
- // Features have tasks in t/open/ and t/closed/ subfolders
20
16
  return [(0, node_path_1.join)(parentDir, "t", "open"), (0, node_path_1.join)(parentDir, "t", "closed")];
21
17
  default:
22
- // Tasks (T) and unknown types have no children
23
18
  return [];
24
19
  }
25
20
  }
@@ -34,29 +29,16 @@ async function scanFolderForChildren(folder) {
34
29
  const fullPath = (0, node_path_1.join)(folder, entry);
35
30
  const stats = await (0, promises_1.stat)(fullPath);
36
31
  if (stats.isDirectory()) {
37
- // For P, E, F objects, the markdown file is inside a folder with the same name
38
- // e.g., e/E-epic-name/E-epic-name.md
39
- const mdFilePath = (0, node_path_1.join)(fullPath, `${entry}.md`);
40
- try {
41
- const mdStats = await (0, promises_1.stat)(mdFilePath);
42
- if (mdStats.isFile()) {
43
- const childObject = await (0, getObjectByFilePath_1.getObjectByFilePath)(mdFilePath);
44
- children.push(childObject.id);
45
- }
46
- }
47
- catch {
48
- // File doesn't exist, skip
49
- }
32
+ // For P, E, F objects, the directory name is the child id
33
+ children.push(entry);
50
34
  }
51
35
  else if (stats.isFile() && entry.endsWith(".md")) {
52
- // For tasks in open/closed folders, the markdown files are directly in those folders
53
- const childObject = await (0, getObjectByFilePath_1.getObjectByFilePath)(fullPath);
54
- children.push(childObject.id);
36
+ // For tasks in open/closed folders, strip .md to get the id
37
+ children.push(entry.replace(/\.md$/i, ""));
55
38
  }
56
39
  }
57
40
  }
58
41
  catch (error) {
59
- // Folder doesn't exist or can't be read, skip silently
60
42
  if (error instanceof Error && "code" in error && error.code !== "ENOENT") {
61
43
  console.error(`Warning: Could not read directory ${folder}:`, error);
62
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getChildrenByFilePath.js","sourceRoot":"","sources":["../../../src/repositories/local/getChildrenByFilePath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getChildrenByFilePath.js","sourceRoot":"","sources":["../../../src/repositories/local/getChildrenByFilePath.ts"],"names":[],"mappings":";;AA6DA,sDAoBC;AAjFD,+CAAiD;AACjD,yCAAoD;AAEpD;;GAEG;AACH,SAAS,eAAe,CAAC,SAAiB,EAAE,YAAoB;IAC9D,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,GAAG;YACN,OAAO,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,KAAK,GAAG;YACN,OAAO,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,KAAK,GAAG;YACN,OAAO,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAA,gBAAI,EAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxE;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,MAAc;IACjD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,MAAM,CAAC,CAAC;QAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;YAEnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,0DAA0D;gBAC1D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,4DAA4D;gBAC5D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,qCAAqC,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,qBAAqB,CACzC,QAAgB;IAEhB,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE3C,6CAA6C;IAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEtD,kDAAkD;IAClD,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAE9D,4CAA4C;IAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,10 +1,9 @@
1
1
  import { TrellisObject } from "../../models";
2
2
  /**
3
- * Gets a TrellisObject by its ID by searching through markdown files
4
- * @param id The ID of the object to find
5
- * @param planningRoot The root directory to search for markdown files
6
- * @returns Promise resolving to the TrellisObject with the matching ID, or null if not found
7
- * @throws Error if file reading fails
3
+ * Gets a TrellisObject by its ID using the RepoIndex cache.
4
+ *
5
+ * On a warm hit: single file read, no directory scan. On a miss: repopulates
6
+ * the index (detecting external writes from other MCP instances) and retries.
8
7
  */
9
8
  export declare function getObjectById(id: string, planningRoot: string): Promise<TrellisObject | null>;
10
9
  //# sourceMappingURL=getObjectById.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getObjectById.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getObjectById.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK7C;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAyB/B"}
1
+ {"version":3,"file":"getObjectById.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getObjectById.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK7C;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAoB/B"}
@@ -3,37 +3,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getObjectById = getObjectById;
4
4
  const promises_1 = require("fs/promises");
5
5
  const deserializeTrellisObject_1 = require("../../utils/deserializeTrellisObject");
6
- const findMarkdownFiles_1 = require("./findMarkdownFiles");
7
6
  const getChildrenByFilePath_1 = require("./getChildrenByFilePath");
7
+ const RepoIndex_1 = require("./RepoIndex");
8
8
  /**
9
- * Gets a TrellisObject by its ID by searching through markdown files
10
- * @param id The ID of the object to find
11
- * @param planningRoot The root directory to search for markdown files
12
- * @returns Promise resolving to the TrellisObject with the matching ID, or null if not found
13
- * @throws Error if file reading fails
9
+ * Gets a TrellisObject by its ID using the RepoIndex cache.
10
+ *
11
+ * On a warm hit: single file read, no directory scan. On a miss: repopulates
12
+ * the index (detecting external writes from other MCP instances) and retries.
14
13
  */
15
14
  async function getObjectById(id, planningRoot) {
16
- // Find all markdown files in the planning root
17
- const markdownFiles = await (0, findMarkdownFiles_1.findMarkdownFiles)(planningRoot);
18
- // Search through each markdown file to find the one with the matching ID
19
- for (const filePath of markdownFiles) {
20
- try {
21
- const fileContent = await (0, promises_1.readFile)(filePath, "utf-8");
22
- const trellisObject = (0, deserializeTrellisObject_1.deserializeTrellisObject)(fileContent);
23
- // Check if this object has the ID we're looking for
24
- if (trellisObject.id === id) {
25
- // Populate children using the file path
26
- trellisObject.childrenIds = await (0, getChildrenByFilePath_1.getChildrenByFilePath)(filePath);
27
- return trellisObject;
28
- }
29
- }
30
- catch (error) {
31
- // Skip files that can't be deserialized (might not be valid Trellis objects)
32
- console.error(`Warning: Could not deserialize file ${filePath}:`, error);
33
- continue;
34
- }
15
+ let entry = await RepoIndex_1.RepoIndex.lookup(planningRoot, id);
16
+ if (!entry) {
17
+ await RepoIndex_1.RepoIndex.populate(planningRoot);
18
+ entry = await RepoIndex_1.RepoIndex.lookup(planningRoot, id);
19
+ }
20
+ if (!entry)
21
+ return null;
22
+ try {
23
+ const fileContent = await (0, promises_1.readFile)(entry.filePath, "utf-8");
24
+ const trellisObject = (0, deserializeTrellisObject_1.deserializeTrellisObject)(fileContent);
25
+ trellisObject.childrenIds = await (0, getChildrenByFilePath_1.getChildrenByFilePath)(entry.filePath);
26
+ return trellisObject;
27
+ }
28
+ catch (error) {
29
+ console.error(`Warning: Could not deserialize file ${entry.filePath}:`, error);
30
+ return null;
35
31
  }
36
- // If we get here, no object with the given ID was found
37
- return null;
38
32
  }
39
33
  //# sourceMappingURL=getObjectById.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getObjectById.js","sourceRoot":"","sources":["../../../src/repositories/local/getObjectById.ts"],"names":[],"mappings":";;AAaA,sCA4BC;AAzCD,0CAAuC;AAEvC,mFAAgF;AAChF,2DAAwD;AACxD,mEAAgE;AAEhE;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,YAAoB;IAEpB,+CAA+C;IAC/C,MAAM,aAAa,GAAG,MAAM,IAAA,qCAAiB,EAAC,YAAY,CAAC,CAAC;IAE5D,yEAAyE;IACzE,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG,IAAA,mDAAwB,EAAC,WAAW,CAAC,CAAC;YAE5D,oDAAoD;YACpD,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5B,wCAAwC;gBACxC,aAAa,CAAC,WAAW,GAAG,MAAM,IAAA,6CAAqB,EAAC,QAAQ,CAAC,CAAC;gBAClE,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6EAA6E;YAC7E,OAAO,CAAC,KAAK,CAAC,uCAAuC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACzE,SAAS;QACX,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"getObjectById.js","sourceRoot":"","sources":["../../../src/repositories/local/getObjectById.ts"],"names":[],"mappings":";;AAYA,sCAuBC;AAnCD,0CAAuC;AAEvC,mFAAgF;AAChF,mEAAgE;AAChE,2CAAwC;AAExC;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,YAAoB;IAEpB,IAAI,KAAK,GAAG,MAAM,qBAAS,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,qBAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,KAAK,GAAG,MAAM,qBAAS,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAA,mBAAQ,EAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAA,mDAAwB,EAAC,WAAW,CAAC,CAAC;QAC5D,aAAa,CAAC,WAAW,GAAG,MAAM,IAAA,6CAAqB,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxE,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,uCAAuC,KAAK,CAAC,QAAQ,GAAG,EACxD,KAAK,CACN,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getObjects.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getObjects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAGtB,wBAAsB,UAAU,CAC9B,kBAAkB,EAAE,MAAM,EAC1B,aAAa,UAAQ,EACrB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC9C,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,EACpD,QAAQ,CAAC,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,GACzD,OAAO,CAAC,aAAa,EAAE,CAAC,CAgE1B"}
1
+ {"version":3,"file":"getObjects.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/getObjects.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAsDtB,wBAAsB,UAAU,CAC9B,kBAAkB,EAAE,MAAM,EAC1B,aAAa,UAAQ,EACrB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC9C,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,EACpD,QAAQ,CAAC,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,GACzD,OAAO,CAAC,aAAa,EAAE,CAAC,CAgC1B"}
@@ -1,87 +1,74 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.getObjects = getObjects;
4
+ const promises_1 = require("fs/promises");
37
5
  const isOpen_1 = require("../../models/isOpen");
6
+ const deserializeTrellisObject_1 = require("../../utils/deserializeTrellisObject");
7
+ const getChildrenByFilePath_1 = require("./getChildrenByFilePath");
8
+ const RepoIndex_1 = require("./RepoIndex");
9
+ const scopeFilter_1 = require("./scopeFilter");
10
+ function normalizeFilter(value) {
11
+ if (value === undefined)
12
+ return undefined;
13
+ const arr = Array.isArray(value) ? value : [value];
14
+ return arr.length > 0 ? arr : undefined;
15
+ }
16
+ async function isEntryFresh(entry) {
17
+ try {
18
+ const stats = await (0, promises_1.stat)(entry.filePath);
19
+ return stats.mtimeMs === entry.mtime;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ async function loadObjectFromEntry(entry) {
26
+ try {
27
+ const content = await (0, promises_1.readFile)(entry.filePath, "utf-8");
28
+ const obj = (0, deserializeTrellisObject_1.deserializeTrellisObject)(content);
29
+ obj.childrenIds = await (0, getChildrenByFilePath_1.getChildrenByFilePath)(entry.filePath);
30
+ return obj;
31
+ }
32
+ catch (error) {
33
+ console.error(`Warning: Could not deserialize file ${entry.filePath}:`, error);
34
+ return null;
35
+ }
36
+ }
37
+ function passesFilters(obj, typeArray, statusArray, priorityArray, includeClosed) {
38
+ if (typeArray && !typeArray.includes(obj.type))
39
+ return false;
40
+ if (statusArray && !statusArray.includes(obj.status))
41
+ return false;
42
+ if (priorityArray && !priorityArray.includes(obj.priority))
43
+ return false;
44
+ if (!includeClosed && !(0, isOpen_1.isOpen)(obj))
45
+ return false;
46
+ return true;
47
+ }
38
48
  async function getObjects(planningRootFolder, includeClosed = false, scope, type, status, priority) {
39
- const { findMarkdownFiles } = await Promise.resolve().then(() => __importStar(require("./findMarkdownFiles")));
40
- const { getObjectByFilePath } = await Promise.resolve().then(() => __importStar(require("./getObjectByFilePath")));
41
- const markdownFiles = await findMarkdownFiles(planningRootFolder, true, // Always include closed files, we'll filter by status later
42
- scope);
43
- // Normalize filter inputs to arrays for consistent processing
44
- // Treat empty arrays as undefined (no filter)
45
- const typeArray = type &&
46
- (Array.isArray(type) ? (type.length > 0 ? type : undefined) : [type]);
47
- const statusArray = status &&
48
- (Array.isArray(status)
49
- ? status.length > 0
50
- ? status
51
- : undefined
52
- : [status]);
53
- const priorityArray = priority &&
54
- (Array.isArray(priority)
55
- ? priority.length > 0
56
- ? priority
57
- : undefined
58
- : [priority]);
49
+ // Always rescan. A cold-only gate misses files created by other MCP instances
50
+ // (or any writer that bypasses LocalRepository.saveObject), because the bucket
51
+ // retains entries so `entries().length === 0` stays false while new ids
52
+ // sit on disk un-indexed. Populate is cheap: regex-only, no YAML parse.
53
+ await RepoIndex_1.RepoIndex.populate(planningRootFolder);
54
+ const typeArray = normalizeFilter(type);
55
+ const statusArray = normalizeFilter(status);
56
+ const priorityArray = normalizeFilter(priority);
59
57
  const objects = [];
60
- for (const filePath of markdownFiles) {
61
- try {
62
- const trellisObject = await getObjectByFilePath(filePath);
63
- // Apply type filter using array membership test
64
- if (typeArray && !typeArray.includes(trellisObject.type)) {
65
- continue; // Skip if type doesn't match any in the array
66
- }
67
- // Apply status filter using array membership test
68
- if (statusArray && !statusArray.includes(trellisObject.status)) {
69
- continue; // Skip if status doesn't match any in the array
70
- }
71
- // Apply priority filter using array membership test
72
- if (priorityArray && !priorityArray.includes(trellisObject.priority)) {
73
- continue; // Skip if priority doesn't match any in the array
74
- }
75
- if (!includeClosed && !(0, isOpen_1.isOpen)(trellisObject)) {
76
- continue; // Skip closed objects if includeClosed is false
77
- }
78
- objects.push(trellisObject);
79
- }
80
- catch (error) {
81
- // Skip files that can't be deserialized (might not be valid Trellis objects)
82
- console.error(`Warning: Could not deserialize file ${filePath}:`, error);
58
+ for (const [id, entry] of RepoIndex_1.RepoIndex.entries(planningRootFolder)) {
59
+ if (scope && !(0, scopeFilter_1.matchesScope)(entry.filePath, scope))
60
+ continue;
61
+ if (!includeClosed && entry.filePath.includes("/t/closed/"))
62
+ continue;
63
+ if (!(await isEntryFresh(entry))) {
64
+ RepoIndex_1.RepoIndex.invalidate(planningRootFolder, id);
83
65
  continue;
84
66
  }
67
+ const obj = await loadObjectFromEntry(entry);
68
+ if (!obj)
69
+ continue;
70
+ if (passesFilters(obj, typeArray, statusArray, priorityArray, includeClosed))
71
+ objects.push(obj);
85
72
  }
86
73
  return objects;
87
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getObjects.js","sourceRoot":"","sources":["../../../src/repositories/local/getObjects.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,gCAuEC;AAzED,gDAA6C;AAEtC,KAAK,UAAU,UAAU,CAC9B,kBAA0B,EAC1B,aAAa,GAAG,KAAK,EACrB,KAAc,EACd,IAA8C,EAC9C,MAAoD,EACpD,QAA0D;IAE1D,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,qBAAqB,GAAC,CAAC;IAClE,MAAM,EAAE,mBAAmB,EAAE,GAAG,wDAAa,uBAAuB,GAAC,CAAC;IAEtE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,kBAAkB,EAClB,IAAI,EAAE,4DAA4D;IAClE,KAAK,CACN,CAAC;IAEF,8DAA8D;IAC9D,8CAA8C;IAC9C,MAAM,SAAS,GACb,IAAI;QACJ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GACf,MAAM;QACN,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACjB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,SAAS;YACb,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAChB,MAAM,aAAa,GACjB,QAAQ;QACR,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACtB,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS;YACb,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElB,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE1D,gDAAgD;YAChD,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,SAAS,CAAC,8CAA8C;YAC1D,CAAC;YAED,kDAAkD;YAClD,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,SAAS,CAAC,gDAAgD;YAC5D,CAAC;YAED,oDAAoD;YACpD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrE,SAAS,CAAC,kDAAkD;YAC9D,CAAC;YAED,IAAI,CAAC,aAAa,IAAI,CAAC,IAAA,eAAM,EAAC,aAAa,CAAC,EAAE,CAAC;gBAC7C,SAAS,CAAC,gDAAgD;YAC5D,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6EAA6E;YAC7E,OAAO,CAAC,KAAK,CAAC,uCAAuC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACzE,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"getObjects.js","sourceRoot":"","sources":["../../../src/repositories/local/getObjects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type TrellisObject } from "../../models";
2
+ /** Returns filenames of all attachments for an issue. Returns [] if no folder exists or the parent chain is broken. */
3
+ export declare function listAttachments(obj: TrellisObject, planningRoot: string): Promise<string[]>;
4
+ //# sourceMappingURL=listAttachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listAttachments.d.ts","sourceRoot":"","sources":["../../../src/repositories/local/listAttachments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,uHAAuH;AACvH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listAttachments = listAttachments;
4
+ const promises_1 = require("fs/promises");
5
+ const getAttachmentsFolder_1 = require("./getAttachmentsFolder");
6
+ /** Returns filenames of all attachments for an issue. Returns [] if no folder exists or the parent chain is broken. */
7
+ async function listAttachments(obj, planningRoot) {
8
+ let folder;
9
+ try {
10
+ folder = await (0, getAttachmentsFolder_1.getAttachmentsFolder)(obj, planningRoot);
11
+ }
12
+ catch {
13
+ return [];
14
+ }
15
+ try {
16
+ const entries = await (0, promises_1.readdir)(folder, { withFileTypes: true });
17
+ return entries.filter((e) => e.isFile()).map((e) => e.name);
18
+ }
19
+ catch (error) {
20
+ if (error.code === "ENOENT") {
21
+ return [];
22
+ }
23
+ throw error;
24
+ }
25
+ }
26
+ //# sourceMappingURL=listAttachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listAttachments.js","sourceRoot":"","sources":["../../../src/repositories/local/listAttachments.ts"],"names":[],"mappings":";;AAKA,0CAmBC;AAxBD,0CAAsC;AAEtC,iEAA8D;AAE9D,uHAAuH;AAChH,KAAK,UAAU,eAAe,CACnC,GAAkB,EAClB,YAAoB;IAEpB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAA,2CAAoB,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/server.js CHANGED
@@ -103,6 +103,8 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => {
103
103
  tools_1.getNextAvailableIssueTool,
104
104
  tools_1.completeTaskTool,
105
105
  tools_1.getUiInfoTool,
106
+ tools_1.addAttachmentTool,
107
+ tools_1.removeAttachmentTool,
106
108
  ];
107
109
  return { tools };
108
110
  });
@@ -132,6 +134,10 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, (request) => {
132
134
  return (0, tools_1.handleCompleteTask)(_getService(), repository, args, serverConfig);
133
135
  case "get_ui_info":
134
136
  return (0, tools_1.handleGetUiInfo)(projectDir);
137
+ case "add_attachment":
138
+ return (0, tools_1.handleAddAttachment)(_getService(), repository, args);
139
+ case "remove_attachment":
140
+ return (0, tools_1.handleRemoveAttachment)(_getService(), repository, args);
135
141
  default:
136
142
  throw new Error(`Unknown tool: ${toolName}`);
137
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -83,5 +83,19 @@ export interface TaskTrellisService {
83
83
  text: string;
84
84
  }>;
85
85
  }>;
86
+ /** Copies a file into the managed attachments folder for an issue. */
87
+ addAttachment(repository: Repository, id: string, sourcePath: string): Promise<{
88
+ content: Array<{
89
+ type: string;
90
+ text: string;
91
+ }>;
92
+ }>;
93
+ /** Deletes a named file from the managed attachments folder for an issue. */
94
+ removeAttachment(repository: Repository, id: string, filename: string): Promise<{
95
+ content: Array<{
96
+ type: string;
97
+ text: string;
98
+ }>;
99
+ }>;
86
100
  }
87
101
  //# sourceMappingURL=TaskTrellisService.d.ts.map