fix(subagents): return completion message for manual session spawns

This commit is contained in:
Peter Steinberger
2026-02-18 02:52:23 +01:00
parent f6f5cda6ca
commit fa4f66255c
9 changed files with 138 additions and 4 deletions

View File

@@ -169,6 +169,7 @@ Behavior:
- Sub-agents are not allowed to call `sessions_spawn` (no sub-agent → sub-agent spawning).
- Always non-blocking: returns `{ status: "accepted", runId, childSessionKey }` immediately.
- After completion, OpenClaw runs a sub-agent **announce step** and posts the result to the requester chat channel.
- If the assistant final reply is empty, the latest `toolResult` from sub-agent history is included as `Result`.
- Reply exactly `ANNOUNCE_SKIP` during the announce step to stay silent.
- Announce replies are normalized to `Status`/`Result`/`Notes`; `Status` comes from runtime outcome (not model text).
- Sub-agent sessions are auto-archived after `agents.defaults.subagents.archiveAfterMinutes` (default: 60).

View File

@@ -475,6 +475,8 @@ Notes:
- `sessions_send` waits for final completion when `timeoutSeconds > 0`.
- Delivery/announce happens after completion and is best-effort; `status: "ok"` confirms the agent run finished, not that the announce was delivered.
- `sessions_spawn` starts a sub-agent run and posts an announce reply back to the requester chat.
- Reply format includes `Status`, `Result`, and compact stats.
- `Result` is the assistant completion text; if missing, the latest `toolResult` is used as fallback.
- `sessions_spawn` is non-blocking and returns `status: "accepted"` immediately.
- `sessions_send` runs a replyback pingpong (reply `REPLY_SKIP` to stop; max turns via `session.agentToAgent.maxPingPongTurns`, 05).
- After the pingpong, the target agent runs an **announce step**; reply `ANNOUNCE_SKIP` to suppress the announcement.

View File

@@ -78,7 +78,7 @@ Text + native (when enabled):
- `/context [list|detail|json]` (explain “context”; `detail` shows per-file + per-tool + per-skill + system prompt size)
- `/export-session [path]` (alias: `/export`) (export current session to HTML with full system prompt)
- `/whoami` (show your sender id; alias: `/id`)
- `/subagents list|kill|log|info|send|steer` (inspect, kill, log, or steer sub-agent runs for the current session)
- `/subagents list|kill|log|info|send|steer|spawn` (inspect, control, or spawn sub-agent runs for the current session)
- `/kill <id|#|all>` (immediately abort one or all running sub-agents for this session; no confirmation message)
- `/steer <id|#> <message>` (steer a running sub-agent immediately: in-run when possible, otherwise abort current work and restart on the steer message)
- `/tell <id|#> <message>` (alias for `/steer`)

View File

@@ -19,9 +19,24 @@ Use `/subagents` to inspect or control sub-agent runs for the **current session*
- `/subagents log <id|#> [limit] [tools]`
- `/subagents info <id|#>`
- `/subagents send <id|#> <message>`
- `/subagents steer <id|#> <message>`
- `/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]`
`/subagents info` shows run metadata (status, timestamps, session id, transcript path, cleanup).
### Spawn behavior
`/subagents spawn` starts a background sub-agent as a user command, not an internal relay, and it sends one final completion update back to the requester chat when the run finishes.
- The spawn command is non-blocking; it returns a run id immediately.
- On completion, the sub-agent announces a summary/result message back to the requester chat channel.
- The completion message is a system message and includes:
- `Result` (`assistant` reply text, or latest `toolResult` if the assistant reply is empty)
- `Status` (`completed successfully` / `failed` / `timed out`)
- compact runtime/token stats
- `--model` and `--thinking` override defaults for that specific run.
- Use `info`/`log` to inspect details and output after completion.
Primary goals:
- Parallelize "research / long task / slow tool" work without blocking the main run.

View File

@@ -76,7 +76,7 @@ x-i18n:
- `/approve <id> allow-once|allow-always|deny`(解决 exec 审批提示)
- `/context [list|detail|json]`(解释"上下文"`detail` 显示每个文件 + 每个工具 + 每个 Skill + 系统提示词大小)
- `/whoami`(显示你的发送者 ID别名`/id`
- `/subagents list|stop|log|info|send`(检查、停止、记录或向当前会话的子智能体运行发送消息
- `/subagents list|kill|log|info|send|steer|spawn`(检查、控制或创建当前会话的子智能体运行)
- `/config show|get|set|unset`(将配置持久化到磁盘,仅所有者;需要 `commands.config: true`
- `/debug show|set|unset|reset`(运行时覆盖,仅所有者;需要 `commands.debug: true`
- `/usage off|tokens|full|cost`(每响应使用量页脚或本地成本摘要)

View File

@@ -22,13 +22,24 @@ x-i18n:
使用 `/subagents` 检查或控制**当前会话**的子智能体运行:
- `/subagents list`
- `/subagents stop <id|#|all>`
- `/subagents kill <id|#|all>`
- `/subagents log <id|#> [limit] [tools]`
- `/subagents info <id|#>`
- `/subagents send <id|#> <message>`
- `/subagents steer <id|#> <message>`
- `/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]`
`/subagents info` 显示运行元数据(状态、时间戳、会话 id、转录路径、清理
### 启动行为
`/subagents spawn` 以用户命令方式启动后台子智能体,任务完成后会向请求者聊天频道回发一条最终完成消息。
- 该命令非阻塞,先返回 `runId`
- 完成后,子智能体会将汇总/结果消息发布到请求者聊天渠道。
- `--model``--thinking` 可仅对本次运行做覆盖设置。
- 可在完成后通过 `info`/`log` 查看详细信息和输出。
主要目标:
- 并行化"研究 / 长任务 / 慢工具"工作,而不阻塞主运行。