@langadventurellc/task-trellis-mcp 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -263
- package/dist/__tests__/e2e/autoPrune.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/autoPrune.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/autoPrune.e2e.test.js +533 -0
- package/dist/__tests__/e2e/autoPrune.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/configuration/activation.e2e.test.js +6 -6
- package/dist/__tests__/e2e/configuration/activation.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js +55 -6
- package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js +19 -19
- package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js +9 -9
- package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js +15 -15
- package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js +94 -42
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js +19 -19
- package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js +32 -32
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/getObject.e2e.test.js +143 -22
- package/dist/__tests__/e2e/crud/getObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +810 -121
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/updateObject.e2e.test.js +497 -25
- package/dist/__tests__/e2e/crud/updateObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.js +319 -0
- package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/infrastructure/client.e2e.test.js +4 -4
- package/dist/__tests__/e2e/infrastructure/client.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/infrastructure/server.e2e.test.js +6 -6
- package/dist/__tests__/e2e/infrastructure/server.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/utils/extractObjectIds.d.ts +5 -0
- package/dist/__tests__/e2e/utils/extractObjectIds.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/extractObjectIds.js +12 -0
- package/dist/__tests__/e2e/utils/extractObjectIds.js.map +1 -0
- package/dist/__tests__/e2e/utils/index.d.ts +1 -0
- package/dist/__tests__/e2e/utils/index.d.ts.map +1 -1
- package/dist/__tests__/e2e/utils/index.js +3 -1
- package/dist/__tests__/e2e/utils/index.js.map +1 -1
- package/dist/__tests__/e2e/utils/mcpTestClient.d.ts +2 -1
- package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -1
- package/dist/__tests__/e2e/utils/mcpTestClient.js +15 -8
- package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +4 -2
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts.map +1 -1
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +2 -1
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.js.map +1 -1
- package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.d.ts +1 -1
- package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.js +1 -1
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +4 -4
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +597 -0
- package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +233 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +447 -1
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js +43 -43
- package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +22 -26
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
- package/dist/__tests__/serverStartup.test.d.ts +2 -0
- package/dist/__tests__/serverStartup.test.d.ts.map +1 -0
- package/dist/__tests__/serverStartup.test.js +171 -0
- package/dist/__tests__/serverStartup.test.js.map +1 -0
- package/dist/configuration/ServerConfig.d.ts +2 -0
- package/dist/configuration/ServerConfig.d.ts.map +1 -1
- package/dist/models/TrellisObjectSummary.d.ts +16 -0
- package/dist/models/TrellisObjectSummary.d.ts.map +1 -0
- package/dist/{utils/ReplaceStringOptions.js → models/TrellisObjectSummary.js} +1 -1
- package/dist/models/TrellisObjectSummary.js.map +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/repositories/Repository.d.ts +2 -1
- package/dist/repositories/Repository.d.ts.map +1 -1
- package/dist/repositories/local/LocalRepository.d.ts +2 -1
- package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
- package/dist/repositories/local/LocalRepository.js +4 -0
- package/dist/repositories/local/LocalRepository.js.map +1 -1
- package/dist/repositories/local/__tests__/getChildrenOf.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/getChildrenOf.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/getChildrenOf.test.js +306 -0
- package/dist/repositories/local/__tests__/getChildrenOf.test.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js +9 -6
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
- package/dist/repositories/local/__tests__/getObjects.test.js +349 -10
- package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -1
- package/dist/repositories/local/deleteObjectById.d.ts.map +1 -1
- package/dist/repositories/local/deleteObjectById.js +2 -0
- package/dist/repositories/local/deleteObjectById.js.map +1 -1
- package/dist/repositories/local/getChildrenOf.d.ts +11 -0
- package/dist/repositories/local/getChildrenOf.d.ts.map +1 -0
- package/dist/repositories/local/getChildrenOf.js +73 -0
- package/dist/repositories/local/getChildrenOf.js.map +1 -0
- package/dist/repositories/local/getObjectFilePath.d.ts.map +1 -1
- package/dist/repositories/local/getObjectFilePath.js +8 -4
- package/dist/repositories/local/getObjectFilePath.js.map +1 -1
- package/dist/repositories/local/getObjects.d.ts +1 -1
- package/dist/repositories/local/getObjects.d.ts.map +1 -1
- package/dist/repositories/local/getObjects.js +31 -7
- package/dist/repositories/local/getObjects.js.map +1 -1
- package/dist/server.js +57 -19
- package/dist/server.js.map +1 -1
- package/dist/services/TaskTrellisService.d.ts +78 -0
- package/dist/services/TaskTrellisService.d.ts.map +1 -0
- package/dist/services/TaskTrellisService.js +3 -0
- package/dist/services/TaskTrellisService.js.map +1 -0
- package/dist/services/local/LocalTaskTrellisService.d.ts +55 -0
- package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -0
- package/dist/services/local/LocalTaskTrellisService.js +73 -0
- package/dist/services/local/LocalTaskTrellisService.js.map +1 -0
- package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts +2 -0
- package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/appendAffectedFiles.test.js +202 -0
- package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -0
- package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts +2 -0
- package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/appendModifiedFiles.test.js +162 -0
- package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -0
- package/dist/services/local/__tests__/appendObjectLog.test.d.ts +2 -0
- package/dist/services/local/__tests__/appendObjectLog.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/appendObjectLog.test.js +105 -0
- package/dist/services/local/__tests__/appendObjectLog.test.js.map +1 -0
- package/dist/services/local/__tests__/claimTask.test.d.ts +2 -0
- package/dist/services/local/__tests__/claimTask.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/claimTask.test.js +459 -0
- package/dist/services/local/__tests__/claimTask.test.js.map +1 -0
- package/dist/services/local/__tests__/completeTask.test.d.ts +2 -0
- package/dist/services/local/__tests__/completeTask.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/completeTask.test.js +470 -0
- package/dist/services/local/__tests__/completeTask.test.js.map +1 -0
- package/dist/services/local/__tests__/createObject.test.d.ts +2 -0
- package/dist/services/local/__tests__/createObject.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/createObject.test.js +333 -0
- package/dist/services/local/__tests__/createObject.test.js.map +1 -0
- package/dist/services/local/__tests__/listObjects.test.d.ts +2 -0
- package/dist/services/local/__tests__/listObjects.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/listObjects.test.js +351 -0
- package/dist/services/local/__tests__/listObjects.test.js.map +1 -0
- package/dist/services/local/__tests__/pruneClosed.test.d.ts +2 -0
- package/dist/services/local/__tests__/pruneClosed.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/pruneClosed.test.js +473 -0
- package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -0
- package/dist/services/local/__tests__/updateObject.test.d.ts +2 -0
- package/dist/services/local/__tests__/updateObject.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/updateObject.test.js +521 -0
- package/dist/services/local/__tests__/updateObject.test.js.map +1 -0
- package/dist/services/local/appendAffectedFiles.d.ts +12 -0
- package/dist/services/local/appendAffectedFiles.d.ts.map +1 -0
- package/dist/services/local/appendAffectedFiles.js +34 -0
- package/dist/services/local/appendAffectedFiles.js.map +1 -0
- package/dist/services/local/appendModifiedFiles.d.ts +15 -0
- package/dist/services/local/appendModifiedFiles.d.ts.map +1 -0
- package/dist/services/local/appendModifiedFiles.js +39 -0
- package/dist/services/local/appendModifiedFiles.js.map +1 -0
- package/dist/services/local/appendObjectLog.d.ts +8 -0
- package/dist/services/local/appendObjectLog.d.ts.map +1 -0
- package/dist/services/local/appendObjectLog.js +45 -0
- package/dist/services/local/appendObjectLog.js.map +1 -0
- package/dist/services/local/claimTask.d.ts +8 -0
- package/dist/services/local/claimTask.d.ts.map +1 -0
- package/dist/services/local/claimTask.js +109 -0
- package/dist/services/local/claimTask.js.map +1 -0
- package/dist/services/local/completeTask.d.ts +9 -0
- package/dist/services/local/completeTask.d.ts.map +1 -0
- package/dist/services/local/completeTask.js +38 -0
- package/dist/services/local/completeTask.js.map +1 -0
- package/dist/services/local/createObject.d.ts +9 -0
- package/dist/services/local/createObject.d.ts.map +1 -0
- package/dist/services/local/createObject.js +44 -0
- package/dist/services/local/createObject.js.map +1 -0
- package/dist/services/local/listObjects.d.ts +9 -0
- package/dist/services/local/listObjects.d.ts.map +1 -0
- package/dist/services/local/listObjects.js +52 -0
- package/dist/services/local/listObjects.js.map +1 -0
- package/dist/services/local/pruneClosed.d.ts +8 -0
- package/dist/services/local/pruneClosed.d.ts.map +1 -0
- package/dist/services/local/pruneClosed.js +112 -0
- package/dist/services/local/pruneClosed.js.map +1 -0
- package/dist/services/local/updateObject.d.ts +10 -0
- package/dist/services/local/updateObject.d.ts.map +1 -0
- package/dist/services/local/updateObject.js +80 -0
- package/dist/services/local/updateObject.js.map +1 -0
- package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts +2 -0
- package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/appendModifiedFilesTool.test.js +178 -0
- package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.js +34 -101
- package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
- package/dist/tools/__tests__/claimTaskTool.test.js +98 -311
- package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/completeTaskTool.test.js +140 -183
- package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/createObjectTool.test.js +62 -325
- package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/deleteObjectTool.test.js +1 -0
- package/dist/tools/__tests__/deleteObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/getObjectTool.test.js +1 -0
- package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/listObjectsTool.test.js +228 -108
- package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
- package/dist/tools/__tests__/updateObjectTool.test.js +78 -167
- package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
- package/dist/tools/appendModifiedFilesTool.d.ts +30 -0
- package/dist/tools/appendModifiedFilesTool.d.ts.map +1 -0
- package/dist/tools/appendModifiedFilesTool.js +55 -0
- package/dist/tools/appendModifiedFilesTool.js.map +1 -0
- package/dist/tools/appendObjectLogTool.d.ts +7 -6
- package/dist/tools/appendObjectLogTool.d.ts.map +1 -1
- package/dist/tools/appendObjectLogTool.js +6 -44
- package/dist/tools/appendObjectLogTool.js.map +1 -1
- package/dist/tools/claimTaskTool.d.ts +4 -3
- package/dist/tools/claimTaskTool.d.ts.map +1 -1
- package/dist/tools/claimTaskTool.js +2 -80
- package/dist/tools/claimTaskTool.js.map +1 -1
- package/dist/tools/completeTaskTool.d.ts +5 -3
- package/dist/tools/completeTaskTool.d.ts.map +1 -1
- package/dist/tools/completeTaskTool.js +3 -29
- package/dist/tools/completeTaskTool.js.map +1 -1
- package/dist/tools/createObjectTool.d.ts +13 -12
- package/dist/tools/createObjectTool.d.ts.map +1 -1
- package/dist/tools/createObjectTool.js +22 -55
- package/dist/tools/createObjectTool.js.map +1 -1
- package/dist/tools/deleteObjectTool.d.ts +3 -3
- package/dist/tools/deleteObjectTool.js +12 -12
- package/dist/tools/deleteObjectTool.js.map +1 -1
- package/dist/tools/getObjectTool.d.ts +3 -3
- package/dist/tools/getObjectTool.d.ts.map +1 -1
- package/dist/tools/getObjectTool.js +12 -7
- package/dist/tools/getObjectTool.js.map +1 -1
- package/dist/tools/index.d.ts +7 -8
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +22 -25
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/listObjectsTool.d.ts +24 -14
- package/dist/tools/listObjectsTool.d.ts.map +1 -1
- package/dist/tools/listObjectsTool.js +114 -50
- package/dist/tools/listObjectsTool.js.map +1 -1
- package/dist/tools/updateObjectTool.d.ts +15 -9
- package/dist/tools/updateObjectTool.d.ts.map +1 -1
- package/dist/tools/updateObjectTool.js +20 -60
- package/dist/tools/updateObjectTool.js.map +1 -1
- package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.d.ts +2 -0
- package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.d.ts.map +1 -0
- package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js +206 -0
- package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js.map +1 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +5 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
- package/dist/utils/__tests__/filterUnavailableObjects.test.js +51 -25
- package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +5 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
- package/dist/utils/__tests__/updateParentHierarchy.test.d.ts +2 -0
- package/dist/utils/__tests__/updateParentHierarchy.test.d.ts.map +1 -0
- package/dist/utils/__tests__/updateParentHierarchy.test.js +137 -0
- package/dist/utils/__tests__/updateParentHierarchy.test.js.map +1 -0
- package/dist/utils/autoCompleteParentHierarchy.d.ts +11 -0
- package/dist/utils/autoCompleteParentHierarchy.d.ts.map +1 -0
- package/dist/utils/autoCompleteParentHierarchy.js +49 -0
- package/dist/utils/autoCompleteParentHierarchy.js.map +1 -0
- package/dist/utils/checkHierarchicalPrerequisitesComplete.d.ts +14 -0
- package/dist/utils/checkHierarchicalPrerequisitesComplete.d.ts.map +1 -0
- package/dist/utils/checkHierarchicalPrerequisitesComplete.js +47 -0
- package/dist/utils/checkHierarchicalPrerequisitesComplete.js.map +1 -0
- package/dist/utils/filterUnavailableObjects.d.ts +6 -4
- package/dist/utils/filterUnavailableObjects.d.ts.map +1 -1
- package/dist/utils/filterUnavailableObjects.js +16 -22
- package/dist/utils/filterUnavailableObjects.js.map +1 -1
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -3
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/updateParentHierarchy.d.ts +11 -0
- package/dist/utils/updateParentHierarchy.d.ts.map +1 -0
- package/dist/utils/updateParentHierarchy.js +40 -0
- package/dist/utils/updateParentHierarchy.js.map +1 -0
- package/dist/validation/__tests__/validateObjectCreation.test.js +1 -0
- package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
- package/dist/validation/__tests__/validateParentExists.test.js +1 -0
- package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
- package/dist/validation/__tests__/validateParentType.test.js +5 -5
- package/dist/validation/__tests__/validateParentType.test.js.map +1 -1
- package/dist/validation/__tests__/validateStatusTransition.test.js +1 -0
- package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -1
- package/dist/validation/validateParentType.d.ts +1 -1
- package/dist/validation/validateParentType.d.ts.map +1 -1
- package/dist/validation/validateParentType.js +2 -5
- package/dist/validation/validateParentType.js.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts +0 -2
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts.map +0 -1
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js +0 -693
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js.map +0 -1
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts +0 -2
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts.map +0 -1
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js +0 -352
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js.map +0 -1
- package/dist/tools/__tests__/pruneClosedTool.test.d.ts +0 -2
- package/dist/tools/__tests__/pruneClosedTool.test.d.ts.map +0 -1
- package/dist/tools/__tests__/pruneClosedTool.test.js +0 -171
- package/dist/tools/__tests__/pruneClosedTool.test.js.map +0 -1
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts +0 -2
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts.map +0 -1
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +0 -258
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +0 -1
- package/dist/tools/pruneClosedTool.d.ts +0 -26
- package/dist/tools/pruneClosedTool.d.ts.map +0 -1
- package/dist/tools/pruneClosedTool.js +0 -106
- package/dist/tools/pruneClosedTool.js.map +0 -1
- package/dist/tools/replaceObjectBodyRegexTool.d.ts +0 -35
- package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +0 -1
- package/dist/tools/replaceObjectBodyRegexTool.js +0 -145
- package/dist/tools/replaceObjectBodyRegexTool.js.map +0 -1
- package/dist/utils/ReplaceStringOptions.d.ts +0 -12
- package/dist/utils/ReplaceStringOptions.d.ts.map +0 -1
- package/dist/utils/ReplaceStringOptions.js.map +0 -1
- package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts +0 -2
- package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts.map +0 -1
- package/dist/utils/__tests__/replaceStringWithRegex.test.js +0 -281
- package/dist/utils/__tests__/replaceStringWithRegex.test.js.map +0 -1
- package/dist/utils/replaceStringWithRegex.d.ts +0 -45
- package/dist/utils/replaceStringWithRegex.d.ts.map +0 -1
- package/dist/utils/replaceStringWithRegex.js +0 -91
- package/dist/utils/replaceStringWithRegex.js.map +0 -1
|
@@ -1,209 +1,120 @@
|
|
|
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;
|
|
7
|
+
let mockServerConfig;
|
|
13
8
|
beforeEach(() => {
|
|
9
|
+
mockService = {
|
|
10
|
+
updateObject: jest.fn(),
|
|
11
|
+
};
|
|
14
12
|
mockRepository = {
|
|
15
13
|
getObjectById: jest.fn(),
|
|
16
14
|
getObjects: jest.fn(),
|
|
17
15
|
saveObject: jest.fn(),
|
|
18
16
|
deleteObject: jest.fn(),
|
|
17
|
+
getChildrenOf: jest.fn(),
|
|
18
|
+
};
|
|
19
|
+
mockServerConfig = {
|
|
20
|
+
mode: "local",
|
|
21
|
+
autoCompleteParent: true,
|
|
22
|
+
autoPrune: 0,
|
|
19
23
|
};
|
|
20
24
|
jest.clearAllMocks();
|
|
21
25
|
});
|
|
22
26
|
describe("handleUpdateObject", () => {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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",
|
|
27
|
+
const mockResult = {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: "text",
|
|
31
|
+
text: "Successfully updated object: {...}",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
38
34
|
};
|
|
39
|
-
it("should
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
mockValidateStatusTransition.mockResolvedValue();
|
|
43
|
-
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
|
|
35
|
+
it("should call service.updateObject with correct parameters for all properties", async () => {
|
|
36
|
+
mockService.updateObject.mockResolvedValue(mockResult);
|
|
37
|
+
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
44
38
|
id: "T-test-task",
|
|
45
39
|
priority: "high",
|
|
46
40
|
prerequisites: ["T-prereq-1", "T-prereq-2"],
|
|
47
41
|
body: "Updated body content",
|
|
48
42
|
status: "draft",
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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");
|
|
43
|
+
force: true,
|
|
44
|
+
}, mockServerConfig);
|
|
45
|
+
expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, mockServerConfig, "T-test-task", undefined, "high", ["T-prereq-1", "T-prereq-2"], "Updated body content", "draft", true);
|
|
46
|
+
expect(result).toBe(mockResult);
|
|
62
47
|
});
|
|
63
|
-
it("should
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
|
|
48
|
+
it("should call service.updateObject with only specified properties", async () => {
|
|
49
|
+
mockService.updateObject.mockResolvedValue(mockResult);
|
|
50
|
+
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
67
51
|
id: "T-test-task",
|
|
68
52
|
priority: "low",
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
|
|
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:");
|
|
53
|
+
}, mockServerConfig);
|
|
54
|
+
expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, mockServerConfig, "T-test-task", undefined, "low", undefined, undefined, undefined, false);
|
|
55
|
+
expect(result).toBe(mockResult);
|
|
77
56
|
});
|
|
78
|
-
it("should
|
|
79
|
-
|
|
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, {
|
|
57
|
+
it("should call service.updateObject with title parameter", async () => {
|
|
58
|
+
mockService.updateObject.mockResolvedValue(mockResult);
|
|
59
|
+
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
94
60
|
id: "T-test-task",
|
|
95
|
-
|
|
96
|
-
});
|
|
97
|
-
expect(
|
|
98
|
-
|
|
99
|
-
status: "in-progress",
|
|
100
|
-
}), mockRepository);
|
|
101
|
-
expect(mockRepository.saveObject).toHaveBeenCalled();
|
|
102
|
-
expect(result.content[0].text).toContain("Successfully updated object:");
|
|
103
|
-
});
|
|
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, {
|
|
109
|
-
id: "T-test-task",
|
|
110
|
-
status: "done",
|
|
111
|
-
});
|
|
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:");
|
|
61
|
+
title: "Updated Task Title",
|
|
62
|
+
}, mockServerConfig);
|
|
63
|
+
expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, mockServerConfig, "T-test-task", "Updated Task Title", undefined, undefined, undefined, undefined, false);
|
|
64
|
+
expect(result).toBe(mockResult);
|
|
118
65
|
});
|
|
119
|
-
it("should
|
|
120
|
-
|
|
121
|
-
const
|
|
122
|
-
mockValidateStatusTransition.mockRejectedValue(validationError);
|
|
123
|
-
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
|
|
66
|
+
it("should handle missing optional parameters correctly", async () => {
|
|
67
|
+
mockService.updateObject.mockResolvedValue(mockResult);
|
|
68
|
+
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
124
69
|
id: "T-test-task",
|
|
125
70
|
status: "in-progress",
|
|
126
|
-
});
|
|
127
|
-
expect(
|
|
128
|
-
expect(
|
|
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.");
|
|
71
|
+
}, mockServerConfig);
|
|
72
|
+
expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, mockServerConfig, "T-test-task", undefined, undefined, undefined, undefined, "in-progress", false);
|
|
73
|
+
expect(result).toBe(mockResult);
|
|
130
74
|
});
|
|
131
|
-
it("should
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
|
|
75
|
+
it("should default force to false when not provided", async () => {
|
|
76
|
+
mockService.updateObject.mockResolvedValue(mockResult);
|
|
77
|
+
await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
135
78
|
id: "T-test-task",
|
|
136
|
-
status: "
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
expect(mockValidateStatusTransition).not.toHaveBeenCalled();
|
|
140
|
-
expect(mockRepository.saveObject).toHaveBeenCalled();
|
|
141
|
-
expect(result.content[0].text).toContain("Successfully updated object:");
|
|
79
|
+
status: "done",
|
|
80
|
+
}, mockServerConfig);
|
|
81
|
+
expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, mockServerConfig, "T-test-task", undefined, undefined, undefined, undefined, "done", false);
|
|
142
82
|
});
|
|
143
|
-
it("should
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
83
|
+
it("should pass through service errors", async () => {
|
|
84
|
+
const errorResult = {
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: "text",
|
|
88
|
+
text: "Error updating object: Object not found",
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
};
|
|
92
|
+
mockService.updateObject.mockResolvedValue(errorResult);
|
|
93
|
+
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
94
|
+
id: "T-nonexistent",
|
|
148
95
|
priority: "high",
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
expect(mockValidateStatusTransition).not.toHaveBeenCalled();
|
|
152
|
-
expect(mockRepository.saveObject).toHaveBeenCalled();
|
|
153
|
-
expect(result.content[0].text).toContain("Successfully updated object:");
|
|
154
|
-
});
|
|
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, {
|
|
158
|
-
id: "T-test-task",
|
|
159
|
-
status: "done",
|
|
160
|
-
});
|
|
161
|
-
expect(result.content[0].text).toBe("Error updating object: Database connection failed");
|
|
96
|
+
}, mockServerConfig);
|
|
97
|
+
expect(result).toBe(errorResult);
|
|
162
98
|
});
|
|
163
|
-
it("should handle
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
mockValidateStatusTransition.mockResolvedValue();
|
|
167
|
-
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
|
|
99
|
+
it("should handle service rejections", async () => {
|
|
100
|
+
mockService.updateObject.mockRejectedValue(new Error("Service error"));
|
|
101
|
+
await expect((0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
168
102
|
id: "T-test-task",
|
|
169
103
|
status: "done",
|
|
170
|
-
});
|
|
171
|
-
expect(result.content[0].text).toBe("Error updating object: Failed to save");
|
|
104
|
+
}, mockServerConfig)).rejects.toThrow("Service error");
|
|
172
105
|
});
|
|
173
|
-
it("should
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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"],
|
|
106
|
+
it("should pass serverConfig to service when provided", async () => {
|
|
107
|
+
mockService.updateObject.mockResolvedValue(mockResult);
|
|
108
|
+
const serverConfig = {
|
|
109
|
+
mode: "local",
|
|
110
|
+
autoCompleteParent: true,
|
|
111
|
+
autoPrune: 0,
|
|
186
112
|
};
|
|
187
|
-
|
|
188
|
-
mockRepository.saveObject.mockResolvedValue();
|
|
189
|
-
mockValidateStatusTransition.mockResolvedValue();
|
|
190
|
-
const result = await (0, updateObjectTool_1.handleUpdateObject)(mockRepository, {
|
|
113
|
+
await (0, updateObjectTool_1.handleUpdateObject)(mockService, mockRepository, {
|
|
191
114
|
id: "T-test-task",
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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:");
|
|
115
|
+
status: "done",
|
|
116
|
+
}, serverConfig);
|
|
117
|
+
expect(mockService.updateObject).toHaveBeenCalledWith(mockRepository, serverConfig, "T-test-task", undefined, undefined, undefined, undefined, "done", false);
|
|
207
118
|
});
|
|
208
119
|
});
|
|
209
120
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateObjectTool.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/updateObjectTool.test.ts"],"names":[],"mappings":";;
|
|
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 issue 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- Issue ID: The unique identifier of the trellis issue 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 issue.";
|
|
6
|
+
readonly inputSchema: {
|
|
7
|
+
readonly type: "object";
|
|
8
|
+
readonly properties: {
|
|
9
|
+
readonly id: {
|
|
10
|
+
readonly type: "string";
|
|
11
|
+
readonly description: "ID of the trellis issue 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 issue 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
|
+
- Issue ID: The unique identifier of the trellis issue 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 issue.`,
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: "object",
|
|
35
|
+
properties: {
|
|
36
|
+
id: {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "ID of the trellis issue 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;;;;;;;;;;;;;;;;;;;;;;;;;mLAyBoK;IACjL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mEAAmE;aACtE;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,13 +1,14 @@
|
|
|
1
1
|
import { Repository } from "../repositories";
|
|
2
|
+
import { TaskTrellisService } from "../services/TaskTrellisService";
|
|
2
3
|
export declare const appendObjectLogTool: {
|
|
3
|
-
readonly name: "
|
|
4
|
-
readonly description: "Appends content to an
|
|
4
|
+
readonly name: "append_issue_log";
|
|
5
|
+
readonly description: "Appends content to an issue's log in the task trellis system\n\nUse this tool to add progress updates, notes, or activity records to an issue'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.";
|
|
5
6
|
readonly inputSchema: {
|
|
6
7
|
readonly type: "object";
|
|
7
8
|
readonly properties: {
|
|
8
9
|
readonly id: {
|
|
9
10
|
readonly type: "string";
|
|
10
|
-
readonly description: "ID of the
|
|
11
|
+
readonly description: "ID of the issue to append log to";
|
|
11
12
|
};
|
|
12
13
|
readonly contents: {
|
|
13
14
|
readonly type: "string";
|
|
@@ -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;
|
|
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"}
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.appendObjectLogTool = void 0;
|
|
4
4
|
exports.handleAppendObjectLog = handleAppendObjectLog;
|
|
5
5
|
exports.appendObjectLogTool = {
|
|
6
|
-
name: "
|
|
7
|
-
description: `Appends content to an
|
|
6
|
+
name: "append_issue_log",
|
|
7
|
+
description: `Appends content to an issue's log in the task trellis system
|
|
8
8
|
|
|
9
|
-
Use this tool to add progress updates, notes, or activity records to an
|
|
9
|
+
Use this tool to add progress updates, notes, or activity records to an issue's audit trail. Essential for tracking work history, documenting decisions, and maintaining transparency in task execution.
|
|
10
10
|
|
|
11
11
|
Log entry purposes:
|
|
12
12
|
- Record progress milestones and status changes
|
|
@@ -36,7 +36,7 @@ The log creates a permanent audit trail that helps with project retrospectives,
|
|
|
36
36
|
properties: {
|
|
37
37
|
id: {
|
|
38
38
|
type: "string",
|
|
39
|
-
description: "ID of the
|
|
39
|
+
description: "ID of the issue to append log to",
|
|
40
40
|
},
|
|
41
41
|
contents: {
|
|
42
42
|
type: "string",
|
|
@@ -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
|
-
|
|
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":";;;
|
|
1
|
+
{"version":3,"file":"appendObjectLogTool.js","sourceRoot":"","sources":["../../src/tools/appendObjectLogTool.ts"],"names":[],"mappings":";;;AAgDA,sDAWC;AAxDY,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;8IA0B+H;IAC5I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;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":"
|
|
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"}
|