Status extension v1
URI: https://madarauchiha-314.github.io/tiny-harness/a2a/ext/status/v1Key: io.github.madarauchiha-314.tiny-harness/status
The status extension says why a task is in TASK_STATE_INPUT_REQUIRED. The state stays the standard A2A value; the reason is a sub_state carried in two places, because A2A's TaskStatus has no metadata field:
Task.metadata, under the key above, while the task isINPUT_REQUIRED;- the
TaskStatusUpdateEvent.metadataof the update that reports it.
sub_state | Meaning |
|---|---|
awaiting-next-message | The turn ended and the conversation is open: send the next message, or complete the task. |
awaiting-answer | The harness asked a participant a question (ask_participant) and waits for the answer. |
The metadata is written whether or not a client activates the extension. The value is an open string, not a closed enum, so a later sub-state is additive. A client MUST treat an unknown value as plain INPUT_REQUIRED. Leaving INPUT_REQUIRED removes the key.
Schema
json
{
"$id": "https://madarauchiha-314.github.io/tiny-harness/a2a/ext/status/v1/schema.json",
"additionalProperties": false,
"description": "Why a task is TASK_STATE_INPUT_REQUIRED, under Task.metadata['io.github.madarauchiha-314.tiny-harness/status'] and TaskStatusUpdateEvent.metadata. A client MUST treat an unknown sub_state as plain INPUT_REQUIRED.",
"properties": {
"sub_state": {
"description": "awaiting-next-message: the turn ended and the conversation is open; awaiting-answer: the harness asked a participant a question. Further values may be added.",
"examples": [
"awaiting-next-message",
"awaiting-answer"
],
"type": "string"
}
},
"required": [
"sub_state"
],
"title": "StatusExtensionData",
"type": "object"
}