mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-11-13 06:31:47 +00:00
* feat(hitl): add human-in-the-loop approval for high-risk tool calls * fix(hitl): address approval review findings * docs(hitl): keep agent guidance under size limit * fix(hitl): guard approval pause recovery * docs(hitl): shrink inherited guidance * fix(hitl): harden approval admission and recovery * fix(approvals): address review safety and reconciliation gaps * ci: retry approval checks after runner timeout --------- Co-authored-by: wangzeren <1004695029@qq.com>
3.7 KiB
3.7 KiB
Backend (backend/)
The Python backend: the publishable harness in packages/harness/deerflow/, the
public extension contract in packages/extension-api/, and the unpublished
Gateway and IM channels in app/. In every deployment the agent runtime runs
inside the Gateway. Design docs are in docs/; start with
ARCHITECTURE.md and API.md.
Guides by area
Read the guide for an area before you change it.
| Area | Guide |
|---|---|
| Run streaming, checkpoints, run ownership | runtime |
| Repositories, leases, scheduled tasks, schema changes | persistence, migrations |
config.yaml, extensions_config.json |
config |
| Lead agent, prompt, thread state, middleware chain | agents, middlewares |
| Memory, subagents, skills, tools | memory, subagents, skills, tools |
| Sandbox, uploads, MCP, models, extensions | sandbox, uploads, mcp, models, extensions |
| Trace ID, embedded client, other root modules | harness package |
| Search, fetch and sandbox providers | community, then the provider's own guide |
| Gateway, routers, IM channels | gateway, routers, channels |
| Tests, benchmarks | tests, benchmarks |
Verify
make test # offline suite in parallel shards
make test-blocking-io # strict blocking-I/O suite
make lint
make format
make test-live # calls real APIs; needs DEER_FLOW_RUN_LIVE_TESTS=1
Run make test and make test-blocking-io before and after a change. Every
feature and bug fix ships with a test in tests/. Live tests stay opt-in, so the
default suite needs no network and no API key.
Rules
- The harness never imports
app.app.*importsdeerflow.*, and not the reverse, because the harness is published on its own.tests/test_harness_boundary.pyenforces this in CI. - Start the Gateway with
make devormake gateway.make devexcludesDEER_FLOW_HOMEandbackend/sandboxfrom the reload watcher. A bareuvicorn --reloadrestarts the Gateway during a run, because agent tasks write Python files belowDEER_FLOW_HOME. - From the repository root, run backend tools with
uv run --no-sync --project backend.--projectkeeps the caller's working directory, so relative config paths still resolve.--no-synckeeps installed extras such as the PostgreSQL drivers. - Run Python through
uv runinsidebackend/, without--no-sync, so the environment matches the lock. - Guard POSIX-only test markers with
os.name. Windows collects the same files. - Tool approvals need addressable calls. Strip missing, empty and duplicate tool-call IDs before creating a pause or a tool result. See the run interaction policy.
- Add a schema change with
make migrate-rev MSG="..."and follow the migrations guide.