@langadventurellc/task-trellis-mcp 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -22
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js +64 -12
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +260 -90
- package/dist/__tests__/e2e/crud/listObjects.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 +14 -8
- package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +3 -1
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts.map +1 -1
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +1 -0
- package/dist/__tests__/e2e/utils/parseListObjectsResponse.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 +189 -0
- package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +446 -0
- package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +3 -7
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
- package/dist/configuration/ServerConfig.d.ts +1 -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/models/TrellisObjectSummary.js +3 -0
- package/dist/models/TrellisObjectSummary.js.map +1 -0
- package/dist/models/__tests__/isClaimable.test.js +5 -66
- package/dist/models/__tests__/isClaimable.test.js.map +1 -1
- 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/models/isClaimable.d.ts +2 -2
- package/dist/models/isClaimable.d.ts.map +1 -1
- package/dist/models/isClaimable.js +3 -4
- package/dist/models/isClaimable.js.map +1 -1
- 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 +40 -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 +1 -0
- package/dist/repositories/local/deleteObjectById.js.map +1 -1
- 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.map +1 -1
- package/dist/repositories/local/getObjects.js +6 -1
- package/dist/repositories/local/getObjects.js.map +1 -1
- package/dist/server.js +23 -9
- package/dist/server.js.map +1 -1
- package/dist/services/TaskTrellisService.d.ts +87 -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 +61 -0
- package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -0
- package/dist/services/local/LocalTaskTrellisService.js +77 -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 +161 -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 +104 -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 +463 -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 +468 -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 +332 -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 +226 -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 +213 -0
- package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -0
- package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts +2 -0
- package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js +283 -0
- package/dist/services/local/__tests__/replaceObjectBodyRegex.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 +314 -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 +118 -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 +74 -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 +43 -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 +55 -0
- package/dist/services/local/pruneClosed.js.map +1 -0
- package/dist/services/local/replaceObjectBodyRegex.d.ts +8 -0
- package/dist/services/local/replaceObjectBodyRegex.d.ts.map +1 -0
- package/dist/services/local/replaceObjectBodyRegex.js +85 -0
- package/dist/services/local/replaceObjectBodyRegex.js.map +1 -0
- package/dist/services/local/updateObject.d.ts +9 -0
- package/dist/services/local/updateObject.d.ts.map +1 -0
- package/dist/services/local/updateObject.js +53 -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 +177 -0
- package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -0
- package/dist/tools/__tests__/appendObjectLogTool.test.js +33 -101
- package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
- package/dist/tools/__tests__/claimTaskTool.test.js +98 -326
- package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/completeTaskTool.test.js +134 -184
- package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/createObjectTool.test.js +61 -325
- package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/listObjectsTool.test.js +70 -109
- package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
- package/dist/tools/__tests__/pruneClosedTool.test.js +87 -146
- package/dist/tools/__tests__/pruneClosedTool.test.js.map +1 -1
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +56 -225
- package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +1 -1
- package/dist/tools/__tests__/updateObjectTool.test.js +48 -166
- 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 +4 -3
- package/dist/tools/appendObjectLogTool.d.ts.map +1 -1
- package/dist/tools/appendObjectLogTool.js +2 -40
- 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 +7 -6
- package/dist/tools/createObjectTool.d.ts.map +1 -1
- package/dist/tools/createObjectTool.js +11 -44
- package/dist/tools/createObjectTool.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 +5 -4
- package/dist/tools/listObjectsTool.d.ts.map +1 -1
- package/dist/tools/listObjectsTool.js +5 -13
- package/dist/tools/listObjectsTool.js.map +1 -1
- package/dist/tools/pruneClosedTool.d.ts +4 -3
- package/dist/tools/pruneClosedTool.d.ts.map +1 -1
- package/dist/tools/pruneClosedTool.js +2 -51
- package/dist/tools/pruneClosedTool.js.map +1 -1
- package/dist/tools/replaceObjectBodyRegexTool.d.ts +4 -3
- package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +1 -1
- package/dist/tools/replaceObjectBodyRegexTool.js +2 -80
- package/dist/tools/replaceObjectBodyRegexTool.js.map +1 -1
- package/dist/tools/updateObjectTool.d.ts +5 -4
- package/dist/tools/updateObjectTool.d.ts.map +1 -1
- package/dist/tools/updateObjectTool.js +3 -49
- package/dist/tools/updateObjectTool.js.map +1 -1
- package/dist/utils/__tests__/filterUnavailableObjects.test.js +4 -6
- package/dist/utils/__tests__/filterUnavailableObjects.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/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
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.claimTask = claimTask;
|
|
4
|
+
const models_1 = require("../../models");
|
|
5
|
+
const checkPrerequisitesComplete_1 = require("../../utils/checkPrerequisitesComplete");
|
|
6
|
+
const filterUnavailableObjects_1 = require("../../utils/filterUnavailableObjects");
|
|
7
|
+
const sortTrellisObjects_1 = require("../../utils/sortTrellisObjects");
|
|
8
|
+
async function claimTask(repository, scope, taskId, force = false) {
|
|
9
|
+
try {
|
|
10
|
+
let claimedTask;
|
|
11
|
+
if (taskId) {
|
|
12
|
+
claimedTask = await claimSpecificTask(taskId, force, repository);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
claimedTask = await findNextAvailableTask(scope, repository);
|
|
16
|
+
}
|
|
17
|
+
const updatedTask = await updateTaskStatus(claimedTask, repository);
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: `Successfully claimed task: ${JSON.stringify(updatedTask, null, 2)}`,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: "text",
|
|
32
|
+
text: `Error claiming task: ${error instanceof Error ? error.message : String(error)}`,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function claimSpecificTask(taskId, force, repository) {
|
|
39
|
+
const object = await repository.getObjectById(taskId);
|
|
40
|
+
if (!object) {
|
|
41
|
+
throw new Error(`Task with ID "${taskId}" not found`);
|
|
42
|
+
}
|
|
43
|
+
await validateTaskForClaiming(object, taskId, force, repository);
|
|
44
|
+
return object;
|
|
45
|
+
}
|
|
46
|
+
async function findNextAvailableTask(scope, repository) {
|
|
47
|
+
const objects = await repository.getObjects(false, // includeClosed
|
|
48
|
+
scope, models_1.TrellisObjectType.TASK);
|
|
49
|
+
// Filter to get only available tasks
|
|
50
|
+
const availableTasks = (0, filterUnavailableObjects_1.filterUnavailableObjects)(objects);
|
|
51
|
+
if (availableTasks.length === 0) {
|
|
52
|
+
throw new Error("No available tasks to claim");
|
|
53
|
+
}
|
|
54
|
+
// Sort by priority and return the top one
|
|
55
|
+
const sortedTasks = (0, sortTrellisObjects_1.sortTrellisObjects)(availableTasks);
|
|
56
|
+
return sortedTasks[0];
|
|
57
|
+
}
|
|
58
|
+
async function updateTaskStatus(task, repository) {
|
|
59
|
+
const updatedTask = {
|
|
60
|
+
...task,
|
|
61
|
+
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
62
|
+
};
|
|
63
|
+
await repository.saveObject(updatedTask);
|
|
64
|
+
// Update parent hierarchy to in-progress (don't let errors fail the task claim)
|
|
65
|
+
try {
|
|
66
|
+
await updateParentHierarchy(task.parent, repository);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
// Log but don't propagate parent hierarchy update errors
|
|
70
|
+
console.warn("Failed to update parent hierarchy:", error);
|
|
71
|
+
}
|
|
72
|
+
return updatedTask;
|
|
73
|
+
}
|
|
74
|
+
async function validateTaskForClaiming(task, taskId, force, repository) {
|
|
75
|
+
// Validate it's a task
|
|
76
|
+
if (task.type !== models_1.TrellisObjectType.TASK) {
|
|
77
|
+
throw new Error(`Object with ID "${taskId}" is not a task (type: ${task.type})`);
|
|
78
|
+
}
|
|
79
|
+
if (!force) {
|
|
80
|
+
// Validate status is draft or open
|
|
81
|
+
if (!(0, models_1.isClaimable)(task)) {
|
|
82
|
+
throw new Error(`Task "${taskId}" cannot be claimed (status: ${task.status}). Task must be in draft or open status.`);
|
|
83
|
+
}
|
|
84
|
+
// Validate all prerequisites are complete
|
|
85
|
+
const prerequisitesComplete = await (0, checkPrerequisitesComplete_1.checkPrerequisitesComplete)(task, repository);
|
|
86
|
+
if (!prerequisitesComplete) {
|
|
87
|
+
throw new Error(`Task "${taskId}" cannot be claimed. Not all prerequisites are complete.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function updateParentHierarchy(parentId, repository, visitedIds = new Set()) {
|
|
92
|
+
if (!parentId) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Prevent infinite recursion by checking if we've already visited this ID
|
|
96
|
+
if (visitedIds.has(parentId)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
visitedIds.add(parentId);
|
|
100
|
+
const parent = await repository.getObjectById(parentId);
|
|
101
|
+
if (!parent) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// If parent is already in progress, we can stop here since we assume
|
|
105
|
+
// its parent is already in progress too
|
|
106
|
+
if (parent.status === models_1.TrellisObjectStatus.IN_PROGRESS) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Update parent to in-progress
|
|
110
|
+
const updatedParent = {
|
|
111
|
+
...parent,
|
|
112
|
+
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
113
|
+
};
|
|
114
|
+
await repository.saveObject(updatedParent);
|
|
115
|
+
// Continue up the hierarchy
|
|
116
|
+
await updateParentHierarchy(parent.parent, repository, visitedIds);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=claimTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimTask.js","sourceRoot":"","sources":["../../../src/services/local/claimTask.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ServerConfig } from "../../configuration";
|
|
2
|
+
import { Repository } from "../../repositories";
|
|
3
|
+
export declare function completeTask(repository: Repository, taskId: string, summary: string, filesChanged: Record<string, string>, serverConfig?: ServerConfig): Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=completeTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completeTask.d.ts","sourceRoot":"","sources":["../../../src/services/local/completeTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,wBAAsB,YAAY,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuC7D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.completeTask = completeTask;
|
|
4
|
+
const models_1 = require("../../models");
|
|
5
|
+
const appendAffectedFiles_js_1 = require("./appendAffectedFiles.js");
|
|
6
|
+
async function completeTask(repository, taskId, summary, filesChanged, serverConfig) {
|
|
7
|
+
// Get the task object from repository
|
|
8
|
+
const task = await repository.getObjectById(taskId);
|
|
9
|
+
if (!task) {
|
|
10
|
+
throw new Error(`Task with ID "${taskId}" not found`);
|
|
11
|
+
}
|
|
12
|
+
// Check if task is in progress
|
|
13
|
+
if (task.status !== models_1.TrellisObjectStatus.IN_PROGRESS) {
|
|
14
|
+
throw new Error(`Task "${taskId}" is not in progress (current status: ${task.status})`);
|
|
15
|
+
}
|
|
16
|
+
// Update task status to done
|
|
17
|
+
task.status = models_1.TrellisObjectStatus.DONE;
|
|
18
|
+
// Append to affected files map
|
|
19
|
+
await (0, appendAffectedFiles_js_1.appendAffectedFiles)(repository, task, filesChanged);
|
|
20
|
+
// Append summary to log
|
|
21
|
+
task.log.push(summary);
|
|
22
|
+
// Save the updated task
|
|
23
|
+
await repository.saveObject(task);
|
|
24
|
+
// If auto-complete parent is enabled, check if we should complete parent objects
|
|
25
|
+
if (serverConfig?.autoCompleteParent) {
|
|
26
|
+
await autoCompleteParentHierarchy(repository, task);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: "text",
|
|
32
|
+
text: `Task "${taskId}" completed successfully. Updated ${Object.keys(filesChanged).length} affected files.`,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async function autoCompleteParentHierarchy(repository, completedObject) {
|
|
38
|
+
// If the completed object has no parent, nothing to do
|
|
39
|
+
if (!completedObject.parent) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Get the parent object
|
|
43
|
+
const parent = await repository.getObjectById(completedObject.parent);
|
|
44
|
+
if (!parent) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Check if all children of the parent are done
|
|
48
|
+
const siblings = await Promise.all(parent.childrenIds.map((id) => repository.getObjectById(id)));
|
|
49
|
+
// Filter out null results and check if all are done
|
|
50
|
+
const validSiblings = siblings.filter((sibling) => sibling !== null);
|
|
51
|
+
const allChildrenDone = validSiblings.every((sibling) => sibling.status === models_1.TrellisObjectStatus.DONE ||
|
|
52
|
+
sibling.status === models_1.TrellisObjectStatus.WONT_DO);
|
|
53
|
+
// If all children are done, mark the parent as done and recurse up the hierarchy
|
|
54
|
+
if (allChildrenDone && parent.status !== models_1.TrellisObjectStatus.DONE) {
|
|
55
|
+
parent.status = models_1.TrellisObjectStatus.DONE;
|
|
56
|
+
parent.log.push(`Auto-completed: All child ${getChildTypeName(parent.type)} are complete`);
|
|
57
|
+
await repository.saveObject(parent);
|
|
58
|
+
// Recursively check the parent's parent
|
|
59
|
+
await autoCompleteParentHierarchy(repository, parent);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function getChildTypeName(parentType) {
|
|
63
|
+
switch (parentType) {
|
|
64
|
+
case models_1.TrellisObjectType.PROJECT:
|
|
65
|
+
return "epics";
|
|
66
|
+
case models_1.TrellisObjectType.EPIC:
|
|
67
|
+
return "features";
|
|
68
|
+
case models_1.TrellisObjectType.FEATURE:
|
|
69
|
+
return "tasks";
|
|
70
|
+
default:
|
|
71
|
+
return "children";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=completeTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completeTask.js","sourceRoot":"","sources":["../../../src/services/local/completeTask.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TrellisObjectPriority, TrellisObjectStatus, TrellisObjectType } from "../../models";
|
|
2
|
+
import { Repository } from "../../repositories";
|
|
3
|
+
export declare function createObject(repository: Repository, type: TrellisObjectType, title: string, parent?: string, priority?: TrellisObjectPriority, status?: TrellisObjectStatus, prerequisites?: string[], description?: string): Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=createObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createObject.d.ts","sourceRoot":"","sources":["../../../src/services/local/createObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,wBAAsB,YAAY,CAChC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,qBAAoD,EAC9D,MAAM,GAAE,mBAA8C,EACtD,aAAa,GAAE,MAAM,EAAO,EAC5B,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyC7D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createObject = createObject;
|
|
4
|
+
const models_1 = require("../../models");
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
const validateObjectCreation_1 = require("../../validation/validateObjectCreation");
|
|
7
|
+
async function createObject(repository, type, title, parent, priority = models_1.TrellisObjectPriority.MEDIUM, status = models_1.TrellisObjectStatus.OPEN, prerequisites = [], description = "") {
|
|
8
|
+
// Get existing objects to generate unique ID
|
|
9
|
+
const existingObjects = await repository.getObjects(true);
|
|
10
|
+
const existingIds = existingObjects.map((obj) => obj.id);
|
|
11
|
+
// Generate unique ID
|
|
12
|
+
const id = (0, utils_1.generateUniqueId)(title, type, existingIds);
|
|
13
|
+
// Create TrellisObject with current timestamp
|
|
14
|
+
const now = new Date().toISOString();
|
|
15
|
+
const trellisObject = {
|
|
16
|
+
id,
|
|
17
|
+
type,
|
|
18
|
+
title,
|
|
19
|
+
status,
|
|
20
|
+
priority,
|
|
21
|
+
parent,
|
|
22
|
+
prerequisites,
|
|
23
|
+
affectedFiles: new Map(),
|
|
24
|
+
log: [],
|
|
25
|
+
schema: "v1.0",
|
|
26
|
+
childrenIds: [],
|
|
27
|
+
created: now,
|
|
28
|
+
updated: now,
|
|
29
|
+
body: description,
|
|
30
|
+
};
|
|
31
|
+
// Validate object before saving
|
|
32
|
+
await (0, validateObjectCreation_1.validateObjectCreation)(trellisObject, repository);
|
|
33
|
+
// Save through repository
|
|
34
|
+
await repository.saveObject(trellisObject);
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: "text",
|
|
39
|
+
text: `Created object with ID: ${id}`,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=createObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createObject.js","sourceRoot":"","sources":["../../../src/services/local/createObject.ts"],"names":[],"mappings":";;AAUA,oCAkDC;AA5DD,yCAKsB;AAEtB,uCAA+C;AAC/C,oFAAiF;AAE1E,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,IAAuB,EACvB,KAAa,EACb,MAAe,EACf,WAAkC,8BAAqB,CAAC,MAAM,EAC9D,SAA8B,4BAAmB,CAAC,IAAI,EACtD,gBAA0B,EAAE,EAC5B,cAAsB,EAAE;IAExB,6CAA6C;IAC7C,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEzD,qBAAqB;IACrB,MAAM,EAAE,GAAG,IAAA,wBAAgB,EAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,aAAa,GAAkB;QACnC,EAAE;QACF,IAAI;QACJ,KAAK;QACL,MAAM;QACN,QAAQ;QACR,MAAM;QACN,aAAa;QACb,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,WAAW;KAClB,CAAC;IAEF,gCAAgC;IAChC,MAAM,IAAA,+CAAsB,EAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAExD,0BAA0B;IAC1B,MAAM,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAE3C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,2BAA2B,EAAE,EAAE;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TrellisObjectPriority, TrellisObjectStatus, TrellisObjectType } from "../../models";
|
|
2
|
+
import { Repository } from "../../repositories";
|
|
3
|
+
export declare function listObjects(repository: Repository, type: TrellisObjectType, scope?: string, status?: TrellisObjectStatus, priority?: TrellisObjectPriority, includeClosed?: boolean): Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=listObjects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listObjects.d.ts","sourceRoot":"","sources":["../../../src/services/local/listObjects.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EAEnB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAiBhD,wBAAsB,WAAW,CAC/B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,qBAAqB,EAChC,aAAa,GAAE,OAAe,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA+B7D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listObjects = listObjects;
|
|
4
|
+
function convertToSummary(obj) {
|
|
5
|
+
return {
|
|
6
|
+
id: obj.id,
|
|
7
|
+
type: obj.type,
|
|
8
|
+
title: obj.title,
|
|
9
|
+
status: obj.status,
|
|
10
|
+
priority: obj.priority,
|
|
11
|
+
parent: obj.parent,
|
|
12
|
+
prerequisites: obj.prerequisites,
|
|
13
|
+
childrenIds: obj.childrenIds,
|
|
14
|
+
created: obj.created,
|
|
15
|
+
updated: obj.updated,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async function listObjects(repository, type, scope, status, priority, includeClosed = false) {
|
|
19
|
+
try {
|
|
20
|
+
// Get objects from repository
|
|
21
|
+
const objects = await repository.getObjects(includeClosed, scope, type, status, priority);
|
|
22
|
+
const objectSummaries = objects.map(convertToSummary);
|
|
23
|
+
return {
|
|
24
|
+
content: [
|
|
25
|
+
{
|
|
26
|
+
type: "text",
|
|
27
|
+
text: JSON.stringify(objectSummaries, null, 2),
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
text: `Error listing objects: ${error instanceof Error ? error.message : String(error)}`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=listObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listObjects.js","sourceRoot":"","sources":["../../../src/services/local/listObjects.ts"],"names":[],"mappings":";;AAwBA,kCAsCC;AArDD,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,IAAuB,EACvB,KAAc,EACd,MAA4B,EAC5B,QAAgC,EAChC,gBAAyB,KAAK;IAE9B,IAAI,CAAC;QACH,8BAA8B;QAC9B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CACzC,aAAa,EACb,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,CACT,CAAC;QAEF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEtD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC/C;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":"pruneClosed.d.ts","sourceRoot":"","sources":["../../../src/services/local/pruneClosed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,wBAAsB,WAAW,CAC/B,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuD7D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pruneClosed = pruneClosed;
|
|
4
|
+
const models_1 = require("../../models");
|
|
5
|
+
async function pruneClosed(repository, age, scope) {
|
|
6
|
+
try {
|
|
7
|
+
// Get all objects including closed ones
|
|
8
|
+
const objects = await repository.getObjects(true, scope);
|
|
9
|
+
// Filter to only closed objects
|
|
10
|
+
const closedObjects = objects.filter(models_1.isClosed);
|
|
11
|
+
// Calculate cutoff time (age in minutes ago)
|
|
12
|
+
const cutoffTime = new Date(Date.now() - age * 60 * 1000);
|
|
13
|
+
// Filter to objects older than cutoff
|
|
14
|
+
const objectsToDelete = closedObjects.filter((obj) => {
|
|
15
|
+
const updatedTime = new Date(obj.updated);
|
|
16
|
+
return updatedTime < cutoffTime;
|
|
17
|
+
});
|
|
18
|
+
// Delete each object
|
|
19
|
+
const deletedIds = [];
|
|
20
|
+
for (const obj of objectsToDelete) {
|
|
21
|
+
try {
|
|
22
|
+
await repository.deleteObject(obj.id, true);
|
|
23
|
+
deletedIds.push(obj.id);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
// Continue with other objects even if one fails
|
|
27
|
+
console.error(`Failed to delete object ${obj.id}:`, error);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const message = scope
|
|
31
|
+
? `Pruned ${deletedIds.length} closed objects older than ${age} minutes in scope ${scope}`
|
|
32
|
+
: `Pruned ${deletedIds.length} closed objects older than ${age} minutes`;
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
text: `${message}${deletedIds.length > 0
|
|
38
|
+
? `\nDeleted objects: ${deletedIds.join(", ")}`
|
|
39
|
+
: ""}`,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: "text",
|
|
49
|
+
text: `Error pruning closed objects: ${error instanceof Error ? error.message : String(error)}`,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=pruneClosed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pruneClosed.js","sourceRoot":"","sources":["../../../src/services/local/pruneClosed.ts"],"names":[],"mappings":";;AAGA,kCA2DC;AA9DD,yCAAwC;AAGjC,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,GAAW,EACX,KAAc;IAEd,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,iBAAQ,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,sBAAsB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC/C,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,8 @@
|
|
|
1
|
+
import { Repository } from "../../repositories";
|
|
2
|
+
export declare function replaceObjectBodyRegex(repository: Repository, id: string, regex: string, replacement: string, allowMultipleOccurrences?: boolean): Promise<{
|
|
3
|
+
content: Array<{
|
|
4
|
+
type: string;
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=replaceObjectBodyRegex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replaceObjectBodyRegex.d.ts","sourceRoot":"","sources":["../../../src/services/local/replaceObjectBodyRegex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,wBAAwB,GAAE,OAAe,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoF7D"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.replaceObjectBodyRegex = replaceObjectBodyRegex;
|
|
4
|
+
const MultipleMatchesError_1 = require("../../utils/MultipleMatchesError");
|
|
5
|
+
const replaceStringWithRegex_1 = require("../../utils/replaceStringWithRegex");
|
|
6
|
+
async function replaceObjectBodyRegex(repository, id, regex, replacement, allowMultipleOccurrences = false) {
|
|
7
|
+
try {
|
|
8
|
+
// Load the existing object
|
|
9
|
+
const existingObject = await repository.getObjectById(id);
|
|
10
|
+
if (!existingObject) {
|
|
11
|
+
return {
|
|
12
|
+
content: [
|
|
13
|
+
{
|
|
14
|
+
type: "text",
|
|
15
|
+
text: `Error: Object with ID '${id}' not found`,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
// Check if the object has a body to replace
|
|
21
|
+
if (!existingObject.body) {
|
|
22
|
+
return {
|
|
23
|
+
content: [
|
|
24
|
+
{
|
|
25
|
+
type: "text",
|
|
26
|
+
text: `Error: Object with ID '${id}' has no body content to replace`,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Perform the regex replacement on the body
|
|
32
|
+
const updatedBody = (0, replaceStringWithRegex_1.replaceStringWithRegex)(existingObject.body, {
|
|
33
|
+
regex,
|
|
34
|
+
replacement,
|
|
35
|
+
allowMultipleOccurrences,
|
|
36
|
+
});
|
|
37
|
+
// If the body didn't change, inform the user
|
|
38
|
+
if (updatedBody === existingObject.body) {
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: "text",
|
|
43
|
+
text: `No matches found for pattern "${regex}" in object body. Body remains unchanged.`,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Create updated object with the new body
|
|
49
|
+
const updatedObject = {
|
|
50
|
+
...existingObject,
|
|
51
|
+
body: updatedBody,
|
|
52
|
+
};
|
|
53
|
+
// Save the updated object
|
|
54
|
+
await repository.saveObject(updatedObject);
|
|
55
|
+
return {
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "text",
|
|
59
|
+
text: `Successfully replaced content in object body using pattern "${regex}". Object ID: ${id}`,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof MultipleMatchesError_1.MultipleMatchesError) {
|
|
66
|
+
return {
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: "text",
|
|
70
|
+
text: `Error: ${error.message}`,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: "text",
|
|
79
|
+
text: `Error replacing object body: ${error instanceof Error ? error.message : String(error)}`,
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=replaceObjectBodyRegex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replaceObjectBodyRegex.js","sourceRoot":"","sources":["../../../src/services/local/replaceObjectBodyRegex.ts"],"names":[],"mappings":";;AAKA,wDA0FC;AA7FD,2EAAwE;AACxE,+EAA4E;AAErE,KAAK,UAAU,sBAAsB,CAC1C,UAAsB,EACtB,EAAU,EACV,KAAa,EACb,WAAmB,EACnB,2BAAoC,KAAK;IAEzC,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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TrellisObjectPriority, TrellisObjectStatus } from "../../models";
|
|
2
|
+
import { Repository } from "../../repositories";
|
|
3
|
+
export declare function updateObject(repository: Repository, id: string, priority?: TrellisObjectPriority, prerequisites?: string[], body?: string, status?: TrellisObjectStatus, force?: boolean): Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=updateObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateObject.d.ts","sourceRoot":"","sources":["../../../src/services/local/updateObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,wBAAsB,YAAY,CAChC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EAAE,qBAAqB,EAChC,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,mBAAmB,EAC5B,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAsD7D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateObject = updateObject;
|
|
4
|
+
const validateStatusTransition_1 = require("../../validation/validateStatusTransition");
|
|
5
|
+
async function updateObject(repository, id, priority, prerequisites, body, status, force = false) {
|
|
6
|
+
try {
|
|
7
|
+
// Load the existing object
|
|
8
|
+
const existingObject = await repository.getObjectById(id);
|
|
9
|
+
if (!existingObject) {
|
|
10
|
+
return {
|
|
11
|
+
content: [
|
|
12
|
+
{
|
|
13
|
+
type: "text",
|
|
14
|
+
text: `Error: Object with ID '${id}' not found`,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Create updated object with new properties, ensuring proper typing
|
|
20
|
+
const updatedObject = {
|
|
21
|
+
...existingObject,
|
|
22
|
+
...(priority && { priority }),
|
|
23
|
+
...(prerequisites && { prerequisites }),
|
|
24
|
+
...(body && { body }),
|
|
25
|
+
...(status && { status }),
|
|
26
|
+
};
|
|
27
|
+
// Validate status transition
|
|
28
|
+
if (status && !force) {
|
|
29
|
+
await (0, validateStatusTransition_1.validateStatusTransition)(updatedObject, repository);
|
|
30
|
+
}
|
|
31
|
+
// Save the updated object
|
|
32
|
+
await repository.saveObject(updatedObject);
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
text: `Successfully updated object: ${JSON.stringify(updatedObject, null, 2)}`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return {
|
|
44
|
+
content: [
|
|
45
|
+
{
|
|
46
|
+
type: "text",
|
|
47
|
+
text: `Error updating object: ${error instanceof Error ? error.message : String(error)}`,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=updateObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateObject.js","sourceRoot":"","sources":["../../../src/services/local/updateObject.ts"],"names":[],"mappings":";;AAQA,oCA8DC;AAhED,wFAAqF;AAE9E,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,EAAU,EACV,QAAgC,EAChC,aAAwB,EACxB,IAAa,EACb,MAA4B,EAC5B,QAAiB,KAAK;IAEtB,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,CAAC;YAC7B,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,CAAC;SAC1B,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":"appendModifiedFilesTool.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/appendModifiedFilesTool.test.ts"],"names":[],"mappings":""}
|