@langadventurellc/task-trellis-mcp 1.2.2 → 1.3.1
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 +5 -4
- package/dist/__tests__/copyBasicClaudeAgents.test.d.ts +2 -0
- package/dist/__tests__/copyBasicClaudeAgents.test.d.ts.map +1 -0
- package/dist/__tests__/copyBasicClaudeAgents.test.js +24 -0
- package/dist/__tests__/copyBasicClaudeAgents.test.js.map +1 -0
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js +4 -4
- package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js +4 -4
- package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/crud/getObject.e2e.test.js +3 -3
- package/dist/__tests__/e2e/crud/getObject.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +10 -10
- package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +1 -1
- package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -1
- package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.js +806 -0
- package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.js.map +1 -0
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +7 -7
- package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
- package/dist/__tests__/serverStartup.test.js +138 -0
- package/dist/__tests__/serverStartup.test.js.map +1 -1
- package/dist/models/TrellisObject.d.ts +1 -1
- package/dist/models/TrellisObject.d.ts.map +1 -1
- package/dist/models/TrellisObjectSummary.d.ts +1 -1
- package/dist/models/TrellisObjectSummary.d.ts.map +1 -1
- package/dist/models/__tests__/isClaimable.test.js +1 -0
- package/dist/models/__tests__/isClaimable.test.js.map +1 -1
- package/dist/models/__tests__/isClosed.test.js +3 -1
- package/dist/models/__tests__/isClosed.test.js.map +1 -1
- package/dist/models/__tests__/isOpen.test.js +3 -1
- package/dist/models/__tests__/isOpen.test.js.map +1 -1
- package/dist/prompts/PromptArgument.d.ts +16 -0
- package/dist/prompts/PromptArgument.d.ts.map +1 -0
- package/dist/prompts/PromptArgument.js +3 -0
- package/dist/prompts/PromptArgument.js.map +1 -0
- package/dist/prompts/PromptManager.d.ts +48 -0
- package/dist/prompts/PromptManager.d.ts.map +1 -0
- package/dist/prompts/PromptManager.js +151 -0
- package/dist/prompts/PromptManager.js.map +1 -0
- package/dist/prompts/PromptMessage.d.ts +11 -0
- package/dist/prompts/PromptMessage.d.ts.map +1 -0
- package/dist/prompts/PromptMessage.js +3 -0
- package/dist/prompts/PromptMessage.js.map +1 -0
- package/dist/prompts/PromptParser.d.ts +7 -0
- package/dist/prompts/PromptParser.d.ts.map +1 -0
- package/dist/prompts/PromptParser.js +141 -0
- package/dist/prompts/PromptParser.js.map +1 -0
- package/dist/prompts/PromptRenderer.d.ts +38 -0
- package/dist/prompts/PromptRenderer.d.ts.map +1 -0
- package/dist/prompts/PromptRenderer.js +128 -0
- package/dist/prompts/PromptRenderer.js.map +1 -0
- package/dist/prompts/PromptsRegistry.d.ts +43 -0
- package/dist/prompts/PromptsRegistry.d.ts.map +1 -0
- package/dist/prompts/PromptsRegistry.js +76 -0
- package/dist/prompts/PromptsRegistry.js.map +1 -0
- package/dist/prompts/TrellisPrompt.d.ts +19 -0
- package/dist/prompts/TrellisPrompt.d.ts.map +1 -0
- package/dist/prompts/TrellisPrompt.js +3 -0
- package/dist/prompts/TrellisPrompt.js.map +1 -0
- package/dist/prompts/__tests__/PromptArgument.test.d.ts +2 -0
- package/dist/prompts/__tests__/PromptArgument.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/PromptArgument.test.js +60 -0
- package/dist/prompts/__tests__/PromptArgument.test.js.map +1 -0
- package/dist/prompts/__tests__/PromptManager.test.d.ts +2 -0
- package/dist/prompts/__tests__/PromptManager.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/PromptManager.test.js +364 -0
- package/dist/prompts/__tests__/PromptManager.test.js.map +1 -0
- package/dist/prompts/__tests__/PromptParser.test.d.ts +2 -0
- package/dist/prompts/__tests__/PromptParser.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/PromptParser.test.js +237 -0
- package/dist/prompts/__tests__/PromptParser.test.js.map +1 -0
- package/dist/prompts/__tests__/PromptRenderer.test.d.ts +2 -0
- package/dist/prompts/__tests__/PromptRenderer.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/PromptRenderer.test.js +325 -0
- package/dist/prompts/__tests__/PromptRenderer.test.js.map +1 -0
- package/dist/prompts/__tests__/TrellisPrompt.test.d.ts +2 -0
- package/dist/prompts/__tests__/TrellisPrompt.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/TrellisPrompt.test.js +107 -0
- package/dist/prompts/__tests__/TrellisPrompt.test.js.map +1 -0
- package/dist/prompts/index.d.ts +9 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +14 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/registry.d.ts +6 -0
- package/dist/prompts/registry.d.ts.map +1 -0
- package/dist/prompts/registry.js +60 -0
- package/dist/prompts/registry.js.map +1 -0
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.js +5 -5
- package/dist/repositories/local/__tests__/getObjectByFilePath.test.js.map +1 -1
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js +2 -2
- package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
- package/dist/resources/basic/prompts/create-epics.md +177 -0
- package/dist/resources/basic/prompts/create-features.md +172 -0
- package/dist/resources/basic/prompts/create-project.md +128 -0
- package/dist/resources/basic/prompts/create-tasks.md +225 -0
- package/dist/resources/basic/prompts/implement-task.md +170 -0
- package/dist/resources/basic-claude/agents/implementation-planner.md +187 -0
- package/dist/resources/basic-claude/agents/issue-verifier.md +154 -0
- package/dist/resources/basic-claude/prompts/create-epics.md +204 -0
- package/dist/resources/basic-claude/prompts/create-features.md +199 -0
- package/dist/resources/basic-claude/prompts/create-project.md +155 -0
- package/dist/resources/basic-claude/prompts/create-tasks.md +252 -0
- package/dist/resources/basic-claude/prompts/implement-task.md +179 -0
- package/dist/server.js +59 -2
- package/dist/server.js.map +1 -1
- package/dist/services/TaskTrellisService.d.ts +9 -0
- package/dist/services/TaskTrellisService.d.ts.map +1 -1
- package/dist/services/local/LocalTaskTrellisService.d.ts +6 -0
- package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -1
- package/dist/services/local/LocalTaskTrellisService.js +24 -0
- package/dist/services/local/LocalTaskTrellisService.js.map +1 -1
- package/dist/services/local/__tests__/appendAffectedFiles.test.js +9 -9
- package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -1
- package/dist/services/local/__tests__/appendModifiedFiles.test.js +1 -1
- package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -1
- package/dist/services/local/__tests__/claimTask.test.js +1 -0
- package/dist/services/local/__tests__/claimTask.test.js.map +1 -1
- package/dist/services/local/__tests__/completeTask.test.js +3 -3
- package/dist/services/local/__tests__/completeTask.test.js.map +1 -1
- package/dist/services/local/__tests__/createObject.test.js +7 -4
- package/dist/services/local/__tests__/createObject.test.js.map +1 -1
- package/dist/services/local/__tests__/getNextAvailableIssue.test.d.ts +2 -0
- package/dist/services/local/__tests__/getNextAvailableIssue.test.d.ts.map +1 -0
- package/dist/services/local/__tests__/getNextAvailableIssue.test.js +314 -0
- package/dist/services/local/__tests__/getNextAvailableIssue.test.js.map +1 -0
- package/dist/services/local/__tests__/listObjects.test.js +1 -0
- package/dist/services/local/__tests__/listObjects.test.js.map +1 -1
- package/dist/services/local/__tests__/pruneClosed.test.js +1 -0
- package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -1
- package/dist/services/local/__tests__/updateObject.test.js +2 -2
- package/dist/services/local/__tests__/updateObject.test.js.map +1 -1
- package/dist/services/local/createObject.d.ts +1 -1
- package/dist/services/local/createObject.d.ts.map +1 -1
- package/dist/services/local/createObject.js +1 -1
- package/dist/services/local/createObject.js.map +1 -1
- package/dist/services/local/getNextAvailableIssue.d.ts +14 -0
- package/dist/services/local/getNextAvailableIssue.d.ts.map +1 -0
- package/dist/services/local/getNextAvailableIssue.js +28 -0
- package/dist/services/local/getNextAvailableIssue.js.map +1 -0
- package/dist/tools/__tests__/claimTaskTool.test.js +1 -0
- package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/completeTaskTool.test.js +1 -0
- package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
- package/dist/tools/__tests__/getObjectTool.test.js +1 -0
- package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/listObjectsTool.test.js +1 -0
- package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
- package/dist/tools/getNextAvailableIssueTool.d.ts +34 -0
- package/dist/tools/getNextAvailableIssueTool.d.ts.map +1 -0
- package/dist/tools/getNextAvailableIssueTool.js +94 -0
- package/dist/tools/getNextAvailableIssueTool.js.map +1 -0
- 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/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js +3 -3
- package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js.map +1 -1
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +1 -0
- package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
- package/dist/utils/__tests__/deserializeTrellisObject.test.js +23 -1
- package/dist/utils/__tests__/deserializeTrellisObject.test.js.map +1 -1
- package/dist/utils/__tests__/filterUnavailableObjects.test.js +1 -1
- package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +1 -0
- package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
- package/dist/utils/__tests__/serializationRoundTrip.test.js +35 -0
- package/dist/utils/__tests__/serializationRoundTrip.test.js.map +1 -1
- package/dist/utils/__tests__/serializeTrellisObject.test.js +8 -2
- package/dist/utils/__tests__/serializeTrellisObject.test.js.map +1 -1
- package/dist/utils/__tests__/sortTrellisObjects.test.js +1 -0
- package/dist/utils/__tests__/sortTrellisObjects.test.js.map +1 -1
- package/dist/utils/__tests__/updateParentHierarchy.test.js +4 -4
- package/dist/utils/__tests__/updateParentHierarchy.test.js.map +1 -1
- package/dist/utils/deserializeTrellisObject.d.ts.map +1 -1
- package/dist/utils/deserializeTrellisObject.js +1 -1
- package/dist/utils/deserializeTrellisObject.js.map +1 -1
- package/dist/utils/serializeTrellisObject.js +1 -1
- package/dist/utils/serializeTrellisObject.js.map +1 -1
- package/dist/utils/updateParentHierarchy.d.ts +1 -1
- package/dist/utils/updateParentHierarchy.d.ts.map +1 -1
- package/dist/utils/updateParentHierarchy.js.map +1 -1
- package/dist/validation/__tests__/validateObjectCreation.test.js +3 -3
- package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
- package/dist/validation/__tests__/validateParentExists.test.js +2 -1
- package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
- package/dist/validation/validateParentExists.d.ts +1 -1
- package/dist/validation/validateParentExists.d.ts.map +1 -1
- package/dist/validation/validateParentExists.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
describe("TrellisPrompt", () => {
|
|
4
|
+
describe("interface structure", () => {
|
|
5
|
+
it("should accept valid prompt with all required fields", () => {
|
|
6
|
+
const prompt = {
|
|
7
|
+
name: "create-project",
|
|
8
|
+
description: "Creates a new project with the specified configuration",
|
|
9
|
+
arguments: [],
|
|
10
|
+
userTemplate: "Create a project named {{projectName}}",
|
|
11
|
+
};
|
|
12
|
+
expect(prompt.name).toBe("create-project");
|
|
13
|
+
expect(prompt.description).toBeDefined();
|
|
14
|
+
expect(prompt.arguments).toEqual([]);
|
|
15
|
+
expect(prompt.userTemplate).toBeDefined();
|
|
16
|
+
});
|
|
17
|
+
it("should accept prompt with optional title field", () => {
|
|
18
|
+
const prompt = {
|
|
19
|
+
name: "test-prompt",
|
|
20
|
+
title: "Test Prompt Title",
|
|
21
|
+
description: "A test prompt",
|
|
22
|
+
arguments: [],
|
|
23
|
+
userTemplate: "Test template",
|
|
24
|
+
};
|
|
25
|
+
expect(prompt.title).toBe("Test Prompt Title");
|
|
26
|
+
});
|
|
27
|
+
it("should accept prompt with arguments", () => {
|
|
28
|
+
const args = [
|
|
29
|
+
{
|
|
30
|
+
name: "projectName",
|
|
31
|
+
type: "string",
|
|
32
|
+
required: true,
|
|
33
|
+
description: "Name of the project",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "includeTests",
|
|
37
|
+
type: "boolean",
|
|
38
|
+
required: false,
|
|
39
|
+
description: "Whether to include test files",
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
const prompt = {
|
|
43
|
+
name: "create-project",
|
|
44
|
+
description: "Creates a new project",
|
|
45
|
+
arguments: args,
|
|
46
|
+
userTemplate: "Create {{projectName}} with tests: {{includeTests}}",
|
|
47
|
+
};
|
|
48
|
+
expect(prompt.arguments).toHaveLength(2);
|
|
49
|
+
expect(prompt.arguments[0].name).toBe("projectName");
|
|
50
|
+
expect(prompt.arguments[1].type).toBe("boolean");
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe("kebab-case name validation", () => {
|
|
54
|
+
it("should accept kebab-case names", () => {
|
|
55
|
+
const validNames = [
|
|
56
|
+
"create-project",
|
|
57
|
+
"update-task-status",
|
|
58
|
+
"generate-epic-summary",
|
|
59
|
+
"add-prerequisite",
|
|
60
|
+
];
|
|
61
|
+
validNames.forEach((name) => {
|
|
62
|
+
const prompt = {
|
|
63
|
+
name,
|
|
64
|
+
description: "Test",
|
|
65
|
+
arguments: [],
|
|
66
|
+
userTemplate: "Test",
|
|
67
|
+
};
|
|
68
|
+
expect(prompt.name).toBe(name);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("Integration scenarios", () => {
|
|
74
|
+
it("should support complex prompt with multiple arguments", () => {
|
|
75
|
+
const prompt = {
|
|
76
|
+
name: "create-feature-with-tasks",
|
|
77
|
+
title: "Create Feature with Tasks",
|
|
78
|
+
description: "Creates a feature and associated tasks",
|
|
79
|
+
arguments: [
|
|
80
|
+
{
|
|
81
|
+
name: "featureName",
|
|
82
|
+
type: "string",
|
|
83
|
+
required: true,
|
|
84
|
+
description: "Name of the feature",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "epicId",
|
|
88
|
+
type: "string",
|
|
89
|
+
required: true,
|
|
90
|
+
description: "Parent epic ID",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: "generateTests",
|
|
94
|
+
type: "boolean",
|
|
95
|
+
required: false,
|
|
96
|
+
description: "Auto-generate test tasks",
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
userTemplate: `Create a feature named "{{featureName}}" under epic {{epicId}}.
|
|
100
|
+
{{#if generateTests}}Include test tasks for each component.{{/if}}`,
|
|
101
|
+
};
|
|
102
|
+
expect(prompt.arguments).toHaveLength(3);
|
|
103
|
+
expect(prompt.arguments.filter((a) => a.required)).toHaveLength(2);
|
|
104
|
+
expect(prompt.userTemplate).toContain("{{featureName}}");
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=TrellisPrompt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrellisPrompt.test.js","sourceRoot":"","sources":["../../../src/prompts/__tests__/TrellisPrompt.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { TrellisPrompt } from "./TrellisPrompt";
|
|
2
|
+
export { PromptArgument } from "./PromptArgument";
|
|
3
|
+
export { parsePromptFile } from "./PromptParser";
|
|
4
|
+
export { PromptManager } from "./PromptManager";
|
|
5
|
+
export { PromptRenderer } from "./PromptRenderer";
|
|
6
|
+
export { PromptMessage } from "./PromptMessage";
|
|
7
|
+
export { PromptsRegistry } from "./PromptsRegistry";
|
|
8
|
+
export { registerPromptHandlers } from "./registry";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPromptHandlers = exports.PromptsRegistry = exports.PromptRenderer = exports.PromptManager = exports.parsePromptFile = void 0;
|
|
4
|
+
var PromptParser_1 = require("./PromptParser");
|
|
5
|
+
Object.defineProperty(exports, "parsePromptFile", { enumerable: true, get: function () { return PromptParser_1.parsePromptFile; } });
|
|
6
|
+
var PromptManager_1 = require("./PromptManager");
|
|
7
|
+
Object.defineProperty(exports, "PromptManager", { enumerable: true, get: function () { return PromptManager_1.PromptManager; } });
|
|
8
|
+
var PromptRenderer_1 = require("./PromptRenderer");
|
|
9
|
+
Object.defineProperty(exports, "PromptRenderer", { enumerable: true, get: function () { return PromptRenderer_1.PromptRenderer; } });
|
|
10
|
+
var PromptsRegistry_1 = require("./PromptsRegistry");
|
|
11
|
+
Object.defineProperty(exports, "PromptsRegistry", { enumerable: true, get: function () { return PromptsRegistry_1.PromptsRegistry; } });
|
|
12
|
+
var registry_1 = require("./registry");
|
|
13
|
+
Object.defineProperty(exports, "registerPromptHandlers", { enumerable: true, get: function () { return registry_1.registerPromptHandlers; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":";;;AAEA,+CAAiD;AAAxC,+GAAA,eAAe,OAAA;AACxB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Registers prompt handlers with the MCP server
|
|
4
|
+
*/
|
|
5
|
+
export declare function registerPromptHandlers(server: Server, promptPackage?: string): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,MAAgB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmEf"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPromptHandlers = registerPromptHandlers;
|
|
4
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
5
|
+
const PromptsRegistry_js_1 = require("./PromptsRegistry.js");
|
|
6
|
+
/**
|
|
7
|
+
* Registers prompt handlers with the MCP server
|
|
8
|
+
*/
|
|
9
|
+
async function registerPromptHandlers(server, promptPackage = "basic") {
|
|
10
|
+
console.warn(`Initializing prompts system with package: ${promptPackage}...`);
|
|
11
|
+
const registry = new PromptsRegistry_js_1.PromptsRegistry(promptPackage);
|
|
12
|
+
// Initialize the registry by loading all prompts
|
|
13
|
+
try {
|
|
14
|
+
await registry.initialize();
|
|
15
|
+
const loadedPrompts = registry.listPrompts();
|
|
16
|
+
console.warn(`Successfully loaded ${loadedPrompts.prompts.length} prompt templates`);
|
|
17
|
+
// Log individual prompt names for debugging
|
|
18
|
+
if (loadedPrompts.prompts.length > 0) {
|
|
19
|
+
console.warn("Available prompts:");
|
|
20
|
+
loadedPrompts.prompts.forEach((prompt) => {
|
|
21
|
+
console.warn(` - ${prompt.name}: ${prompt.description}`);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error("Warning: Failed to load prompt templates:", error);
|
|
27
|
+
console.warn("Continuing with empty prompts registry - prompts feature will be available but with no templates");
|
|
28
|
+
// Continue execution - prompts feature will be available but with no templates
|
|
29
|
+
}
|
|
30
|
+
// Register prompts/list handler
|
|
31
|
+
server.setRequestHandler(types_js_1.ListPromptsRequestSchema, () => {
|
|
32
|
+
try {
|
|
33
|
+
return registry.listPrompts();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof types_js_1.McpError) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Failed to list prompts: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Register prompts/get handler
|
|
43
|
+
server.setRequestHandler(types_js_1.GetPromptRequestSchema, (request) => {
|
|
44
|
+
try {
|
|
45
|
+
const { name, arguments: args } = request.params;
|
|
46
|
+
if (!name) {
|
|
47
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidRequest, "Prompt name is required");
|
|
48
|
+
}
|
|
49
|
+
return registry.getPrompt(name, args);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof types_js_1.McpError) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Failed to get prompt: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
console.warn("Prompt handlers registered successfully");
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":";;AAYA,wDAsEC;AAlFD,iEAK4C;AAE5C,6DAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,gBAAwB,OAAO;IAE/B,OAAO,CAAC,IAAI,CAAC,6CAA6C,aAAa,KAAK,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,oCAAe,CAAC,aAAa,CAAC,CAAC;IAEpD,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CACV,uBAAuB,aAAa,CAAC,OAAO,CAAC,MAAM,mBAAmB,CACvE,CAAC;QAEF,4CAA4C;QAC5C,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvC,OAAO,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CACV,kGAAkG,CACnG,CAAC;QACF,+EAA+E;IACjF,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,iBAAiB,CAAC,mCAAwB,EAAE,GAAG,EAAE;QACtD,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,mBAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,mBAAQ,CAChB,oBAAS,CAAC,aAAa,EACvB,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAGzC,CAAC;YAEF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,mBAAQ,CAAC,oBAAS,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;YAC1E,CAAC;YAED,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,mBAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,mBAAQ,CAChB,oBAAS,CAAC,aAAa,EACvB,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACpF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const getObjectByFilePath_1 = require("../getObjectByFilePath");
|
|
7
|
-
const models_1 = require("../../../models");
|
|
8
6
|
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const models_1 = require("../../../models");
|
|
8
|
+
const getObjectByFilePath_1 = require("../getObjectByFilePath");
|
|
9
9
|
describe("getObjectByFilePath", () => {
|
|
10
10
|
const testDataRoot = path_1.default.join(__dirname, "schema1_0", ".trellis");
|
|
11
11
|
describe("successful deserialization", () => {
|
|
@@ -18,7 +18,7 @@ describe("getObjectByFilePath", () => {
|
|
|
18
18
|
title: "Setup Database Connection",
|
|
19
19
|
status: models_1.TrellisObjectStatus.OPEN,
|
|
20
20
|
priority: models_1.TrellisObjectPriority.HIGH,
|
|
21
|
-
parent:
|
|
21
|
+
parent: null,
|
|
22
22
|
prerequisites: [],
|
|
23
23
|
affectedFiles: new Map(),
|
|
24
24
|
log: [],
|
|
@@ -38,7 +38,7 @@ describe("getObjectByFilePath", () => {
|
|
|
38
38
|
title: "User Authentication Feature",
|
|
39
39
|
status: models_1.TrellisObjectStatus.IN_PROGRESS,
|
|
40
40
|
priority: models_1.TrellisObjectPriority.HIGH,
|
|
41
|
-
parent:
|
|
41
|
+
parent: null,
|
|
42
42
|
prerequisites: [],
|
|
43
43
|
affectedFiles: new Map(),
|
|
44
44
|
log: [],
|
|
@@ -61,7 +61,7 @@ describe("getObjectByFilePath", () => {
|
|
|
61
61
|
title: "Project Initialization",
|
|
62
62
|
status: models_1.TrellisObjectStatus.DONE,
|
|
63
63
|
priority: models_1.TrellisObjectPriority.HIGH,
|
|
64
|
-
parent:
|
|
64
|
+
parent: null,
|
|
65
65
|
prerequisites: [],
|
|
66
66
|
affectedFiles: new Map(),
|
|
67
67
|
log: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObjectByFilePath.test.js","sourceRoot":"","sources":["../../../../src/repositories/local/__tests__/getObjectByFilePath.test.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"getObjectByFilePath.test.js","sourceRoot":"","sources":["../../../../src/repositories/local/__tests__/getObjectByFilePath.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,8 +35,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const path_1 = require("path");
|
|
37
37
|
const models_1 = require("../../../models");
|
|
38
|
-
const getObjectFilePath_1 = require("../getObjectFilePath");
|
|
39
38
|
const getObjectByIdModule = __importStar(require("../getObjectById"));
|
|
39
|
+
const getObjectFilePath_1 = require("../getObjectFilePath");
|
|
40
40
|
// Mock the getObjectById function
|
|
41
41
|
jest.mock("../getObjectById");
|
|
42
42
|
const mockGetObjectById = jest.mocked(getObjectByIdModule.getObjectById);
|
|
@@ -45,7 +45,7 @@ describe("getObjectFilePath", () => {
|
|
|
45
45
|
beforeEach(() => {
|
|
46
46
|
jest.clearAllMocks();
|
|
47
47
|
});
|
|
48
|
-
const createMockObject = (id, type, parent, status = models_1.TrellisObjectStatus.OPEN) => ({
|
|
48
|
+
const createMockObject = (id, type, parent = null, status = models_1.TrellisObjectStatus.OPEN) => ({
|
|
49
49
|
id,
|
|
50
50
|
type,
|
|
51
51
|
title: `Test ${id}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObjectFilePath.test.js","sourceRoot":"","sources":["../../../../src/repositories/local/__tests__/getObjectFilePath.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4B;AAC5B,4CAKyB;AACzB,
|
|
1
|
+
{"version":3,"file":"getObjectFilePath.test.js","sourceRoot":"","sources":["../../../../src/repositories/local/__tests__/getObjectFilePath.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Break down a project into major epics by analyzing the project specification
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Create Epics Command
|
|
6
|
+
|
|
7
|
+
Break down a project into major epics using the Trellis task management system by analyzing the project specification and gathering additional requirements as needed. Do not attempt to create multiple epics in parallel. Do them sequentially one at a time.
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Analyze a project's comprehensive specification to create well-structured epics that represent major work streams, ensuring complete coverage of all project requirements and enabling effective feature decomposition.
|
|
12
|
+
|
|
13
|
+
## Process
|
|
14
|
+
|
|
15
|
+
### 1. Identify Target Project
|
|
16
|
+
|
|
17
|
+
#### Input
|
|
18
|
+
|
|
19
|
+
`$ARGUMENTS`
|
|
20
|
+
|
|
21
|
+
#### Project Context
|
|
22
|
+
|
|
23
|
+
The project ID may be:
|
|
24
|
+
|
|
25
|
+
- Provided in `input` (e.g., "P-inventory-mgmt")
|
|
26
|
+
- Known from previous conversation context
|
|
27
|
+
- Specified along with additional instructions in `input`
|
|
28
|
+
|
|
29
|
+
#### Instructions
|
|
30
|
+
|
|
31
|
+
Retrieve the project using MCP `get_issue` to access its comprehensive description and requirements.
|
|
32
|
+
|
|
33
|
+
### 2. Analyze Project Specification
|
|
34
|
+
|
|
35
|
+
**Thoroughly analyze the project description to identify natural epic boundaries:**
|
|
36
|
+
|
|
37
|
+
- **Use context7 MCP tool** to research architectural patterns and best practices
|
|
38
|
+
- **Search codebase** for similar epic structures or patterns
|
|
39
|
+
- Extract all functional requirements from the project description
|
|
40
|
+
- Identify major technical components and systems
|
|
41
|
+
- Consider cross-cutting concerns (security, testing, deployment, monitoring)
|
|
42
|
+
- Group related functionality into cohesive work streams
|
|
43
|
+
- Identify dependencies between work streams
|
|
44
|
+
- Consider development phases and prerequisites
|
|
45
|
+
- Note any specific instructions provided in `input`
|
|
46
|
+
|
|
47
|
+
### 3. Gather Additional Information
|
|
48
|
+
|
|
49
|
+
**Ask clarifying questions as needed to refine the epic structure:**
|
|
50
|
+
|
|
51
|
+
Use this structured approach:
|
|
52
|
+
|
|
53
|
+
- **Ask one question at a time** with specific options
|
|
54
|
+
- **Focus on epic boundaries** - understand where one epic ends and another begins
|
|
55
|
+
- **Identify component relationships** - how epics interact with each other
|
|
56
|
+
- **Continue until complete** - don't stop until you have clear epic structure
|
|
57
|
+
|
|
58
|
+
Key areas to clarify:
|
|
59
|
+
|
|
60
|
+
- **Epic Boundaries**: Where does one epic end and another begin?
|
|
61
|
+
- **Dependencies**: Which epics must complete before others can start?
|
|
62
|
+
- **Technical Grouping**: Should technical concerns be separate epics or integrated?
|
|
63
|
+
- **Phases**: Should there be phase-based epics (MVP, Enhancement, etc.)?
|
|
64
|
+
- **Non-functional**: How to handle security, performance, monitoring as epics?
|
|
65
|
+
|
|
66
|
+
**Example questioning approach:**
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
How should the authentication system be organized as an epic?
|
|
70
|
+
Options:
|
|
71
|
+
- A) Separate epic for all authentication (login, registration, password reset)
|
|
72
|
+
- B) Integrate authentication into each functional epic
|
|
73
|
+
- C) Split into multiple epics (core auth, advanced features, integrations)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Continue until the epic structure:
|
|
77
|
+
|
|
78
|
+
- Covers all aspects of the project specification
|
|
79
|
+
- Has clear boundaries and scope
|
|
80
|
+
- Enables parallel development where possible
|
|
81
|
+
- Supports logical feature breakdown
|
|
82
|
+
|
|
83
|
+
### 4. Generate Epic Structure
|
|
84
|
+
|
|
85
|
+
For each epic, create:
|
|
86
|
+
|
|
87
|
+
- **Title**: Clear, descriptive name (3-5 words)
|
|
88
|
+
- **Description**: Comprehensive explanation including:
|
|
89
|
+
- Purpose and goals
|
|
90
|
+
- Major components and deliverables
|
|
91
|
+
- **Detailed Acceptance Criteria**: Specific, measurable requirements that define epic completion, including:
|
|
92
|
+
- Functional deliverables with clear success metrics
|
|
93
|
+
- Integration requirements with other epics or external systems
|
|
94
|
+
- Performance and quality standards specific to this epic
|
|
95
|
+
- Security and compliance requirements
|
|
96
|
+
- User experience and usability criteria
|
|
97
|
+
- Testing and validation requirements
|
|
98
|
+
- Technical considerations
|
|
99
|
+
- Dependencies on other epics
|
|
100
|
+
- Estimated scale (number of features)
|
|
101
|
+
- **User Stories** - Key user scenarios this epic addresses
|
|
102
|
+
- **Non-functional Requirements** - Performance, security, scalability considerations specific to this epic
|
|
103
|
+
|
|
104
|
+
### 5. Create Epics Using MCP
|
|
105
|
+
|
|
106
|
+
For each epic, call the Task Trellis MCP `create_issue` tool:
|
|
107
|
+
|
|
108
|
+
- `type`: Set to `"epic"`
|
|
109
|
+
- `parent`: The project ID
|
|
110
|
+
- `title`: Generated epic title
|
|
111
|
+
- `status`: Set to `"open"` (default, ready to begin work) or `"draft"` unless specified
|
|
112
|
+
- `prerequisites`: List of epic IDs that must complete first
|
|
113
|
+
- `description`: Comprehensive epic description with all elements from step 4
|
|
114
|
+
|
|
115
|
+
**For standalone epics**: Simply omit the `parent` parameter entirely.
|
|
116
|
+
|
|
117
|
+
### 6. Output Format
|
|
118
|
+
|
|
119
|
+
After successful creation:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
✅ Successfully created [N] epics for project "[Project Title]"
|
|
123
|
+
|
|
124
|
+
📋 Created Epics:
|
|
125
|
+
1. E-[id1]: [Epic 1 Title]
|
|
126
|
+
→ Dependencies: none
|
|
127
|
+
|
|
128
|
+
2. E-[id2]: [Epic 2 Title]
|
|
129
|
+
→ Dependencies: E-[id1]
|
|
130
|
+
|
|
131
|
+
3. E-[id3]: [Epic 3 Title]
|
|
132
|
+
→ Dependencies: E-[id1], E-[id2]
|
|
133
|
+
|
|
134
|
+
📊 Epic Summary:
|
|
135
|
+
- Total Epics: [N]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Simplicity Principles
|
|
139
|
+
|
|
140
|
+
When creating epics, follow these guidelines:
|
|
141
|
+
|
|
142
|
+
### Keep It Simple:
|
|
143
|
+
|
|
144
|
+
- **No over-engineering** - Create only the epics needed for the project
|
|
145
|
+
- **No extra features** - Don't add functionality that wasn't requested
|
|
146
|
+
- **Choose straightforward approaches** - Simple epic structure over complex hierarchies
|
|
147
|
+
- **Solve the actual problem** - Don't anticipate future requirements
|
|
148
|
+
|
|
149
|
+
### Forbidden Patterns:
|
|
150
|
+
|
|
151
|
+
- **NO premature optimization** - Don't optimize epic structure unless requested
|
|
152
|
+
- **NO feature creep** - Stick to the specified project requirements
|
|
153
|
+
- **NO complex dependencies** - Keep epic relationships simple and clear
|
|
154
|
+
|
|
155
|
+
### Modular Architecture:
|
|
156
|
+
|
|
157
|
+
- **Clear boundaries** - Each epic should have distinct, well-defined responsibilities
|
|
158
|
+
- **Minimal coupling** - Epics should interact through clean interfaces, not internal dependencies
|
|
159
|
+
- **High cohesion** - Related functionality should be grouped within the same epic
|
|
160
|
+
- **Clean interfaces** - Define clear contracts between epics for data and functionality exchange
|
|
161
|
+
|
|
162
|
+
## Question Guidelines
|
|
163
|
+
|
|
164
|
+
Ask questions that:
|
|
165
|
+
|
|
166
|
+
- **Clarify epic boundaries**: What functionality belongs together?
|
|
167
|
+
- **Identify dependencies**: What must be built first?
|
|
168
|
+
- **Consider team structure**: Can epics be worked on in parallel?
|
|
169
|
+
- **Plan for phases**: MVP vs full implementation?
|
|
170
|
+
- **Address non-functionals**: Where do performance/security requirements fit?
|
|
171
|
+
|
|
172
|
+
<rules>
|
|
173
|
+
<critical>Use MCP tools for all operations (create_issue, get_issue, etc.)</critical>
|
|
174
|
+
<critical>Ask one question at a time with specific options</critical>
|
|
175
|
+
<critical>Continue asking questions until you have complete understanding of epic boundaries</critical>
|
|
176
|
+
<important>Epic descriptions must be detailed enough for feature creation</important>
|
|
177
|
+
</rules>
|