fix: support AgentRun command cancellation
This commit is contained in:
+31
-6
@@ -198,7 +198,7 @@ function agentRunHelpText(args: string[]): string {
|
||||
return "Usage: bun scripts/cli.ts agentrun ack task/<taskId>|session/<sessionId> [--reader-id cli]";
|
||||
}
|
||||
if (verb === "cancel") {
|
||||
return "Usage: bun scripts/cli.ts agentrun cancel task/<taskId>|session/<sessionId> --reason <text> [--dry-run]";
|
||||
return "Usage: bun scripts/cli.ts agentrun cancel task/<taskId>|session/<sessionId>|run/<runId>|command/<commandId> --reason <text> [--run <runId>] [--dry-run]";
|
||||
}
|
||||
if (verb === "dispatch") {
|
||||
return "Usage: bun scripts/cli.ts agentrun dispatch task/<taskId>";
|
||||
@@ -576,16 +576,41 @@ async function resourceAck(config: UniDeskConfig | null, command: string, action
|
||||
|
||||
async function resourceCancel(config: UniDeskConfig | null, command: string, action: string | undefined, args: string[], options: AgentRunResourceOptions): Promise<RenderedCliResult> {
|
||||
const ref = parseResourceRef(action, args, "task");
|
||||
const cancelArgs = ref.kind === "task" ? ["cancel", ref.name] : ref.kind === "session" ? ["cancel", ref.name] : null;
|
||||
if (cancelArgs === null) throw new Error("cancel supports task/<taskId> or session/<sessionId>");
|
||||
if (options.reason !== null && ref.kind === "task") cancelArgs.push("--reason", options.reason);
|
||||
if (options.dryRun) cancelArgs.push("--dry-run");
|
||||
const cancelArgs = ["cancel", ref.name];
|
||||
if (options.reason !== null) cancelArgs.push("--reason", options.reason);
|
||||
if (ref.kind === "command") cancelArgs.push("--run-id", options.runId ?? requiredContext("command cancel", "--run <runId>"));
|
||||
if (options.dryRun) {
|
||||
const result = agentRunResourceCancelDryRunPlan(ref, options, rerunWithoutDryRun(command));
|
||||
return renderMutationSummary(command, result, options, `Planned cancel ${ref.kind}/${shortId(ref.name)}`, [rerunWithoutDryRun(command)]);
|
||||
}
|
||||
const result = ref.kind === "task"
|
||||
? await runAgentRunRestCommand(config, "queue", cancelArgs)
|
||||
: await runAgentRunRestCommand(config, "sessions", cancelArgs);
|
||||
: ref.kind === "session"
|
||||
? await runAgentRunRestCommand(config, "sessions", cancelArgs)
|
||||
: ref.kind === "run"
|
||||
? await runAgentRunRestCommand(config, "runs", cancelArgs)
|
||||
: ref.kind === "command"
|
||||
? await runAgentRunRestCommand(config, "commands", cancelArgs)
|
||||
: null;
|
||||
if (result === null) throw new Error("cancel supports task/<taskId>, session/<sessionId>, run/<runId>, or command/<commandId>");
|
||||
return renderMutationSummary(command, result, options, `${options.dryRun ? "Planned cancel" : "Cancel requested"} ${ref.kind}/${shortId(ref.name)}`, options.dryRun ? [rerunWithoutDryRun(command)] : undefined);
|
||||
}
|
||||
|
||||
function agentRunResourceCancelDryRunPlan(ref: AgentRunResourceRef, options: AgentRunResourceOptions, confirmCommand: string): Record<string, unknown> {
|
||||
const body: Record<string, unknown> = {};
|
||||
if (options.reason !== null) body.reason = options.reason;
|
||||
if (ref.kind === "task") return agentRunDryRunPlan("task-cancel", `/api/v1/queue/tasks/${encodeURIComponent(ref.name)}/cancel`, body, confirmCommand);
|
||||
if (ref.kind === "session") return agentRunDryRunPlan("session-cancel", `/api/v1/sessions/${encodeURIComponent(ref.name)}/control`, { action: "cancel", ...body }, confirmCommand);
|
||||
if (ref.kind === "run") return agentRunDryRunPlan("run-cancel", `/api/v1/runs/${encodeURIComponent(ref.name)}/cancel`, body, confirmCommand);
|
||||
if (ref.kind === "command") {
|
||||
const runId = options.runId ?? requiredContext("command cancel", "--run <runId>");
|
||||
return agentRunDryRunPlan("command-cancel", `/api/v1/commands/${encodeURIComponent(ref.name)}/cancel`, body, confirmCommand, "POST", {
|
||||
commandRef: { runId, commandId: ref.name, valuesPrinted: false },
|
||||
});
|
||||
}
|
||||
throw new Error("cancel supports task/<taskId>, session/<sessionId>, run/<runId>, or command/<commandId>");
|
||||
}
|
||||
|
||||
async function resourceDispatch(config: UniDeskConfig | null, command: string, action: string | undefined, args: string[], options: AgentRunResourceOptions): Promise<RenderedCliResult> {
|
||||
const ref = parseResourceRef(action, args, "task");
|
||||
if (ref.kind !== "task") throw new Error("dispatch supports task/<taskId>");
|
||||
|
||||
Reference in New Issue
Block a user