mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-09-09 21:49:37 +00:00
feat: integrate MiniMax Code as a native ACP agent (#4846)
* feat: integrate MiniMax Code as an ACP agent * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Willem Jiang <willem.jiang@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
parent
a181c3398b
commit
062ba9ddfc
17
README.md
17
README.md
@ -210,6 +210,23 @@ That prompt is intended for coding agents. It tells the agent to clone the repo
|
||||
- Codex CLI reads `~/.codex/auth.json`
|
||||
- Claude Code accepts `CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_AUTH_TOKEN`, `CLAUDE_CODE_CREDENTIALS_PATH`, or `~/.claude/.credentials.json`
|
||||
- ACP agent entries are separate from model providers — if you configure `acp_agents.codex`, point it at a Codex ACP adapter such as `npx -y @zed-industries/codex-acp`
|
||||
- MiniMax Code speaks ACP directly. Install and authenticate it, then add it as an ACP agent:
|
||||
|
||||
```bash
|
||||
npm install --global @minimax-ai/code
|
||||
mcode login
|
||||
```
|
||||
|
||||
```yaml
|
||||
acp_agents:
|
||||
mcode:
|
||||
command: mcode
|
||||
args: ["acp"]
|
||||
description: MiniMax Code for implementation, refactoring, debugging, and repository tasks
|
||||
auto_approve_permissions: false
|
||||
```
|
||||
|
||||
`mcode` must be on the Gateway process's `PATH`; installing it only on the Docker host does not make it available inside the Gateway container. DeerFlow invokes it through `invoke_acp_agent` in a per-thread ACP workspace and forwards enabled MCP servers. Keep `auto_approve_permissions: false` for untrusted tasks; enable it only when MCode must edit files or run commands and you trust the task.
|
||||
- On macOS, export Claude Code auth explicitly if needed:
|
||||
|
||||
```bash
|
||||
|
||||
17
README_zh.md
17
README_zh.md
@ -196,6 +196,23 @@ DeerFlow 新近集成了 BytePlus 自研的智能搜索与抓取工具集——[
|
||||
- Codex CLI 会读取 `~/.codex/auth.json`
|
||||
- Claude Code 支持 `CLAUDE_CODE_OAUTH_TOKEN`、`ANTHROPIC_AUTH_TOKEN`、`CLAUDE_CODE_CREDENTIALS_PATH`,或 `~/.claude/.credentials.json`
|
||||
- ACP agent 条目与 model provider 是分开配置的——如果你配置了 `acp_agents.codex`,请把它指向一个 Codex ACP 适配器,例如 `npx -y @zed-industries/codex-acp`
|
||||
- MiniMax Code 原生支持 ACP,不需要额外适配器。先安装并登录,再把它配置成 ACP agent:
|
||||
|
||||
```bash
|
||||
npm install --global @minimax-ai/code
|
||||
mcode login
|
||||
```
|
||||
|
||||
```yaml
|
||||
acp_agents:
|
||||
mcode:
|
||||
command: mcode
|
||||
args: ["acp"]
|
||||
description: MiniMax Code for implementation, refactoring, debugging, and repository tasks
|
||||
auto_approve_permissions: false
|
||||
```
|
||||
|
||||
`mcode` 必须位于 Gateway 进程的 `PATH` 中;只安装在 Docker host 上并不会让 Gateway 容器内可用。DeerFlow 会通过 `invoke_acp_agent` 在每个 thread 独立的 ACP workspace 中调用 MCode,并转发已启用的 MCP server。处理不可信任务时请保持 `auto_approve_permissions: false`;只有在任务可信且确实需要 MCode 修改文件或执行命令时才启用它。
|
||||
- 在 macOS 上,如有需要可显式导出 Claude Code 的认证信息:
|
||||
|
||||
```bash
|
||||
|
||||
@ -742,7 +742,7 @@ To keep this off the default attack surface:
|
||||
> for CLI auto-auth in **all** modes. These hold long-lived CLI credentials;
|
||||
> scope or omit them when the gateway runs untrusted workloads.
|
||||
|
||||
### CLI Credential Mounts (Claude Code / Codex)
|
||||
### CLI Credential Mounts (Claude Code / Codex / MiniMax Code)
|
||||
|
||||
DeerFlow can reuse your Claude Code / Codex CLI subscription login as a model
|
||||
provider (`ClaudeChatModel`, the Codex provider) or for ACP agents that run the
|
||||
@ -771,6 +771,16 @@ adapter's documented env auth, and reach for the
|
||||
`docker-compose.cli-auth.yaml` overlay only as a fallback for an adapter that
|
||||
genuinely reads the full CLI config directory.
|
||||
|
||||
MiniMax Code is a native ACP agent, so it does not need an adapter. For local
|
||||
Gateway runs, install it with `npm install --global @minimax-ai/code`, run
|
||||
`mcode login`, and configure `acp_agents.mcode` with `command: mcode` and
|
||||
`args: ["acp"]`. The executable and its authenticated runtime must be available
|
||||
inside the Gateway environment; a host-only installation is not visible to a
|
||||
Docker container. DeerFlow forwards enabled MCP servers to the MCode session.
|
||||
Leave `auto_approve_permissions` disabled for untrusted tasks, and enable it
|
||||
only when the agent is expected to edit files or run commands for a trusted
|
||||
task.
|
||||
|
||||
|
||||
## Best Practices
|
||||
|
||||
|
||||
@ -31,5 +31,7 @@ E2B output sync records remote file versions and actual host file metadata in a
|
||||
**ACP agent tools**:
|
||||
- `invoke_acp_agent` - Invokes external ACP-compatible agents from `config.yaml`
|
||||
- ACP launchers must be real ACP adapters. The standard `codex` CLI is not ACP-compatible by itself; configure a wrapper such as `npx -y @zed-industries/codex-acp` or an installed `codex-acp` binary
|
||||
- MiniMax Code speaks ACP directly: configure `command: mcode` with `args: ["acp"]`. It receives DeerFlow's enabled MCP servers and uses the per-thread ACP workspace; the Gateway process must have an authenticated `mcode` executable on `PATH`
|
||||
- ACP results collect only `agent_message_chunk` text. Thought chunks remain internal and must not be concatenated into the tool result
|
||||
- Missing ACP executables now return an actionable error message instead of a raw `[Errno 2]`
|
||||
- Each ACP agent uses a per-thread workspace at `{base_dir}/users/{user_id}/threads/{thread_id}/acp-workspace/`. The workspace is accessible to the lead agent via the virtual path `/mnt/acp-workspace/` (read-only). In docker sandbox mode, the directory is volume-mounted into the container at `/mnt/acp-workspace` (read-only); in local sandbox mode, path translation is handled by `tools.py`
|
||||
|
||||
@ -134,6 +134,11 @@ def _format_invocation_error(agent: str, cmd: str, exc: Exception) -> str:
|
||||
if cmd == "codex-acp" and shutil.which("codex"):
|
||||
return f"{message} The installed `codex` CLI does not speak ACP directly. Install a Codex ACP adapter (for example `npx @zed-industries/codex-acp`) or update `acp_agents.codex.command` and `args` in config.yaml."
|
||||
|
||||
if agent == "mcode":
|
||||
return (
|
||||
f"{message} Install it with `npm install --global @minimax-ai/code`, run `mcode login`, and restart DeerFlow so it inherits the updated PATH. "
|
||||
"If the Gateway runs in Docker, ensure `mcode` is installed and authenticated inside the Gateway container/image."
|
||||
)
|
||||
return f"{message} Install the agent binary or update `acp_agents.{agent}.command` in config.yaml."
|
||||
|
||||
|
||||
@ -193,7 +198,7 @@ def build_invoke_acp_agent_tool(agents: dict) -> BaseTool:
|
||||
try:
|
||||
from acp.schema import TextContentBlock
|
||||
|
||||
if hasattr(update, "content") and isinstance(update.content, TextContentBlock):
|
||||
if getattr(update, "session_update", None) == "agent_message_chunk" and isinstance(update.content, TextContentBlock):
|
||||
self._chunks.append(update.content.text)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@ -14,6 +14,7 @@ from deerflow.tools.builtins.invoke_acp_agent_tool import (
|
||||
_build_acp_mcp_servers,
|
||||
_build_mcp_servers,
|
||||
_build_permission_response,
|
||||
_format_invocation_error,
|
||||
_get_work_dir,
|
||||
build_invoke_acp_agent_tool,
|
||||
)
|
||||
@ -122,6 +123,14 @@ def test_build_permission_response_denies_when_auto_approve_false():
|
||||
assert response.outcome.outcome == "cancelled"
|
||||
|
||||
|
||||
def test_missing_mcode_command_returns_install_and_login_guidance():
|
||||
result = _format_invocation_error("mcode", "mcode", FileNotFoundError())
|
||||
|
||||
assert "npm install --global @minimax-ai/code" in result
|
||||
assert "mcode login" in result
|
||||
assert "restart DeerFlow" in result
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_build_invoke_tool_description_and_unknown_agent_error():
|
||||
tool = build_invoke_acp_agent_tool(
|
||||
@ -223,7 +232,17 @@ async def test_invoke_acp_agent_uses_fixed_acp_workspace(monkeypatch, tmp_path):
|
||||
client = captured["client"]
|
||||
await client.session_update(
|
||||
"session-1",
|
||||
SimpleNamespace(content=text_content_block("ACP result")),
|
||||
SimpleNamespace(
|
||||
session_update="agent_thought_chunk",
|
||||
content=text_content_block("internal reasoning"),
|
||||
),
|
||||
)
|
||||
await client.session_update(
|
||||
"session-1",
|
||||
SimpleNamespace(
|
||||
session_update="agent_message_chunk",
|
||||
content=text_content_block("ACP result"),
|
||||
),
|
||||
)
|
||||
|
||||
class DummyProcessContext:
|
||||
|
||||
@ -1494,6 +1494,15 @@ sandbox:
|
||||
# Configure external ACP-compatible agents for the built-in `invoke_acp_agent` tool.
|
||||
|
||||
# acp_agents:
|
||||
# mcode:
|
||||
# # MiniMax Code speaks ACP directly; no adapter package is required.
|
||||
# # Install with `npm install --global @minimax-ai/code`, then run `mcode login`.
|
||||
# command: mcode
|
||||
# args: ["acp"]
|
||||
# description: MiniMax Code for implementation, refactoring, debugging, and repository tasks
|
||||
# # auto_approve_permissions: false # Enable only for trusted tasks that need MCode to edit files or run commands
|
||||
# # timeout_seconds: 1800 # Abort + kill the subprocess if it doesn't respond in time (default: 1800 = 30 min)
|
||||
#
|
||||
# claude_code:
|
||||
# # DeerFlow expects an ACP adapter here. The standard `claude` CLI does not
|
||||
# # speak ACP directly. Install `claude-agent-acp` separately or use:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user