import { ReadonlyJSONObject, ReadonlyJSONValue } from "../../utils/json/json-value.js";
import { ToolCallReader } from "./tool-types.js";
import { ToolResponse } from "./ToolResponse.js";
import { AssistantStreamChunk } from "../AssistantStreamChunk.js";
import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream.js";

//#region src/core/tool/ToolExecutionStream.d.ts
type ToolCallback = (toolCall: {
  toolCallId: string;
  toolName: string;
  args: ReadonlyJSONObject;
}) => Promise<ToolResponse<ReadonlyJSONValue>> | ToolResponse<ReadonlyJSONValue> | undefined;
type ToolStreamCallback = <TArgs extends ReadonlyJSONObject = ReadonlyJSONObject, TResult extends ReadonlyJSONValue = ReadonlyJSONValue>(toolCall: {
  reader: ToolCallReader<TArgs, TResult>;
  toolCallId: string;
  toolName: string;
}) => void;
type ToolExecutionOptions = {
  execute: ToolCallback;
  streamCall: ToolStreamCallback;
  onExecutionStart?: ((toolCallId: string, toolName: string) => void) | undefined;
  onExecutionEnd?: ((toolCallId: string, toolName: string) => void) | undefined;
};
declare class ToolExecutionStream extends PipeableTransformStream<AssistantStreamChunk, AssistantStreamChunk> {
  constructor(options: ToolExecutionOptions);
}
//#endregion
export { ToolExecutionStream };
//# sourceMappingURL=ToolExecutionStream.d.ts.map