Append child tool call titles to the ACP answer.

de4c32b7fe25 · AtlantisPleb · · parent 2185306d8058

Append child tool call titles to the ACP answer.

`session/update` `tool_call` events now add `[kind] title` to the string
returned as the `FunctionCallOutput`, so the parent model sees what the
child did even when it emits no `agent_message_chunk`. This stops the
model from firing repeated `delegate` calls because the first one looked
empty.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By
Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified crates/coder-lite/src/acp_harness.rs

Diff

1 file changed, +12 -12

crates/coder-lite/src/acp_harness.rs modified +12 -12

@@ -289,18 +289,18 @@ where

289 289
290 290
    match update.get("sessionUpdate").and_then(|v| v.as_str()) {
291 291
        Some("tool_call") => {
292
            on_event(AcpEvent::Tool {
293
                kind: update
294
                    .get("kind")
295
                    .and_then(|v| v.as_str())
296
                    .unwrap_or("tool")
297
                    .to_string(),
298
                title: update
299
                    .get("title")
300
                    .and_then(|v| v.as_str())
301
                    .unwrap_or("")
302
                    .to_string(),
303
            });
292
            let kind = update
293
                .get("kind")
294
                .and_then(|v| v.as_str())
295
                .unwrap_or("tool")
296
                .to_string();
297
            let title = update
298
                .get("title")
299
                .and_then(|v| v.as_str())
300
                .unwrap_or("")
301
                .to_string();
302
            answer.push_str(&format!("[{}] {}\n", kind, title));
303
            on_event(AcpEvent::Tool { kind, title });
304 304
        }
305 305
        Some("usage_update") => {
306 306
            let meta = update.get("_meta").cloned().unwrap_or(serde_json::json!({}));

This page updates live while a promote is in flight · changelog