Merge branch 'main' into rayhpeng/persistence-scaffold

This commit is contained in:
rayhpeng
2026-04-07 09:44:38 +08:00
committed by GitHub
4 changed files with 48 additions and 41 deletions
+3 -1
View File
@@ -100,6 +100,8 @@ services:
environment: environment:
- CI=true - CI=true
- DEER_FLOW_HOME=/app/backend/.deer-flow - DEER_FLOW_HOME=/app/backend/.deer-flow
- DEER_FLOW_CONFIG_PATH=/app/backend/config.yaml
- DEER_FLOW_EXTENSIONS_CONFIG_PATH=/app/backend/extensions_config.json
- DEER_FLOW_CHANNELS_LANGGRAPH_URL=${DEER_FLOW_CHANNELS_LANGGRAPH_URL:-http://langgraph:2024} - DEER_FLOW_CHANNELS_LANGGRAPH_URL=${DEER_FLOW_CHANNELS_LANGGRAPH_URL:-http://langgraph:2024}
- DEER_FLOW_CHANNELS_GATEWAY_URL=${DEER_FLOW_CHANNELS_GATEWAY_URL:-http://gateway:8001} - DEER_FLOW_CHANNELS_GATEWAY_URL=${DEER_FLOW_CHANNELS_GATEWAY_URL:-http://gateway:8001}
# DooD path/network translation # DooD path/network translation
@@ -127,7 +129,7 @@ services:
UV_INDEX_URL: ${UV_INDEX_URL:-https://pypi.org/simple} UV_INDEX_URL: ${UV_INDEX_URL:-https://pypi.org/simple}
UV_EXTRAS: ${UV_EXTRAS:-} UV_EXTRAS: ${UV_EXTRAS:-}
container_name: deer-flow-langgraph container_name: deer-flow-langgraph
command: sh -c 'cd /app/backend && allow_blocking="" && if [ "$${LANGGRAPH_ALLOW_BLOCKING:-0}" = "1" ]; then allow_blocking="--allow-blocking"; fi && uv run langgraph dev --no-browser $${allow_blocking} --no-reload --host 0.0.0.0 --port 2024 --n-jobs-per-worker $${LANGGRAPH_JOBS_PER_WORKER:-10}' command: sh -c 'cd /app/backend && args="--no-browser --no-reload --host 0.0.0.0 --port 2024 --n-jobs-per-worker $${LANGGRAPH_JOBS_PER_WORKER:-10}" && if [ "$${LANGGRAPH_ALLOW_BLOCKING:-0}" = "1" ]; then args="$$args --allow-blocking"; fi && uv run langgraph dev $$args'
volumes: volumes:
- ${DEER_FLOW_CONFIG_PATH}:/app/backend/config.yaml:ro - ${DEER_FLOW_CONFIG_PATH}:/app/backend/config.yaml:ro
- ${DEER_FLOW_EXTENSIONS_CONFIG_PATH}:/app/backend/extensions_config.json:ro - ${DEER_FLOW_EXTENSIONS_CONFIG_PATH}:/app/backend/extensions_config.json:ro
@@ -188,17 +188,19 @@ export function ArtifactFileDetail({
</Tooltip> </Tooltip>
)} )}
{!isWriteFile && ( {!isWriteFile && (
<a
href={urlOfArtifact({ filepath, threadId })}
target="_blank"
rel="noopener noreferrer"
>
<ArtifactAction <ArtifactAction
icon={SquareArrowOutUpRightIcon} icon={SquareArrowOutUpRightIcon}
label={t.common.openInNewWindow} label={t.common.openInNewWindow}
tooltip={t.common.openInNewWindow} tooltip={t.common.openInNewWindow}
onClick={() => {
const w = window.open(
urlOfArtifact({ filepath, threadId }),
"_blank",
"noopener,noreferrer",
);
if (w) w.opener = null;
}}
/> />
</a>
)} )}
{isCodeFile && ( {isCodeFile && (
<ArtifactAction <ArtifactAction
@@ -218,17 +220,19 @@ export function ArtifactFileDetail({
/> />
)} )}
{!isWriteFile && ( {!isWriteFile && (
<a
href={urlOfArtifact({ filepath, threadId, download: true })}
target="_blank"
rel="noopener noreferrer"
>
<ArtifactAction <ArtifactAction
icon={DownloadIcon} icon={DownloadIcon}
label={t.common.download} label={t.common.download}
tooltip={t.common.download} tooltip={t.common.download}
onClick={() => {
const w = window.open(
urlOfArtifact({ filepath, threadId, download: true }),
"_blank",
"noopener,noreferrer",
);
if (w) w.opener = null;
}}
/> />
</a>
)} )}
<ArtifactAction <ArtifactAction
icon={XIcon} icon={XIcon}
@@ -104,6 +104,7 @@ export function ArtifactFileList({
{t.common.install} {t.common.install}
</Button> </Button>
)} )}
<Button variant="ghost" asChild>
<a <a
href={urlOfArtifact({ href={urlOfArtifact({
filepath: file, filepath: file,
@@ -114,11 +115,10 @@ export function ArtifactFileList({
rel="noopener noreferrer" rel="noopener noreferrer"
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
> >
<Button variant="ghost">
<DownloadIcon className="size-4" /> <DownloadIcon className="size-4" />
{t.common.download} {t.common.download}
</Button>
</a> </a>
</Button>
</CardAction> </CardAction>
</CardHeader> </CardHeader>
</Card> </Card>
@@ -280,16 +280,17 @@ function ToolCall({
return ( return (
<ChainOfThoughtStep <ChainOfThoughtStep
key={id} key={id}
className="cursor-pointer"
label={t.toolCalls.viewWebPage} label={t.toolCalls.viewWebPage}
icon={GlobeIcon} icon={GlobeIcon}
onClick={() => {
window.open(url, "_blank");
}}
> >
<ChainOfThoughtSearchResult> <ChainOfThoughtSearchResult>
{url && ( {url && (
<a href={url} target="_blank" rel="noopener noreferrer"> <a
href={url}
target="_blank"
rel="noopener noreferrer"
className="cursor-pointer"
>
{title} {title}
</a> </a>
)} )}