agentscope-ai / agentscope-ai/agentscope-java

Feature Request: Add getToolCallId() to ToolEmitter interface

未关闭
#695 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area/core/tool enhancement
主要语言
Java
星标
5.6k
派生
1.3k
平均合并
4 天 12 小时
30 天内合并 PR
77

描述

## Background

When implementing streaming tools (e.g., bash/terminal execution), tools need to correlate their output with the frontend UI. The `toolCallId` is the natural identifier for this correlation, but currently tools have no way to access it through the `ToolEmitter` interface.

## Problem

Tools like `BashTool` need to:
1. Write streaming output to a shared buffer
2. Allow frontend to poll/subscribe to this buffer by a unique session ID
3. The natural session ID is `toolCallId`, which is already available in `ToolUseBlock`

Without access to `toolCallId`, tools must generate random UUIDs, causing frontend-backend ID mismatch.

## Proposed Solution

Add a default method to `ToolEmitter` interface:

```java
public interface ToolEmitter {
void emit(ToolResultBlock chunk);

/**
* Returns the tool call ID associated with this emitter.
* This allows tools to correlate their output with frontend components.
*
* @return the tool call ID, or null if not available
*/
default String getToolCallId() {
return null;
}
}
```

And implement it in `DefaultToolEmitter`:

```java
@Override
public String getToolCallId() {
return toolUseBlock != null ? toolUseBlock.getId() : null;
}
```

## Use Cases

1. **Terminal/Bash Tools**: Write output to a shared `TerminalBuffer` keyed by `toolCallId`, allowing frontend to display real-time output
2. **Long-running Tasks**: Track progress and allow cancellation by `toolCallId`
3. **Streaming File Operations**: Correlate file upload/download progress with UI components

## Backward Compatibility

The default method returns `null`, ensuring existing implementations continue to work without modification.

## Current Workaround

We've implemented this locally, but would prefer official framework support for maintainability.

---

Thank you for considering this feature request!

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。