Add client conformance for SEP-2663 task results - #405
Conversation
b074c7f to
94a060f
Compare
94a060f to
3d7c730
Compare
|
Hi @pcarleton @LucaButBoring — gentle ping on this one. This implements the first client-side SEP-2663 scenario from #374. The PR is ready for review, but it hasn’t had a review yet and the required check is still waiting. When you have a chance, could one of you take a look and help get CI moving? Happy to address any feedback. Thanks! |
|
I don't have permission to run the check or approve the PR but taking a look at the tests now |
| return error( | ||
| 400, | ||
| MISSING_REQUIRED_CLIENT_CAPABILITY, | ||
| `Missing required client capability: ${TASKS_EXTENSION_ID}`, | ||
| { | ||
| requiredCapabilities: { | ||
| extensions: { [TASKS_EXTENSION_ID]: {} } | ||
| } | ||
| } | ||
| ); |
There was a problem hiding this comment.
We need to assert this on all task-related operations, not just the initial tool call.
There was a problem hiding this comment.
Thanks — that’s a real gap.
I checked this against src/seps/sep-2663.yaml: the per-request capability requirement is already explicit there, including the “regardless of prior declarations” language, so I’ll enforce it on tasks/get as well as the task-producing tools/call in this scenario.
One modelling question before I push. Since the requirement is phrased as a server obligation and the harness plays the server here, would you prefer a distinct client-side check id — e.g. sep-2663-client-declares-capability-on-tasks-methods, scoped to tasks/get in this scenario, with the remaining task methods covered by the other #374 scenarios — or should it remain a separate failure reason under sep-2663-client-handles-polymorphic-result?
Either way, I’ll track the tasks/get attempt separately from whether it declared the extension and add a negative-control client for that case, so a client that does poll but omits the capability won’t incorrectly report “did not retrieve it with tasks/get”.
I’d rather not add or change traceability ids on my own initiative. If you’d rather not decide that now, I’ll default to keeping the distinct failure reason under the existing id, leaving the traceability manifest untouched; it can always be split into its own check later.
|
Mostly looks good, left one comment for a requested change |
Summary
tasks-client-create-handling, where the harness returns a server-directedCreateTaskResultfromtools/calland requires the client to retrieve it withtasks/getsource.extensionId, and allow extension scenarios to declare the core protocol version they layer onWhy
The server suite already covers SEP-2663, but the client suite could not observe the client requirement to handle either a standard result or
CreateTaskResult. This implements the first client scenario proposed in #374.The scenario is black-box: it proves that the client recognizes the task envelope and follows the returned handle with
tasks/get. It does not claim to observe application-level use of the completed result.Alignment with current main
Rebased onto
49103de, incorporating the 11 upstream commits added since the original PR base.DRAFT_PROTOCOL_VERSION(2026-07-28)MISSING_REQUIRED_CLIENT_CAPABILITYcode,-32021CreateTaskResultas a base draftResultenvelope, since Tasks v2 types intentionally live outside the core draft schemawire-schema-validgreen for both the conformant and deliberately broken client pathsValidation
npm run checknpm run buildnpm test— 488 tests passedwire-schema-validsep-2663-client-handles-polymorphic-resultwith the expected diagnostic;wire-schema-validpassesAddresses #374.