mirror of https://github.com/openclaw/openclaw.git
33 lines
1.1 KiB
TypeScript
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 });
|
|
},
|
|
};
|
|
}
|