aboutsummaryrefslogtreecommitdiffstats
path: root/renderer/src/App.tsx
diff options
context:
space:
mode:
authorClawd <ai@clawd.bot>2026-02-28 15:35:00 -0800
committerClawd <ai@clawd.bot>2026-02-28 15:35:00 -0800
commit0edd7235cd861ef77d4ceb37a594ae65df52624b (patch)
treec169d9bb1d0bda40198817e26c781101b1637730 /renderer/src/App.tsx
parent5bd5da261732a1fce6a94ffa4d348dd6c80887cf (diff)
Add session-specific artifacts, CLAUDE.md, and git worktree support
- Store artifacts in .claude-flow/sessions/{sessionId}/ - Each session now has isolated research.md and plan.md - Concurrent sessions no longer conflict - Add CLAUDE.md support for shared codebase documentation - Add git worktree creation on session start - Add git commit/status IPC handlers - Update all artifact APIs to be session-specific - Remove artifact clearing on new session (no longer needed)
Diffstat (limited to 'renderer/src/App.tsx')
-rw-r--r--renderer/src/App.tsx20
1 files changed, 9 insertions, 11 deletions
diff --git a/renderer/src/App.tsx b/renderer/src/App.tsx
index 966b15c..c56f292 100644
--- a/renderer/src/App.tsx
+++ b/renderer/src/App.tsx
@@ -92,10 +92,10 @@ export function App() {
92 // Load messages 92 // Load messages
93 api.listMessages(selectedSession.id).then(setMessages); 93 api.listMessages(selectedSession.id).then(setMessages);
94 94
95 // Load artifact 95 // Load session-specific artifact
96 const filename = 96 const filename =
97 selectedSession.phase === "research" ? "research.md" : "plan.md"; 97 selectedSession.phase === "research" ? "research.md" : "plan.md";
98 api.readArtifact(selectedProject.path, filename).then((content) => { 98 api.readSessionArtifact(selectedProject.path, selectedSession.id, filename).then((content) => {
99 const text = content || ""; 99 const text = content || "";
100 setDocumentContent(text); 100 setDocumentContent(text);
101 setOriginalContent(text); 101 setOriginalContent(text);
@@ -122,10 +122,10 @@ export function App() {
122 }); 122 });
123 } 123 }
124 // Reload artifact after Claude updates it 124 // Reload artifact after Claude updates it
125 if (selectedProject) { 125 if (selectedProject && selectedSession) {
126 const filename = 126 const filename =
127 selectedSession.phase === "research" ? "research.md" : "plan.md"; 127 selectedSession.phase === "research" ? "research.md" : "plan.md";
128 api.readArtifact(selectedProject.path, filename).then((content) => { 128 api.readSessionArtifact(selectedProject.path, selectedSession.id, filename).then((content) => {
129 const text = content || ""; 129 const text = content || "";
130 setDocumentContent(text); 130 setDocumentContent(text);
131 setOriginalContent(text); 131 setOriginalContent(text);
@@ -193,10 +193,10 @@ export function App() {
193 if (!selectedSession || !selectedProject) return; 193 if (!selectedSession || !selectedProject) return;
194 setError(null); 194 setError(null);
195 try { 195 try {
196 // Save user edits first 196 // Save user edits first (session-specific)
197 const filename = 197 const filename =
198 selectedSession.phase === "research" ? "research.md" : "plan.md"; 198 selectedSession.phase === "research" ? "research.md" : "plan.md";
199 await api.writeArtifact(selectedProject.path, filename, documentContent); 199 await api.writeSessionArtifact(selectedProject.path, selectedSession.id, filename, documentContent);
200 setOriginalContent(documentContent); 200 setOriginalContent(documentContent);
201 setIsLoading(true); 201 setIsLoading(true);
202 await api.triggerReview(selectedSession.id); 202 await api.triggerReview(selectedSession.id);
@@ -210,10 +210,10 @@ export function App() {
210 if (!selectedSession || !selectedProject) return; 210 if (!selectedSession || !selectedProject) return;
211 setError(null); 211 setError(null);
212 try { 212 try {
213 // Save any pending edits 213 // Save any pending edits (session-specific)
214 const filename = 214 const filename =
215 selectedSession.phase === "research" ? "research.md" : "plan.md"; 215 selectedSession.phase === "research" ? "research.md" : "plan.md";
216 await api.writeArtifact(selectedProject.path, filename, documentContent); 216 await api.writeSessionArtifact(selectedProject.path, selectedSession.id, filename, documentContent);
217 217
218 const nextPhase = await api.advancePhase(selectedSession.id); 218 const nextPhase = await api.advancePhase(selectedSession.id);
219 if (nextPhase) { 219 if (nextPhase) {
@@ -250,9 +250,7 @@ export function App() {
250 setMessages([]); 250 setMessages([]);
251 setDocumentContent(""); 251 setDocumentContent("");
252 setOriginalContent(""); 252 setOriginalContent("");
253 // Clear artifacts from previous sessions 253 // Note: Each session has its own artifact directory, no need to clear
254 await api.writeArtifact(selectedProject.path, "research.md", "");
255 await api.writeArtifact(selectedProject.path, "plan.md", "");
256 }; 254 };
257 255
258 const handleDeleteProject = async (id: string) => { 256 const handleDeleteProject = async (id: string) => {