mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-25 10:42:45 +00:00
fix(client): let SDK callers choose what a send does to an active turn (#5605)
PaseoAgentSendOptions was a hand-copied subset of the daemon client's
SendMessageOptions and dropped activeTurnBehavior, so
agents.ref(id).send(text, { activeTurnBehavior: "steer" }) and run() failed
to typecheck even though the value is forwarded to the daemon. The public
type is now the options type send() passes through, so the two cannot
drift again.
Closes #4555
Co-authored-by: paseo-bot[bot] <266920839+paseo-bot[bot]@users.noreply.github.com>
Co-authored-by: Daye <2077152374@qq.com>
This commit is contained in:
@@ -58,10 +58,23 @@ export async function runFollowUp(url: string, agentId: string): Promise<string
|
||||
|
||||
try {
|
||||
await client.connect();
|
||||
const result = await client.agents.ref(agentId).run("Summarize your progress and next step.");
|
||||
const result = await client.agents.ref(agentId).run("Summarize your progress and next step.", {
|
||||
activeTurnBehavior: "interrupt",
|
||||
});
|
||||
if (result.status !== "idle") throw new Error(result.error ?? result.status);
|
||||
return result.lastMessage;
|
||||
} finally {
|
||||
await client.close();
|
||||
}
|
||||
}
|
||||
|
||||
export async function steerAgent(url: string, agentId: string, prompt: string): Promise<void> {
|
||||
const client = createClient(url);
|
||||
|
||||
try {
|
||||
await client.connect();
|
||||
await client.agents.ref(agentId).send(prompt, { activeTurnBehavior: "steer" });
|
||||
} finally {
|
||||
await client.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -425,6 +425,7 @@ export interface DaemonClientTrace {
|
||||
|
||||
export interface SendMessageOptions {
|
||||
messageId?: string;
|
||||
/** What happens when the agent is mid-turn. The daemon interrupts the turn when omitted. */
|
||||
activeTurnBehavior?: ActiveTurnBehavior;
|
||||
images?: Array<{ data: string; mimeType: string }>;
|
||||
attachments?: SendAgentMessageRequest["attachments"];
|
||||
|
||||
@@ -744,13 +744,17 @@ test("agent handles delegate create, send, timeline refetch, archive, and local
|
||||
expect(updatedAgents).toEqual(["Updated"]);
|
||||
expect(agent.current()).toEqual(updatedAgent);
|
||||
|
||||
const sendPromise = agent.send("hello", { messageId: "message-sdk" });
|
||||
const sendPromise = agent.send("hello", {
|
||||
messageId: "message-sdk",
|
||||
activeTurnBehavior: "steer",
|
||||
});
|
||||
const sendRequest = parseSentSessionMessage(ws.sent.at(-1));
|
||||
expect(sendRequest).toMatchObject({
|
||||
type: "send_agent_message_request",
|
||||
agentId: "agent_sdk",
|
||||
text: "hello",
|
||||
messageId: "message-sdk",
|
||||
activeTurnBehavior: "steer",
|
||||
});
|
||||
|
||||
ws.message(
|
||||
@@ -768,6 +772,7 @@ test("agent handles delegate create, send, timeline refetch, archive, and local
|
||||
|
||||
const runPromise = agent.run("finish the task", {
|
||||
messageId: "run-message-sdk",
|
||||
activeTurnBehavior: "interrupt",
|
||||
timeoutMs: 30_000,
|
||||
});
|
||||
const runSendRequest = parseSentSessionMessage(ws.sent.at(-1));
|
||||
@@ -776,6 +781,7 @@ test("agent handles delegate create, send, timeline refetch, archive, and local
|
||||
agentId: "agent_sdk",
|
||||
text: "finish the task",
|
||||
messageId: "run-message-sdk",
|
||||
activeTurnBehavior: "interrupt",
|
||||
});
|
||||
ws.message(
|
||||
sessionMessage({
|
||||
|
||||
@@ -24,7 +24,6 @@ import type {
|
||||
ProjectPlacementPayload,
|
||||
WorkspaceProjectDescriptorPayload,
|
||||
RefreshProvidersSnapshotResponseMessage,
|
||||
SendAgentMessageRequest,
|
||||
SessionOutboundMessage,
|
||||
WorkspaceDescriptorPayload,
|
||||
WorkspaceCreateRequest,
|
||||
@@ -55,6 +54,7 @@ import type {
|
||||
FetchAgentTimelineDirection,
|
||||
FetchAgentTimelinePayload,
|
||||
FetchAgentTimelineProjection,
|
||||
SendMessageOptions,
|
||||
WaitForFinishResult,
|
||||
} from "./daemon-client.js";
|
||||
|
||||
@@ -276,11 +276,7 @@ export interface PaseoAgentTimelineRefetchOptions {
|
||||
requestId?: string;
|
||||
}
|
||||
|
||||
export interface PaseoAgentSendOptions {
|
||||
messageId?: string;
|
||||
images?: Array<{ data: string; mimeType: string }>;
|
||||
attachments?: SendAgentMessageRequest["attachments"];
|
||||
}
|
||||
export type PaseoAgentSendOptions = SendMessageOptions;
|
||||
|
||||
export interface PaseoAgentRunOptions extends PaseoAgentSendOptions {
|
||||
timeoutMs?: number;
|
||||
|
||||
Reference in New Issue
Block a user