diff --git a/src/__tests__/chat_stream_handlers.test.ts b/src/__tests__/chat_stream_handlers.test.ts
index fa74284..cc60edf 100644
--- a/src/__tests__/chat_stream_handlers.test.ts
+++ b/src/__tests__/chat_stream_handlers.test.ts
@@ -55,6 +55,39 @@ describe("getDyadWriteTags", () => {
expect(result).toEqual([]);
});
+ it("should return a dyad-write tag", () => {
+ const result =
+ getDyadWriteTags(`
+import React from "react";
+console.log("TodoItem");
+`);
+ expect(result).toEqual([
+ {
+ path: "src/components/TodoItem.tsx",
+ content: `import React from \"react\";
+console.log(\"TodoItem\");`,
+ },
+ ]);
+ });
+
+ it("should strip out code fence (if needed) from a dyad-write tag", () => {
+ const result =
+ getDyadWriteTags(`
+\`\`\`tsx
+import React from "react";
+console.log("TodoItem");
+\`\`\`
+
+`);
+ expect(result).toEqual([
+ {
+ path: "src/components/TodoItem.tsx",
+ content: `import React from \"react\";
+console.log(\"TodoItem\");`,
+ },
+ ]);
+ });
+
it("should return an array of dyad-write tags", () => {
const result = getDyadWriteTags(
`I'll create a simple todo list app using React, TypeScript, and shadcn/ui components. Let's get started!
@@ -557,7 +590,7 @@ describe("processFullResponse", () => {
expect(fs.writeFileSync).toHaveBeenNthCalledWith(
3,
"/mock/user/data/path/mock-app-path/src/components/Button.tsx",
- "\n import React from 'react';\n export const Button = ({ children }) => ;\n "
+ "import React from 'react';\n export const Button = ({ children }) => ;"
);
// Verify git operations were called for each file
diff --git a/src/ipc/processors/response_processor.ts b/src/ipc/processors/response_processor.ts
index 4d22f45..c318d78 100644
--- a/src/ipc/processors/response_processor.ts
+++ b/src/ipc/processors/response_processor.ts
@@ -15,7 +15,14 @@ export function getDyadWriteTags(fullResponse: string): {
let match;
const tags: { path: string; content: string }[] = [];
while ((match = dyadWriteRegex.exec(fullResponse)) !== null) {
- tags.push({ path: match[1], content: match[2] });
+ const content = match[2].trim().split("\n");
+ if (content[0].startsWith("```")) {
+ content.shift();
+ }
+ if (content[content.length - 1].startsWith("```")) {
+ content.pop();
+ }
+ tags.push({ path: match[1], content: content.join("\n") });
}
return tags;
}