Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
37d9de0
wip(deep-research): initial commit
amir-ghasemi Nov 12, 2025
4aee6dd
fix(deep-research): fix search metadata pass-through from frontend to…
amir-ghasemi Nov 12, 2025
1288965
fix(deep-research): UI styling updates
amir-ghasemi Nov 12, 2025
f8c8806
chore: update RAG sources icon
amir-ghasemi Nov 12, 2025
a80dec1
feat(deep-research): render citations as clickable links in the markd…
amir-ghasemi Nov 12, 2025
2eff8dd
chore: restrict source types to web and kb
amir-ghasemi Nov 12, 2025
9919133
feat: web search UI and agent
amir-ghasemi Nov 12, 2025
cbb6e0b
fix(web search): ui fixes
amir-ghasemi Nov 12, 2025
18f80d0
feat(web-search): tools ui
amir-ghasemi Nov 13, 2025
cabe31f
chore: remove logging_config.ini from version control
amir-ghasemi Nov 13, 2025
4306763
fix(deep research): remove UI toggle
amir-ghasemi Nov 18, 2025
97f6de9
fix(deep research): UI/UX updates
amir-ghasemi Nov 20, 2025
bf492ca
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 20, 2025
cd345f0
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 20, 2025
9c9f54b
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 20, 2025
370044d
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 21, 2025
bab3993
fix(deep-research): backend tool cleanup
amir-ghasemi Nov 21, 2025
f815253
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 21, 2025
76259f4
UI updates to Sources
jessieli-ux Nov 22, 2025
07c6ba1
Added completed research progress state
jessieli-ux Nov 22, 2025
f68fdcd
Updated behaviour for active progress state
jessieli-ux Nov 22, 2025
b0f743c
add closing animation to accordion
jessieli-ux Nov 22, 2025
9e6cb4c
Fixed visual bug on closing animation
jessieli-ux Nov 22, 2025
048c1c1
Merge branch 'jessie/deep-research-web' of github.com:SolaceLabs/sola…
amir-ghasemi Nov 22, 2025
dc84ee9
fix: example agents
amir-ghasemi Nov 22, 2025
34613b2
Merge branch 'jessie/deep-research-web' into amir/deep-research-web
amir-ghasemi Nov 23, 2025
aa7ff1c
fix(deep-research): sidepanel sources were cumulative
amir-ghasemi Nov 23, 2025
833f8bb
fix: should not render sources for user messages
amir-ghasemi Nov 23, 2025
6e85e2e
fix: updated agent in examples
amir-ghasemi Nov 23, 2025
9c29042
fix: web sources UI
amir-ghasemi Nov 23, 2025
64132e1
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 23, 2025
6f65dda
fix: change frontend to use camelCase vars
amir-ghasemi Nov 23, 2025
ea8eb84
fix: modify agent prompt to not show sources separately
amir-ghasemi Nov 23, 2025
3b349d4
fix: camelCase for source citation IDs
amir-ghasemi Nov 24, 2025
35ab020
fix(web-search): image source cards styling
amir-ghasemi Nov 24, 2025
8f5dafb
fix: remove duplicate image links
amir-ghasemi Nov 24, 2025
c45dae0
fix: simplify sources component
amir-ghasemi Nov 24, 2025
b224b5c
fix: UI styling updates
amir-ghasemi Nov 26, 2025
c3b01b7
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Nov 26, 2025
209909a
fix: show confirmation dialog when navigating away from active deep r…
amir-ghasemi Nov 26, 2025
f4d869a
fix: web search citation markers in peer agent responses should be kept
amir-ghasemi Nov 28, 2025
8dbc793
fix: return deep research report result as an artifact from the tool
amir-ghasemi Nov 28, 2025
9041f0d
fix: remove deep research warning when navigating away, will be handl…
amir-ghasemi Nov 29, 2025
200feb1
feat: integration test suite, support for Brave and Exa web search APIs
amir-ghasemi Dec 1, 2025
ddcad14
fix: show image sources in side panel
amir-ghasemi Dec 2, 2025
dae2929
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Dec 2, 2025
c5174d0
fix: add pytest markers
amir-ghasemi Dec 2, 2025
38fb612
fix: move rag dto to common
amir-ghasemi Dec 3, 2025
c1f1371
fix: Replace ADKToolWrapper with direct artifact service call in deep…
amir-ghasemi Dec 3, 2025
2947a75
fix: simplify the deep research agent configuration
amir-ghasemi Dec 3, 2025
3855768
fix: remove hardcoded LLM config from deep research agent configuration
amir-ghasemi Dec 3, 2025
e4d9dc4
fix: add max response size limit for web request
amir-ghasemi Dec 3, 2025
909d645
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Dec 3, 2025
0d7057d
fix: minor ephemeral source ordering issue
amir-ghasemi Dec 3, 2025
d2a78d7
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Dec 4, 2025
7b58023
fix: removed Tavily, Exa, Brave web search integrations
amir-ghasemi Dec 4, 2025
73451fc
fix: remove Tavily fallback from deep research tool
amir-ghasemi Dec 4, 2025
9844a6a
fix: report rendering updates for better UX
amir-ghasemi Dec 4, 2025
a14a41b
fix: group deep research web sources (full vs. partial)
amir-ghasemi Dec 4, 2025
295a037
fix: remove redundant description
amir-ghasemi Dec 4, 2025
8ddcbd8
refactor: extract publish_data_signal_from_thread to component.py
amir-ghasemi Dec 5, 2025
3399214
chore: Rename _web_search_google to web_search_google
amir-ghasemi Dec 5, 2025
b177821
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Dec 5, 2025
877f5c1
feat: update docs for web search and deep research
amir-ghasemi Dec 5, 2025
44a1872
fix: add TTS and copy support for deep research reports
amir-ghasemi Dec 5, 2025
d3c2f0e
fix: clear sources when switching chat sessions
amir-ghasemi Dec 5, 2025
8e389d5
fix: deep research links in preview panel were not clickable
amir-ghasemi Dec 5, 2025
b2fa9e6
feat: merge with background tasks
amir-ghasemi Dec 5, 2025
171bff0
fix: address minor issue for rendering of deep research artifacts dur…
amir-ghasemi Dec 6, 2025
fd6d547
fix: citation styling
amir-ghasemi Dec 6, 2025
0608036
fix: allow ask followup on deep research reports
amir-ghasemi Dec 6, 2025
fc59582
chore: theme colors for web links
amir-ghasemi Dec 6, 2025
eb2fece
fix: update tests
amir-ghasemi Dec 7, 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
87 changes: 86 additions & 1 deletion client/webui/frontend/package-lock.json

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

9 changes: 5 additions & 4 deletions client/webui/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
]
},
"dependencies": {
"@ariakit/react": "^0.4.19",
"@hookform/resolvers": "^5.2.2",
"@radix-ui/react-accordion": "^1.2.11",
"@radix-ui/react-avatar": "^1.1.10",
Expand Down Expand Up @@ -123,6 +124,8 @@
"@types/react": "19.0.0",
"@types/react-dom": "19.0.0",
"@vitejs/plugin-react": "^4.4.1",
"@vitest/browser-playwright": "^4.0.8",
"@vitest/coverage-v8": "^4.0.8",
"cypress": "^14.5.4",
"eslint": "^9.25.0",
"eslint-plugin-react-hooks": "^5.2.0",
Expand All @@ -131,17 +134,15 @@
"globals": "^16.0.0",
"lint-staged": "^16.2.3",
"mocha-junit-reporter": "^2.2.1",
"playwright": "^1.56.1",
"prettier": "^3.6.2",
"prettier-plugin-tailwindcss": "^0.6.13",
"storybook": "^10.0.7",
"tw-animate-css": "^1.3.3",
"typescript": "~5.8.3",
"typescript-eslint": "^8.30.1",
"vite": "^6.3.5",
"vitest": "^4.0.8",
"playwright": "^1.56.1",
"@vitest/browser-playwright": "^4.0.8",
"@vitest/coverage-v8": "^4.0.8"
"vitest": "^4.0.8"
},
"optionalDependencies": {
"@rollup/rollup-linux-arm64-gnu": "4.44.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import React from "react";
import { CheckCircle, FileText, HardDrive, Link, MessageSquare, Share2, Terminal, User, XCircle, Zap } from "lucide-react";

import { JSONViewer, MarkdownHTMLConverter } from "@/lib/components";
import { ImageSearchGrid } from "@/lib/components/research";
import type { ArtifactNotificationData, LLMCallData, LLMResponseToAgentData, ToolDecisionData, ToolInvocationStartData, ToolResultData, VisualizerStep } from "@/lib/types";

interface VisualizerStepCardProps {
Expand Down Expand Up @@ -143,19 +144,63 @@ const VisualizerStepCard: React.FC<VisualizerStepCardProps> = ({ step, isHighlig
</div>
);

const renderToolResultData = (data: ToolResultData) => (
<div className="mt-1.5 rounded-md bg-gray-50 p-2 text-xs text-gray-700 dark:bg-gray-700 dark:text-gray-300">
<p>
<strong>Tool:</strong> {data.toolName}
</p>
<p className="mt-1">
<strong>Result:</strong>
</p>
<div className="max-h-40 overflow-y-auto rounded bg-gray-100 p-1.5 dark:bg-gray-700">
{typeof data.resultData === "object" ? <JSONViewer data={data.resultData} /> : <pre className="font-mono text-xs break-all whitespace-pre-wrap">{String(data.resultData)}</pre>}
const renderToolResultData = (data: ToolResultData) => {
// Check if this is a web search result with images
let parsedResult = null;
let hasImages = false;

try {
// Try to parse the result if it's a string
if (typeof data.resultData === "string") {
parsedResult = JSON.parse(data.resultData);
} else if (typeof data.resultData === "object") {
parsedResult = data.resultData;
}

// Check if the result has an images array (from web search tools)
if (parsedResult?.result) {
const innerResult = typeof parsedResult.result === "string" ? JSON.parse(parsedResult.result) : parsedResult.result;

if (innerResult?.images && Array.isArray(innerResult.images) && innerResult.images.length > 0) {
hasImages = true;
}
}
} catch {
// Not JSON or parsing failed, will display as normal
}

return (
<div className="mt-1.5 rounded-md bg-gray-50 p-2 text-xs text-gray-700 dark:bg-gray-700 dark:text-gray-300">
<p>
<strong>Tool:</strong> {data.toolName}
</p>

{hasImages && parsedResult?.result ? (
<>
<p className="mt-1">
<strong>Image Results:</strong>
</p>
<ImageSearchGrid images={typeof parsedResult.result === "string" ? JSON.parse(parsedResult.result).images : parsedResult.result.images} />
<details className="mt-2">
<summary className="cursor-pointer text-xs text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300">Show full result data</summary>
<div className="mt-2 max-h-40 overflow-y-auto rounded bg-gray-100 p-1.5 dark:bg-gray-700">
{typeof data.resultData === "object" ? <JSONViewer data={data.resultData} /> : <pre className="font-mono text-xs break-all whitespace-pre-wrap">{String(data.resultData)}</pre>}
</div>
</details>
</>
) : (
<>
<p className="mt-1">
<strong>Result:</strong>
</p>
<div className="max-h-40 overflow-y-auto rounded bg-gray-100 p-1.5 dark:bg-gray-700">
{typeof data.resultData === "object" ? <JSONViewer data={data.resultData} /> : <pre className="font-mono text-xs break-all whitespace-pre-wrap">{String(data.resultData)}</pre>}
</div>
</>
)}
</div>
</div>
);
);
};
const renderArtifactNotificationData = (data: ArtifactNotificationData) => (
<div className="mt-1.5 rounded-md bg-gray-50 p-2 text-xs text-gray-700 dark:bg-gray-700 dark:text-gray-300">
<p>
Expand Down
Loading
Loading