Skip to content

Commit 21cff37

Browse files
authored
Merge pull request #50 from devitools/fix/optimistic-user-messages
fix(acp): Optimistic user messages and PATH fix for macOS
2 parents 6718f2c + 9c5f2bd commit 21cff37

5 files changed

Lines changed: 67 additions & 3 deletions

File tree

apps/tauri/src-tauri/Cargo.lock

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/tauri/src-tauri/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@ rusqlite = { version = "0.31", features = ["bundled"] }
3535
uuid = { version = "1", features = ["v4"] }
3636
chrono = "0.4"
3737
indexmap = "2"
38+
fix-path-env = { git = "https://github.com/tauri-apps/fix-path-env-rs" }

apps/tauri/src-tauri/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,8 @@ fn setup_macos_menu(app: &tauri::App) -> Result<(), Box<dyn std::error::Error>>
873873

874874
#[cfg_attr(mobile, tauri::mobile_entry_point)]
875875
pub fn run() {
876+
let _ = fix_path_env::fix();
877+
876878
let builder = tauri::Builder::default()
877879
.plugin(tauri_plugin_cli::init())
878880
.plugin(tauri_plugin_dialog::init())

apps/tauri/src/components/ActiveSessionView.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,15 @@ export function ActiveSessionView({
118118
// Core ACP actions using new per-session commands
119119
const sendPrompt = useCallback(async (text: string) => {
120120
try {
121+
if (!text.startsWith("/")) {
122+
sessionMessages.addOptimisticUserMessage(text);
123+
}
121124
await invoke("acp_session_send_prompt", { sessionId: session.id, text });
122125
} catch (e) {
123126
setErrors((prev) => [...prev, String(e)]);
124127
updateSessionEntry(session.id, { isStreaming: false });
125128
}
126-
}, [session.id]);
129+
}, [session.id, sessionMessages.addOptimisticUserMessage]);
127130

128131
const persistPreferences = useCallback((partial: Partial<AcpPreferences>) => {
129132
try {

apps/tauri/src/hooks/useSessionMessages.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ function toAcpMessage(r: MessageRecord): AcpMessage {
3232

3333
export interface UseSessionMessagesReturn {
3434
clearMessages: () => void;
35+
addOptimisticUserMessage: (text: string) => void;
3536
messages: AcpMessage[];
3637
isLoadingInitial: boolean;
3738
isLoadingMore: boolean;
@@ -73,6 +74,16 @@ export function useSessionMessages(sessionId: string): UseSessionMessagesReturn
7374
void loadInitial();
7475
}, [loadInitial]);
7576

77+
const addOptimisticUserMessage = useCallback((text: string) => {
78+
const optimisticMsg: AcpMessage = {
79+
id: `optimistic-${Date.now()}`,
80+
role: "user",
81+
content: text,
82+
timestamp: new Date(),
83+
};
84+
setMessages((prev) => [...prev, optimisticMsg]);
85+
}, []);
86+
7687
useEffect(() => {
7788
const unlisten = window.__TAURI__.event.listen<{
7889
sessionId: string;
@@ -84,7 +95,16 @@ export function useSessionMessages(sessionId: string): UseSessionMessagesReturn
8495
if (msgSessionId !== sessionId) return;
8596
setMessages((prev) => {
8697
if (prev.some((m) => m.id === id)) return prev;
87-
return [...prev, { id, role: "user", content, timestamp: new Date() }];
98+
const idx = prev.findIndex(
99+
(m) => m.id.startsWith("optimistic-") && m.role === "user" && m.content === content
100+
);
101+
const persisted: AcpMessage = { id, role: "user", content, timestamp: new Date() };
102+
if (idx >= 0) {
103+
const updated = [...prev];
104+
updated[idx] = persisted;
105+
return updated;
106+
}
107+
return [...prev, persisted];
88108
});
89109
});
90110
return () => { void unlisten.then((fn) => fn()); };
@@ -151,5 +171,5 @@ export function useSessionMessages(sessionId: string): UseSessionMessagesReturn
151171
return [...messages, ...streamingMessages];
152172
}, [messages, streamingMessages]);
153173

154-
return { messages: merged, isLoadingInitial, isLoadingMore, hasMore, loadMore, clearMessages };
174+
return { messages: merged, isLoadingInitial, isLoadingMore, hasMore, loadMore, clearMessages, addOptimisticUserMessage };
155175
}

0 commit comments

Comments
 (0)