openclaw/src/agents/tools/sessions-yield-tool.ts

33 lines
1.1 KiB
TypeScript

import { Type } from "@sinclair/typebox";
import type { AnyAgentTool } from "./common.js";
import { jsonResult, readStringParam } from "./common.js";
const SessionsYieldToolSchema = Type.Object({
message: Type.Optional(Type.String()),
});
export function createSessionsYieldTool(opts?: {
sessionId?: string;
onYield?: (message: string) => Promise<void> | void;
}): AnyAgentTool {
return {
label: "Yield",
name: "sessions_yield",
description:
"End your current turn. Use after spawning subagents to receive their results as the next message.",
parameters: SessionsYieldToolSchema,
execute: async (_toolCallId, args) => {
const params = args as Record<string, unknown>;
const message = readStringParam(params, "message") || "Turn yielded.";
if (!opts?.sessionId) {
return jsonResult({ status: "error", error: "No session context" });
}
if (!opts?.onYield) {
return jsonResult({ status: "error", error: "Yield not supported in this context" });
}
await opts.onYield(message);
return jsonResult({ status: "yielded", message });
},
};
}