@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.
Files changed (191) hide show
  1. package/README.md +5 -4
  2. package/dist/__tests__/copyBasicClaudeAgents.test.d.ts +2 -0
  3. package/dist/__tests__/copyBasicClaudeAgents.test.d.ts.map +1 -0
  4. package/dist/__tests__/copyBasicClaudeAgents.test.js +24 -0
  5. package/dist/__tests__/copyBasicClaudeAgents.test.js.map +1 -0
  6. package/dist/__tests__/e2e/crud/createObject.e2e.test.js +4 -4
  7. package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
  8. package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js +4 -4
  9. package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js.map +1 -1
  10. package/dist/__tests__/e2e/crud/getObject.e2e.test.js +3 -3
  11. package/dist/__tests__/e2e/crud/getObject.e2e.test.js.map +1 -1
  12. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +10 -10
  13. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -1
  14. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +1 -1
  15. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -1
  16. package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.d.ts +2 -0
  17. package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.d.ts.map +1 -0
  18. package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.js +806 -0
  19. package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.js.map +1 -0
  20. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +7 -7
  21. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
  22. package/dist/__tests__/serverStartup.test.js +138 -0
  23. package/dist/__tests__/serverStartup.test.js.map +1 -1
  24. package/dist/models/TrellisObject.d.ts +1 -1
  25. package/dist/models/TrellisObject.d.ts.map +1 -1
  26. package/dist/models/TrellisObjectSummary.d.ts +1 -1
  27. package/dist/models/TrellisObjectSummary.d.ts.map +1 -1
  28. package/dist/models/__tests__/isClaimable.test.js +1 -0
  29. package/dist/models/__tests__/isClaimable.test.js.map +1 -1
  30. package/dist/models/__tests__/isClosed.test.js +3 -1
  31. package/dist/models/__tests__/isClosed.test.js.map +1 -1
  32. package/dist/models/__tests__/isOpen.test.js +3 -1
  33. package/dist/models/__tests__/isOpen.test.js.map +1 -1
  34. package/dist/prompts/PromptArgument.d.ts +16 -0
  35. package/dist/prompts/PromptArgument.d.ts.map +1 -0
  36. package/dist/prompts/PromptArgument.js +3 -0
  37. package/dist/prompts/PromptArgument.js.map +1 -0
  38. package/dist/prompts/PromptManager.d.ts +48 -0
  39. package/dist/prompts/PromptManager.d.ts.map +1 -0
  40. package/dist/prompts/PromptManager.js +151 -0
  41. package/dist/prompts/PromptManager.js.map +1 -0
  42. package/dist/prompts/PromptMessage.d.ts +11 -0
  43. package/dist/prompts/PromptMessage.d.ts.map +1 -0
  44. package/dist/prompts/PromptMessage.js +3 -0
  45. package/dist/prompts/PromptMessage.js.map +1 -0
  46. package/dist/prompts/PromptParser.d.ts +7 -0
  47. package/dist/prompts/PromptParser.d.ts.map +1 -0
  48. package/dist/prompts/PromptParser.js +141 -0
  49. package/dist/prompts/PromptParser.js.map +1 -0
  50. package/dist/prompts/PromptRenderer.d.ts +38 -0
  51. package/dist/prompts/PromptRenderer.d.ts.map +1 -0
  52. package/dist/prompts/PromptRenderer.js +128 -0
  53. package/dist/prompts/PromptRenderer.js.map +1 -0
  54. package/dist/prompts/PromptsRegistry.d.ts +43 -0
  55. package/dist/prompts/PromptsRegistry.d.ts.map +1 -0
  56. package/dist/prompts/PromptsRegistry.js +76 -0
  57. package/dist/prompts/PromptsRegistry.js.map +1 -0
  58. package/dist/prompts/TrellisPrompt.d.ts +19 -0
  59. package/dist/prompts/TrellisPrompt.d.ts.map +1 -0
  60. package/dist/prompts/TrellisPrompt.js +3 -0
  61. package/dist/prompts/TrellisPrompt.js.map +1 -0
  62. package/dist/prompts/__tests__/PromptArgument.test.d.ts +2 -0
  63. package/dist/prompts/__tests__/PromptArgument.test.d.ts.map +1 -0
  64. package/dist/prompts/__tests__/PromptArgument.test.js +60 -0
  65. package/dist/prompts/__tests__/PromptArgument.test.js.map +1 -0
  66. package/dist/prompts/__tests__/PromptManager.test.d.ts +2 -0
  67. package/dist/prompts/__tests__/PromptManager.test.d.ts.map +1 -0
  68. package/dist/prompts/__tests__/PromptManager.test.js +364 -0
  69. package/dist/prompts/__tests__/PromptManager.test.js.map +1 -0
  70. package/dist/prompts/__tests__/PromptParser.test.d.ts +2 -0
  71. package/dist/prompts/__tests__/PromptParser.test.d.ts.map +1 -0
  72. package/dist/prompts/__tests__/PromptParser.test.js +237 -0
  73. package/dist/prompts/__tests__/PromptParser.test.js.map +1 -0
  74. package/dist/prompts/__tests__/PromptRenderer.test.d.ts +2 -0
  75. package/dist/prompts/__tests__/PromptRenderer.test.d.ts.map +1 -0
  76. package/dist/prompts/__tests__/PromptRenderer.test.js +325 -0
  77. package/dist/prompts/__tests__/PromptRenderer.test.js.map +1 -0
  78. package/dist/prompts/__tests__/TrellisPrompt.test.d.ts +2 -0
  79. package/dist/prompts/__tests__/TrellisPrompt.test.d.ts.map +1 -0
  80. package/dist/prompts/__tests__/TrellisPrompt.test.js +107 -0
  81. package/dist/prompts/__tests__/TrellisPrompt.test.js.map +1 -0
  82. package/dist/prompts/index.d.ts +9 -0
  83. package/dist/prompts/index.d.ts.map +1 -0
  84. package/dist/prompts/index.js +14 -0
  85. package/dist/prompts/index.js.map +1 -0
  86. package/dist/prompts/registry.d.ts +6 -0
  87. package/dist/prompts/registry.d.ts.map +1 -0
  88. package/dist/prompts/registry.js +60 -0
  89. package/dist/prompts/registry.js.map +1 -0
  90. package/dist/repositories/local/__tests__/getObjectByFilePath.test.js +5 -5
  91. package/dist/repositories/local/__tests__/getObjectByFilePath.test.js.map +1 -1
  92. package/dist/repositories/local/__tests__/getObjectFilePath.test.js +2 -2
  93. package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
  94. package/dist/resources/basic/prompts/create-epics.md +177 -0
  95. package/dist/resources/basic/prompts/create-features.md +172 -0
  96. package/dist/resources/basic/prompts/create-project.md +128 -0
  97. package/dist/resources/basic/prompts/create-tasks.md +225 -0
  98. package/dist/resources/basic/prompts/implement-task.md +170 -0
  99. package/dist/resources/basic-claude/agents/implementation-planner.md +187 -0
  100. package/dist/resources/basic-claude/agents/issue-verifier.md +154 -0
  101. package/dist/resources/basic-claude/prompts/create-epics.md +204 -0
  102. package/dist/resources/basic-claude/prompts/create-features.md +199 -0
  103. package/dist/resources/basic-claude/prompts/create-project.md +155 -0
  104. package/dist/resources/basic-claude/prompts/create-tasks.md +252 -0
  105. package/dist/resources/basic-claude/prompts/implement-task.md +179 -0
  106. package/dist/server.js +59 -2
  107. package/dist/server.js.map +1 -1
  108. package/dist/services/TaskTrellisService.d.ts +9 -0
  109. package/dist/services/TaskTrellisService.d.ts.map +1 -1
  110. package/dist/services/local/LocalTaskTrellisService.d.ts +6 -0
  111. package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -1
  112. package/dist/services/local/LocalTaskTrellisService.js +24 -0
  113. package/dist/services/local/LocalTaskTrellisService.js.map +1 -1
  114. package/dist/services/local/__tests__/appendAffectedFiles.test.js +9 -9
  115. package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -1
  116. package/dist/services/local/__tests__/appendModifiedFiles.test.js +1 -1
  117. package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -1
  118. package/dist/services/local/__tests__/claimTask.test.js +1 -0
  119. package/dist/services/local/__tests__/claimTask.test.js.map +1 -1
  120. package/dist/services/local/__tests__/completeTask.test.js +3 -3
  121. package/dist/services/local/__tests__/completeTask.test.js.map +1 -1
  122. package/dist/services/local/__tests__/createObject.test.js +7 -4
  123. package/dist/services/local/__tests__/createObject.test.js.map +1 -1
  124. package/dist/services/local/__tests__/getNextAvailableIssue.test.d.ts +2 -0
  125. package/dist/services/local/__tests__/getNextAvailableIssue.test.d.ts.map +1 -0
  126. package/dist/services/local/__tests__/getNextAvailableIssue.test.js +314 -0
  127. package/dist/services/local/__tests__/getNextAvailableIssue.test.js.map +1 -0
  128. package/dist/services/local/__tests__/listObjects.test.js +1 -0
  129. package/dist/services/local/__tests__/listObjects.test.js.map +1 -1
  130. package/dist/services/local/__tests__/pruneClosed.test.js +1 -0
  131. package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -1
  132. package/dist/services/local/__tests__/updateObject.test.js +2 -2
  133. package/dist/services/local/__tests__/updateObject.test.js.map +1 -1
  134. package/dist/services/local/createObject.d.ts +1 -1
  135. package/dist/services/local/createObject.d.ts.map +1 -1
  136. package/dist/services/local/createObject.js +1 -1
  137. package/dist/services/local/createObject.js.map +1 -1
  138. package/dist/services/local/getNextAvailableIssue.d.ts +14 -0
  139. package/dist/services/local/getNextAvailableIssue.d.ts.map +1 -0
  140. package/dist/services/local/getNextAvailableIssue.js +28 -0
  141. package/dist/services/local/getNextAvailableIssue.js.map +1 -0
  142. package/dist/tools/__tests__/claimTaskTool.test.js +1 -0
  143. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
  144. package/dist/tools/__tests__/completeTaskTool.test.js +1 -0
  145. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  146. package/dist/tools/__tests__/getObjectTool.test.js +1 -0
  147. package/dist/tools/__tests__/getObjectTool.test.js.map +1 -1
  148. package/dist/tools/__tests__/listObjectsTool.test.js +1 -0
  149. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
  150. package/dist/tools/getNextAvailableIssueTool.d.ts +34 -0
  151. package/dist/tools/getNextAvailableIssueTool.d.ts.map +1 -0
  152. package/dist/tools/getNextAvailableIssueTool.js +94 -0
  153. package/dist/tools/getNextAvailableIssueTool.js.map +1 -0
  154. package/dist/tools/index.d.ts +1 -0
  155. package/dist/tools/index.d.ts.map +1 -1
  156. package/dist/tools/index.js +4 -1
  157. package/dist/tools/index.js.map +1 -1
  158. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js +3 -3
  159. package/dist/utils/__tests__/checkHierarchicalPrerequisitesComplete.test.js.map +1 -1
  160. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js +1 -0
  161. package/dist/utils/__tests__/checkPrerequisitesComplete.test.js.map +1 -1
  162. package/dist/utils/__tests__/deserializeTrellisObject.test.js +23 -1
  163. package/dist/utils/__tests__/deserializeTrellisObject.test.js.map +1 -1
  164. package/dist/utils/__tests__/filterUnavailableObjects.test.js +1 -1
  165. package/dist/utils/__tests__/filterUnavailableObjects.test.js.map +1 -1
  166. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js +1 -0
  167. package/dist/utils/__tests__/isRequiredForOtherObjects.test.js.map +1 -1
  168. package/dist/utils/__tests__/serializationRoundTrip.test.js +35 -0
  169. package/dist/utils/__tests__/serializationRoundTrip.test.js.map +1 -1
  170. package/dist/utils/__tests__/serializeTrellisObject.test.js +8 -2
  171. package/dist/utils/__tests__/serializeTrellisObject.test.js.map +1 -1
  172. package/dist/utils/__tests__/sortTrellisObjects.test.js +1 -0
  173. package/dist/utils/__tests__/sortTrellisObjects.test.js.map +1 -1
  174. package/dist/utils/__tests__/updateParentHierarchy.test.js +4 -4
  175. package/dist/utils/__tests__/updateParentHierarchy.test.js.map +1 -1
  176. package/dist/utils/deserializeTrellisObject.d.ts.map +1 -1
  177. package/dist/utils/deserializeTrellisObject.js +1 -1
  178. package/dist/utils/deserializeTrellisObject.js.map +1 -1
  179. package/dist/utils/serializeTrellisObject.js +1 -1
  180. package/dist/utils/serializeTrellisObject.js.map +1 -1
  181. package/dist/utils/updateParentHierarchy.d.ts +1 -1
  182. package/dist/utils/updateParentHierarchy.d.ts.map +1 -1
  183. package/dist/utils/updateParentHierarchy.js.map +1 -1
  184. package/dist/validation/__tests__/validateObjectCreation.test.js +3 -3
  185. package/dist/validation/__tests__/validateObjectCreation.test.js.map +1 -1
  186. package/dist/validation/__tests__/validateParentExists.test.js +2 -1
  187. package/dist/validation/__tests__/validateParentExists.test.js.map +1 -1
  188. package/dist/validation/validateParentExists.d.ts +1 -1
  189. package/dist/validation/validateParentExists.d.ts.map +1 -1
  190. package/dist/validation/validateParentExists.js.map +1 -1
  191. package/package.json +3 -2
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const promises_1 = require("fs/promises");
4
+ const PromptParser_1 = require("../PromptParser");
5
+ jest.mock("fs/promises");
6
+ describe("PromptParser", () => {
7
+ const mockReadFile = promises_1.readFile;
8
+ beforeEach(() => {
9
+ jest.clearAllMocks();
10
+ });
11
+ describe("parsePromptFile", () => {
12
+ it("should parse a valid prompt file with all fields", async () => {
13
+ const mockContent = `---
14
+ description: "Create a new project"
15
+ title: "Project Creation"
16
+ args:
17
+ - name: spec
18
+ type: string
19
+ required: true
20
+ description: "Project specification"
21
+ - name: verbose
22
+ type: boolean
23
+ required: false
24
+ description: "Enable verbose output"
25
+ ---
26
+ <rules>
27
+ Never access .trellis directly
28
+ Use MCP tools only
29
+ </rules>
30
+
31
+ # Create Project
32
+
33
+ This is the prompt body with $ARGUMENTS placeholder.`;
34
+ mockReadFile.mockResolvedValue(mockContent);
35
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/create-project.md");
36
+ expect(result).toEqual({
37
+ name: "create-project",
38
+ title: "Project Creation",
39
+ description: "Create a new project",
40
+ arguments: [
41
+ {
42
+ name: "spec",
43
+ type: "string",
44
+ required: true,
45
+ description: "Project specification",
46
+ },
47
+ {
48
+ name: "verbose",
49
+ type: "boolean",
50
+ required: false,
51
+ description: "Enable verbose output",
52
+ },
53
+ ],
54
+ userTemplate: "<rules>\nNever access .trellis directly\nUse MCP tools only\n</rules>\n\n# Create Project\n\nThis is the prompt body with $ARGUMENTS placeholder.",
55
+ });
56
+ });
57
+ it("should use default input argument when args not specified", async () => {
58
+ const mockContent = `---
59
+ description: "Simple prompt"
60
+ ---
61
+ Prompt body content`;
62
+ mockReadFile.mockResolvedValue(mockContent);
63
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/simple.md");
64
+ expect(result.arguments).toEqual([
65
+ {
66
+ name: "input",
67
+ required: false,
68
+ description: "Free-text input",
69
+ },
70
+ ]);
71
+ });
72
+ it("should handle missing optional fields", async () => {
73
+ const mockContent = `---
74
+ description: "Minimal prompt"
75
+ ---
76
+ Body content`;
77
+ mockReadFile.mockResolvedValue(mockContent);
78
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/minimal.md");
79
+ expect(result.title).toBeUndefined();
80
+ });
81
+ it("should keep rules blocks inline in userTemplate", async () => {
82
+ const mockContent = `---
83
+ description: "Multiple rules"
84
+ ---
85
+ <rules>First rule</rules>
86
+ Content here
87
+ <rules>Second rule</rules>
88
+ More content`;
89
+ mockReadFile.mockResolvedValue(mockContent);
90
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/multiple-rules.md");
91
+ expect(result.userTemplate).toBe("<rules>First rule</rules>\nContent here\n<rules>Second rule</rules>\nMore content");
92
+ });
93
+ it("should keep rules tags with any case inline", async () => {
94
+ const mockContent = `---
95
+ description: "Case test"
96
+ ---
97
+ <RULES>Upper case</RULES>
98
+ Some content here
99
+ <Rules>Mixed case</Rules>`;
100
+ mockReadFile.mockResolvedValue(mockContent);
101
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/case-test.md");
102
+ expect(result.userTemplate).toBe("<RULES>Upper case</RULES>\nSome content here\n<Rules>Mixed case</Rules>");
103
+ });
104
+ it("should keep empty rules blocks inline", async () => {
105
+ const mockContent = `---
106
+ description: "Empty rules"
107
+ ---
108
+ <rules></rules>
109
+ Content only`;
110
+ mockReadFile.mockResolvedValue(mockContent);
111
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/empty-rules.md");
112
+ expect(result.userTemplate).toBe("<rules></rules>\nContent only");
113
+ });
114
+ it("should generate kebab-case names from filenames", async () => {
115
+ const mockContent = `---
116
+ description: "Test naming"
117
+ ---
118
+ Content`;
119
+ mockReadFile.mockResolvedValue(mockContent);
120
+ const result = await (0, PromptParser_1.parsePromptFile)("/path/to/create_project_task.md");
121
+ expect(result.name).toBe("create-project-task");
122
+ });
123
+ it("should throw error for missing description", async () => {
124
+ const mockContent = `---
125
+ title: "No description"
126
+ ---
127
+ Body`;
128
+ mockReadFile.mockResolvedValue(mockContent);
129
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/invalid.md")).rejects.toThrow("Missing required 'description' field");
130
+ });
131
+ it("should throw error for invalid YAML", async () => {
132
+ const mockContent = `---
133
+ description: "Invalid YAML
134
+ missing quote
135
+ ---
136
+ Body`;
137
+ mockReadFile.mockResolvedValue(mockContent);
138
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/invalid.md")).rejects.toThrow("Invalid YAML frontmatter");
139
+ });
140
+ it("should throw error for missing frontmatter", async () => {
141
+ const mockContent = `No frontmatter here
142
+ Just plain content`;
143
+ mockReadFile.mockResolvedValue(mockContent);
144
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/no-frontmatter.md")).rejects.toThrow("Expected YAML frontmatter delimited by --- markers");
145
+ });
146
+ it("should throw error for duplicate argument names", async () => {
147
+ const mockContent = `---
148
+ description: "Duplicate args"
149
+ args:
150
+ - name: input
151
+ required: true
152
+ description: "First input"
153
+ - name: input
154
+ required: false
155
+ description: "Duplicate input"
156
+ ---
157
+ Body`;
158
+ mockReadFile.mockResolvedValue(mockContent);
159
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/duplicate.md")).rejects.toThrow("Duplicate argument name 'input'");
160
+ });
161
+ it("should throw error for invalid argument type", async () => {
162
+ const mockContent = `---
163
+ description: "Invalid type"
164
+ args:
165
+ - name: test
166
+ type: number
167
+ required: true
168
+ description: "Invalid type"
169
+ ---
170
+ Body`;
171
+ mockReadFile.mockResolvedValue(mockContent);
172
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/invalid-type.md")).rejects.toThrow("Invalid argument type 'number'");
173
+ });
174
+ it("should throw error for non-kebab-case filename", async () => {
175
+ const mockContent = `---
176
+ description: "Valid content"
177
+ ---
178
+ Body`;
179
+ mockReadFile.mockResolvedValue(mockContent);
180
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/123invalid.md")).rejects.toThrow("Must be kebab-case");
181
+ });
182
+ it("should throw error for empty body", async () => {
183
+ const mockContent = `---
184
+ description: "No body"
185
+ ---
186
+ `;
187
+ mockReadFile.mockResolvedValue(mockContent);
188
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/empty-body.md")).rejects.toThrow("Empty prompt body");
189
+ });
190
+ it("should handle file read errors", async () => {
191
+ mockReadFile.mockRejectedValue(new Error("File not found"));
192
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/missing.md")).rejects.toThrow("Failed to parse prompt file /path/to/missing.md: File not found");
193
+ });
194
+ it("should handle invalid args structure", async () => {
195
+ const mockContent = `---
196
+ description: "Invalid args"
197
+ args: "not an array"
198
+ ---
199
+ Body`;
200
+ mockReadFile.mockResolvedValue(mockContent);
201
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/invalid-args.md")).rejects.toThrow("Invalid 'args' field: Expected an array");
202
+ });
203
+ it("should handle invalid argument object", async () => {
204
+ const mockContent = `---
205
+ description: "Invalid arg object"
206
+ args:
207
+ - "not an object"
208
+ ---
209
+ Body`;
210
+ mockReadFile.mockResolvedValue(mockContent);
211
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/invalid-arg-obj.md")).rejects.toThrow("Invalid argument at index 0: Expected an object");
212
+ });
213
+ it("should handle missing argument name", async () => {
214
+ const mockContent = `---
215
+ description: "Missing arg name"
216
+ args:
217
+ - required: true
218
+ description: "No name"
219
+ ---
220
+ Body`;
221
+ mockReadFile.mockResolvedValue(mockContent);
222
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/missing-arg-name.md")).rejects.toThrow("Missing argument name");
223
+ });
224
+ it("should handle missing argument description", async () => {
225
+ const mockContent = `---
226
+ description: "Missing arg desc"
227
+ args:
228
+ - name: test
229
+ required: true
230
+ ---
231
+ Body`;
232
+ mockReadFile.mockResolvedValue(mockContent);
233
+ await expect((0, PromptParser_1.parsePromptFile)("/path/to/missing-arg-desc.md")).rejects.toThrow("Missing description for argument 'test'");
234
+ });
235
+ });
236
+ });
237
+ //# sourceMappingURL=PromptParser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptParser.test.js","sourceRoot":"","sources":["../../../src/prompts/__tests__/PromptParser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PromptRenderer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptRenderer.test.d.ts","sourceRoot":"","sources":["../../../src/prompts/__tests__/PromptRenderer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const PromptRenderer_1 = require("../PromptRenderer");
4
+ describe("PromptRenderer", () => {
5
+ let renderer;
6
+ beforeEach(() => {
7
+ renderer = new PromptRenderer_1.PromptRenderer();
8
+ });
9
+ describe("renderPrompt", () => {
10
+ it("should render a simple prompt without arguments", () => {
11
+ const prompt = {
12
+ name: "test",
13
+ description: "Test prompt",
14
+ arguments: [],
15
+ userTemplate: "Hello, world!",
16
+ };
17
+ const result = renderer.renderPrompt(prompt, {});
18
+ expect(result).toHaveLength(1);
19
+ expect(result[0].role).toBe("user");
20
+ expect(result[0].content.text).toBe("Hello, world!");
21
+ });
22
+ it("should return only user message when no system rules", () => {
23
+ const prompt = {
24
+ name: "test",
25
+ description: "Test prompt",
26
+ arguments: [],
27
+ userTemplate: "User message with <rules>inline rules</rules>",
28
+ };
29
+ const result = renderer.renderPrompt(prompt, {});
30
+ expect(result).toHaveLength(1);
31
+ expect(result[0].role).toBe("user");
32
+ expect(result[0].content.text).toBe("User message with <rules>inline rules</rules>");
33
+ });
34
+ it("should throw error for missing required arguments", () => {
35
+ const prompt = {
36
+ name: "test",
37
+ description: "Test prompt",
38
+ arguments: [
39
+ { name: "name", required: true, description: "User's name" },
40
+ ],
41
+ userTemplate: "Hello ${name}",
42
+ };
43
+ expect(() => renderer.renderPrompt(prompt, {})).toThrow("Missing required argument: name. Description: User's name");
44
+ });
45
+ it("should throw error for empty required arguments", () => {
46
+ const prompt = {
47
+ name: "test",
48
+ description: "Test prompt",
49
+ arguments: [
50
+ { name: "name", required: true, description: "User's name" },
51
+ ],
52
+ userTemplate: "Hello ${name}",
53
+ };
54
+ expect(() => renderer.renderPrompt(prompt, { name: " " })).toThrow("Missing required argument: name. Description: User's name");
55
+ });
56
+ it("should not throw error for provided required arguments", () => {
57
+ const prompt = {
58
+ name: "test",
59
+ description: "Test prompt",
60
+ arguments: [
61
+ { name: "name", required: true, description: "User's name" },
62
+ ],
63
+ userTemplate: "Hello ${name}",
64
+ };
65
+ expect(() => renderer.renderPrompt(prompt, { name: "John" })).not.toThrow();
66
+ });
67
+ });
68
+ describe("substituteArguments", () => {
69
+ it("should replace $ARGUMENTS with single input value", () => {
70
+ const prompt = {
71
+ name: "test",
72
+ description: "Test prompt",
73
+ arguments: [
74
+ { name: "input", required: true, description: "Input data" },
75
+ ],
76
+ userTemplate: "Process this: $ARGUMENTS",
77
+ };
78
+ const result = renderer.renderPrompt(prompt, { input: "test data" });
79
+ expect(result[0].content.text).toBe("Process this: test data");
80
+ });
81
+ it("should handle empty single input argument", () => {
82
+ const prompt = {
83
+ name: "test",
84
+ description: "Test prompt",
85
+ arguments: [
86
+ { name: "input", required: false, description: "Input data" },
87
+ ],
88
+ userTemplate: "Process this: $ARGUMENTS",
89
+ };
90
+ const result = renderer.renderPrompt(prompt, { input: "" });
91
+ expect(result[0].content.text).toBe("Process this: ");
92
+ });
93
+ it("should format multiple arguments as block", () => {
94
+ const prompt = {
95
+ name: "test",
96
+ description: "Test prompt",
97
+ arguments: [
98
+ { name: "arg1", required: false, description: "First argument" },
99
+ { name: "arg2", required: false, description: "Second argument" },
100
+ ],
101
+ userTemplate: "Here are the inputs:\n$ARGUMENTS",
102
+ };
103
+ const result = renderer.renderPrompt(prompt, {
104
+ arg1: "value1",
105
+ arg2: "value2",
106
+ });
107
+ const text = result[0].content.text;
108
+ expect(text).toContain("## Inputs");
109
+ expect(text).toContain("**arg1**: value1");
110
+ expect(text).toContain("**arg2**: value2");
111
+ expect(text).toContain("*First argument*");
112
+ expect(text).toContain("*Second argument*");
113
+ });
114
+ it("should handle missing values in multiple arguments block", () => {
115
+ const prompt = {
116
+ name: "test",
117
+ description: "Test prompt",
118
+ arguments: [
119
+ { name: "arg1", required: false, description: "First argument" },
120
+ { name: "arg2", required: false, description: "Second argument" },
121
+ ],
122
+ userTemplate: "Here are the inputs:\n$ARGUMENTS",
123
+ };
124
+ const result = renderer.renderPrompt(prompt, { arg1: "value1" });
125
+ const text = result[0].content.text;
126
+ expect(text).toContain("**arg1**: value1");
127
+ expect(text).toContain("**arg2**: (not provided)");
128
+ });
129
+ it("should handle no arguments gracefully", () => {
130
+ const prompt = {
131
+ name: "test",
132
+ description: "Test prompt",
133
+ arguments: [],
134
+ userTemplate: "Here are the inputs:\n$ARGUMENTS",
135
+ };
136
+ const result = renderer.renderPrompt(prompt, {});
137
+ expect(result[0].content.text).toBe("Here are the inputs:\n");
138
+ });
139
+ it("should leave template unchanged when no $ARGUMENTS placeholder", () => {
140
+ const prompt = {
141
+ name: "test",
142
+ description: "Test prompt",
143
+ arguments: [
144
+ { name: "input", required: false, description: "Input data" },
145
+ ],
146
+ userTemplate: "No arguments here",
147
+ };
148
+ const result = renderer.renderPrompt(prompt, { input: "test" });
149
+ expect(result[0].content.text).toBe("No arguments here");
150
+ });
151
+ });
152
+ describe("substitutePlaceholders", () => {
153
+ it("should replace ${argName} placeholders", () => {
154
+ const prompt = {
155
+ name: "test",
156
+ description: "Test prompt",
157
+ arguments: [
158
+ { name: "firstName", required: true, description: "First name" },
159
+ { name: "lastName", required: true, description: "Last name" },
160
+ ],
161
+ userTemplate: "Hello ${firstName} ${lastName}!",
162
+ };
163
+ const result = renderer.renderPrompt(prompt, {
164
+ firstName: "John",
165
+ lastName: "Doe",
166
+ });
167
+ expect(result[0].content.text).toBe("Hello John Doe!");
168
+ });
169
+ it("should handle missing optional arguments", () => {
170
+ const prompt = {
171
+ name: "test",
172
+ description: "Test prompt",
173
+ arguments: [
174
+ { name: "name", required: true, description: "Name" },
175
+ { name: "age", required: false, description: "Age" },
176
+ ],
177
+ userTemplate: "Name: ${name}, Age: ${age}",
178
+ };
179
+ const result = renderer.renderPrompt(prompt, { name: "John" });
180
+ expect(result[0].content.text).toBe("Name: John, Age: (not provided)");
181
+ });
182
+ it("should handle empty argument values", () => {
183
+ const prompt = {
184
+ name: "test",
185
+ description: "Test prompt",
186
+ arguments: [{ name: "name", required: false, description: "Name" }],
187
+ userTemplate: "Name: ${name}",
188
+ };
189
+ const result = renderer.renderPrompt(prompt, { name: "" });
190
+ expect(result[0].content.text).toBe("Name: ");
191
+ });
192
+ it("should leave undefined placeholders as-is when not in arguments schema", () => {
193
+ const prompt = {
194
+ name: "test",
195
+ description: "Test prompt",
196
+ arguments: [{ name: "name", required: true, description: "Name" }],
197
+ userTemplate: "Name: ${name}, Unknown: ${unknown}",
198
+ };
199
+ const result = renderer.renderPrompt(prompt, { name: "John" });
200
+ expect(result[0].content.text).toBe("Name: John, Unknown: ${unknown}");
201
+ });
202
+ it("should handle placeholders with whitespace", () => {
203
+ const prompt = {
204
+ name: "test",
205
+ description: "Test prompt",
206
+ arguments: [{ name: "name", required: true, description: "Name" }],
207
+ userTemplate: "Name: ${ name }",
208
+ };
209
+ const result = renderer.renderPrompt(prompt, { name: "John" });
210
+ expect(result[0].content.text).toBe("Name: John");
211
+ });
212
+ it("should throw error for missing required argument in placeholder", () => {
213
+ const prompt = {
214
+ name: "test",
215
+ description: "Test prompt",
216
+ arguments: [{ name: "name", required: true, description: "Name" }],
217
+ userTemplate: "Name: ${name}",
218
+ };
219
+ // This should be caught by validation, but test the fallback
220
+ expect(() => {
221
+ const renderer = new PromptRenderer_1.PromptRenderer();
222
+ // Bypass validation by directly calling substitutePlaceholders
223
+ const template = "Name: ${name}";
224
+ const args = {};
225
+ // This is a protected method, so we need to access it via (renderer as any)
226
+ renderer.substitutePlaceholders(template, prompt, args);
227
+ }).toThrow("Missing required argument in placeholder: name");
228
+ });
229
+ });
230
+ describe("sanitization", () => {
231
+ it("should sanitize values to prevent injection", () => {
232
+ const prompt = {
233
+ name: "test",
234
+ description: "Test prompt",
235
+ arguments: [{ name: "input", required: true, description: "Input" }],
236
+ userTemplate: "Input: ${input}",
237
+ };
238
+ const maliciousInput = "test`code`$ARGUMENTS<script>alert()</script>";
239
+ const result = renderer.renderPrompt(prompt, { input: maliciousInput });
240
+ const text = result[0].content.text;
241
+ expect(text).toContain("\\`");
242
+ expect(text).toContain("\\$");
243
+ expect(text).toContain("&lt;script&gt;");
244
+ expect(text).toContain("&lt;/script&gt;");
245
+ });
246
+ it("should sanitize backslashes", () => {
247
+ const prompt = {
248
+ name: "test",
249
+ description: "Test prompt",
250
+ arguments: [{ name: "input", required: true, description: "Input" }],
251
+ userTemplate: "Input: ${input}",
252
+ };
253
+ const result = renderer.renderPrompt(prompt, { input: "test\\path" });
254
+ expect(result[0].content.text).toContain("test\\\\path");
255
+ });
256
+ it("should limit consecutive newlines", () => {
257
+ const prompt = {
258
+ name: "test",
259
+ description: "Test prompt",
260
+ arguments: [{ name: "input", required: true, description: "Input" }],
261
+ userTemplate: "Input: ${input}",
262
+ };
263
+ const result = renderer.renderPrompt(prompt, {
264
+ input: "line1\n\n\n\n\nline2",
265
+ });
266
+ expect(result[0].content.text).toBe("Input: line1\n\nline2");
267
+ });
268
+ });
269
+ describe("edge cases", () => {
270
+ it("should handle prompt with no arguments array", () => {
271
+ const prompt = {
272
+ name: "test",
273
+ description: "Test prompt",
274
+ arguments: [],
275
+ userTemplate: "Simple template",
276
+ };
277
+ const result = renderer.renderPrompt(prompt, {});
278
+ expect(result[0].content.text).toBe("Simple template");
279
+ });
280
+ it("should handle multiple $ARGUMENTS placeholders", () => {
281
+ const prompt = {
282
+ name: "test",
283
+ description: "Test prompt",
284
+ arguments: [{ name: "input", required: false, description: "Input" }],
285
+ userTemplate: "First: $ARGUMENTS, Second: $ARGUMENTS",
286
+ };
287
+ const result = renderer.renderPrompt(prompt, { input: "test" });
288
+ expect(result[0].content.text).toBe("First: test, Second: test");
289
+ });
290
+ it("should handle mixed placeholder types", () => {
291
+ const prompt = {
292
+ name: "test",
293
+ description: "Test prompt",
294
+ arguments: [
295
+ { name: "input", required: false, description: "Input" },
296
+ { name: "name", required: false, description: "Name" },
297
+ ],
298
+ userTemplate: "Arguments: $ARGUMENTS\nName: ${name}",
299
+ };
300
+ const result = renderer.renderPrompt(prompt, {
301
+ input: "data",
302
+ name: "John",
303
+ });
304
+ const text = result[0].content.text;
305
+ expect(text).toContain("## Inputs");
306
+ expect(text).toContain("**input**: data");
307
+ expect(text).toContain("Name: John");
308
+ });
309
+ it("should return proper PromptMessage structure", () => {
310
+ const prompt = {
311
+ name: "test",
312
+ description: "Test prompt",
313
+ arguments: [],
314
+ userTemplate: "Test with <rules>inline rules</rules>",
315
+ };
316
+ const result = renderer.renderPrompt(prompt, {});
317
+ // Type assertion to ensure proper typing
318
+ const messages = result;
319
+ expect(messages).toHaveLength(1);
320
+ expect(messages[0].role).toBe("user");
321
+ expect(messages[0].content.type).toBe("text");
322
+ });
323
+ });
324
+ });
325
+ //# sourceMappingURL=PromptRenderer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptRenderer.test.js","sourceRoot":"","sources":["../../../src/prompts/__tests__/PromptRenderer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TrellisPrompt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrellisPrompt.test.d.ts","sourceRoot":"","sources":["../../../src/prompts/__tests__/TrellisPrompt.test.ts"],"names":[],"mappings":""}