From 208df4931dfa80b461e7d610a7b5edf892af8b62 Mon Sep 17 00:00:00 2001 From: Willem Jiang Date: Sat, 18 Jul 2026 17:25:45 +0800 Subject: [PATCH] doc(changelog): updated the changelog with latest changes (#4270) --- CHANGELOG.md | 565 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 523 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b6e7b4d8..ef5c19bd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,146 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +This section accumulates work toward the **2.1.0** milestone +([milestone 2](https://github.com/bytedance/deer-flow/milestone/2)). + +### ⚠ Breaking changes + +- **skills:** A directory containing `SKILL.md` is now a runtime package + boundary. Nested `SKILL.md` files inside that package are supporting data and + are no longer registered as independent skills; unusual custom layouts must + move independently loadable skills under a namespace directory without its + own `SKILL.md`. ([#4098]) +- **memory:** The memory system is now pluggable (`memory.manager_class` selects + a backend; default `deermem` is self-contained). DeerMem-private settings moved + from the top level of `memory:` into `memory.backend_config`, and the + `/memory/config` response (and `client.get_memory_config()`) changed shape. + ([#4122]) +- **memory:** `/memory/config` and `client.get_memory_config()` no longer return + flat DeerMem fields (`storage_path`, `max_facts`, `debounce_seconds`, + `token_counting`, `guaranteed_*`, `staleness_*`, ...). They return + `{enabled, mode, injection_enabled, manager_class, backend_config}` where + `backend_config` is an opaque dict the active backend self-interprets. Memory + *data* responses (`/memory`, `/memory/status` data) are unchanged. External + API/SDK clients reading the old flat fields must read `backend_config` instead. + ([#4122]) +- **memory:** Custom `memory.storage_class` moved: the old default path + `deerflow.agents.memory.storage.FileMemoryStorage` no longer exists (now + `deerflow.agents.memory.backends.deermem.deermem.core.storage.FileMemoryStorage`). + Custom `MemoryStorage` subclasses must accept `config` in `__init__` (was + no-arg). A broken/old `storage_class` logs an error and falls back to + `FileMemoryStorage` (won't crash) -- update the path + signature to restore it. + ([#4122]) +- **memory:** `storage_path` semantics changed from a FILE path to a root + DIRECTORY. Pre-abstraction, an absolute `storage_path` was the shared memory + file (opting out of per-user isolation) and a relative value was the global + file under the data base_dir. Now `storage_path` (absolute or relative) is the + root directory; per-user memory lives at `{storage_path}/users/{uid}/memory.json`. + An upgrade keeping the old default `storage_path: memory.json` (a relative file + name) would orphan per-user memory or hit `NotADirectoryError` on save, so the + legacy migration **drops file-style `storage_path` values (ending in `.json`) + with a warning** and the factory **raises** if `storage_path` resolves to an + existing file. Set `memory.backend_config.storage_path` to a directory for a + custom root. ([#4122]) + +### Added + +#### Agents & runtime + +- **middleware:** New `TokenBudgetMiddleware` enforces a per-run token budget, + shared additively across the lead agent and subagents. ([#3412]) +- **middleware:** Structured tool-result metadata and a tool-progress state + machine give the runtime first-class visibility into multi-step tool flows. + ([#3601]) +- **context:** Record the effective memory identity per run and persist durable + context (system messages, memory, and tool state) across summarization, + emitting it as structured runtime metadata so compaction no longer drops it. + ([#3556], [#3887], [#3906]) +- **runtime:** Goal continuations let a run resume toward a goal across multiple + agent turns, with `continuation_count` tracked and capped. ([#3858]) +- **subagents:** A system-maintained delegation ledger prevents redundant + re-delegation of an in-flight task, and a total delegation cap bounds fan-out + per run. ([#3877], [#4115]) +- **subagents:** Persist and display subagent step history in the thread. + ([#3845]) +- **tools:** Structured synopses replace raw oversized tool output in previews. + ([#3377]) +- **files:** Deterministic read-before-write version gate for file tools + prevents clobbering concurrent edits. ([#3912]) +- **gateway:** Cache-aware cost accounting attributes token costs to cached vs. + uncached paths; a Redis stream bridge enables distributed event streaming; and + manual context compaction is exposed to the user. ([#3920], [#3191], [#3969]) + +#### Memory + +- **memory:** Memory consolidation synthesizes fragmented facts, and a staleness + review prunes silently-outdated facts using LLM-assigned per-fact + `expected_valid_days` / `staleFactsToExtend`. ([#3996], [#3860], [#4143]) +- **memory:** Guaranteed injection of correction facts (with graceful fallback) + so user corrections always reach the model. ([#3592]) + +#### Skills + +- **skills:** Native SkillScan (phase 1) statically analyzes skill packages at + load, and `describe_skill` enables deferred discovery so the model fetches a + skill's schema on demand instead of loading all skills up front. ([#3033], + [#3775]) +- **skills:** Per-user custom skill isolation with sandbox mounting. ([#3889]) + +#### Models & integrations + +- **community:** New web search/fetch engines - GroundRoute, Crawl4AI + (`web_fetch`), and a fastCRW provider - plus a Browserless `web_capture` + screenshot tool and Brave `image_search`. ([#3675], [#3821], [#3585], [#3881], + [#3866]) +- **mcp:** Per-server `tool_call_timeout` for MCP tool calls, and routing hints + that guide the model to the right server. ([#3843], [#4004]) + +#### Channels + +- **channels:** Expose the IM `channel_user_id` to sandbox commands as + `DEERFLOW_CHANNEL_USER_ID`. ([#3926]) +- **channels:** Queue rapid same-thread messages and preserve topic-card + previews across batches. ([#3988]) + +#### Auth & guardrails + +- **auth:** Generic OIDC/SSO authentication with Keycloak support. ([#3506]) +- **guardrails:** Authenticated runtime context is exposed in `GuardrailRequest`, + and security interventions are persisted as run events. ([#3665], [#3837]) + +#### Sandbox & provisioner + +- **sandbox:** New E2B and BoxLite (micro-VM) sandbox providers; BoxLite ships + with a warm pool. ([#3883], [#3940], [#3951]) +- **provisioner:** ClusterIP Services and scoped per-skill PVC mounts, plus a + configurable sandbox container port. ([#4016], [#3928]) + +#### Frontend + +- **frontend:** Branching support for assistant turns and side conversations for + quoted follow-ups. ([#3950], [#3934]) +- **frontend:** Regenerate the latest answer. ([#3637]) +- **frontend:** Citation-sources evidence panel, workspace change review for + agent runs, and a visualized `ask_clarification` card. ([#3907], [#3945], + [#3956]) +- **frontend:** Voice dictation, prompt-history recall with arrow keys, composer + input polishing, and a "(thought for N seconds)" thinking-duration chip. + ([#4036], [#3718], [#3986], [#3627]) +- **frontend:** Feature-gate the agents UI behind the `agents_api` flag, and + persist AI turn duration in backend and UI. ([#3769], [#3663]) + +#### Observability & tooling + +- **observability:** Trace-id correlation with enhanced logging and agent + observability via Monocle. ([#3902], [#4024]) +- **tooling:** A Hermes-like terminal workbench (`deerflow` CLI) backed by + `DeerFlowClient`, plus a redacted community support-bundle generator. ([#3760], + [#3886]) +- **setup:** The setup wizard now asks whether OpenAI-compatible gateway models + support thinking, and a Volcengine Coding Plan quick-setup path was added. + ([#3428], [#4141]) + ### Changed - **sandbox:** The Helm chart now defaults per-sandbox Services to `ClusterIP` @@ -19,45 +159,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 where the gateway is not in K8s), set `provisioner.sandboxServiceType: NodePort` (with `provisioner.nodeHost` if needed). The provisioner itself is unchanged (mode-aware since #4016). ([#4190]) - -### ⚠ Breaking changes - -- **skills:** A directory containing `SKILL.md` is now a runtime package - boundary. Nested `SKILL.md` files inside that package are supporting data and - are no longer registered as independent skills; unusual custom layouts must - move independently loadable skills under a namespace directory without its - own `SKILL.md`. ([#4098]) -- **memory:** The memory system is now pluggable (`memory.manager_class` selects - a backend; default `deermem` is self-contained). DeerMem-private settings moved - from the top level of `memory:` into `memory.backend_config`, and the - `/memory/config` response (and `client.get_memory_config()`) changed shape. -- **memory:** `/memory/config` and `client.get_memory_config()` no longer return - flat DeerMem fields (`storage_path`, `max_facts`, `debounce_seconds`, - `token_counting`, `guaranteed_*`, `staleness_*`, ...). They return - `{enabled, mode, injection_enabled, manager_class, backend_config}` where - `backend_config` is an opaque dict the active backend self-interprets. Memory - *data* responses (`/memory`, `/memory/status` data) are unchanged. External - API/SDK clients reading the old flat fields must read `backend_config` instead. -- **memory:** Custom `memory.storage_class` moved: the old default path - `deerflow.agents.memory.storage.FileMemoryStorage` no longer exists (now - `deerflow.agents.memory.backends.deermem.deermem.core.storage.FileMemoryStorage`). - Custom `MemoryStorage` subclasses must accept `config` in `__init__` (was - no-arg). A broken/old `storage_class` logs an error and falls back to - `FileMemoryStorage` (won't crash) -- update the path + signature to restore it. -- **memory:** `storage_path` semantics changed from a FILE path to a root - DIRECTORY. Pre-abstraction, an absolute `storage_path` was the shared memory - file (opting out of per-user isolation) and a relative value was the global - file under the data base_dir. Now `storage_path` (absolute or relative) is the - root directory; per-user memory lives at `{storage_path}/users/{uid}/memory.json`. - An upgrade keeping the old default `storage_path: memory.json` (a relative file - name) would orphan per-user memory or hit `NotADirectoryError` on save, so the - legacy migration **drops file-style `storage_path` values (ending in `.json`) - with a warning** and the factory **raises** if `storage_path` resolves to an - existing file. Set `memory.backend_config.storage_path` to a directory for a - custom root. - -### Changed - - **skills:** An active restrictive skill must explicitly list `task` in `allowed-tools` to delegate to a subagent. Read-only discovery infrastructure (`tool_search` and `describe_skill`) remains available, but cannot grant schema @@ -68,12 +169,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 into `backend_config`** on load with a warning, so an upgrade does NOT silently revert customized settings to defaults (`model_name` -> `backend_config.model.model`). Move them under `memory.backend_config` in - `config.yaml` to silence the warning. + `config.yaml` to silence the warning. ([#4122]) - **memory:** Added `memory.mode` (`middleware` | `tool`); `tool` mode registers memory tools (`memory_search`/`add`/`update`/`delete`) the model calls directly instead of passive per-turn summarization. `manager_class` resolution is now fail-fast (raises `ValueError` on an unknown backend instead of silently - falling back). + falling back). ([#4023]) +- **middleware:** Declarative layered middleware builder; `ThreadData` now runs + before `Uploads`. ([#3809]) +- **sandbox:** The host->virtual output-masking regex now has a single owner, + eliminating duplicated pattern compilation. ([#4108]) +- **docs:** `AGENTS.md` is now the source of truth for agent guidance, imported + by `CLAUDE.md` via `@AGENTS.md`; module guides refreshed. ([#3770]) ### Fixed @@ -86,7 +193,162 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 not just `ChatOpenAI` / `PatchedChatOpenAI`. Those five previously dropped the configured endpoint silently and then failed every request with an opaque `unexpected keyword argument 'api_base'`; the unknown-config-key warning was - disabled for them as well. Both now gate on `issubclass(BaseChatOpenAI)`. ([#4146]) + disabled for them as well. Both now gate on `issubclass(BaseChatOpenAI)`. + ([#4146]) +- **agents:** Coalesce `SystemMessage`s before the LLM request; ensure a visible + response after tool runs; avoid a default LLM title call before stream end; + reserve ellipsis room so the local title respects `max_chars`; and snap the + tool-output tail forward so fallback truncation respects `max_chars`. ([#3711], + [#4033], [#3885], [#4052], [#4017]) +- **agents:** Skip dateless reminders in the dynamic-context date scan; load + `SOUL.md` from agent dirs without `config.yaml`; require `config.yaml` in + `update_agent`'s legacy-agent guard; and refuse empty `SOUL.md` updates. + ([#3685], [#4136], [#4166], [#4219]) +- **middleware:** Window the loop-detection tool-frequency counter so long runs + no longer false-trip; prevent the title middleware from streaming tokens; + fix positional fallback consuming an unrelated todo when the same-content list + is exhausted; acquire the token-budget lock across `_apply`, `before_agent`, + `_clear_run_state`, and `_drain_pending_warnings`; drop orphan `ToolMessage`s + so strict providers don't 400; sanitize invalid tool-call arguments; and + recover from empty tool-call names and malformed tool-call ids in dangling + repair. ([#4072], [#3566], [#3709], [#3714], [#4080], [#4193], [#4008], + [#4246]) +- **subagents:** Inherit `LoopDetectionMiddleware` and summarization middleware + so tool loops break and steps are captured; surface the turn-budget cap as + `MAX_TURNS_REACHED` with a partial result; unify guardrail caps on the additive + `stop_reason` + `token_budget`; inject durable context before compaction; + preserve the parent checkpoint namespace; prohibit the `task` tool in the + general-purpose system prompt; re-buffer subagent events on flush failure to + avoid losing steps; and fix the lost `loop_capped` stop reason when a + subagent's `run_id` is `None`. ([#3931], [#4009], [#3949], [#3980], [#4040], + [#4215], [#4161], [#4082], [#4059]) +- **memory:** Harden against null/empty edge cases - skip whitespace-only facts; + coerce null `confidence` / `source.confidence` in updates, searches, and the + three remaining raw reads; treat explicit `null` `backend_config` values as + omitted; fix `KeyError` / `UnboundLocalError` when a fact has no id or the + facts list is empty; stop the busy-spin in the debounced update queue; and + flush the memory queue on graceful shutdown to prevent loss. ([#3719], [#4074], + [#4076], [#4034], [#4217], [#3993], [#3992], [#4073], [#4181]) +- **runs:** Close multi-worker ownership gaps in run atomicity; degrade cancel + to lease takeover for multi-worker; keep `create_thread` idempotent when the + insert loses a race; read `stop_reason` from runtime context; and persist run + duration in checkpoints for history reads. ([#4003], [#4064], [#3800], [#4188], + [#4118]) +- **runtime:** Serialize SQLite event-store writes to prevent per-thread + sequence collisions; skip hidden human messages in the journal; and drop the + silent delta-discard in `_merge_stream_text`. ([#4077], [#3698], [#4085]) +- **gateway:** Attach thread-message feedback by real `event_type`; offload + blocking filesystem IO in artifact serving, gateway uploads, and the Discord + channel; limit the uploaded-file context manifest; and live-tail malformed + Redis reconnect ids. ([#3651], [#3551], [#3935], [#3927], [#3917], [#4012]) +- **config:** Coerce null object config sections to their defaults; honor the + unified database configuration in the store and sync checkpointer; and have + legacy DB backfill create missing `Index` objects on existing tables. ([#3573], + [#3904], [#3994], [#4090]) +- **models:** Apply the `stream_chunk_timeout` default to all `BaseChatOpenAI` + subclasses; and normalize `api_base` -> `base_url` for `ChatOpenAI` with a + warning on unknown config keys. ([#4102], [#3790]) +- **mcp:** Isolate tool-discovery failures per server; synchronize the + session-pool singleton lifecycle; invalidate the tools cache on config content + + path (not just newer mtime); validate MCP tool names at load so deferred + prompts stay inert; and route tools by source server, not name prefix. ([#3772], + [#3797], [#4124], [#4154], [#3812]) +- **skills:** Activate a slash skill once per run, not per model call; close the + skill-install security-scan coverage gap; recognize fully deleted skill + packages in review CI and remaining `requests` / `httpx` methods as network + sinks in SkillScan; reuse the resolved app config in the no-arg skills prompt + section; and reload mounted skills without restarting the Gateway. ([#4103], + [#3924], [#4169], [#4130], [#4160], [#4264]) +- **sandbox:** Guard the reverse path-translation and output-masking regexes + with segment boundaries; handle one-sided line ranges and empty files in + `read_file` / `str_replace`; align the AIO bash working directory; use + `os.sep` in the reverse-resolve containment check on Windows; normalize + Windows backslash paths in bash commands; stop `glob` / `grep` / `ls` from + surfacing disabled skills' files; and allow valid heredoc commands in the + sandbox audit. ([#4035], [#4053], [#4078], [#4079], [#4051], [#4058], [#3869], + [#4096], [#3786]) +- **sandbox:** Synchronize the sandbox provider singleton lifecycle (with + concurrency regression tests) and keep k8s calls off the event loop in the + provisioner. ([#3730], [#3941]) +- **sandbox:** Align sandbox artifact mounts with the channel user; fix + local-dev (`make dev`) on non-root / NFS hosts; reap macOS nginx processes on + stop; and fix production Postgres UV-extras detection in Docker. ([#3729], + [#3590], [#3828], [#3897]) +- **channels:** Validate the channel provider before resolving its config; + dedupe GitHub webhook redeliveries and drop redundant GitHub review-comment + webhook fan-out; scope the slash-skill whitelist check to the run's owner; + batch Feishu file messages into one thread and dispatch Feishu group commands + prefixed with a bot @mention; accept leading @mentions before `/connect` bind + codes and don't treat a bare "connect" as a bind command; stop Feishu from + creating thread topics and throttle card updates; let the UI runtime channel + config win over `config.yaml`; fix `require_mention` gating on + whitespace-only `bot_login` / `mention_login`; and guard null quote fields in + WeCom. ([#4100], [#4104], [#4131], [#4129], [#3753], [#4229], [#4222], [#4251], + [#3810], [#3674], [#4055], [#4069]) +- **frontend:** Preserve messages and durable context across summarization; + preserve artifacts and stabilize artifact paths during streaming; resolve + relative artifact image paths; retain presented artifacts in the header + dropdown; keep orphan tool messages visible; show assistant text during tool + steps; reset new chat on client-side navigation; prevent stream cancellation + on concurrent submit; fix stale-run reconnect and cancel handling; fix chat + math rendering, single-tilde markdown, double reasoning rendering, UTF-16 + markdown binary classification, and `` tags in Streamdown; make + recent-chat rows fully clickable; validate attachment limits before upload and + fix uploaded-file metadata in message copy; fix mobile workspace and + accessibility blockers, the card tool-message bug, and side-chat toolbar / + panel-button behavior; block unresolved suggestion-template placeholders; + refresh notification permissions; show the branch action only for completed + turns; enable regenerate in custom agent chats; and generate a fallback title + for interrupted first-turn runs. ([#3826], [#3791], [#4094], [#4038], [#3854], + [#3880], [#4114], [#3673], [#3878], [#3908], [#3557], [#4245], [#3870], [#3966], + [#4209], [#3733], [#3900], [#3944], [#3740], [#3976], [#3959], [#3961], [#3764], + [#3768], [#4147], [#3967], [#3874], [#3644]) +- **tui:** Interrupt an active run before `/quit` exits. ([#4235]) +- **harness:** Don't flag the outline as truncated at exactly `MAX_OUTLINE_ENTRIES` + headings. ([#3856]) +- **tracing:** Attach Langfuse trace metadata to the goal evaluator. ([#4202]) +- **context:** Resolve the context-compress bug. ([#4065]) +- **threaddata:** Fix `AttributeError` when `runtime.context` is `None`. ([#3989]) +- **goal:** Stop `continuation_count` double-bump during stand-down. ([#4199]) +- **circuit-breaker:** Stop wedging after a non-retriable half-open probe. ([#3991]) +- **github:** Match `allow_authors` logins case-insensitively. ([#4218]) +- **community:** `image_search` now returns the full-resolution image URL. ([#3990]) + +### Performance + +- **runtime:** Index `MemoryRunStore` by `thread_id` and `MemoryRunEventStore` + events by `run_id` to avoid O(n) scans. ([#3562], [#3686]) +- **subagents:** Deduplicate streamed AI messages via a seen-id set (O(n²) -> + O(n)). ([#3687]) +- **sandbox:** Cache `LocalSandbox` path-rewrite regexes and local-path masking + patterns per instance instead of recompiling per search match. ([#3648], + [#3713]) + +### Security + +- **prompt-injection:** New input-sanitization middleware defends against + prompt-injection, forged framework tags in the input guardrail are blocked, + and system context is injected as a `SystemMessage` for role isolation. ([#3662], + [#4155], [#3661]) +- **prompt-injection:** HTML-escape untrusted content rendered into model prompts + - memory facts and summaries, `SOUL.md`, subagent descriptions, and the + conversation block in the memory-update prompt - and neutralize + prompt-injection tags in `web_capture` tool results. ([#4028], [#4119], [#4137], + [#4157], [#4162], [#4099], [#4060]) +- **secrets:** Scrub inherited secret environment variables (`MYSQL_PWD`, + `REDISCLI_AUTH`, abbreviated `*_PASS`, and Postgres `PGPASSFILE`) from the + skill environment; request-scoped secrets are bound for both slash-activated + and autonomously-invoked skills. ([#4018], [#4026], [#3871], [#3938]) +- **web_fetch:** SSRF guard for self-hosted providers. ([#3942]) +- **guardrails:** An empty allowlist now denies all tools instead of failing + open. ([#4067]) +- **authz:** Global skills-management endpoints now require admin; the legacy + skills mount is gated by user visibility; artifacts honor a trusted + `owner-user-id` header; and the trusted authorization principal is propagated + through the runtime. ([#3855], [#3985], [#3982], [#4203]) +- **auth:** Persist the `csrf_token` cookie for the access-token lifetime. + ([#3872]) +- **storage:** Stop persisting base64 image data in checkpoint state. ([#4140]) ## [2.0.0] — 2026-06-15 @@ -416,6 +678,7 @@ with **180 merged pull requests** since the first 2.0 milestone tag. label thrash. ([#3455]) [2.0.0]: https://github.com/bytedance/deer-flow/releases/tag/v2.0.0 + [#2329]: https://github.com/bytedance/deer-flow/pull/2329 [#2556]: https://github.com/bytedance/deer-flow/pull/2556 [#2582]: https://github.com/bytedance/deer-flow/pull/2582 @@ -484,6 +747,7 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#2989]: https://github.com/bytedance/deer-flow/pull/2989 [#3002]: https://github.com/bytedance/deer-flow/pull/3002 [#3005]: https://github.com/bytedance/deer-flow/pull/3005 +[#3033]: https://github.com/bytedance/deer-flow/pull/3033 [#3058]: https://github.com/bytedance/deer-flow/pull/3058 [#3069]: https://github.com/bytedance/deer-flow/pull/3069 [#3074]: https://github.com/bytedance/deer-flow/pull/3074 @@ -495,6 +759,7 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#3153]: https://github.com/bytedance/deer-flow/pull/3153 [#3174]: https://github.com/bytedance/deer-flow/pull/3174 [#3176]: https://github.com/bytedance/deer-flow/pull/3176 +[#3191]: https://github.com/bytedance/deer-flow/pull/3191 [#3200]: https://github.com/bytedance/deer-flow/pull/3200 [#3228]: https://github.com/bytedance/deer-flow/pull/3228 [#3233]: https://github.com/bytedance/deer-flow/pull/3233 @@ -510,18 +775,21 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#3313]: https://github.com/bytedance/deer-flow/pull/3313 [#3335]: https://github.com/bytedance/deer-flow/pull/3335 [#3342]: https://github.com/bytedance/deer-flow/pull/3342 +[#3377]: https://github.com/bytedance/deer-flow/pull/3377 [#3393]: https://github.com/bytedance/deer-flow/pull/3393 [#3397]: https://github.com/bytedance/deer-flow/pull/3397 [#3398]: https://github.com/bytedance/deer-flow/pull/3398 [#3408]: https://github.com/bytedance/deer-flow/pull/3408 [#3410]: https://github.com/bytedance/deer-flow/pull/3410 [#3411]: https://github.com/bytedance/deer-flow/pull/3411 +[#3412]: https://github.com/bytedance/deer-flow/pull/3412 [#3413]: https://github.com/bytedance/deer-flow/pull/3413 [#3417]: https://github.com/bytedance/deer-flow/pull/3417 [#3421]: https://github.com/bytedance/deer-flow/pull/3421 [#3423]: https://github.com/bytedance/deer-flow/pull/3423 [#3425]: https://github.com/bytedance/deer-flow/pull/3425 [#3426]: https://github.com/bytedance/deer-flow/pull/3426 +[#3428]: https://github.com/bytedance/deer-flow/pull/3428 [#3430]: https://github.com/bytedance/deer-flow/pull/3430 [#3433]: https://github.com/bytedance/deer-flow/pull/3433 [#3434]: https://github.com/bytedance/deer-flow/pull/3434 @@ -553,6 +821,7 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#3502]: https://github.com/bytedance/deer-flow/pull/3502 [#3503]: https://github.com/bytedance/deer-flow/pull/3503 [#3505]: https://github.com/bytedance/deer-flow/pull/3505 +[#3506]: https://github.com/bytedance/deer-flow/pull/3506 [#3508]: https://github.com/bytedance/deer-flow/pull/3508 [#3512]: https://github.com/bytedance/deer-flow/pull/3512 [#3514]: https://github.com/bytedance/deer-flow/pull/3514 @@ -568,12 +837,18 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#3534]: https://github.com/bytedance/deer-flow/pull/3534 [#3535]: https://github.com/bytedance/deer-flow/pull/3535 [#3548]: https://github.com/bytedance/deer-flow/pull/3548 +[#3551]: https://github.com/bytedance/deer-flow/pull/3551 [#3553]: https://github.com/bytedance/deer-flow/pull/3553 [#3554]: https://github.com/bytedance/deer-flow/pull/3554 +[#3556]: https://github.com/bytedance/deer-flow/pull/3556 +[#3557]: https://github.com/bytedance/deer-flow/pull/3557 [#3559]: https://github.com/bytedance/deer-flow/pull/3559 [#3561]: https://github.com/bytedance/deer-flow/pull/3561 +[#3562]: https://github.com/bytedance/deer-flow/pull/3562 +[#3566]: https://github.com/bytedance/deer-flow/pull/3566 [#3569]: https://github.com/bytedance/deer-flow/pull/3569 [#3570]: https://github.com/bytedance/deer-flow/pull/3570 +[#3573]: https://github.com/bytedance/deer-flow/pull/3573 [#3575]: https://github.com/bytedance/deer-flow/pull/3575 [#3577]: https://github.com/bytedance/deer-flow/pull/3577 [#3578]: https://github.com/bytedance/deer-flow/pull/3578 @@ -583,9 +858,13 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#3582]: https://github.com/bytedance/deer-flow/pull/3582 [#3583]: https://github.com/bytedance/deer-flow/pull/3583 [#3584]: https://github.com/bytedance/deer-flow/pull/3584 +[#3585]: https://github.com/bytedance/deer-flow/pull/3585 +[#3590]: https://github.com/bytedance/deer-flow/pull/3590 [#3591]: https://github.com/bytedance/deer-flow/pull/3591 +[#3592]: https://github.com/bytedance/deer-flow/pull/3592 [#3599]: https://github.com/bytedance/deer-flow/pull/3599 [#3600]: https://github.com/bytedance/deer-flow/pull/3600 +[#3601]: https://github.com/bytedance/deer-flow/pull/3601 [#3602]: https://github.com/bytedance/deer-flow/pull/3602 [#3605]: https://github.com/bytedance/deer-flow/pull/3605 [#3606]: https://github.com/bytedance/deer-flow/pull/3606 @@ -594,15 +873,217 @@ with **180 merged pull requests** since the first 2.0 milestone tag. [#3611]: https://github.com/bytedance/deer-flow/pull/3611 [#3623]: https://github.com/bytedance/deer-flow/pull/3623 [#3624]: https://github.com/bytedance/deer-flow/pull/3624 +[#3627]: https://github.com/bytedance/deer-flow/pull/3627 [#3629]: https://github.com/bytedance/deer-flow/pull/3629 [#3631]: https://github.com/bytedance/deer-flow/pull/3631 +[#3637]: https://github.com/bytedance/deer-flow/pull/3637 +[#3644]: https://github.com/bytedance/deer-flow/pull/3644 [#3646]: https://github.com/bytedance/deer-flow/pull/3646 +[#3648]: https://github.com/bytedance/deer-flow/pull/3648 [#3649]: https://github.com/bytedance/deer-flow/pull/3649 +[#3651]: https://github.com/bytedance/deer-flow/pull/3651 [#3654]: https://github.com/bytedance/deer-flow/pull/3654 [#3657]: https://github.com/bytedance/deer-flow/pull/3657 [#3658]: https://github.com/bytedance/deer-flow/pull/3658 +[#3661]: https://github.com/bytedance/deer-flow/pull/3661 +[#3662]: https://github.com/bytedance/deer-flow/pull/3662 +[#3663]: https://github.com/bytedance/deer-flow/pull/3663 +[#3665]: https://github.com/bytedance/deer-flow/pull/3665 +[#3673]: https://github.com/bytedance/deer-flow/pull/3673 +[#3674]: https://github.com/bytedance/deer-flow/pull/3674 +[#3675]: https://github.com/bytedance/deer-flow/pull/3675 +[#3685]: https://github.com/bytedance/deer-flow/pull/3685 +[#3686]: https://github.com/bytedance/deer-flow/pull/3686 +[#3687]: https://github.com/bytedance/deer-flow/pull/3687 +[#3698]: https://github.com/bytedance/deer-flow/pull/3698 +[#3709]: https://github.com/bytedance/deer-flow/pull/3709 +[#3711]: https://github.com/bytedance/deer-flow/pull/3711 +[#3713]: https://github.com/bytedance/deer-flow/pull/3713 +[#3714]: https://github.com/bytedance/deer-flow/pull/3714 +[#3718]: https://github.com/bytedance/deer-flow/pull/3718 +[#3719]: https://github.com/bytedance/deer-flow/pull/3719 +[#3729]: https://github.com/bytedance/deer-flow/pull/3729 +[#3730]: https://github.com/bytedance/deer-flow/pull/3730 +[#3733]: https://github.com/bytedance/deer-flow/pull/3733 +[#3740]: https://github.com/bytedance/deer-flow/pull/3740 +[#3753]: https://github.com/bytedance/deer-flow/pull/3753 +[#3760]: https://github.com/bytedance/deer-flow/pull/3760 +[#3764]: https://github.com/bytedance/deer-flow/pull/3764 +[#3768]: https://github.com/bytedance/deer-flow/pull/3768 +[#3769]: https://github.com/bytedance/deer-flow/pull/3769 +[#3770]: https://github.com/bytedance/deer-flow/pull/3770 +[#3772]: https://github.com/bytedance/deer-flow/pull/3772 +[#3775]: https://github.com/bytedance/deer-flow/pull/3775 +[#3786]: https://github.com/bytedance/deer-flow/pull/3786 +[#3790]: https://github.com/bytedance/deer-flow/pull/3790 +[#3791]: https://github.com/bytedance/deer-flow/pull/3791 +[#3797]: https://github.com/bytedance/deer-flow/pull/3797 +[#3800]: https://github.com/bytedance/deer-flow/pull/3800 +[#3809]: https://github.com/bytedance/deer-flow/pull/3809 +[#3810]: https://github.com/bytedance/deer-flow/pull/3810 +[#3812]: https://github.com/bytedance/deer-flow/pull/3812 +[#3821]: https://github.com/bytedance/deer-flow/pull/3821 +[#3826]: https://github.com/bytedance/deer-flow/pull/3826 +[#3828]: https://github.com/bytedance/deer-flow/pull/3828 +[#3837]: https://github.com/bytedance/deer-flow/pull/3837 +[#3843]: https://github.com/bytedance/deer-flow/pull/3843 +[#3845]: https://github.com/bytedance/deer-flow/pull/3845 +[#3854]: https://github.com/bytedance/deer-flow/pull/3854 +[#3855]: https://github.com/bytedance/deer-flow/pull/3855 +[#3856]: https://github.com/bytedance/deer-flow/pull/3856 +[#3858]: https://github.com/bytedance/deer-flow/pull/3858 +[#3860]: https://github.com/bytedance/deer-flow/pull/3860 +[#3866]: https://github.com/bytedance/deer-flow/pull/3866 +[#3869]: https://github.com/bytedance/deer-flow/pull/3869 +[#3870]: https://github.com/bytedance/deer-flow/pull/3870 +[#3871]: https://github.com/bytedance/deer-flow/pull/3871 +[#3872]: https://github.com/bytedance/deer-flow/pull/3872 +[#3874]: https://github.com/bytedance/deer-flow/pull/3874 +[#3877]: https://github.com/bytedance/deer-flow/pull/3877 +[#3878]: https://github.com/bytedance/deer-flow/pull/3878 +[#3880]: https://github.com/bytedance/deer-flow/pull/3880 +[#3881]: https://github.com/bytedance/deer-flow/pull/3881 +[#3883]: https://github.com/bytedance/deer-flow/pull/3883 +[#3885]: https://github.com/bytedance/deer-flow/pull/3885 +[#3886]: https://github.com/bytedance/deer-flow/pull/3886 +[#3887]: https://github.com/bytedance/deer-flow/pull/3887 +[#3889]: https://github.com/bytedance/deer-flow/pull/3889 +[#3897]: https://github.com/bytedance/deer-flow/pull/3897 +[#3900]: https://github.com/bytedance/deer-flow/pull/3900 +[#3902]: https://github.com/bytedance/deer-flow/pull/3902 +[#3904]: https://github.com/bytedance/deer-flow/pull/3904 +[#3906]: https://github.com/bytedance/deer-flow/pull/3906 +[#3907]: https://github.com/bytedance/deer-flow/pull/3907 +[#3908]: https://github.com/bytedance/deer-flow/pull/3908 +[#3912]: https://github.com/bytedance/deer-flow/pull/3912 +[#3917]: https://github.com/bytedance/deer-flow/pull/3917 +[#3920]: https://github.com/bytedance/deer-flow/pull/3920 +[#3924]: https://github.com/bytedance/deer-flow/pull/3924 +[#3926]: https://github.com/bytedance/deer-flow/pull/3926 +[#3927]: https://github.com/bytedance/deer-flow/pull/3927 +[#3928]: https://github.com/bytedance/deer-flow/pull/3928 +[#3931]: https://github.com/bytedance/deer-flow/pull/3931 +[#3934]: https://github.com/bytedance/deer-flow/pull/3934 +[#3935]: https://github.com/bytedance/deer-flow/pull/3935 +[#3938]: https://github.com/bytedance/deer-flow/pull/3938 +[#3940]: https://github.com/bytedance/deer-flow/pull/3940 +[#3941]: https://github.com/bytedance/deer-flow/pull/3941 +[#3942]: https://github.com/bytedance/deer-flow/pull/3942 +[#3944]: https://github.com/bytedance/deer-flow/pull/3944 +[#3945]: https://github.com/bytedance/deer-flow/pull/3945 +[#3949]: https://github.com/bytedance/deer-flow/pull/3949 +[#3950]: https://github.com/bytedance/deer-flow/pull/3950 +[#3951]: https://github.com/bytedance/deer-flow/pull/3951 +[#3956]: https://github.com/bytedance/deer-flow/pull/3956 +[#3959]: https://github.com/bytedance/deer-flow/pull/3959 +[#3961]: https://github.com/bytedance/deer-flow/pull/3961 +[#3966]: https://github.com/bytedance/deer-flow/pull/3966 +[#3967]: https://github.com/bytedance/deer-flow/pull/3967 +[#3969]: https://github.com/bytedance/deer-flow/pull/3969 +[#3976]: https://github.com/bytedance/deer-flow/pull/3976 +[#3980]: https://github.com/bytedance/deer-flow/pull/3980 +[#3982]: https://github.com/bytedance/deer-flow/pull/3982 +[#3985]: https://github.com/bytedance/deer-flow/pull/3985 +[#3986]: https://github.com/bytedance/deer-flow/pull/3986 +[#3988]: https://github.com/bytedance/deer-flow/pull/3988 +[#3989]: https://github.com/bytedance/deer-flow/pull/3989 +[#3990]: https://github.com/bytedance/deer-flow/pull/3990 +[#3991]: https://github.com/bytedance/deer-flow/pull/3991 +[#3992]: https://github.com/bytedance/deer-flow/pull/3992 +[#3993]: https://github.com/bytedance/deer-flow/pull/3993 +[#3994]: https://github.com/bytedance/deer-flow/pull/3994 +[#3996]: https://github.com/bytedance/deer-flow/pull/3996 +[#4003]: https://github.com/bytedance/deer-flow/pull/4003 +[#4004]: https://github.com/bytedance/deer-flow/pull/4004 +[#4008]: https://github.com/bytedance/deer-flow/pull/4008 +[#4009]: https://github.com/bytedance/deer-flow/pull/4009 +[#4012]: https://github.com/bytedance/deer-flow/pull/4012 +[#4016]: https://github.com/bytedance/deer-flow/pull/4016 +[#4017]: https://github.com/bytedance/deer-flow/pull/4017 +[#4018]: https://github.com/bytedance/deer-flow/pull/4018 +[#4023]: https://github.com/bytedance/deer-flow/pull/4023 +[#4024]: https://github.com/bytedance/deer-flow/pull/4024 +[#4026]: https://github.com/bytedance/deer-flow/pull/4026 +[#4028]: https://github.com/bytedance/deer-flow/pull/4028 +[#4033]: https://github.com/bytedance/deer-flow/pull/4033 +[#4034]: https://github.com/bytedance/deer-flow/pull/4034 +[#4035]: https://github.com/bytedance/deer-flow/pull/4035 +[#4036]: https://github.com/bytedance/deer-flow/pull/4036 +[#4038]: https://github.com/bytedance/deer-flow/pull/4038 +[#4040]: https://github.com/bytedance/deer-flow/pull/4040 +[#4051]: https://github.com/bytedance/deer-flow/pull/4051 +[#4052]: https://github.com/bytedance/deer-flow/pull/4052 +[#4053]: https://github.com/bytedance/deer-flow/pull/4053 +[#4055]: https://github.com/bytedance/deer-flow/pull/4055 +[#4058]: https://github.com/bytedance/deer-flow/pull/4058 +[#4059]: https://github.com/bytedance/deer-flow/pull/4059 +[#4060]: https://github.com/bytedance/deer-flow/pull/4060 +[#4064]: https://github.com/bytedance/deer-flow/pull/4064 +[#4065]: https://github.com/bytedance/deer-flow/pull/4065 +[#4067]: https://github.com/bytedance/deer-flow/pull/4067 +[#4069]: https://github.com/bytedance/deer-flow/pull/4069 +[#4072]: https://github.com/bytedance/deer-flow/pull/4072 +[#4073]: https://github.com/bytedance/deer-flow/pull/4073 +[#4074]: https://github.com/bytedance/deer-flow/pull/4074 +[#4076]: https://github.com/bytedance/deer-flow/pull/4076 +[#4077]: https://github.com/bytedance/deer-flow/pull/4077 +[#4078]: https://github.com/bytedance/deer-flow/pull/4078 +[#4079]: https://github.com/bytedance/deer-flow/pull/4079 +[#4080]: https://github.com/bytedance/deer-flow/pull/4080 +[#4082]: https://github.com/bytedance/deer-flow/pull/4082 +[#4085]: https://github.com/bytedance/deer-flow/pull/4085 +[#4090]: https://github.com/bytedance/deer-flow/pull/4090 +[#4094]: https://github.com/bytedance/deer-flow/pull/4094 [#4095]: https://github.com/bytedance/deer-flow/issues/4095 +[#4096]: https://github.com/bytedance/deer-flow/pull/4096 [#4098]: https://github.com/bytedance/deer-flow/pull/4098 +[#4099]: https://github.com/bytedance/deer-flow/pull/4099 +[#4100]: https://github.com/bytedance/deer-flow/pull/4100 +[#4102]: https://github.com/bytedance/deer-flow/pull/4102 +[#4103]: https://github.com/bytedance/deer-flow/pull/4103 +[#4104]: https://github.com/bytedance/deer-flow/pull/4104 +[#4108]: https://github.com/bytedance/deer-flow/pull/4108 +[#4114]: https://github.com/bytedance/deer-flow/pull/4114 +[#4115]: https://github.com/bytedance/deer-flow/pull/4115 +[#4118]: https://github.com/bytedance/deer-flow/pull/4118 +[#4119]: https://github.com/bytedance/deer-flow/pull/4119 +[#4122]: https://github.com/bytedance/deer-flow/pull/4122 +[#4124]: https://github.com/bytedance/deer-flow/pull/4124 +[#4129]: https://github.com/bytedance/deer-flow/pull/4129 +[#4130]: https://github.com/bytedance/deer-flow/pull/4130 +[#4131]: https://github.com/bytedance/deer-flow/pull/4131 +[#4136]: https://github.com/bytedance/deer-flow/pull/4136 +[#4137]: https://github.com/bytedance/deer-flow/pull/4137 +[#4140]: https://github.com/bytedance/deer-flow/pull/4140 +[#4141]: https://github.com/bytedance/deer-flow/pull/4141 +[#4143]: https://github.com/bytedance/deer-flow/pull/4143 [#4146]: https://github.com/bytedance/deer-flow/pull/4146 +[#4147]: https://github.com/bytedance/deer-flow/pull/4147 +[#4154]: https://github.com/bytedance/deer-flow/pull/4154 +[#4155]: https://github.com/bytedance/deer-flow/pull/4155 +[#4157]: https://github.com/bytedance/deer-flow/pull/4157 +[#4160]: https://github.com/bytedance/deer-flow/pull/4160 +[#4161]: https://github.com/bytedance/deer-flow/pull/4161 +[#4162]: https://github.com/bytedance/deer-flow/pull/4162 +[#4166]: https://github.com/bytedance/deer-flow/pull/4166 +[#4169]: https://github.com/bytedance/deer-flow/pull/4169 +[#4181]: https://github.com/bytedance/deer-flow/pull/4181 +[#4188]: https://github.com/bytedance/deer-flow/pull/4188 [#4190]: https://github.com/bytedance/deer-flow/pull/4190 [#4192]: https://github.com/bytedance/deer-flow/issues/4192 +[#4193]: https://github.com/bytedance/deer-flow/pull/4193 +[#4199]: https://github.com/bytedance/deer-flow/pull/4199 +[#4202]: https://github.com/bytedance/deer-flow/pull/4202 +[#4203]: https://github.com/bytedance/deer-flow/pull/4203 +[#4209]: https://github.com/bytedance/deer-flow/pull/4209 +[#4215]: https://github.com/bytedance/deer-flow/pull/4215 +[#4217]: https://github.com/bytedance/deer-flow/pull/4217 +[#4218]: https://github.com/bytedance/deer-flow/pull/4218 +[#4219]: https://github.com/bytedance/deer-flow/pull/4219 +[#4222]: https://github.com/bytedance/deer-flow/pull/4222 +[#4229]: https://github.com/bytedance/deer-flow/pull/4229 +[#4235]: https://github.com/bytedance/deer-flow/pull/4235 +[#4245]: https://github.com/bytedance/deer-flow/pull/4245 +[#4246]: https://github.com/bytedance/deer-flow/pull/4246 +[#4251]: https://github.com/bytedance/deer-flow/pull/4251 +[#4264]: https://github.com/bytedance/deer-flow/pull/4264