@langadventurellc/task-trellis-mcp 0.1.0-rc.3 → 1.0.0-rc.2
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 +60 -6
- package/dist/__tests__/e2e/configuration/activation.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/configuration/activation.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/configuration/activation.e2e.test.js +130 -0
- package/dist/__tests__/e2e/configuration/activation.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js +125 -0
- package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js +262 -0
- package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js +243 -0
- package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/configuration/preActivation.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/configuration/preActivation.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js +123 -0
- package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/createObject.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/createObject.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js +376 -0
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/deleteObject.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/deleteObject.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js +391 -0
- package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js +409 -0
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/getObject.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/getObject.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/getObject.e2e.test.js +447 -0
- package/dist/__tests__/e2e/crud/getObject.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +593 -0
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js +693 -0
- package/dist/__tests__/e2e/crud/replaceObjectBodyRegex.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/updateObject.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/crud/updateObject.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/crud/updateObject.e2e.test.js +662 -0
- package/dist/__tests__/e2e/crud/updateObject.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/infrastructure/client.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/infrastructure/client.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/infrastructure/client.e2e.test.js +68 -0
- package/dist/__tests__/e2e/infrastructure/client.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/infrastructure/server.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/infrastructure/server.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/infrastructure/server.e2e.test.js +37 -0
- package/dist/__tests__/e2e/infrastructure/server.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/utils/HierarchyOptions.d.ts +7 -0
- package/dist/__tests__/e2e/utils/HierarchyOptions.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/HierarchyOptions.js +3 -0
- package/dist/__tests__/e2e/utils/HierarchyOptions.js.map +1 -0
- package/dist/__tests__/e2e/utils/ObjectData.d.ts +17 -0
- package/dist/__tests__/e2e/utils/ObjectData.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/ObjectData.js +3 -0
- package/dist/__tests__/e2e/utils/ObjectData.js.map +1 -0
- package/dist/__tests__/e2e/utils/cleanup.d.ts +10 -0
- package/dist/__tests__/e2e/utils/cleanup.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/cleanup.js +99 -0
- package/dist/__tests__/e2e/utils/cleanup.js.map +1 -0
- package/dist/__tests__/e2e/utils/createObjectContent.d.ts +6 -0
- package/dist/__tests__/e2e/utils/createObjectContent.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/createObjectContent.js +34 -0
- package/dist/__tests__/e2e/utils/createObjectContent.js.map +1 -0
- package/dist/__tests__/e2e/utils/createObjectFile.d.ts +6 -0
- package/dist/__tests__/e2e/utils/createObjectFile.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/createObjectFile.js +88 -0
- package/dist/__tests__/e2e/utils/createObjectFile.js.map +1 -0
- package/dist/__tests__/e2e/utils/fileExists.d.ts +5 -0
- package/dist/__tests__/e2e/utils/fileExists.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/fileExists.js +52 -0
- package/dist/__tests__/e2e/utils/fileExists.js.map +1 -0
- package/dist/__tests__/e2e/utils/folderExists.d.ts +5 -0
- package/dist/__tests__/e2e/utils/folderExists.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/folderExists.js +52 -0
- package/dist/__tests__/e2e/utils/folderExists.js.map +1 -0
- package/dist/__tests__/e2e/utils/index.d.ts +15 -0
- package/dist/__tests__/e2e/utils/index.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/index.js +32 -0
- package/dist/__tests__/e2e/utils/index.js.map +1 -0
- package/dist/__tests__/e2e/utils/mcpTestClient.d.ts +13 -0
- package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/mcpTestClient.js +79 -0
- package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -0
- package/dist/__tests__/e2e/utils/parseGetObjectResponse.d.ts +5 -0
- package/dist/__tests__/e2e/utils/parseGetObjectResponse.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/parseGetObjectResponse.js +15 -0
- package/dist/__tests__/e2e/utils/parseGetObjectResponse.js.map +1 -0
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +5 -0
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +15 -0
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.js.map +1 -0
- package/dist/__tests__/e2e/utils/parseReplaceObjectBodyRegexResponse.d.ts +10 -0
- package/dist/__tests__/e2e/utils/parseReplaceObjectBodyRegexResponse.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/parseReplaceObjectBodyRegexResponse.js +40 -0
- package/dist/__tests__/e2e/utils/parseReplaceObjectBodyRegexResponse.js.map +1 -0
- package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.d.ts +5 -0
- package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.js +15 -0
- package/dist/__tests__/e2e/utils/parseUpdateObjectResponse.js.map +1 -0
- package/dist/__tests__/e2e/utils/pathExists.d.ts +5 -0
- package/dist/__tests__/e2e/utils/pathExists.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/pathExists.js +50 -0
- package/dist/__tests__/e2e/utils/pathExists.js.map +1 -0
- package/dist/__tests__/e2e/utils/readObjectFile.d.ts +10 -0
- package/dist/__tests__/e2e/utils/readObjectFile.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/readObjectFile.js +54 -0
- package/dist/__tests__/e2e/utils/readObjectFile.js.map +1 -0
- package/dist/__tests__/e2e/utils/serverProcess.d.ts +11 -0
- package/dist/__tests__/e2e/utils/serverProcess.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/serverProcess.js +119 -0
- package/dist/__tests__/e2e/utils/serverProcess.js.map +1 -0
- package/dist/__tests__/e2e/utils/testEnvironment.d.ts +9 -0
- package/dist/__tests__/e2e/utils/testEnvironment.d.ts.map +1 -0
- package/dist/__tests__/e2e/utils/testEnvironment.js +74 -0
- package/dist/__tests__/e2e/utils/testEnvironment.js.map +1 -0
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +175 -0
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +154 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +129 -0
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js +547 -0
- package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js +352 -0
- package/dist/__tests__/e2e/workflow/pruneClosed.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +385 -0
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -0
- package/dist/models/TrellisObject.d.ts +2 -0
- package/dist/models/TrellisObject.d.ts.map +1 -1
- package/dist/models/__tests__/isClaimable.test.js +8 -0
- package/dist/models/__tests__/isClaimable.test.js.map +1 -1
- package/dist/models/__tests__/isClosed.test.js +6 -0
- package/dist/models/__tests__/isClosed.test.js.map +1 -1
- package/dist/models/__tests__/isOpen.test.js +6 -0
- package/dist/models/__tests__/isOpen.test.js.map +1 -1
- package/dist/repositories/local/__tests__/getChildrenByFilePath.test.d.ts +2 -0
- package/dist/repositories/local/__tests__/getChildrenByFilePath.test.d.ts.map +1 -0
- package/dist/repositories/local/__tests__/getChildrenByFilePath.test.js +118 -0
- package/dist/repositories/local/__tests__/getChildrenByFilePath.test.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.js +13 -1
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.js.map +1 -1
- package/dist/repositories/local/__tests__/getObjectById.test.js +2 -0
- package/dist/repositories/local/__tests__/getObjectById.test.js.map +1 -1
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js +2 -0
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
- package/dist/repositories/local/deleteObjectById.js +2 -2
- package/dist/repositories/local/deleteObjectById.js.map +1 -1
- package/dist/repositories/local/findMarkdownFiles.d.ts.map +1 -1
- package/dist/repositories/local/findMarkdownFiles.js +6 -1
- package/dist/repositories/local/findMarkdownFiles.js.map +1 -1
- package/dist/repositories/local/getChildrenByFilePath.d.ts +14 -0
- package/dist/repositories/local/getChildrenByFilePath.d.ts.map +1 -0
- package/dist/repositories/local/getChildrenByFilePath.js +93 -0
- package/dist/repositories/local/getChildrenByFilePath.js.map +1 -0
- package/dist/repositories/local/getObjectByFilePath.d.ts.map +1 -1
- package/dist/repositories/local/getObjectByFilePath.js +5 -1
- package/dist/repositories/local/getObjectByFilePath.js.map +1 -1
- package/dist/repositories/local/getObjectById.d.ts.map +1 -1
- package/dist/repositories/local/getObjectById.js +4 -1
- package/dist/repositories/local/getObjectById.js.map +1 -1
- package/dist/repositories/local/getObjects.js +1 -1
- package/dist/repositories/local/getObjects.js.map +1 -1
- package/dist/repositories/local/saveObject.d.ts +1 -0
- package/dist/repositories/local/saveObject.d.ts.map +1 -1
- package/dist/repositories/local/saveObject.js +46 -0
- package/dist/repositories/local/saveObject.js.map +1 -1
- package/dist/server.js +52 -17
- package/dist/server.js.map +1 -1
- package/dist/tools/__tests__/appendObjectLogTool.test.js +2 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
- package/dist/tools/__tests__/claimTaskTool.test.js +4 -0
- package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/completeTaskTool.test.js +2 -0
- package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/createObjectTool.test.js +18 -0
- package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/getObjectTool.test.js +4 -0
- package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/listObjectsTool.test.js +4 -0
- package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
- package/dist/tools/__tests__/pruneClosedTool.test.d.ts +2 -0
- package/dist/tools/__tests__/pruneClosedTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/pruneClosedTool.test.js +171 -0
- package/dist/tools/__tests__/pruneClosedTool.test.js.map +1 -0
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts +2 -0
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +258 -0
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +1 -0
- package/dist/tools/__tests__/updateObjectTool.test.js +2 -0
- package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
- package/dist/tools/activateTool.d.ts +1 -1
- package/dist/tools/activateTool.d.ts.map +1 -1
- package/dist/tools/activateTool.js +35 -1
- package/dist/tools/activateTool.js.map +1 -1
- package/dist/tools/appendObjectLogTool.d.ts +1 -1
- package/dist/tools/appendObjectLogTool.d.ts.map +1 -1
- package/dist/tools/appendObjectLogTool.js +27 -1
- package/dist/tools/appendObjectLogTool.js.map +1 -1
- package/dist/tools/claimTaskTool.d.ts +1 -1
- package/dist/tools/claimTaskTool.d.ts.map +1 -1
- package/dist/tools/claimTaskTool.js +34 -5
- package/dist/tools/claimTaskTool.js.map +1 -1
- package/dist/tools/completeTaskTool.d.ts +1 -1
- package/dist/tools/completeTaskTool.d.ts.map +1 -1
- package/dist/tools/completeTaskTool.js +30 -1
- package/dist/tools/completeTaskTool.js.map +1 -1
- package/dist/tools/createObjectTool.d.ts +1 -1
- package/dist/tools/createObjectTool.d.ts.map +1 -1
- package/dist/tools/createObjectTool.js +43 -2
- package/dist/tools/createObjectTool.js.map +1 -1
- package/dist/tools/deleteObjectTool.d.ts +1 -1
- package/dist/tools/deleteObjectTool.d.ts.map +1 -1
- package/dist/tools/deleteObjectTool.js +23 -1
- package/dist/tools/deleteObjectTool.js.map +1 -1
- package/dist/tools/getObjectTool.d.ts +1 -1
- package/dist/tools/getObjectTool.d.ts.map +1 -1
- package/dist/tools/getObjectTool.js +21 -1
- package/dist/tools/getObjectTool.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/listObjectsTool.d.ts +1 -1
- package/dist/tools/listObjectsTool.d.ts.map +1 -1
- package/dist/tools/listObjectsTool.js +37 -1
- package/dist/tools/listObjectsTool.js.map +1 -1
- package/dist/tools/pruneClosedTool.d.ts +3 -3
- package/dist/tools/pruneClosedTool.d.ts.map +1 -1
- package/dist/tools/pruneClosedTool.js +82 -11
- package/dist/tools/pruneClosedTool.js.map +1 -1
- package/dist/tools/replaceObjectBodyRegexTool.d.ts +35 -0
- package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +1 -0
- package/dist/tools/replaceObjectBodyRegexTool.js +145 -0
- package/dist/tools/replaceObjectBodyRegexTool.js.map +1 -0
- package/dist/tools/updateObjectTool.d.ts +1 -1
- package/dist/tools/updateObjectTool.d.ts.map +1 -1
- package/dist/tools/updateObjectTool.js +35 -1
- package/dist/tools/updateObjectTool.js.map +1 -1
- package/dist/utils/MultipleMatchesError.d.ts +7 -0
- package/dist/utils/MultipleMatchesError.d.ts.map +1 -0
- package/dist/utils/MultipleMatchesError.js +15 -0
- package/dist/utils/MultipleMatchesError.js.map +1 -0
- package/dist/utils/ReplaceStringOptions.d.ts +12 -0
- package/dist/utils/ReplaceStringOptions.d.ts.map +1 -0
- package/dist/utils/ReplaceStringOptions.js +3 -0
- package/dist/utils/ReplaceStringOptions.js.map +1 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +2 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
- package/dist/utils/__tests__/deserializeTrellisObject.test.js +48 -0
- package/dist/utils/__tests__/deserializeTrellisObject.test.js.map +1 -1
- package/dist/utils/__tests__/filterUnavailableObjects.test.js +11 -10
- package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +2 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
- package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts +2 -0
- package/dist/utils/__tests__/replaceStringWithRegex.test.d.ts.map +1 -0
- package/dist/utils/__tests__/replaceStringWithRegex.test.js +263 -0
- package/dist/utils/__tests__/replaceStringWithRegex.test.js.map +1 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.js +24 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.js.map +1 -1
- package/dist/utils/__tests__/serializeTrellisObject.test.js +40 -0
- package/dist/utils/__tests__/serializeTrellisObject.test.js.map +1 -1
- package/dist/utils/__tests__/sortTrellisObjects.test.js +2 -0
- package/dist/utils/__tests__/sortTrellisObjects.test.js.map +1 -1
- package/dist/utils/checkPrerequisitesComplete.d.ts.map +1 -1
- package/dist/utils/checkPrerequisitesComplete.js +3 -4
- package/dist/utils/checkPrerequisitesComplete.js.map +1 -1
- package/dist/utils/deserializeTrellisObject.d.ts.map +1 -1
- package/dist/utils/deserializeTrellisObject.js +5 -0
- package/dist/utils/deserializeTrellisObject.js.map +1 -1
- package/dist/utils/filterUnavailableObjects.d.ts.map +1 -1
- package/dist/utils/filterUnavailableObjects.js +5 -6
- package/dist/utils/filterUnavailableObjects.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/isRequiredForOtherObjects.d.ts.map +1 -1
- package/dist/utils/isRequiredForOtherObjects.js +2 -4
- package/dist/utils/isRequiredForOtherObjects.js.map +1 -1
- package/dist/utils/replaceStringWithRegex.d.ts +45 -0
- package/dist/utils/replaceStringWithRegex.d.ts.map +1 -0
- package/dist/utils/replaceStringWithRegex.js +82 -0
- package/dist/utils/replaceStringWithRegex.js.map +1 -0
- package/dist/utils/serializeTrellisObject.d.ts.map +1 -1
- package/dist/utils/serializeTrellisObject.js +3 -0
- package/dist/utils/serializeTrellisObject.js.map +1 -1
- package/dist/validation/__tests__/validateObjectCreation.test.js +2 -0
- package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
- package/dist/validation/__tests__/validateParentExists.test.js +2 -0
- package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
- package/dist/validation/__tests__/validateStatusTransition.test.js +2 -0
- package/dist/validation/__tests__/validateStatusTransition.test.js.map +1 -1
- package/package.json +8 -3
|
@@ -2,9 +2,40 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.pruneClosedTool = void 0;
|
|
4
4
|
exports.handlePruneClosed = handlePruneClosed;
|
|
5
|
+
const isClosed_1 = require("../models/isClosed");
|
|
5
6
|
exports.pruneClosedTool = {
|
|
6
7
|
name: "prune_closed",
|
|
7
|
-
description:
|
|
8
|
+
description: `Prunes closed objects from the task trellis system
|
|
9
|
+
|
|
10
|
+
Use this tool for maintenance and cleanup of completed, cancelled, or otherwise closed objects that are no longer needed. Essential for system hygiene and performance optimization.
|
|
11
|
+
|
|
12
|
+
Pruning criteria:
|
|
13
|
+
- 'age': Minimum age in minutes since object closure (required)
|
|
14
|
+
- 'scope': Limit pruning to specific project or area (optional)
|
|
15
|
+
- Objects must be in closed states (completed, cancelled, archived)
|
|
16
|
+
- Objects must not have active dependencies or relationships
|
|
17
|
+
|
|
18
|
+
Safety mechanisms:
|
|
19
|
+
- Only removes truly closed objects (completed, cancelled, etc.)
|
|
20
|
+
- Validates no active objects depend on pruned items
|
|
21
|
+
- Preserves objects referenced by active work
|
|
22
|
+
- Maintains referential integrity of remaining system
|
|
23
|
+
|
|
24
|
+
Common usage patterns:
|
|
25
|
+
- Daily cleanup: age=1440 (24 hours)
|
|
26
|
+
- Weekly maintenance: age=10080 (7 days)
|
|
27
|
+
- Project closure: scope='project-name', age=4320 (3 days)
|
|
28
|
+
- System cleanup: age=43200 (30 days)
|
|
29
|
+
|
|
30
|
+
Pruning benefits:
|
|
31
|
+
- Reduces database size and improves query performance
|
|
32
|
+
- Removes clutter from active task views
|
|
33
|
+
- Prevents accumulation of obsolete work items
|
|
34
|
+
- Maintains focus on current and relevant tasks
|
|
35
|
+
|
|
36
|
+
Use regularly as part of system maintenance to keep the task trellis clean and performant. Consider project lifecycles and audit requirements when setting age thresholds.
|
|
37
|
+
|
|
38
|
+
This operation is permanent - pruned objects cannot be recovered.`,
|
|
8
39
|
inputSchema: {
|
|
9
40
|
type: "object",
|
|
10
41
|
properties: {
|
|
@@ -20,16 +51,56 @@ exports.pruneClosedTool = {
|
|
|
20
51
|
required: ["age"],
|
|
21
52
|
},
|
|
22
53
|
};
|
|
23
|
-
function handlePruneClosed(repository, args) {
|
|
54
|
+
async function handlePruneClosed(repository, args) {
|
|
24
55
|
const { scope, age } = args;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
56
|
+
try {
|
|
57
|
+
// Get all objects including closed ones
|
|
58
|
+
const objects = await repository.getObjects(true, scope);
|
|
59
|
+
// Filter to only closed objects
|
|
60
|
+
const closedObjects = objects.filter(isClosed_1.isClosed);
|
|
61
|
+
// Calculate cutoff time (age in minutes ago)
|
|
62
|
+
const cutoffTime = new Date(Date.now() - age * 60 * 1000);
|
|
63
|
+
// Filter to objects older than cutoff
|
|
64
|
+
const objectsToDelete = closedObjects.filter((obj) => {
|
|
65
|
+
const updatedTime = new Date(obj.updated);
|
|
66
|
+
return updatedTime < cutoffTime;
|
|
67
|
+
});
|
|
68
|
+
// Delete each object
|
|
69
|
+
const deletedIds = [];
|
|
70
|
+
for (const obj of objectsToDelete) {
|
|
71
|
+
try {
|
|
72
|
+
await repository.deleteObject(obj.id, true);
|
|
73
|
+
deletedIds.push(obj.id);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
// Continue with other objects even if one fails
|
|
77
|
+
console.error(`Failed to delete object ${obj.id}:`, error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const message = scope
|
|
81
|
+
? `Pruned ${deletedIds.length} closed objects older than ${age} minutes in scope ${scope}`
|
|
82
|
+
: `Pruned ${deletedIds.length} closed objects older than ${age} minutes`;
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: "text",
|
|
87
|
+
text: `${message}${deletedIds.length > 0
|
|
88
|
+
? `
|
|
89
|
+
Deleted objects: ${deletedIds.join(", ")}`
|
|
90
|
+
: ""}`,
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return {
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: "text",
|
|
100
|
+
text: `Error pruning closed objects: ${error instanceof Error ? error.message : String(error)}`,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
34
105
|
}
|
|
35
106
|
//# sourceMappingURL=pruneClosedTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pruneClosedTool.js","sourceRoot":"","sources":["../../src/tools/pruneClosedTool.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"pruneClosedTool.js","sourceRoot":"","sources":["../../src/tools/pruneClosedTool.ts"],"names":[],"mappings":";;;AAoDA,8CA6DC;AAhHD,iDAA8C;AAEjC,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEA8BmD;IAChE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wCAAwC;aACtD;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB;CACO,CAAC;AAEJ,KAAK,UAAU,iBAAiB,CAAC,UAAsB,EAAE,IAAa;IAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAGtB,CAAC;IAEF,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEzD,gCAAgC;QAChC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAQ,CAAC,CAAC;QAE/C,6CAA6C;QAC7C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE1D,sCAAsC;QACtC,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,WAAW,GAAG,UAAU,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC5C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gDAAgD;gBAChD,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,KAAK;YACnB,CAAC,CAAC,UAAU,UAAU,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,KAAK,EAAE;YAC1F,CAAC,CAAC,UAAU,UAAU,CAAC,MAAM,8BAA8B,GAAG,UAAU,CAAC;QAE3E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,OAAO,GACd,UAAU,CAAC,MAAM,GAAG,CAAC;wBACnB,CAAC,CAAC;mBACG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC5B,CAAC,CAAC,EACN,EAAE;iBACH;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAChG;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Repository } from "../repositories";
|
|
2
|
+
export declare const replaceObjectBodyRegexTool: {
|
|
3
|
+
readonly name: "replace_object_body_regex";
|
|
4
|
+
readonly description: "Replaces portions of an object's body using regular expressions\n\nUse this tool to make targeted edits to specific sections of an object's body content without recreating the entire text. This is safer and more efficient than wholesale body replacement for surgical text modifications.\n\nThe tool uses regex pattern matching with multiline and global capabilities, similar to Python's re.sub(). When allowMultipleOccurrences is false (default), it prevents unintended bulk replacements by throwing an error if multiple matches are found.\n\nRegex Features:\n- Multiline matching: patterns can span multiple lines\n- Dot-all mode: . matches newlines \n- Backreferences: use \\1, \\2, etc. in replacement text\n- Case-sensitive matching (use (?i) flag in pattern for case-insensitive)\n\nCommon use cases:\n- Update specific sections of documentation\n- Modify code snippets within object descriptions\n- Replace outdated information while preserving structure\n- Update specific parameters or values\n- Fix formatting or content errors in targeted areas\n\nSafety features:\n- Single-match enforcement (unless explicitly allowed)\n- Pattern validation before execution\n- Graceful error handling with detailed messages\n- Original content preservation on pattern mismatch\n\nExample patterns:\n- Simple text: \"old text\" → \"new text\"\n- With context: \"(section:\\s*)old content(\\s*end)\" → \"\\1new content\\2\" \n- Multi-line: \"BEGIN.*?END\" → \"BEGIN\\nnew content\\nEND\"\n- Backreferences: \"(\\w+) (\\w+)\" → \"\\2, \\1\"\n\nThe replacement preserves all object metadata and relationships while only modifying the body content that matches your pattern.";
|
|
5
|
+
readonly inputSchema: {
|
|
6
|
+
readonly type: "object";
|
|
7
|
+
readonly properties: {
|
|
8
|
+
readonly id: {
|
|
9
|
+
readonly type: "string";
|
|
10
|
+
readonly description: "ID of the object whose body should be modified";
|
|
11
|
+
};
|
|
12
|
+
readonly regex: {
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly description: "Regular expression pattern to match content in the body";
|
|
15
|
+
};
|
|
16
|
+
readonly replacement: {
|
|
17
|
+
readonly type: "string";
|
|
18
|
+
readonly description: "Replacement text (may contain backreferences like \\1, \\2, etc.)";
|
|
19
|
+
};
|
|
20
|
+
readonly allowMultipleOccurrences: {
|
|
21
|
+
readonly type: "boolean";
|
|
22
|
+
readonly description: "Allow replacing multiple pattern matches (defaults to false)";
|
|
23
|
+
readonly default: false;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
readonly required: readonly ["id", "regex", "replacement"];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare function handleReplaceObjectBodyRegex(repository: Repository, args: unknown): Promise<{
|
|
30
|
+
content: {
|
|
31
|
+
type: string;
|
|
32
|
+
text: string;
|
|
33
|
+
}[];
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=replaceObjectBodyRegexTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replaceObjectBodyRegexTool.d.ts","sourceRoot":"","sources":["../../src/tools/replaceObjectBodyRegexTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D7B,CAAC;AAEX,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,OAAO;;;;;GAiGd"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.replaceObjectBodyRegexTool = void 0;
|
|
4
|
+
exports.handleReplaceObjectBodyRegex = handleReplaceObjectBodyRegex;
|
|
5
|
+
const replaceStringWithRegex_1 = require("../utils/replaceStringWithRegex");
|
|
6
|
+
const MultipleMatchesError_1 = require("../utils/MultipleMatchesError");
|
|
7
|
+
exports.replaceObjectBodyRegexTool = {
|
|
8
|
+
name: "replace_object_body_regex",
|
|
9
|
+
description: `Replaces portions of an object's body using regular expressions
|
|
10
|
+
|
|
11
|
+
Use this tool to make targeted edits to specific sections of an object's body content without recreating the entire text. This is safer and more efficient than wholesale body replacement for surgical text modifications.
|
|
12
|
+
|
|
13
|
+
The tool uses regex pattern matching with multiline and global capabilities, similar to Python's re.sub(). When allowMultipleOccurrences is false (default), it prevents unintended bulk replacements by throwing an error if multiple matches are found.
|
|
14
|
+
|
|
15
|
+
Regex Features:
|
|
16
|
+
- Multiline matching: patterns can span multiple lines
|
|
17
|
+
- Dot-all mode: . matches newlines
|
|
18
|
+
- Backreferences: use \\1, \\2, etc. in replacement text
|
|
19
|
+
- Case-sensitive matching (use (?i) flag in pattern for case-insensitive)
|
|
20
|
+
|
|
21
|
+
Common use cases:
|
|
22
|
+
- Update specific sections of documentation
|
|
23
|
+
- Modify code snippets within object descriptions
|
|
24
|
+
- Replace outdated information while preserving structure
|
|
25
|
+
- Update specific parameters or values
|
|
26
|
+
- Fix formatting or content errors in targeted areas
|
|
27
|
+
|
|
28
|
+
Safety features:
|
|
29
|
+
- Single-match enforcement (unless explicitly allowed)
|
|
30
|
+
- Pattern validation before execution
|
|
31
|
+
- Graceful error handling with detailed messages
|
|
32
|
+
- Original content preservation on pattern mismatch
|
|
33
|
+
|
|
34
|
+
Example patterns:
|
|
35
|
+
- Simple text: "old text" → "new text"
|
|
36
|
+
- With context: "(section:\\s*)old content(\\s*end)" → "\\1new content\\2"
|
|
37
|
+
- Multi-line: "BEGIN.*?END" → "BEGIN\\nnew content\\nEND"
|
|
38
|
+
- Backreferences: "(\\w+) (\\w+)" → "\\2, \\1"
|
|
39
|
+
|
|
40
|
+
The replacement preserves all object metadata and relationships while only modifying the body content that matches your pattern.`,
|
|
41
|
+
inputSchema: {
|
|
42
|
+
type: "object",
|
|
43
|
+
properties: {
|
|
44
|
+
id: {
|
|
45
|
+
type: "string",
|
|
46
|
+
description: "ID of the object whose body should be modified",
|
|
47
|
+
},
|
|
48
|
+
regex: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "Regular expression pattern to match content in the body",
|
|
51
|
+
},
|
|
52
|
+
replacement: {
|
|
53
|
+
type: "string",
|
|
54
|
+
description: "Replacement text (may contain backreferences like \\1, \\2, etc.)",
|
|
55
|
+
},
|
|
56
|
+
allowMultipleOccurrences: {
|
|
57
|
+
type: "boolean",
|
|
58
|
+
description: "Allow replacing multiple pattern matches (defaults to false)",
|
|
59
|
+
default: false,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ["id", "regex", "replacement"],
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
async function handleReplaceObjectBodyRegex(repository, args) {
|
|
66
|
+
const { id, regex, replacement, allowMultipleOccurrences = false, } = args;
|
|
67
|
+
try {
|
|
68
|
+
// Load the existing object
|
|
69
|
+
const existingObject = await repository.getObjectById(id);
|
|
70
|
+
if (!existingObject) {
|
|
71
|
+
return {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
type: "text",
|
|
75
|
+
text: `Error: Object with ID '${id}' not found`,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Check if the object has a body to replace
|
|
81
|
+
if (!existingObject.body) {
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: "text",
|
|
86
|
+
text: `Error: Object with ID '${id}' has no body content to replace`,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Perform the regex replacement on the body
|
|
92
|
+
const updatedBody = (0, replaceStringWithRegex_1.replaceStringWithRegex)(existingObject.body, {
|
|
93
|
+
regex,
|
|
94
|
+
replacement,
|
|
95
|
+
allowMultipleOccurrences,
|
|
96
|
+
});
|
|
97
|
+
// If the body didn't change, inform the user
|
|
98
|
+
if (updatedBody === existingObject.body) {
|
|
99
|
+
return {
|
|
100
|
+
content: [
|
|
101
|
+
{
|
|
102
|
+
type: "text",
|
|
103
|
+
text: `No matches found for pattern "${regex}" in object body. Body remains unchanged.`,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Create updated object with the new body
|
|
109
|
+
const updatedObject = {
|
|
110
|
+
...existingObject,
|
|
111
|
+
body: updatedBody,
|
|
112
|
+
};
|
|
113
|
+
// Save the updated object
|
|
114
|
+
await repository.saveObject(updatedObject);
|
|
115
|
+
return {
|
|
116
|
+
content: [
|
|
117
|
+
{
|
|
118
|
+
type: "text",
|
|
119
|
+
text: `Successfully replaced content in object body using pattern "${regex}". Object ID: ${id}`,
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error instanceof MultipleMatchesError_1.MultipleMatchesError) {
|
|
126
|
+
return {
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: "text",
|
|
130
|
+
text: `Error: ${error.message}`,
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
content: [
|
|
137
|
+
{
|
|
138
|
+
type: "text",
|
|
139
|
+
text: `Error replacing object body: ${error instanceof Error ? error.message : String(error)}`,
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=replaceObjectBodyRegexTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replaceObjectBodyRegexTool.js","sourceRoot":"","sources":["../../src/tools/replaceObjectBodyRegexTool.ts"],"names":[],"mappings":";;;AAkEA,oEAmGC;AAnKD,4EAAyE;AACzE,wEAAqE;AAExD,QAAA,0BAA0B,GAAG;IACxC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iIA+BkH;IAC/H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mEAAmE;aACtE;YACD,wBAAwB,EAAE;gBACxB,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,8DAA8D;gBAChE,OAAO,EAAE,KAAK;aACf;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;KACzC;CACO,CAAC;AAEJ,KAAK,UAAU,4BAA4B,CAChD,UAAsB,EACtB,IAAa;IAEb,MAAM,EACJ,EAAE,EACF,KAAK,EACL,WAAW,EACX,wBAAwB,GAAG,KAAK,GACjC,GAAG,IAKH,CAAC;IAEF,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0BAA0B,EAAE,aAAa;qBAChD;iBACF;aACF,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0BAA0B,EAAE,kCAAkC;qBACrE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,WAAW,GAAG,IAAA,+CAAsB,EAAC,cAAc,CAAC,IAAI,EAAE;YAC9D,KAAK;YACL,WAAW;YACX,wBAAwB;SACzB,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,WAAW,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iCAAiC,KAAK,2CAA2C;qBACxF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,MAAM,aAAa,GAAkB;YACnC,GAAG,cAAc;YACjB,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,0BAA0B;QAC1B,MAAM,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE3C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,+DAA+D,KAAK,iBAAiB,EAAE,EAAE;iBAChG;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,2CAAoB,EAAE,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;qBAChC;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC/F;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Repository } from "../repositories";
|
|
2
2
|
export declare const updateObjectTool: {
|
|
3
3
|
readonly name: "update_object";
|
|
4
|
-
readonly description: "Updates an existing object in the task trellis system";
|
|
4
|
+
readonly description: "Updates an existing object in the task trellis system\n\nUse this tool to modify properties of existing objects such as changing status, priority, prerequisites, or content. Essential for managing work item lifecycle and maintaining project state.\n\nAvailable status values:\n- 'draft': Initial state for new objects\n- 'open': Ready to begin work\n- 'in-progress': Currently being worked on\n- 'done': Completed successfully\n- 'wont-do': Cancelled or decided against\n\nAvailable priority values:\n- 'high': Critical or urgent work\n- 'medium': Standard priority\n- 'low': Nice-to-have or future work\n\nUpdatable properties:\n- 'status': Progress state (follows workflow: draft → open → in-progress → done)\n- 'priority': Importance level (high, medium, low)\n- 'prerequisites': Dependency relationships (add/remove prerequisite objects)\n- 'body': Detailed description or content of the work item\n- 'force': Bypass certain validation checks when necessary\n\nCommon update patterns:\n- Mark task as ready: status='open'\n- Start working: status='in-progress'\n- Change priority: priority='high'\n- Add dependencies: prerequisites=[...existing, 'new-prereq-id']\n- Update description: body='detailed work description'\n- Complete work: status='done'\n- Cancel work: status='wont-do'\n\nThe update maintains object integrity by validating relationships and preserving audit trail. Use 'force=true' only when bypassing standard validation is necessary for administrative operations.\n\nUpdates automatically refresh the 'updated' timestamp while preserving creation metadata and change history.";
|
|
5
5
|
readonly inputSchema: {
|
|
6
6
|
readonly type: "object";
|
|
7
7
|
readonly properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateObjectTool.d.ts","sourceRoot":"","sources":["../../src/tools/updateObjectTool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"updateObjectTool.d.ts","sourceRoot":"","sources":["../../src/tools/updateObjectTool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEnB,CAAC;AAEX,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,OAAO;;;;;GAuEd"}
|
|
@@ -5,7 +5,41 @@ exports.handleUpdateObject = handleUpdateObject;
|
|
|
5
5
|
const validateStatusTransition_1 = require("../validation/validateStatusTransition");
|
|
6
6
|
exports.updateObjectTool = {
|
|
7
7
|
name: "update_object",
|
|
8
|
-
description:
|
|
8
|
+
description: `Updates an existing object in the task trellis system
|
|
9
|
+
|
|
10
|
+
Use this tool to modify properties of existing objects such as changing status, priority, prerequisites, or content. Essential for managing work item lifecycle and maintaining project state.
|
|
11
|
+
|
|
12
|
+
Available status values:
|
|
13
|
+
- 'draft': Initial state for new objects
|
|
14
|
+
- 'open': Ready to begin work
|
|
15
|
+
- 'in-progress': Currently being worked on
|
|
16
|
+
- 'done': Completed successfully
|
|
17
|
+
- 'wont-do': Cancelled or decided against
|
|
18
|
+
|
|
19
|
+
Available priority values:
|
|
20
|
+
- 'high': Critical or urgent work
|
|
21
|
+
- 'medium': Standard priority
|
|
22
|
+
- 'low': Nice-to-have or future work
|
|
23
|
+
|
|
24
|
+
Updatable properties:
|
|
25
|
+
- 'status': Progress state (follows workflow: draft → open → in-progress → done)
|
|
26
|
+
- 'priority': Importance level (high, medium, low)
|
|
27
|
+
- 'prerequisites': Dependency relationships (add/remove prerequisite objects)
|
|
28
|
+
- 'body': Detailed description or content of the work item
|
|
29
|
+
- 'force': Bypass certain validation checks when necessary
|
|
30
|
+
|
|
31
|
+
Common update patterns:
|
|
32
|
+
- Mark task as ready: status='open'
|
|
33
|
+
- Start working: status='in-progress'
|
|
34
|
+
- Change priority: priority='high'
|
|
35
|
+
- Add dependencies: prerequisites=[...existing, 'new-prereq-id']
|
|
36
|
+
- Update description: body='detailed work description'
|
|
37
|
+
- Complete work: status='done'
|
|
38
|
+
- Cancel work: status='wont-do'
|
|
39
|
+
|
|
40
|
+
The update maintains object integrity by validating relationships and preserving audit trail. Use 'force=true' only when bypassing standard validation is necessary for administrative operations.
|
|
41
|
+
|
|
42
|
+
Updates automatically refresh the 'updated' timestamp while preserving creation metadata and change history.`,
|
|
9
43
|
inputSchema: {
|
|
10
44
|
type: "object",
|
|
11
45
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateObjectTool.js","sourceRoot":"","sources":["../../src/tools/updateObjectTool.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"updateObjectTool.js","sourceRoot":"","sources":["../../src/tools/updateObjectTool.ts"],"names":[],"mappings":";;;AAiFA,gDAyEC;AApJD,qFAAkF;AAErE,QAAA,gBAAgB,GAAG;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6GAkC8F;IAC3G,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;iBACf;gBACD,WAAW,EAAE,6CAA6C;aAC3D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,uCAAuC;gBACpD,OAAO,EAAE,KAAK;aACf;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;CACO,CAAC;AAEJ,KAAK,UAAU,kBAAkB,CACtC,UAAsB,EACtB,IAAa;IAEb,MAAM,EACJ,EAAE,EACF,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAK,GAAG,KAAK,GACd,GAAG,IAOH,CAAC;IAEF,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0BAA0B,EAAE,aAAa;qBAChD;iBACF;aACF,CAAC;QACJ,CAAC;QAED,oEAAoE;QACpE,MAAM,aAAa,GAAkB;YACnC,GAAG,cAAc;YACjB,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,QAAiC,EAAE,CAAC;YAChE,GAAG,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,MAA6B,EAAE,CAAC;SACzD,CAAC;QAEF,6BAA6B;QAC7B,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,IAAA,mDAAwB,EAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,0BAA0B;QAC1B,MAAM,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE3C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gCAAgC,IAAI,CAAC,SAAS,CAClD,aAAa,EACb,IAAI,EACJ,CAAC,CACF,EAAE;iBACJ;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACzF;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultipleMatchesError.d.ts","sourceRoot":"","sources":["../../src/utils/MultipleMatchesError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOhD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultipleMatchesError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Error thrown when multiple regex matches are found but not allowed
|
|
6
|
+
*/
|
|
7
|
+
class MultipleMatchesError extends Error {
|
|
8
|
+
constructor(matchCount, pattern) {
|
|
9
|
+
super(`Found ${matchCount} matches for pattern "${pattern}" but allowMultipleOccurrences is false. ` +
|
|
10
|
+
"Use allowMultipleOccurrences: true to replace all matches, or provide a more specific regex.");
|
|
11
|
+
this.name = "MultipleMatchesError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.MultipleMatchesError = MultipleMatchesError;
|
|
15
|
+
//# sourceMappingURL=MultipleMatchesError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultipleMatchesError.js","sourceRoot":"","sources":["../../src/utils/MultipleMatchesError.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,UAAkB,EAAE,OAAe;QAC7C,KAAK,CACH,SAAS,UAAU,yBAAyB,OAAO,2CAA2C;YAC5F,8FAA8F,CACjG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AARD,oDAQC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for string replacement with regex
|
|
3
|
+
*/
|
|
4
|
+
export interface ReplaceStringOptions {
|
|
5
|
+
/** The regular expression pattern to match */
|
|
6
|
+
regex: string;
|
|
7
|
+
/** The replacement string (may contain backreferences like \1, \2, etc.) */
|
|
8
|
+
replacement: string;
|
|
9
|
+
/** Whether to allow multiple occurrences to be replaced. If false and multiple matches found, throws an error */
|
|
10
|
+
allowMultipleOccurrences?: boolean;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ReplaceStringOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplaceStringOptions.d.ts","sourceRoot":"","sources":["../../src/utils/ReplaceStringOptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,iHAAiH;IACjH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplaceStringOptions.js","sourceRoot":"","sources":["../../src/utils/ReplaceStringOptions.ts"],"names":[],"mappings":""}
|
|
@@ -36,6 +36,8 @@ describe("checkPrerequisitesComplete", () => {
|
|
|
36
36
|
childrenIds: [],
|
|
37
37
|
body: `Body for ${id}`,
|
|
38
38
|
type: models_1.TrellisObjectType.TASK,
|
|
39
|
+
created: "2025-01-15T10:00:00Z",
|
|
40
|
+
updated: "2025-01-15T10:00:00Z",
|
|
39
41
|
});
|
|
40
42
|
it("should return true when object has no prerequisites", async () => {
|
|
41
43
|
const object = createMockObject("task-1", models_1.TrellisObjectStatus.OPEN, []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPrerequisitesComplete.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/checkPrerequisitesComplete.test.ts"],"names":[],"mappings":";;AAAA,yCAKsB;AAEtB,8EAA2E;AAE3E,6CAA6C;AAC7C,MAAM,cAAc;IACV,OAAO,GAA+B,IAAI,GAAG,EAAE,CAAC;IAExD,YAAY,UAA2B,EAAE;QACvC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,cAAwB;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,aAA4B;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,MAAM,gBAAgB,GAAG,CACvB,EAAU,EACV,MAA2B,EAC3B,gBAA0B,EAAE,EACb,EAAE,CAAC,CAAC;QACnB,EAAE;QACF,KAAK,EAAE,QAAQ,EAAE,EAAE;QACnB,MAAM;QACN,QAAQ,EAAE,8BAAqB,CAAC,MAAM;QACtC,aAAa;QACb,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,EAAE;QACf,IAAI,EAAE,YAAY,EAAE,EAAE;QACtB,IAAI,EAAE,0BAAiB,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"checkPrerequisitesComplete.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/checkPrerequisitesComplete.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ id: T-test-id-123
|
|
|
10
10
|
title: Test Task
|
|
11
11
|
status: in-progress
|
|
12
12
|
priority: high
|
|
13
|
+
parent: F-parent-feature-456
|
|
13
14
|
prerequisites:
|
|
14
15
|
- prereq-1
|
|
15
16
|
- prereq-2
|
|
@@ -23,6 +24,8 @@ schema: v1.0
|
|
|
23
24
|
childrenIds:
|
|
24
25
|
- child-1
|
|
25
26
|
- child-2
|
|
27
|
+
created: "2025-01-15T10:00:00Z"
|
|
28
|
+
updated: "2025-01-15T10:00:00Z"
|
|
26
29
|
---
|
|
27
30
|
|
|
28
31
|
This is the main content of the task.`;
|
|
@@ -33,6 +36,7 @@ This is the main content of the task.`;
|
|
|
33
36
|
title: "Test Task",
|
|
34
37
|
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
35
38
|
priority: models_1.TrellisObjectPriority.HIGH,
|
|
39
|
+
parent: "F-parent-feature-456",
|
|
36
40
|
prerequisites: ["prereq-1", "prereq-2"],
|
|
37
41
|
affectedFiles: new Map([
|
|
38
42
|
["src/file1.ts", "modified"],
|
|
@@ -42,6 +46,8 @@ This is the main content of the task.`;
|
|
|
42
46
|
schema: "v1.0",
|
|
43
47
|
childrenIds: ["child-1", "child-2"],
|
|
44
48
|
body: "This is the main content of the task.",
|
|
49
|
+
created: "2025-01-15T10:00:00Z",
|
|
50
|
+
updated: "2025-01-15T10:00:00Z",
|
|
45
51
|
});
|
|
46
52
|
});
|
|
47
53
|
it("should handle multi-line log entries correctly", () => {
|
|
@@ -68,6 +74,8 @@ log:
|
|
|
68
74
|
- Final point
|
|
69
75
|
schema: v1.0
|
|
70
76
|
childrenIds: []
|
|
77
|
+
created: "2025-01-15T10:00:00Z"
|
|
78
|
+
updated: "2025-01-15T10:00:00Z"
|
|
71
79
|
---
|
|
72
80
|
|
|
73
81
|
Test body content`;
|
|
@@ -89,6 +97,8 @@ affectedFiles: {}
|
|
|
89
97
|
log: []
|
|
90
98
|
schema: v1.0
|
|
91
99
|
childrenIds: []
|
|
100
|
+
created: "2025-01-15T10:00:00Z"
|
|
101
|
+
updated: "2025-01-15T10:00:00Z"
|
|
92
102
|
---
|
|
93
103
|
|
|
94
104
|
`;
|
|
@@ -119,6 +129,8 @@ schema: v2.0-beta
|
|
|
119
129
|
childrenIds:
|
|
120
130
|
- child-with-dashes
|
|
121
131
|
- child with spaces
|
|
132
|
+
created: "2025-01-15T10:00:00Z"
|
|
133
|
+
updated: "2025-01-15T10:00:00Z"
|
|
122
134
|
---
|
|
123
135
|
|
|
124
136
|
Body with "quotes", symbols: @#$%, and other special characters!`;
|
|
@@ -151,6 +163,8 @@ title: Test Task
|
|
|
151
163
|
status: open
|
|
152
164
|
# priority is missing
|
|
153
165
|
schema: v1.0
|
|
166
|
+
created: "2025-01-15T10:00:00Z"
|
|
167
|
+
updated: "2025-01-15T10:00:00Z"
|
|
154
168
|
---
|
|
155
169
|
|
|
156
170
|
body content`;
|
|
@@ -163,6 +177,8 @@ title: Test Task
|
|
|
163
177
|
status: open
|
|
164
178
|
priority: 123 # should be string, not number
|
|
165
179
|
schema: v1.0
|
|
180
|
+
created: "2025-01-15T10:00:00Z"
|
|
181
|
+
updated: "2025-01-15T10:00:00Z"
|
|
166
182
|
---
|
|
167
183
|
|
|
168
184
|
body content`;
|
|
@@ -188,6 +204,8 @@ schema: v1.0
|
|
|
188
204
|
childrenIds:
|
|
189
205
|
- valid-child
|
|
190
206
|
- 789
|
|
207
|
+
created: "2025-01-15T10:00:00Z"
|
|
208
|
+
updated: "2025-01-15T10:00:00Z"
|
|
191
209
|
---
|
|
192
210
|
|
|
193
211
|
body content`;
|
|
@@ -211,6 +229,8 @@ affectedFiles:
|
|
|
211
229
|
log: []
|
|
212
230
|
schema: v1.0
|
|
213
231
|
childrenIds: []
|
|
232
|
+
created: "2025-01-15T10:00:00Z"
|
|
233
|
+
updated: "2025-01-15T10:00:00Z"
|
|
214
234
|
---
|
|
215
235
|
|
|
216
236
|
body content`;
|
|
@@ -232,6 +252,8 @@ affectedFiles: {}
|
|
|
232
252
|
log: []
|
|
233
253
|
schema: v1.0
|
|
234
254
|
childrenIds: []
|
|
255
|
+
created: "2025-01-15T10:00:00Z"
|
|
256
|
+
updated: "2025-01-15T10:00:00Z"
|
|
235
257
|
---
|
|
236
258
|
|
|
237
259
|
# Main Task Description
|
|
@@ -268,6 +290,7 @@ const example = "code block";
|
|
|
268
290
|
title: "Round Trip Test",
|
|
269
291
|
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
270
292
|
priority: models_1.TrellisObjectPriority.HIGH,
|
|
293
|
+
parent: "F-parent-feature-789",
|
|
271
294
|
prerequisites: ["prereq-1", "prereq-2"],
|
|
272
295
|
affectedFiles: new Map([
|
|
273
296
|
["src/file1.ts", "modified"],
|
|
@@ -283,6 +306,8 @@ const example = "code block";
|
|
|
283
306
|
childrenIds: ["child-1", "child-2"],
|
|
284
307
|
body: "# Task Description\n\nThis is the task body with **markdown** formatting.",
|
|
285
308
|
type: models_1.TrellisObjectType.TASK,
|
|
309
|
+
created: "2025-01-15T10:00:00Z",
|
|
310
|
+
updated: "2025-01-15T10:00:00Z",
|
|
286
311
|
};
|
|
287
312
|
// Serialize then deserialize
|
|
288
313
|
const serialized = (0, serializeTrellisObject_1.serializeTrellisObject)(originalObject);
|
|
@@ -309,6 +334,8 @@ affectedFiles: {}
|
|
|
309
334
|
log: []
|
|
310
335
|
schema: v1.0
|
|
311
336
|
childrenIds: []
|
|
337
|
+
created: "2025-01-15T10:00:00Z"
|
|
338
|
+
updated: "2025-01-15T10:00:00Z"
|
|
312
339
|
---
|
|
313
340
|
|
|
314
341
|
This body contains --- markers
|
|
@@ -325,5 +352,26 @@ and should handle them correctly.
|
|
|
325
352
|
|
|
326
353
|
Even multiple --- sections should work.`);
|
|
327
354
|
});
|
|
355
|
+
it("should handle markdown without parent field", () => {
|
|
356
|
+
const markdownString = `---
|
|
357
|
+
id: P-no-parent-test
|
|
358
|
+
title: No Parent Test
|
|
359
|
+
status: open
|
|
360
|
+
priority: medium
|
|
361
|
+
prerequisites: []
|
|
362
|
+
affectedFiles: {}
|
|
363
|
+
log: []
|
|
364
|
+
schema: v1.0
|
|
365
|
+
childrenIds: []
|
|
366
|
+
created: "2025-01-15T10:00:00Z"
|
|
367
|
+
updated: "2025-01-15T10:00:00Z"
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
Test body content`;
|
|
371
|
+
const result = (0, deserializeTrellisObject_1.deserializeTrellisObject)(markdownString);
|
|
372
|
+
expect(result.parent).toBeUndefined();
|
|
373
|
+
expect(result.id).toBe("P-no-parent-test");
|
|
374
|
+
expect(result.title).toBe("No Parent Test");
|
|
375
|
+
});
|
|
328
376
|
});
|
|
329
377
|
//# sourceMappingURL=deserializeTrellisObject.test.js.map
|