Skip to content

Commit fbe5df4

Browse files
LucaButBoringfelixweinberger
authored andcommitted
feat: remove dead arguments in getTask and getTaskResult
They weren't being populated correctly, and can't be without changing the TaskStore interface to require restoring the original request when retrieving a Task.
1 parent 7503353 commit fbe5df4

File tree

7 files changed

+52
-60
lines changed

7 files changed

+52
-60
lines changed

src/examples/server/simpleStreamableHttp.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -605,10 +605,10 @@ const getServer = () => {
605605
task
606606
};
607607
},
608-
async getTask(_args, { taskId, taskStore }) {
608+
async getTask({ taskId, taskStore }) {
609609
return await taskStore.getTask(taskId);
610610
},
611-
async getTaskResult(_args, { taskId, taskStore }) {
611+
async getTaskResult({ taskId, taskStore }) {
612612
const result = await taskStore.getTaskResult(taskId);
613613
return result as CallToolResult;
614614
}

src/experimental/tasks/interfaces.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,16 @@ export type CreateTaskRequestHandler<
7070
* Handler for task operations (get, getResult).
7171
* @experimental
7272
*/
73-
export type TaskRequestHandler<
74-
SendResultT extends Result,
75-
Args extends undefined | ZodRawShapeCompat | AnySchema = undefined
76-
> = BaseToolCallback<SendResultT, TaskRequestHandlerExtra, Args>;
73+
export type TaskRequestHandler<SendResultT extends Result> = (extra: TaskRequestHandlerExtra) => SendResultT | Promise<SendResultT>;
7774

7875
/**
7976
* Interface for task-based tool handlers.
8077
* @experimental
8178
*/
8279
export interface ToolTaskHandler<Args extends undefined | ZodRawShapeCompat | AnySchema = undefined> {
8380
createTask: CreateTaskRequestHandler<CreateTaskResult, Args>;
84-
getTask: TaskRequestHandler<GetTaskResult, Args>;
85-
getTaskResult: TaskRequestHandler<CallToolResult, Args>;
81+
getTask: TaskRequestHandler<GetTaskResult>;
82+
getTaskResult: TaskRequestHandler<CallToolResult>;
8683
}
8784

8885
/**

src/server/mcp.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,10 +1548,11 @@ const EMPTY_COMPLETION_RESULT: CompleteResult = {
15481548
};
15491549

15501550
/**
1551-
* Wraps a tool task handler such that it can be used without checking if it needs to be called in a one-arg manner.
1551+
* Wraps a tool task handler's createTask to handle args uniformly.
1552+
* getTask and getTaskResult don't take args, so they're passed through directly.
15521553
* @param handler The task handler to wrap.
15531554
* @param args The tool arguments.
1554-
* @returns A wrapped task handler for a tool, which only exposes a no-args interface.
1555+
* @returns A wrapped task handler for a tool, which only exposes a no-args interface for createTask.
15551556
*/
15561557
function toolTaskHandlerByArgs<Args extends AnySchema | ZodRawShapeCompat | undefined>(
15571558
handler: ToolTaskHandler<Args>,
@@ -1562,13 +1563,7 @@ function toolTaskHandlerByArgs<Args extends AnySchema | ZodRawShapeCompat | unde
15621563
args // undefined only if tool.inputSchema is undefined
15631564
? Promise.resolve((handler as ToolTaskHandler<ZodRawShapeCompat>).createTask(args, extra))
15641565
: Promise.resolve((handler as ToolTaskHandler<undefined>).createTask(extra)),
1565-
getTask: extra =>
1566-
args
1567-
? (handler as ToolTaskHandler<ZodRawShapeCompat>).getTask(args, extra)
1568-
: (handler as ToolTaskHandler<undefined>).getTask(extra),
1569-
getTaskResult: extra =>
1570-
args
1571-
? (handler as ToolTaskHandler<ZodRawShapeCompat>).getTaskResult(args, extra)
1572-
: (handler as ToolTaskHandler<undefined>).getTaskResult(extra)
1566+
getTask: handler.getTask,
1567+
getTaskResult: handler.getTaskResult
15731568
};
15741569
}

test/client/index.test.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,14 +2386,14 @@ describe('Task-based execution', () => {
23862386

23872387
return { task };
23882388
},
2389-
async getTask(_args, extra) {
2389+
async getTask(extra) {
23902390
const task = await extra.taskStore.getTask(extra.taskId);
23912391
if (!task) {
23922392
throw new Error(`Task ${extra.taskId} not found`);
23932393
}
23942394
return task;
23952395
},
2396-
async getTaskResult(_args, extra) {
2396+
async getTaskResult(extra) {
23972397
const result = await extra.taskStore.getTaskResult(extra.taskId);
23982398
return result as { content: Array<{ type: 'text'; text: string }> };
23992399
}
@@ -2462,14 +2462,14 @@ describe('Task-based execution', () => {
24622462

24632463
return { task };
24642464
},
2465-
async getTask(_args, extra) {
2465+
async getTask(extra) {
24662466
const task = await extra.taskStore.getTask(extra.taskId);
24672467
if (!task) {
24682468
throw new Error(`Task ${extra.taskId} not found`);
24692469
}
24702470
return task;
24712471
},
2472-
async getTaskResult(_args, extra) {
2472+
async getTaskResult(extra) {
24732473
const result = await extra.taskStore.getTaskResult(extra.taskId);
24742474
return result as { content: Array<{ type: 'text'; text: string }> };
24752475
}
@@ -2539,14 +2539,14 @@ describe('Task-based execution', () => {
25392539

25402540
return { task };
25412541
},
2542-
async getTask(_args, extra) {
2542+
async getTask(extra) {
25432543
const task = await extra.taskStore.getTask(extra.taskId);
25442544
if (!task) {
25452545
throw new Error(`Task ${extra.taskId} not found`);
25462546
}
25472547
return task;
25482548
},
2549-
async getTaskResult(_args, extra) {
2549+
async getTaskResult(extra) {
25502550
const result = await extra.taskStore.getTaskResult(extra.taskId);
25512551
return result as { content: Array<{ type: 'text'; text: string }> };
25522552
}
@@ -2620,14 +2620,14 @@ describe('Task-based execution', () => {
26202620

26212621
return { task };
26222622
},
2623-
async getTask(_args, extra) {
2623+
async getTask(extra) {
26242624
const task = await extra.taskStore.getTask(extra.taskId);
26252625
if (!task) {
26262626
throw new Error(`Task ${extra.taskId} not found`);
26272627
}
26282628
return task;
26292629
},
2630-
async getTaskResult(_args, extra) {
2630+
async getTaskResult(extra) {
26312631
const result = await extra.taskStore.getTaskResult(extra.taskId);
26322632
return result as { content: Array<{ type: 'text'; text: string }> };
26332633
}
@@ -3105,14 +3105,14 @@ describe('Task-based execution', () => {
31053105

31063106
return { task };
31073107
},
3108-
async getTask(_args, extra) {
3108+
async getTask(extra) {
31093109
const task = await extra.taskStore.getTask(extra.taskId);
31103110
if (!task) {
31113111
throw new Error(`Task ${extra.taskId} not found`);
31123112
}
31133113
return task;
31143114
},
3115-
async getTaskResult(_args, extra) {
3115+
async getTaskResult(extra) {
31163116
const result = await extra.taskStore.getTaskResult(extra.taskId);
31173117
return result as { content: Array<{ type: 'text'; text: string }> };
31183118
}
@@ -3373,14 +3373,14 @@ test('should respect server task capabilities', async () => {
33733373

33743374
return { task };
33753375
},
3376-
async getTask(_args, extra) {
3376+
async getTask(extra) {
33773377
const task = await extra.taskStore.getTask(extra.taskId);
33783378
if (!task) {
33793379
throw new Error(`Task ${extra.taskId} not found`);
33803380
}
33813381
return task;
33823382
},
3383-
async getTaskResult(_args, extra) {
3383+
async getTaskResult(extra) {
33843384
const result = await extra.taskStore.getTaskResult(extra.taskId);
33853385
return result as { content: Array<{ type: 'text'; text: string }> };
33863386
}

test/integration-tests/taskLifecycle.test.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ describe('Task Lifecycle Integration Tests', () => {
9191

9292
return { task };
9393
},
94-
async getTask(_args, extra) {
94+
async getTask(extra) {
9595
const task = await extra.taskStore.getTask(extra.taskId);
9696
if (!task) {
9797
throw new Error(`Task ${extra.taskId} not found`);
9898
}
9999
return task;
100100
},
101-
async getTaskResult(_args, extra) {
101+
async getTaskResult(extra) {
102102
const result = await extra.taskStore.getTaskResult(extra.taskId);
103103
return result as { content: Array<{ type: 'text'; text: string }> };
104104
}
@@ -173,14 +173,14 @@ describe('Task Lifecycle Integration Tests', () => {
173173

174174
return { task };
175175
},
176-
async getTask(_args, extra) {
176+
async getTask(extra) {
177177
const task = await extra.taskStore.getTask(extra.taskId);
178178
if (!task) {
179179
throw new Error(`Task ${extra.taskId} not found`);
180180
}
181181
return task;
182182
},
183-
async getTaskResult(_args, extra) {
183+
async getTaskResult(extra) {
184184
const result = await extra.taskStore.getTaskResult(extra.taskId);
185185
return result as { content: Array<{ type: 'text'; text: string }> };
186186
}
@@ -470,14 +470,14 @@ describe('Task Lifecycle Integration Tests', () => {
470470

471471
return { task };
472472
},
473-
async getTask(_args, extra) {
473+
async getTask(extra) {
474474
const task = await extra.taskStore.getTask(extra.taskId);
475475
if (!task) {
476476
throw new Error(`Task ${extra.taskId} not found`);
477477
}
478478
return task;
479479
},
480-
async getTaskResult(_args, extra) {
480+
async getTaskResult(extra) {
481481
const result = await extra.taskStore.getTaskResult(extra.taskId);
482482
return result as { content: Array<{ type: 'text'; text: string }> };
483483
}
@@ -959,14 +959,14 @@ describe('Task Lifecycle Integration Tests', () => {
959959

960960
return { task };
961961
},
962-
async getTask(_args, extra) {
962+
async getTask(extra) {
963963
const task = await extra.taskStore.getTask(extra.taskId);
964964
if (!task) {
965965
throw new Error(`Task ${extra.taskId} not found`);
966966
}
967967
return task;
968968
},
969-
async getTaskResult(_args, extra) {
969+
async getTaskResult(extra) {
970970
const result = await extra.taskStore.getTaskResult(extra.taskId);
971971
return result as { content: Array<{ type: 'text'; text: string }> };
972972
}
@@ -1175,14 +1175,14 @@ describe('Task Lifecycle Integration Tests', () => {
11751175

11761176
return { task };
11771177
},
1178-
async getTask(_args, extra) {
1178+
async getTask(extra) {
11791179
const task = await extra.taskStore.getTask(extra.taskId);
11801180
if (!task) {
11811181
throw new Error(`Task ${extra.taskId} not found`);
11821182
}
11831183
return task;
11841184
},
1185-
async getTaskResult(_args, extra) {
1185+
async getTaskResult(extra) {
11861186
const result = await extra.taskStore.getTaskResult(extra.taskId);
11871187
return result as { content: Array<{ type: 'text'; text: string }> };
11881188
}
@@ -1384,14 +1384,14 @@ describe('Task Lifecycle Integration Tests', () => {
13841384

13851385
return { task };
13861386
},
1387-
async getTask(_args, extra) {
1387+
async getTask(extra) {
13881388
const task = await extra.taskStore.getTask(extra.taskId);
13891389
if (!task) {
13901390
throw new Error(`Task ${extra.taskId} not found`);
13911391
}
13921392
return task;
13931393
},
1394-
async getTaskResult(_args, extra) {
1394+
async getTaskResult(extra) {
13951395
const result = await extra.taskStore.getTaskResult(extra.taskId);
13961396
return result as { content: Array<{ type: 'text'; text: string }> };
13971397
}

test/server/index.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2264,14 +2264,14 @@ describe('Task-based execution', () => {
22642264

22652265
return { task };
22662266
},
2267-
async getTask(_args, extra) {
2267+
async getTask(extra) {
22682268
const task = await extra.taskStore.getTask(extra.taskId);
22692269
if (!task) {
22702270
throw new Error(`Task ${extra.taskId} not found`);
22712271
}
22722272
return task;
22732273
},
2274-
async getTaskResult(_args, extra) {
2274+
async getTaskResult(extra) {
22752275
const result = await extra.taskStore.getTaskResult(extra.taskId);
22762276
return result as { content: Array<{ type: 'text'; text: string }> };
22772277
}
@@ -2509,14 +2509,14 @@ describe('Task-based execution', () => {
25092509

25102510
return { task };
25112511
},
2512-
async getTask(_args, extra) {
2512+
async getTask(extra) {
25132513
const task = await extra.taskStore.getTask(extra.taskId);
25142514
if (!task) {
25152515
throw new Error(`Task ${extra.taskId} not found`);
25162516
}
25172517
return task;
25182518
},
2519-
async getTaskResult(_args, extra) {
2519+
async getTaskResult(extra) {
25202520
const result = await extra.taskStore.getTaskResult(extra.taskId);
25212521
return result as { content: Array<{ type: 'text'; text: string }> };
25222522
}
@@ -2965,14 +2965,14 @@ describe('Task-based execution', () => {
29652965

29662966
return { task };
29672967
},
2968-
async getTask(_args, extra) {
2968+
async getTask(extra) {
29692969
const task = await extra.taskStore.getTask(extra.taskId);
29702970
if (!task) {
29712971
throw new Error(`Task ${extra.taskId} not found`);
29722972
}
29732973
return task;
29742974
},
2975-
async getTaskResult(_args, extra) {
2975+
async getTaskResult(extra) {
29762976
const result = await extra.taskStore.getTaskResult(extra.taskId);
29772977
return result as { content: Array<{ type: 'text'; text: string }> };
29782978
}

0 commit comments

Comments
 (0)