1: <?php
2:
3: declare(strict_types=1);
4:
5: /**
6: * This file is part of the Nexus MCP SDK package.
7: *
8: * (c) 2026 John Paul E. Balandan, CPA <paulbalandan@gmail.com>
9: *
10: * For the full copyright and license information, please view
11: * the LICENSE file that was distributed with this source code.
12: */
13:
14: namespace Nexus\Mcp\Extension\Tasks\Client;
15:
16: use Amp\Cancellation;
17: use Nexus\Mcp\Core\Schema\Request\InputRequest;
18: use Nexus\Mcp\Core\Schema\Result\CallToolResult;
19: use Nexus\Mcp\Core\Schema\Result\InputRequiredResult;
20: use Nexus\Mcp\Core\Schema\Result\InputResponse;
21: use Nexus\Mcp\Extension\Tasks\Client\Exception\StalledTaskException;
22: use Nexus\Mcp\Extension\Tasks\Schema\Result\CreateTaskResult;
23: use Nexus\Mcp\Extension\Tasks\Schema\Result\GetTaskResult;
24:
25: /**
26: * Client-side surface of the tasks extension.
27: */
28: interface TaskClientInterface
29: {
30: /**
31: * Calls a tool, the continuation parameters re-issuing a call that answered
32: * an `InputRequiredResult`.
33: *
34: * @param non-empty-string $name
35: * @param null|array<array-key, mixed> $arguments
36: * @param null|array<int|non-empty-string, InputResponse> $inputResponses
37: */
38: public function callToolAsTask(string $name, ?array $arguments = null, ?array $inputResponses = null, ?string $requestState = null): CallToolResult|CreateTaskResult|InputRequiredResult;
39:
40: /**
41: * @param non-empty-string $taskId
42: */
43: public function getTask(string $taskId): GetTaskResult;
44:
45: /**
46: * Supplies input responses to a task waiting in `input_required`.
47: *
48: * @param non-empty-string $taskId
49: * @param array<int|non-empty-string, InputResponse> $inputResponses
50: */
51: public function updateTask(string $taskId, array $inputResponses): void;
52:
53: /**
54: * Requests cooperative cancellation of a task.
55: *
56: * @param non-empty-string $taskId
57: */
58: public function cancelTask(string $taskId): void;
59:
60: /**
61: * Polls a task at the server-suggested interval until it settles,
62: * dispatching new input requests to `$resolveInputRequests` and answering
63: * through `tasks/update`, unless `$cancellation` aborts the loop.
64: *
65: * @param null|\Closure(array<int|non-empty-string, InputRequest>): array<int|non-empty-string, InputResponse> $resolveInputRequests
66: *
67: * @throws StalledTaskException
68: */
69: public function awaitTask(CreateTaskResult $task, ?\Closure $resolveInputRequests = null, ?Cancellation $cancellation = null): GetTaskResult;
70: }
71: