Skip to content

Commit 14635f7

Browse files
fix: resolve all test failures for TaskManager extraction
- Add TaskManager to requestStream test protocols (they need it for tasks API) - Fix IIFE closures wrongly matched by sed (restore to no-arg) - Add removeProgressHandler to TaskManagerHost interface - Fix prepareOutboundRequest to propagate queue overflow errors - Update requestTaskStore references to createRequestTaskStore - Fix optional chaining to non-null assertions in test casts 430/430 core tests pass. Zero type errors.
1 parent 66e638f commit 14635f7

3 files changed

Lines changed: 64 additions & 54 deletions

File tree

packages/core/src/shared/protocol.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
288288
taskManager.bind({
289289
request: (request, resultSchema, options) => this.request(request as SendRequestT, resultSchema, options),
290290
notification: (notification, options) => this.notification(notification as SendNotificationT, options),
291-
reportError: (error) => this._onerror(error)
291+
reportError: (error) => this._onerror(error),
292+
removeProgressHandler: (token) => this._progressHandlers.delete(token)
292293
});
293294
this._registerTaskHandlers();
294295
}
@@ -787,7 +788,10 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
787788
// Delegate to TaskManager for task param augmentation and queue routing
788789
if (this._taskManager) {
789790
const responseHandler = this._responseHandlers.get(messageId)!;
790-
const queued = this._taskManager.prepareOutboundRequest(jsonrpcRequest, options, messageId, responseHandler);
791+
const queued = this._taskManager.prepareOutboundRequest(jsonrpcRequest, options, messageId, responseHandler, (error) => {
792+
this._cleanupTimeout(messageId);
793+
reject(error);
794+
});
791795
if (queued) {
792796
// Request was queued for task side-channel delivery, don't send via transport
793797
return;

packages/core/src/shared/taskManager.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export interface TaskManagerHost {
9999
request<T extends AnySchema>(request: Request, resultSchema: T, options?: RequestOptions): Promise<SchemaOutput<T>>;
100100
notification(notification: Notification, options?: NotificationOptions): Promise<void>;
101101
reportError(error: Error): void;
102+
removeProgressHandler(token: number): void;
102103
}
103104

104105
// ============================================================================
@@ -390,7 +391,8 @@ export class TaskManager {
390391
jsonrpcRequest: JSONRPCRequest,
391392
options: RequestOptions | undefined,
392393
messageId: number,
393-
responseHandler: (response: JSONRPCResultResponse | Error) => void
394+
responseHandler: (response: JSONRPCResultResponse | Error) => void,
395+
onError: (error: unknown) => void
394396
): boolean {
395397
const { task, relatedTask } = options ?? {};
396398

@@ -423,7 +425,7 @@ export class TaskManager {
423425
message: jsonrpcRequest,
424426
timestamp: Date.now()
425427
}).catch(error => {
426-
this._host?.reportError(new Error(`Failed to enqueue task message: ${error}`));
428+
onError(error);
427429
});
428430

429431
return true; // queued
@@ -706,6 +708,10 @@ export class TaskManager {
706708
}
707709

708710
private _cleanupTaskProgressHandler(taskId: string): void {
709-
this._taskProgressTokens.delete(taskId);
711+
const progressToken = this._taskProgressTokens.get(taskId);
712+
if (progressToken !== undefined) {
713+
this._host?.removeProgressHandler(progressToken);
714+
this._taskProgressTokens.delete(taskId);
715+
}
710716
}
711717
}

0 commit comments

Comments
 (0)