Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
af87ca2
chore(deps): update @mcp-ui/client to version 5.7.0 in package.json a…
aharvard Aug 18, 2025
642c7ab
fix: clean up mcp-ui implementation and properly return payload resul…
aharvard Aug 18, 2025
5e91a4c
fix: enable sandbox permissions for MCP UI resource renderer
aharvard Aug 18, 2025
c9993be
chore(deps): update @mcp-ui/client to version 5.8.0 in package.json a…
aharvard Aug 20, 2025
47ff5a8
fix: refactor resource type check in ToolCallWithResponse component t…
aharvard Aug 20, 2025
7436c9b
Merge main branch and resolve conflicts in package.json and MCPUIReso…
aharvard Aug 20, 2025
d5a57bb
chore: (temp) add path resolution and deduplication for React in Vite…
aharvard Aug 20, 2025
b1f8120
feat: enhance MCPUIResourceRenderer with typed action handlers and er…
aharvard Aug 20, 2025
d588b65
feat: add external URL handling in Electron main and preload processes
aharvard Aug 20, 2025
d066e12
feat: implement global scroll-to-bottom functionality and enhance mes…
aharvard Aug 20, 2025
8ba07ad
refactor: simplify MCPUIResourceRenderer by removing unused callbacks…
aharvard Aug 20, 2025
930ccc1
refactor: update MCPUIResourceRenderer to use appendPromptToChat for …
aharvard Aug 20, 2025
d029e73
refactor: enhance MCPUIResourceRenderer with comprehensive action han…
aharvard Aug 20, 2025
89d4edf
refactor: update MCPUIResourceRenderer action handlers to be asynchro…
aharvard Aug 20, 2025
5602b61
Remove @hey-api/client-fetch dependency
aharvard Aug 20, 2025
26593cc
update package lock
aharvard Aug 20, 2025
76c9303
chore: upgrade to @mcp-ui/client 5.9.0 and revert vite config change
aharvard Aug 20, 2025
09c122d
refactor: enhance MCPUIResourceRenderer with additional action types …
aharvard Aug 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 9 additions & 41 deletions ui/desktop/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion ui/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"dependencies": {
"@ai-sdk/openai": "^2.0.14",
"@ai-sdk/ui-utils": "^1.2.11",
"@mcp-ui/client": "~5.6.2",
"@mcp-ui/client": "^5.9.0",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-dialog": "^1.1.15",
Expand Down Expand Up @@ -139,6 +139,10 @@
},
"keywords": [],
"license": "Apache-2.0",
"overrides": {
"react": "^19.1.1",
"react-dom": "^19.1.1"
},
Comment on lines +142 to +145
Copy link
Collaborator Author

@aharvard aharvard Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

had to do this, but we can remove when this issue is completely resolved MCP-UI-Org/mcp-ui#90

"lint-staged": {
"src/**/*.{ts,tsx}": [
"bash -c 'npm run typecheck'",
Expand Down
15 changes: 15 additions & 0 deletions ui/desktop/src/components/BaseChat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,21 @@ function BaseChatContent({
}
}, []);

// Listen for global scroll-to-bottom requests (e.g., from MCP UI prompt actions)
useEffect(() => {
const handleGlobalScrollRequest = () => {
// Add a small delay to ensure content has been rendered
setTimeout(() => {
if (scrollRef.current?.scrollToBottom) {
scrollRef.current.scrollToBottom();
}
}, 200);
};

window.addEventListener('scroll-chat-to-bottom', handleGlobalScrollRequest);
return () => window.removeEventListener('scroll-chat-to-bottom', handleGlobalScrollRequest);
}, []);

return (
<div className="h-full flex flex-col min-h-0">
<MainPanelLayout
Expand Down
1 change: 1 addition & 0 deletions ui/desktop/src/components/GooseMessage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ export default function GooseMessage({
toolResponse={toolResponsesMap.get(toolRequest.id)}
notifications={toolCallNotifications.get(toolRequest.id)}
isStreamingMessage={isStreaming}
append={append}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what does this do?

Copy link
Collaborator Author

@aharvard aharvard Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

append is an existing convention in this file, and I had to add it to the <ToolCallWithResponse /> component to prop drill. TBH, this feels like a hack.

Inside of <ToolCallWithResponse />, append is passed to <MCPUIResourceRenderer content={content} appendPromptToChat={append} /> — where, I think, appendPromptToChat is a bit clearer.

The goal is to

  1. Catch the prompt message from an MCP UI
  2. Pass that message to the chat engine
  3. Let goose take the wheel

@zane, do you know if there is a more elegant way to pass a prompt string to the chat engine w/out prop drilling?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think prop drilling is ok for 2 levels like this for now but we don't have any other global state mechanism currently other than React context. So you could use context if needed. We plan on adding a global state library soon that can make things like this easier.

/>
</div>
))}
Expand Down
Loading