aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbndw <ben@bdw.to>2026-03-04 22:33:27 -0800
committerbndw <ben@bdw.to>2026-03-04 22:33:27 -0800
commit27b6e3499d1c96982c67e445a8ee2fcbb16d9b9f (patch)
tree97cd610caf8e337ff9ce0a8a21695b7c0babc9cb
parent712b7ce8306d8bf5b21f35aa51957a82fa771e3b (diff)
feat: Remove auto-send block from handleConfirmNewSession in App.tsx
- ✅ Remove auto-send block from handleConfirmNewSession in App.tsx
-rw-r--r--renderer/src/App.tsx25
-rw-r--r--renderer/src/components/Header.tsx11
-rw-r--r--renderer/src/components/SettingsPage.tsx33
3 files changed, 36 insertions, 33 deletions
diff --git a/renderer/src/App.tsx b/renderer/src/App.tsx
index 5fb3dd1..b53184b 100644
--- a/renderer/src/App.tsx
+++ b/renderer/src/App.tsx
@@ -487,22 +487,7 @@ export function App() {
487 setMessages([]); 487 setMessages([]);
488 setDocumentContent(""); 488 setDocumentContent("");
489 setOriginalContent(""); 489 setOriginalContent("");
490 490 // User starts the conversation — no auto-send for manually-chosen phases.
491 // For sessions that start beyond research, kick off Claude immediately
492 // with the same message used when advancing into that phase via Submit.
493 if (phase === "plan" || phase === "implement") {
494 const initialMsg =
495 phase === "plan"
496 ? "Create a detailed implementation plan based on the research."
497 : "Begin implementing the plan.";
498 setLoadingBySession((prev) => ({ ...prev, [session.id]: true }));
499 try {
500 await api.sendMessage(session.id, initialMsg);
501 } catch (err) {
502 setError(err instanceof Error ? err.message : "Failed to start session");
503 setLoadingBySession((prev) => ({ ...prev, [session.id]: false }));
504 }
505 }
506 }; 491 };
507 492
508 const handleDeleteProject = async (id: string) => { 493 const handleDeleteProject = async (id: string) => {
@@ -552,8 +537,6 @@ export function App() {
552 <div className="app"> 537 <div className="app">
553 <Header 538 <Header
554 selectedSession={selectedSession} 539 selectedSession={selectedSession}
555 theme={theme}
556 onToggleTheme={handleToggleTheme}
557 gitBranch={selectedSession?.git_branch ?? null} 540 gitBranch={selectedSession?.git_branch ?? null}
558 onOpenSettings={() => setShowSettings(true)} 541 onOpenSettings={() => setShowSettings(true)}
559 viewPhase={viewPhase} 542 viewPhase={viewPhase}
@@ -661,7 +644,11 @@ export function App() {
661 /> 644 />
662 645
663 {showSettings && ( 646 {showSettings && (
664 <SettingsPage onClose={() => setShowSettings(false)} /> 647 <SettingsPage
648 onClose={() => setShowSettings(false)}
649 theme={theme}
650 onToggleTheme={handleToggleTheme}
651 />
665 )} 652 )}
666 653
667 {showNewSessionModal && ( 654 {showNewSessionModal && (
diff --git a/renderer/src/components/Header.tsx b/renderer/src/components/Header.tsx
index 4e193e8..84b9135 100644
--- a/renderer/src/components/Header.tsx
+++ b/renderer/src/components/Header.tsx
@@ -3,12 +3,8 @@ import type { Session, Phase } from "../types";
3 3
4const api = window.api; 4const api = window.api;
5 5
6type Theme = "dark" | "light";
7
8interface HeaderProps { 6interface HeaderProps {
9 selectedSession: Session | null; 7 selectedSession: Session | null;
10 theme: Theme;
11 onToggleTheme: () => void;
12 gitBranch: string | null; 8 gitBranch: string | null;
13 onOpenSettings: () => void; 9 onOpenSettings: () => void;
14 viewPhase: Phase; 10 viewPhase: Phase;
@@ -25,8 +21,6 @@ const phases: Phase[] = ["research", "plan", "implement"];
25 21
26export function Header({ 22export function Header({
27 selectedSession, 23 selectedSession,
28 theme,
29 onToggleTheme,
30 gitBranch, 24 gitBranch,
31 onOpenSettings, 25 onOpenSettings,
32 viewPhase, 26 viewPhase,
@@ -103,11 +97,6 @@ export function Header({
103 </button> 97 </button>
104 )} 98 )}
105 99
106 {/* ── Theme toggle ── */}
107 <button className="theme-toggle" onClick={onToggleTheme}>
108 {theme === "dark" ? "[light]" : "[dark]"}
109 </button>
110
111 {/* ── Maximize toggle ── */} 100 {/* ── Maximize toggle ── */}
112 <button 101 <button
113 className="maximize-btn" 102 className="maximize-btn"
diff --git a/renderer/src/components/SettingsPage.tsx b/renderer/src/components/SettingsPage.tsx
index 7d06547..0c0c2e8 100644
--- a/renderer/src/components/SettingsPage.tsx
+++ b/renderer/src/components/SettingsPage.tsx
@@ -4,15 +4,18 @@ import { GitSettings } from "./settings/GitSettings";
4import { ModelSettings } from "./settings/ModelSettings"; 4import { ModelSettings } from "./settings/ModelSettings";
5import { McpSettings } from "./settings/McpSettings"; 5import { McpSettings } from "./settings/McpSettings";
6 6
7type SettingsSection = "model" | "mcp" | "system-prompts" | "git"; 7type Theme = "dark" | "light";
8type SettingsSection = "appearance" | "model" | "mcp" | "system-prompts" | "git";
8 9
9interface SettingsPageProps { 10interface SettingsPageProps {
10 onClose: () => void; 11 onClose: () => void;
12 theme: Theme;
13 onToggleTheme: () => void;
11} 14}
12 15
13export function SettingsPage({ onClose }: SettingsPageProps) { 16export function SettingsPage({ onClose, theme, onToggleTheme }: SettingsPageProps) {
14 const [activeSection, setActiveSection] = 17 const [activeSection, setActiveSection] =
15 useState<SettingsSection>("model"); 18 useState<SettingsSection>("appearance");
16 19
17 return ( 20 return (
18 <div className="settings-overlay"> 21 <div className="settings-overlay">
@@ -35,6 +38,14 @@ export function SettingsPage({ onClose }: SettingsPageProps) {
35 <nav className="settings-nav"> 38 <nav className="settings-nav">
36 <button 39 <button
37 className={`settings-nav-item${ 40 className={`settings-nav-item${
41 activeSection === "appearance" ? " active" : ""
42 }`}
43 onClick={() => setActiveSection("appearance")}
44 >
45 Appearance
46 </button>
47 <button
48 className={`settings-nav-item${
38 activeSection === "model" ? " active" : "" 49 activeSection === "model" ? " active" : ""
39 }`} 50 }`}
40 onClick={() => setActiveSection("model")} 51 onClick={() => setActiveSection("model")}
@@ -69,6 +80,22 @@ export function SettingsPage({ onClose }: SettingsPageProps) {
69 80
70 {/* Content */} 81 {/* Content */}
71 <div className="settings-content"> 82 <div className="settings-content">
83 {activeSection === "appearance" && (
84 <div>
85 <div className="settings-section-title">Theme</div>
86 <div className="settings-section-desc">
87 Choose between light and dark mode.
88 </div>
89 <div className="settings-toggle-row">
90 <span className="settings-toggle-label">
91 {theme === "dark" ? "Dark" : "Light"}
92 </span>
93 <button className="btn-secondary" onClick={onToggleTheme}>
94 Switch to {theme === "dark" ? "Light" : "Dark"} mode
95 </button>
96 </div>
97 </div>
98 )}
72 {activeSection === "model" && <ModelSettings />} 99 {activeSection === "model" && <ModelSettings />}
73 {activeSection === "mcp" && <McpSettings />} 100 {activeSection === "mcp" && <McpSettings />}
74 {activeSection === "system-prompts" && <SystemPromptsSettings />} 101 {activeSection === "system-prompts" && <SystemPromptsSettings />}