mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-23 08:25:57 +00:00
Merge branch 'main' into rayhpeng/persistence-scaffold
This commit is contained in:
@@ -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
|
<ArtifactAction
|
||||||
href={urlOfArtifact({ filepath, threadId })}
|
icon={SquareArrowOutUpRightIcon}
|
||||||
target="_blank"
|
label={t.common.openInNewWindow}
|
||||||
rel="noopener noreferrer"
|
tooltip={t.common.openInNewWindow}
|
||||||
>
|
onClick={() => {
|
||||||
<ArtifactAction
|
const w = window.open(
|
||||||
icon={SquareArrowOutUpRightIcon}
|
urlOfArtifact({ filepath, threadId }),
|
||||||
label={t.common.openInNewWindow}
|
"_blank",
|
||||||
tooltip={t.common.openInNewWindow}
|
"noopener,noreferrer",
|
||||||
/>
|
);
|
||||||
</a>
|
if (w) w.opener = null;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
{isCodeFile && (
|
{isCodeFile && (
|
||||||
<ArtifactAction
|
<ArtifactAction
|
||||||
@@ -218,17 +220,19 @@ export function ArtifactFileDetail({
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isWriteFile && (
|
{!isWriteFile && (
|
||||||
<a
|
<ArtifactAction
|
||||||
href={urlOfArtifact({ filepath, threadId, download: true })}
|
icon={DownloadIcon}
|
||||||
target="_blank"
|
label={t.common.download}
|
||||||
rel="noopener noreferrer"
|
tooltip={t.common.download}
|
||||||
>
|
onClick={() => {
|
||||||
<ArtifactAction
|
const w = window.open(
|
||||||
icon={DownloadIcon}
|
urlOfArtifact({ filepath, threadId, download: true }),
|
||||||
label={t.common.download}
|
"_blank",
|
||||||
tooltip={t.common.download}
|
"noopener,noreferrer",
|
||||||
/>
|
);
|
||||||
</a>
|
if (w) w.opener = null;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
<ArtifactAction
|
<ArtifactAction
|
||||||
icon={XIcon}
|
icon={XIcon}
|
||||||
|
|||||||
@@ -104,21 +104,21 @@ export function ArtifactFileList({
|
|||||||
{t.common.install}
|
{t.common.install}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
<a
|
<Button variant="ghost" asChild>
|
||||||
href={urlOfArtifact({
|
<a
|
||||||
filepath: file,
|
href={urlOfArtifact({
|
||||||
threadId: threadId,
|
filepath: file,
|
||||||
download: true,
|
threadId: threadId,
|
||||||
})}
|
download: true,
|
||||||
target="_blank"
|
})}
|
||||||
rel="noopener noreferrer"
|
target="_blank"
|
||||||
onClick={(e) => e.stopPropagation()}
|
rel="noopener noreferrer"
|
||||||
>
|
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>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user