mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-07-21 10:15:47 +00:00
doc(changelog): updated the changelog with latest changes (#4270)
This commit is contained in:
+523
-42
@@ -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 `<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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user