agentscope-ai / agentscope-ai/agentscope-java

Feature Request: Add getToolCallId() to ToolEmitter interface

Ouverte
#695 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
area/core/tool enhancement
Langage dominant
Java
Étoiles
5.6k
Forks
1.3k
Merge moyen
4 j 12 h
PR mergées (30 j)
77

Description

## 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!

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.