mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-08-06 21:08:43 +00:00
doc(changelog): updated the changelog with latest changes (#4270)
This commit is contained in:
parent
c9b6131f8f
commit
208df4931d
565
CHANGELOG.md
565
CHANGELOG.md
@ -7,6 +7,146 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [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
|
### Changed
|
||||||
|
|
||||||
- **sandbox:** The Helm chart now defaults per-sandbox Services to `ClusterIP`
|
- **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`
|
where the gateway is not in K8s), set `provisioner.sandboxServiceType: NodePort`
|
||||||
(with `provisioner.nodeHost` if needed). The provisioner itself is unchanged
|
(with `provisioner.nodeHost` if needed). The provisioner itself is unchanged
|
||||||
(mode-aware since #4016). ([#4190])
|
(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
|
- **skills:** An active restrictive skill must explicitly list `task` in
|
||||||
`allowed-tools` to delegate to a subagent. Read-only discovery infrastructure
|
`allowed-tools` to delegate to a subagent. Read-only discovery infrastructure
|
||||||
(`tool_search` and `describe_skill`) remains available, but cannot grant schema
|
(`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
|
into `backend_config`** on load with a warning, so an upgrade does NOT silently
|
||||||
revert customized settings to defaults (`model_name` ->
|
revert customized settings to defaults (`model_name` ->
|
||||||
`backend_config.model.model`). Move them under `memory.backend_config` in
|
`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:** Added `memory.mode` (`middleware` | `tool`); `tool` mode registers
|
||||||
memory tools (`memory_search`/`add`/`update`/`delete`) the model calls directly
|
memory tools (`memory_search`/`add`/`update`/`delete`) the model calls directly
|
||||||
instead of passive per-turn summarization. `manager_class` resolution is now
|
instead of passive per-turn summarization. `manager_class` resolution is now
|
||||||
fail-fast (raises `ValueError` on an unknown backend instead of silently
|
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
|
### 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
|
not just `ChatOpenAI` / `PatchedChatOpenAI`. Those five previously dropped the
|
||||||
configured endpoint silently and then failed every request with an opaque
|
configured endpoint silently and then failed every request with an opaque
|
||||||
`unexpected keyword argument 'api_base'`; the unknown-config-key warning was
|
`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 `<memory>` 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
|
## [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])
|
label thrash. ([#3455])
|
||||||
|
|
||||||
[2.0.0]: https://github.com/bytedance/deer-flow/releases/tag/v2.0.0
|
[2.0.0]: https://github.com/bytedance/deer-flow/releases/tag/v2.0.0
|
||||||
|
|
||||||
[#2329]: https://github.com/bytedance/deer-flow/pull/2329
|
[#2329]: https://github.com/bytedance/deer-flow/pull/2329
|
||||||
[#2556]: https://github.com/bytedance/deer-flow/pull/2556
|
[#2556]: https://github.com/bytedance/deer-flow/pull/2556
|
||||||
[#2582]: https://github.com/bytedance/deer-flow/pull/2582
|
[#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
|
[#2989]: https://github.com/bytedance/deer-flow/pull/2989
|
||||||
[#3002]: https://github.com/bytedance/deer-flow/pull/3002
|
[#3002]: https://github.com/bytedance/deer-flow/pull/3002
|
||||||
[#3005]: https://github.com/bytedance/deer-flow/pull/3005
|
[#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
|
[#3058]: https://github.com/bytedance/deer-flow/pull/3058
|
||||||
[#3069]: https://github.com/bytedance/deer-flow/pull/3069
|
[#3069]: https://github.com/bytedance/deer-flow/pull/3069
|
||||||
[#3074]: https://github.com/bytedance/deer-flow/pull/3074
|
[#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
|
[#3153]: https://github.com/bytedance/deer-flow/pull/3153
|
||||||
[#3174]: https://github.com/bytedance/deer-flow/pull/3174
|
[#3174]: https://github.com/bytedance/deer-flow/pull/3174
|
||||||
[#3176]: https://github.com/bytedance/deer-flow/pull/3176
|
[#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
|
[#3200]: https://github.com/bytedance/deer-flow/pull/3200
|
||||||
[#3228]: https://github.com/bytedance/deer-flow/pull/3228
|
[#3228]: https://github.com/bytedance/deer-flow/pull/3228
|
||||||
[#3233]: https://github.com/bytedance/deer-flow/pull/3233
|
[#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
|
[#3313]: https://github.com/bytedance/deer-flow/pull/3313
|
||||||
[#3335]: https://github.com/bytedance/deer-flow/pull/3335
|
[#3335]: https://github.com/bytedance/deer-flow/pull/3335
|
||||||
[#3342]: https://github.com/bytedance/deer-flow/pull/3342
|
[#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
|
[#3393]: https://github.com/bytedance/deer-flow/pull/3393
|
||||||
[#3397]: https://github.com/bytedance/deer-flow/pull/3397
|
[#3397]: https://github.com/bytedance/deer-flow/pull/3397
|
||||||
[#3398]: https://github.com/bytedance/deer-flow/pull/3398
|
[#3398]: https://github.com/bytedance/deer-flow/pull/3398
|
||||||
[#3408]: https://github.com/bytedance/deer-flow/pull/3408
|
[#3408]: https://github.com/bytedance/deer-flow/pull/3408
|
||||||
[#3410]: https://github.com/bytedance/deer-flow/pull/3410
|
[#3410]: https://github.com/bytedance/deer-flow/pull/3410
|
||||||
[#3411]: https://github.com/bytedance/deer-flow/pull/3411
|
[#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
|
[#3413]: https://github.com/bytedance/deer-flow/pull/3413
|
||||||
[#3417]: https://github.com/bytedance/deer-flow/pull/3417
|
[#3417]: https://github.com/bytedance/deer-flow/pull/3417
|
||||||
[#3421]: https://github.com/bytedance/deer-flow/pull/3421
|
[#3421]: https://github.com/bytedance/deer-flow/pull/3421
|
||||||
[#3423]: https://github.com/bytedance/deer-flow/pull/3423
|
[#3423]: https://github.com/bytedance/deer-flow/pull/3423
|
||||||
[#3425]: https://github.com/bytedance/deer-flow/pull/3425
|
[#3425]: https://github.com/bytedance/deer-flow/pull/3425
|
||||||
[#3426]: https://github.com/bytedance/deer-flow/pull/3426
|
[#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
|
[#3430]: https://github.com/bytedance/deer-flow/pull/3430
|
||||||
[#3433]: https://github.com/bytedance/deer-flow/pull/3433
|
[#3433]: https://github.com/bytedance/deer-flow/pull/3433
|
||||||
[#3434]: https://github.com/bytedance/deer-flow/pull/3434
|
[#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
|
[#3502]: https://github.com/bytedance/deer-flow/pull/3502
|
||||||
[#3503]: https://github.com/bytedance/deer-flow/pull/3503
|
[#3503]: https://github.com/bytedance/deer-flow/pull/3503
|
||||||
[#3505]: https://github.com/bytedance/deer-flow/pull/3505
|
[#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
|
[#3508]: https://github.com/bytedance/deer-flow/pull/3508
|
||||||
[#3512]: https://github.com/bytedance/deer-flow/pull/3512
|
[#3512]: https://github.com/bytedance/deer-flow/pull/3512
|
||||||
[#3514]: https://github.com/bytedance/deer-flow/pull/3514
|
[#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
|
[#3534]: https://github.com/bytedance/deer-flow/pull/3534
|
||||||
[#3535]: https://github.com/bytedance/deer-flow/pull/3535
|
[#3535]: https://github.com/bytedance/deer-flow/pull/3535
|
||||||
[#3548]: https://github.com/bytedance/deer-flow/pull/3548
|
[#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
|
[#3553]: https://github.com/bytedance/deer-flow/pull/3553
|
||||||
[#3554]: https://github.com/bytedance/deer-flow/pull/3554
|
[#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
|
[#3559]: https://github.com/bytedance/deer-flow/pull/3559
|
||||||
[#3561]: https://github.com/bytedance/deer-flow/pull/3561
|
[#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
|
[#3569]: https://github.com/bytedance/deer-flow/pull/3569
|
||||||
[#3570]: https://github.com/bytedance/deer-flow/pull/3570
|
[#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
|
[#3575]: https://github.com/bytedance/deer-flow/pull/3575
|
||||||
[#3577]: https://github.com/bytedance/deer-flow/pull/3577
|
[#3577]: https://github.com/bytedance/deer-flow/pull/3577
|
||||||
[#3578]: https://github.com/bytedance/deer-flow/pull/3578
|
[#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
|
[#3582]: https://github.com/bytedance/deer-flow/pull/3582
|
||||||
[#3583]: https://github.com/bytedance/deer-flow/pull/3583
|
[#3583]: https://github.com/bytedance/deer-flow/pull/3583
|
||||||
[#3584]: https://github.com/bytedance/deer-flow/pull/3584
|
[#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
|
[#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
|
[#3599]: https://github.com/bytedance/deer-flow/pull/3599
|
||||||
[#3600]: https://github.com/bytedance/deer-flow/pull/3600
|
[#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
|
[#3602]: https://github.com/bytedance/deer-flow/pull/3602
|
||||||
[#3605]: https://github.com/bytedance/deer-flow/pull/3605
|
[#3605]: https://github.com/bytedance/deer-flow/pull/3605
|
||||||
[#3606]: https://github.com/bytedance/deer-flow/pull/3606
|
[#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
|
[#3611]: https://github.com/bytedance/deer-flow/pull/3611
|
||||||
[#3623]: https://github.com/bytedance/deer-flow/pull/3623
|
[#3623]: https://github.com/bytedance/deer-flow/pull/3623
|
||||||
[#3624]: https://github.com/bytedance/deer-flow/pull/3624
|
[#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
|
[#3629]: https://github.com/bytedance/deer-flow/pull/3629
|
||||||
[#3631]: https://github.com/bytedance/deer-flow/pull/3631
|
[#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
|
[#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
|
[#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
|
[#3654]: https://github.com/bytedance/deer-flow/pull/3654
|
||||||
[#3657]: https://github.com/bytedance/deer-flow/pull/3657
|
[#3657]: https://github.com/bytedance/deer-flow/pull/3657
|
||||||
[#3658]: https://github.com/bytedance/deer-flow/pull/3658
|
[#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
|
[#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
|
[#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
|
[#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
|
[#4190]: https://github.com/bytedance/deer-flow/pull/4190
|
||||||
[#4192]: https://github.com/bytedance/deer-flow/issues/4192
|
[#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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user