feat(gateway): wire safe-point runtime cancellation for agent.cancel

This commit is contained in:
William Valentin
2026-02-13 08:51:14 -08:00
parent 9f81c01603
commit 46099664f0
7 changed files with 182 additions and 26 deletions
+16 -5
View File
@@ -182,8 +182,6 @@ export function createAgentHandlers(deps: AgentHandlerDeps) {
},
'agent.cancel': async (request: GatewayRequest): Promise<OutboundMessage> => {
// Cancel is a placeholder — proper cancellation requires abort controller support in NativeAgent.
// For now, just report whether the agent was busy.
const params = request.params as { connectionId?: string } | undefined;
const connectionId = params?.connectionId as string;
@@ -191,9 +189,22 @@ export function createAgentHandlers(deps: AgentHandlerDeps) {
return makeError(request.id, ErrorCode.InvalidRequest, 'connectionId is required');
}
const wasBusy = deps.sessionBridge.isBusy(connectionId);
// TODO: Wire AbortController into NativeAgent for actual cancellation
return { id: request.id, result: { cancelled: wasBusy } };
const sessionId = deps.sessionBridge.getSessionId(connectionId);
const laneId = sessionId ?? connectionId;
// Clear any queued (not-yet-started) work first.
deps.laneQueue.cancel(laneId);
const cancelled = deps.sessionBridge.cancel(connectionId);
return {
id: request.id,
result: {
cancelled,
message: cancelled
? 'Cancellation requested. The active operation will stop at the next safe point.'
: 'No active operation to cancel.',
},
};
},
};
}