Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
e3137b1
fix(provisioner): gate legacy skills mount by user visibility (#3985)
Vanzeren Jul 8, 2026
01dc067
feat: add composer input polishing (#3986)
18062706139fcz Jul 8, 2026
c640b52
feat(frontend): render slash-skill activations as inline chips (#3981)
18062706139fcz Jul 8, 2026
c9fb976
fix(subagents): unify guardrail caps on additive stop_reason + add to…
hata33 Jul 8, 2026
b36d719
fix(security): neutralize prompt-injection tags in remote tool result…
DengY11 Jul 9, 2026
bc9ee96
feat(deploy): first-class Helm chart for Kubernetes deployment (#3987)
zhfeng Jul 9, 2026
5ba25b0
feat(mcp): add MCP routing hints (#4004)
18062706139fcz Jul 9, 2026
c30c8ef
fix: recover from empty tool call names (#4008)
Huixin615 Jul 9, 2026
790b13f
ci(containers): bake postgres extra into published backend image (#4015)
zhfeng Jul 9, 2026
b3282ae
build(deps): bump langsmith from 0.8.0 to 0.8.18 in /backend (#4013)
dependabot[bot] Jul 9, 2026
dc38d2d
perf(boxlite): add benchmark-driven warm-pool reclaim tuning (#4001)
Vanzeren Jul 9, 2026
52418d6
build(deps): bump pydantic-settings from 2.14.0 to 2.14.2 in /backend…
dependabot[bot] Jul 9, 2026
488ec17
feat(provisioner): support ClusterIP services and scoped skills PVC m…
kongxiangxin Jul 9, 2026
69bb412
Add Monocle behavioral test suite
imohammedansari Jul 9, 2026
c11713c
fix(sandbox): scrub MYSQL_PWD and REDISCLI_AUTH from the inherited sk…
AnnaSuSu Jul 9, 2026
66c0c64
fix(gateway): live-tail malformed redis reconnect ids (#4012)
Huixin615 Jul 9, 2026
ebc09ce
feat(mcp): auto-promote deferred MCP tools from routing hints (#4019)
18062706139fcz Jul 9, 2026
3be3969
fix(agent): snap tool-output tail forward so fallback truncation resp…
AnnaSuSu Jul 10, 2026
b06372b
feat(backend): queue rapid same-thread messages and preserve topic ca…
Zhengcy05 Jul 10, 2026
eb8eec2
Return the full-resolution image URL from image_search (#3990)
DaoyuanLi2816 Jul 10, 2026
266883b
fix(subagents): inherit summarization middleware and harden step capt…
hata33 Jul 10, 2026
9097642
feat(memory): add memory consolidation to synthesize fragmented facts…
sontianye Jul 10, 2026
04a85b3
fix(sandbox): scrub abbreviated *_PASS vars and Postgres PGPASSFILE f…
AnnaSuSu Jul 10, 2026
94ebec2
docs(i18n): add missing Langfuse tracing sections to Chinese README (…
nankingjing Jul 10, 2026
d300e35
Correct memory-config documentation to match the code (#3995)
DaoyuanLi2816 Jul 10, 2026
c0b917c
Fix KeyError in staleness review when a fact has no id (#3993)
DaoyuanLi2816 Jul 10, 2026
446ae98
fix(sandbox): guard the reverse path-translation regex with a segment…
AnnaSuSu Jul 10, 2026
1fa91fa
Fix AttributeError in ThreadDataMiddleware when runtime.context is No…
DaoyuanLi2816 Jul 10, 2026
a2a949b
Fix UnboundLocalError in memory injection when facts are empty (#3992)
DaoyuanLi2816 Jul 10, 2026
be63716
feat(frontend): add voice dictation input (#4036)
18062706139fcz Jul 10, 2026
d45e86a
Address review: restructure suite, move under backend/tests/monocle/
imohammedansari Jul 10, 2026
d09756f
docs(monocle tests): explain the golden-trace workflow
imohammedansari Jul 10, 2026
b692ce6
Merge branch 'main' into monocle-test-tools
imohammedansari Jul 10, 2026
7961167
Fix circuit breaker wedging after a non-retriable half-open probe (#3…
DaoyuanLi2816 Jul 10, 2026
8fbf101
fix(subagents): inject durable context before compaction (#4040)
ggnnggez Jul 11, 2026
747806a
docs(i18n): sync Langfuse tracing sections into ja/fr/ru README trans…
nankingjing Jul 11, 2026
54f3c43
fix(security): html-escape fact content in memory prompt sections (#4…
sontianye Jul 11, 2026
d6b6b7f
test: add unit tests for deerflow.utils.llm_text (#4046)
nankingjing Jul 11, 2026
bbb3deb
fix(subagents): classify LLM error fallbacks as failed (#4042)
ggnnggez Jul 11, 2026
c2002d9
feat(memory): add memory tool sets (#4023)
Vanzeren Jul 11, 2026
938391c
fix(memory): html-escape memory state in MEMORY_UPDATE_PROMPT (#4044)…
nankingjing Jul 11, 2026
aafd507
feat(subagents): show effective model and token usage on task cards (…
ggnnggez Jul 11, 2026
6389fc0
fix: ensure visible response after tool runs (#4033)
Huixin615 Jul 11, 2026
41658c5
feat(skills): add skill review quality gate (#4037)
18062706139fcz Jul 11, 2026
3bc3af2
fix(runs): close multi-worker ownership gaps in run atomicity (#3948)…
heart-scalpel Jul 11, 2026
7d1a8fb
ci: add nightly build for images + helm chart (#4050)
zhfeng Jul 11, 2026
4fd521e
fix(guardrails): empty allowlist must deny all tools instead of faili…
nankingjing Jul 11, 2026
ad9ec65
fix(stream_bridge): add stream_exists to MemoryStreamBridge, fixing S…
nankingjing Jul 11, 2026
2839a36
fix(frontend): avoid highlighting code while streaming (#4068)
Huixin615 Jul 11, 2026
8ade23d
fix(artifacts): honor trusted owner-user-id header (#3982)
d33kayyy Jul 11, 2026
ca18cf0
fix(agent): reserve ellipsis room so the local title respects max_cha…
AnnaSuSu Jul 11, 2026
08fdf61
fix(sandbox): handle one-sided line ranges in read_file (#4078)
nankingjing Jul 11, 2026
97935b0
fix(front): resolve relative artifact image paths (#4038)
chaoxi007 Jul 11, 2026
1df9abc
fix(sandbox): guard the output-masking regex with a segment boundary …
AnnaSuSu Jul 11, 2026
9101fb6
fix: CVE-2026-49476 security vulnerability (#4089)
orbisai0security Jul 11, 2026
1ebf59f
fix(tools): stop capping tool_search's select: at MAX_RESULTS (#4054)
AnnaSuSu Jul 11, 2026
0519c8a
fix(wecom): guard null quote fields in _on_ws_text to prevent Attribu…
nankingjing Jul 11, 2026
c143c04
fix(config): Make the sync checkpointer honor the unified database co…
DaoyuanLi2816 Jul 12, 2026
64837b6
fix: CVE-2026-49477 security vulnerability (#4093)
orbisai0security Jul 12, 2026
88b0484
fix(channels): validate channel provider before resolving its config …
DaoyuanLi2816 Jul 12, 2026
7bdf941
fix(front): stabilize artifact paths during streaming (#4094)
Huixin615 Jul 12, 2026
736c412
fix: CVE-2026-35209 security vulnerability (#4106)
orbisai0security Jul 12, 2026
158c4f9
fix(security): html-escape memory facts rendered into the injection p…
AnnaSuSu Jul 12, 2026
5edc7a8
fix(security): neutralize prompt-injection tags in web_capture result…
DaoyuanLi2816 Jul 12, 2026
97e2268
fix(sandbox): stop glob/grep/ls from surfacing disabled skills' files…
AnnaSuSu Jul 12, 2026
f85ee59
docs(backend): add IM channel connections and GitHub agents architect…
nankingjing Jul 12, 2026
18c32be
fix(runs): re-buffer subagent event batch on flush failure instead of…
nankingjing Jul 12, 2026
b963282
fix(mcp): per-server fail-soft OAuth priming + persist rotated refres…
nankingjing Jul 12, 2026
b650456
fix(streaming): drop silent delta-discard in _merge_stream_text (#4085)
nankingjing Jul 12, 2026
8be7411
fix(runtime): serialize SQLite event-store writes to prevent per-thre…
nankingjing Jul 12, 2026
74392e1
Fix require_mention gating on whitespace-only bot_login/mention_login…
DaoyuanLi2816 Jul 12, 2026
feb2870
fix(security): html-escape memory context summaries rendered into the…
AnnaSuSu Jul 12, 2026
65d4742
fix(front): Show assistant text during tool steps (#4114)
hetaoBackend Jul 12, 2026
2730ee1
fix(memory): replace busy timer spin with deferred single re-run flag…
nankingjing Jul 12, 2026
a9145e4
feat(frontend): show real project version on About page (#4126)
zhfeng Jul 12, 2026
d8d8a34
fix(memory): coerce null confidence when ranking search results (#4076)
nankingjing Jul 12, 2026
d2ab5bb
fix(sandbox): str_replace on empty file only returns OK when old_str …
nankingjing Jul 12, 2026
c4b651f
Fix lost loop_capped stop reason when a subagent's run_id is None (#4…
DaoyuanLi2816 Jul 12, 2026
6af6cfc
fix(memory): don't gate memory-update parse on optional factsToRemove…
nankingjing Jul 12, 2026
490deeb
fix(memory): coerce null source.confidence so it no longer blocks mem…
nankingjing Jul 12, 2026
0350457
fix: CVE-2026-33128 security vulnerability (#4125)
orbisai0security Jul 12, 2026
224f8de
fix(goal): prevent continuation_count regression from racing continua…
nankingjing Jul 12, 2026
897be7e
fix(skillscan): detect os.environ access via from-import pattern (#4087)
nankingjing Jul 12, 2026
0542d3c
fix(sandbox): allow bash after cwd setup failure (#4051)
kongxiangxin Jul 12, 2026
c82fba4
fix(sandbox): guard the command path-translation regex with a segment…
AnnaSuSu Jul 12, 2026
08fd218
fix(sandbox): use os.sep in reverse-resolve containment check on Wind…
DaoyuanLi2816 Jul 12, 2026
2bd0f56
fix(subagents): classify recursion-capped LLM error fallbacks as fail…
DaoyuanLi2816 Jul 12, 2026
4254475
fix(skills): escape untrusted skill metadata before it enters the mod…
AnnaSuSu Jul 13, 2026
2163094
test(front): cover artifact image path variants (#4134)
chaoxi007 Jul 13, 2026
cbbd72a
fix(skillscan): recognize remaining requests/httpx HTTP methods as ne…
he-yufeng Jul 13, 2026
3758086
fix(channels): scope the slash-skill whitelist check to the run's own…
AnnaSuSu Jul 13, 2026
62f9053
fix(tool_search): remove MAX_RESULTS cap on select: exact-name lookup…
nankingjing Jul 13, 2026
bcee5a9
refactor(sandbox): give the host→virtual output-mask regex a single o…
AnnaSuSu Jul 13, 2026
2fa0505
fix(skills): activate a slash skill once per run, not per model call …
DaoyuanLi2816 Jul 13, 2026
63e2da1
fix landing hero background positioning (#4092)
zhangbububu Jul 13, 2026
95a35f3
docs(deployment-guide): fix stale userdata PVC subPath (#4139)
fancyboi999 Jul 13, 2026
4e20982
feat(agent): Add subagent total delegation cap (#4115)
hetaoBackend Jul 13, 2026
807c3c5
fix(security): html-escape SOUL.md before it enters the <soul> prompt…
he-yufeng Jul 13, 2026
a94ea93
fix(agents): load SOUL.md from agent dirs without config.yaml (#4136)
qin-chenghan Jul 13, 2026
3e7baba
fix(models): apply stream_chunk_timeout default to all BaseChatOpenAI…
DaoyuanLi2816 Jul 13, 2026
b53c1ae
fix(runs): cancel degrades to lease takeover for multi-worker (#4064)
heart-scalpel Jul 13, 2026
e32456d
fix(memory): coerce stored confidence in the three remaining raw read…
AnnaSuSu Jul 13, 2026
8cc4b3a
fix(sandbox): the sandbox provisioner api exposes endpoints need to c…
orbisai0security Jul 13, 2026
e361122
fix(security): html-escape subagent descriptions before the <subagent…
he-yufeng Jul 14, 2026
4af6178
feat(trace): add agent observability with Monocle (#4024)
imohammedansari Jul 14, 2026
e2816ea
fix(models): scope the OpenAI-compat rules to BaseChatOpenAI, not a c…
AnnaSuSu Jul 14, 2026
79cdd99
fix(mcp): validate MCP tool names at load so deferred prompts stay in…
AnnaSuSu Jul 14, 2026
81b3ed0
fix(skillscan): recognize remaining outbound network sinks (#4153)
AnnaSuSu Jul 14, 2026
446fa03
fix(context): resolve context compress bug (#4065)
AnoobFeng Jul 14, 2026
41b137c
fix(security): block forged framework tags in the input guardrail (#4…
AnnaSuSu Jul 14, 2026
2464819
fix(frontend): show branch action only for completed turns (#4147)
Huixin615 Jul 14, 2026
b7b4b49
fix(firecrawl): align tools with installed firecrawl-py v2 SDK surfac…
nankingjing Jul 14, 2026
192ea51
Revert "fix(firecrawl): align tools with installed firecrawl-py v2 SD…
WillemJiang Jul 14, 2026
fabadae
add Volcengine Coding Plan to quikly setup (#4141)
pclin1212 Jul 14, 2026
baf98de
Merge branch 'main' into monocle-test-tools
WillemJiang Jul 14, 2026
85c6b12
Address review: fix docstring pytest paths, state the suite is not ru…
imohammedansari Jul 15, 2026
bdac1ad
Address review: document the committed trace, pin assertions context
imohammedansari Jul 17, 2026
aa6075f
Address review: make live tests explicit opt-in, drop OpenAI-only gate
imohammedansari Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ INFOQUEST_API_KEY=your-infoquest-api-key
# when you run Gateway workers outside the bundled deploy script.
# DEER_FLOW_INTERNAL_AUTH_TOKEN=your-shared-internal-token

# Provisioner API key for sandbox authentication (required when using provisioner/K8s sandbox mode).
# The same value must be set on the provisioner container and in config.yaml sandbox.provisioner_api_key.
# Generate: openssl rand -hex 32
# PROVISIONER_API_KEY=your-provisioner-api-key

# ── Frontend SSR → Gateway wiring ─────────────────────────────────────────────
# The Next.js server uses these to reach the Gateway during SSR (auth checks,
# /api/* rewrites). They default to localhost values that match `make dev` and
Expand Down
87 changes: 87 additions & 0 deletions .github/workflows/chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Publish Helm Chart

# Publishes the DeerFlow Helm chart as an OCI artifact to GHCR alongside the
# container images (see container.yaml). Triggers on the same `v*` tags.
#
# On pull requests touching the chart or config.example.yaml, `validate-chart`
# runs lint + template render + a config_version drift check (the chart's
# embedded config_version must not lag config.example.yaml) so a broken or
# stale chart fails the PR, not the release.
#
# Users then install with:
# helm install deer-flow oci://ghcr.io/${{ owner }}/deer-flow --version <ver>

on:
push:
tags:
- "v*"
pull_request:
paths:
- "deploy/helm/deer-flow/**"
- "config.example.yaml"
- ".github/workflows/chart.yaml"
- "scripts/check_config_version.sh"

jobs:
validate-chart:
# Runs on PRs and release tags: catch a broken render or a stale
# config_version before merge / publish. A broken chart published under a
# vX.Y.Z tag is an immutable OCI artifact (GHCR won't let you overwrite
# --version), so a regression must fail here, not on install.
if: github.event_name == 'pull_request' || startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3

# ubuntu-latest ships with helm 3 preinstalled - no setup-helm action needed.
- name: Lint chart
run: helm lint deploy/helm/deer-flow
- name: Validate templates render
run: helm template deer-flow deploy/helm/deer-flow --include-crds >/dev/null

# The chart's `config:` block embeds a config_version that must not fall
# behind config.example.yaml. A stale version is silent in-cluster (the
# image ships no example to compare against, so _check_config_version
# never warns) but means the chart's config is authored against an older
# schema. Bump it in values.yaml and the README example. config_version
# gates no runtime behavior - it only drives the outdated-warning - so a
# bare version bump needs no field changes. Logic lives in
# scripts/check_config_version.sh (shared with nightly.yaml).
- name: config_version drift check
run: bash scripts/check_config_version.sh

verify-versions:
# Gate the release: every version source must match the v* tag. A forgotten
# bump in Chart.yaml, pyproject.toml, or package.json fails here and skips
# the publish. See scripts/verify_versions.sh.
if: startsWith(github.ref, 'refs/tags/v')
uses: ./.github/workflows/verify-versions.yml

publish-chart:
if: startsWith(github.ref, 'refs/tags/v')
needs: [verify-versions, validate-chart]
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3

- name: Log in to GHCR
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | \
helm registry login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Package chart
run: helm package deploy/helm/deer-flow --destination ./packages

- name: Push chart to GHCR
run: |
for pkg in ./packages/*.tgz; do
echo "--- pushing $pkg"
helm push "$pkg" oci://ghcr.io/${{ github.repository_owner }}
done
69 changes: 65 additions & 4 deletions .github/workflows/container.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,14 @@ on:
- "v*"

jobs:
verify-versions:
# Gate the release: every version source must match the v* tag. A forgotten
# bump in Chart.yaml, pyproject.toml, or package.json fails here and skips
# all image builds. See scripts/verify_versions.sh.
uses: ./.github/workflows/verify-versions.yml

backend-container:
needs: verify-versions
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -19,7 +25,7 @@ jobs:
IMAGE_NAME: ${{ github.repository }}-backend
steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
- name: Log in to the Container registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 #v3.4.0
with:
Expand All @@ -45,15 +51,22 @@ jobs:
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# Bake the `postgres` extra into the published image so multi-replica
# deployments (K8s/Helm) can use shared Postgres persistence instead of
# file-based SQLite. sqlite/redis-only single-replica setups still work;
# this only adds the Postgres driver. See backend/Dockerfile `UV_EXTRAS`.
build-args: |
UV_EXTRAS=postgres

- name: Generate artifact attestation
uses: actions/attest-build-provenance@v2
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be #v2.4.0
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true

frontend-container:
needs: verify-versions
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -66,7 +79,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
- name: Log in to the Container registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 #v3.4.0
with:
Expand Down Expand Up @@ -94,7 +107,55 @@ jobs:
labels: ${{ steps.meta.outputs.labels }}

- name: Generate artifact attestation
uses: actions/attest-build-provenance@v2
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be #v2.4.0
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true

provisioner-container:
needs: verify-versions
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
attestations: write
id-token: write
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}-provisioner

steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
- name: Log in to the Container registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 #v3.4.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 #v5.7.0
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=tag
type=ref,event=branch
type=sha
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
id: push
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 #v6.18.0
with:
context: docker/provisioner
file: docker/provisioner/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

- name: Generate artifact attestation
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be #v2.4.0
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
subject-digest: ${{ steps.push.outputs.digest }}
Expand Down
Loading
Loading