diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml
new file mode 100644
index 000000000..cd874ff76
--- /dev/null
+++ b/.github/workflows/codspeed.yml
@@ -0,0 +1,39 @@
+name: CodSpeed
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ id-token: write
+
+jobs:
+ benchmarks:
+ name: Run benchmarks
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: types
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v5
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v5
+ with:
+ node-version: "20"
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Run benchmarks
+ uses: CodSpeedHQ/action@v4
+ with:
+ mode: simulation
+ run: npx vitest bench --run
+ working-directory: types
diff --git a/README.md b/README.md
index d2cd181ed..80d86c8db 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,7 @@
[](LICENSE)
[](https://deepwiki.com/a2aproject/A2A)
[](https://repomapr.com/a2aproject/A2A)
+[](https://codspeed.io/jozrftamson/A2A?utm_source=badge)
diff --git a/docs/community.md b/docs/community.md
index 05aa9c5c5..aa0304a09 100644
--- a/docs/community.md
+++ b/docs/community.md
@@ -86,3 +86,20 @@ These agentic frameworks have built-in A2A integration, making it easy to get st
The excitement surrounding Google's A2A protocol clearly indicates a strong belief in its potential to revolutionize multi-agent AI systems. By providing a standardized way for AI agents to communicate and collaborate, A2A is poised to unlock new levels of automation and innovation. As enterprises increasingly adopt AI agents, A2A represents a crucial step towards realizing the full power of interconnected AI ecosystems.
**Join the growing community building the future of AI interoperability with A2A!**
+
+---
+
+## Ways to Get Involved
+
+Ready to collaborate? Here are the quickest ways to contribute:
+
+- **Start a conversation:** Use [GitHub Discussions](https://github.com/a2aproject/A2A/discussions) to share ideas, propose features, or ask questions.
+- **Triage or file issues:** Check [open issues](https://github.com/a2aproject/A2A/issues) for areas where help is needed, or open a new one with clear repro steps and context.
+- **Follow the contribution workflow:**
+ 1. Fork the repo and create a feature branch.
+ 2. Implement your change and add tests or examples when applicable.
+ 3. Run linting and docs builds if you touched code or documentation.
+ 4. Open a pull request describing the problem, solution, and testing.
+- **Share feedback privately:** Use the [feedback form](https://goo.gle/a2a-feedback) if you cannot share details publicly.
+
+Be sure to review the [Contributing Guide](https://github.com/a2aproject/A2A/blob/main/CONTRIBUTING.md) and [Code of Conduct](https://github.com/a2aproject/A2A/blob/main/CODE_OF_CONDUCT.md) before you start. If you want deeper involvement, check out the [governance model](https://github.com/a2aproject/A2A/blob/main/GOVERNANCE.md) and consider attending community calls announced in Discussions.
diff --git a/specification/json/a2a.json b/specification/json/a2a.json
index 148d02205..67079c869 100644
--- a/specification/json/a2a.json
+++ b/specification/json/a2a.json
@@ -110,6 +110,23 @@
],
"type": "object"
},
+ "AbortSignal": {
+ "properties": {
+ "aborted": {
+ "type": "boolean"
+ },
+ "onabort": {
+ "type": "object"
+ },
+ "reason": {}
+ },
+ "required": [
+ "aborted",
+ "onabort",
+ "reason"
+ ],
+ "type": "object"
+ },
"AgentCapabilities": {
"description": "Defines optional capabilities supported by an agent.",
"properties": {
@@ -477,6 +494,31 @@
],
"type": "object"
},
+ "ArrayBuffer": {
+ "properties": {
+ "__@toStringTag@170": {
+ "type": "string"
+ },
+ "byteLength": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "__@toStringTag@170",
+ "byteLength"
+ ],
+ "type": "object"
+ },
+ "ArrayBufferLike": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/ArrayBuffer"
+ },
+ {
+ "$ref": "#/definitions/SharedArrayBuffer"
+ }
+ ]
+ },
"Artifact": {
"description": "Represents a file, data structure, or other resource generated by an agent during a task.",
"properties": {
@@ -518,6 +560,53 @@
],
"type": "object"
},
+ "AsymmetricMatchersContaining": {
+ "properties": {
+ "arrayContaining": {
+ "description": "Matches if the received array contains all elements in the expected array.",
+ "type": "object"
+ },
+ "closeTo": {
+ "description": "Matches if the received number is within a certain precision of the expected number.",
+ "type": "object"
+ },
+ "objectContaining": {
+ "description": "Matches if the received object contains all properties of the expected object.",
+ "type": "object"
+ },
+ "schemaMatching": {
+ "description": "Matches if the received value validates against a Standard Schema.",
+ "type": "object"
+ },
+ "stringContaining": {
+ "description": "Matches if the received string contains the expected substring.",
+ "type": "object"
+ },
+ "stringMatching": {
+ "description": "Matches if the received string or regex matches the expected pattern.",
+ "type": "object"
+ },
+ "toBeOneOf": {
+ "description": "Matches if the received value is one of the values in the expected array or set.",
+ "type": "object"
+ },
+ "toSatisfy": {
+ "description": "Checks that a value satisfies a custom matcher function.",
+ "type": "object"
+ }
+ },
+ "required": [
+ "arrayContaining",
+ "closeTo",
+ "objectContaining",
+ "schemaMatching",
+ "stringContaining",
+ "stringMatching",
+ "toBeOneOf",
+ "toSatisfy"
+ ],
+ "type": "object"
+ },
"AuthenticatedExtendedCardNotConfiguredError": {
"description": "An A2A-specific error indicating that the agent does not have an Authenticated Extended Card configured",
"properties": {
@@ -571,6 +660,123 @@
],
"type": "object"
},
+ "B": {
+ "properties": {
+ "critical": {
+ "description": "critical value of the samples",
+ "type": "integer"
+ },
+ "df": {
+ "description": "degrees of freedom",
+ "type": "integer"
+ },
+ "error": {},
+ "hz": {
+ "description": "the number of operations per second",
+ "type": "integer"
+ },
+ "max": {
+ "description": "the maximum value in the samples",
+ "type": "integer"
+ },
+ "mean": {
+ "description": "samples mean/average (estimate of the population mean)",
+ "type": "integer"
+ },
+ "median": {
+ "type": "integer"
+ },
+ "min": {
+ "description": "the minimum value in the samples",
+ "type": "integer"
+ },
+ "moe": {
+ "description": "margin of error",
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "p75": {
+ "description": "p75 percentile",
+ "type": "integer"
+ },
+ "p99": {
+ "description": "p99 percentile",
+ "type": "integer"
+ },
+ "p995": {
+ "description": "p995 percentile",
+ "type": "integer"
+ },
+ "p999": {
+ "description": "p999 percentile",
+ "type": "integer"
+ },
+ "period": {
+ "description": "how long each operation takes (ms)",
+ "type": "integer"
+ },
+ "rank": {
+ "type": "integer"
+ },
+ "rme": {
+ "description": "relative margin of error",
+ "type": "integer"
+ },
+ "sampleCount": {
+ "type": "integer"
+ },
+ "samples": {
+ "description": "task samples of each task iteration time (ms)",
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ "sd": {
+ "description": "samples standard deviation (estimate of the population standard deviation)",
+ "type": "integer"
+ },
+ "sem": {
+ "description": "standard error of the mean (a.k.a. the standard deviation of the sampling distribution of the sample mean)",
+ "type": "integer"
+ },
+ "totalTime": {
+ "description": "The amount of time in milliseconds to run the benchmark task (cycle).",
+ "type": "integer"
+ },
+ "variance": {
+ "description": "samples variance (estimate of the population variance)",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "critical",
+ "df",
+ "hz",
+ "max",
+ "mean",
+ "median",
+ "min",
+ "moe",
+ "name",
+ "p75",
+ "p99",
+ "p995",
+ "p999",
+ "period",
+ "rank",
+ "rme",
+ "sampleCount",
+ "samples",
+ "sd",
+ "sem",
+ "totalTime",
+ "variance"
+ ],
+ "type": "object"
+ },
"CancelTaskRequest": {
"description": "Represents a JSON-RPC request for the `tasks/cancel` method.",
"properties": {
@@ -643,6 +849,9 @@
],
"type": "object"
},
+ "Chai.AssertStatic": {
+ "type": "object"
+ },
"ClientCredentialsOAuthFlow": {
"description": "Defines configuration details for the OAuth 2.0 Client Credentials flow.",
"properties": {
@@ -811,6 +1020,130 @@
],
"type": "object"
},
+ "ExpectStatic": {
+ "properties": {
+ "addEqualityTesters": {
+ "type": "object"
+ },
+ "addSnapshotSerializer": {
+ "type": "object"
+ },
+ "any": {
+ "type": "object"
+ },
+ "anything": {
+ "type": "object"
+ },
+ "arrayContaining": {
+ "description": "Matches if the received array contains all elements in the expected array.",
+ "type": "object"
+ },
+ "assert": {
+ "$ref": "#/definitions/Chai.AssertStatic"
+ },
+ "assertions": {
+ "type": "object"
+ },
+ "closeTo": {
+ "description": "Matches if the received number is within a certain precision of the expected number.",
+ "type": "object"
+ },
+ "extend": {
+ "type": "object"
+ },
+ "getState": {
+ "type": "object"
+ },
+ "hasAssertions": {
+ "type": "object"
+ },
+ "not": {
+ "$ref": "#/definitions/AsymmetricMatchersContaining"
+ },
+ "objectContaining": {
+ "description": "Matches if the received object contains all properties of the expected object.",
+ "type": "object"
+ },
+ "poll": {
+ "type": "object"
+ },
+ "schemaMatching": {
+ "description": "Matches if the received value validates against a Standard Schema.",
+ "type": "object"
+ },
+ "setState": {
+ "type": "object"
+ },
+ "soft": {
+ "type": "object"
+ },
+ "stringContaining": {
+ "description": "Matches if the received string contains the expected substring.",
+ "type": "object"
+ },
+ "stringMatching": {
+ "description": "Matches if the received string or regex matches the expected pattern.",
+ "type": "object"
+ },
+ "toBeOneOf": {
+ "description": "Matches if the received value is one of the values in the expected array or set.",
+ "type": "object"
+ },
+ "toSatisfy": {
+ "description": "Checks that a value satisfies a custom matcher function.",
+ "type": "object"
+ },
+ "unreachable": {
+ "type": "object"
+ }
+ },
+ "required": [
+ "addEqualityTesters",
+ "addSnapshotSerializer",
+ "any",
+ "anything",
+ "arrayContaining",
+ "assert",
+ "assertions",
+ "closeTo",
+ "extend",
+ "getState",
+ "hasAssertions",
+ "not",
+ "objectContaining",
+ "poll",
+ "schemaMatching",
+ "setState",
+ "soft",
+ "stringContaining",
+ "stringMatching",
+ "toBeOneOf",
+ "toSatisfy",
+ "unreachable"
+ ],
+ "type": "object"
+ },
+ "FailureScreenshotArtifactAttachment": {
+ "properties": {
+ "contentType": {
+ "description": "MIME type of the attachment (e.g., 'image/png', 'text/plain')",
+ "type": "string"
+ },
+ "originalPath": {
+ "description": "Original file system path to the screenshot, before attachment resolution",
+ "type": "string"
+ },
+ "path": {
+ "description": "File system path to the attachment",
+ "type": "string"
+ }
+ },
+ "required": [
+ "originalPath",
+ "path"
+ ],
+ "type": "object"
+ },
"FileBase": {
"description": "Defines base properties for a file.",
"properties": {
@@ -1282,6 +1615,18 @@
],
"type": "object"
},
+ "J": {
+ "description": "Custom metadata that can be used in reporters.",
+ "properties": {
+ "benchmark": {
+ "type": "boolean"
+ },
+ "typecheck": {
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
"JSONParseError": {
"description": "An error indicating that the server received invalid JSON.",
"properties": {
@@ -1510,6 +1855,53 @@
],
"type": "object"
},
+ "L": {
+ "description": "The result of calling a task.",
+ "properties": {
+ "benchmark": {
+ "$ref": "#/definitions/B"
+ },
+ "duration": {
+ "description": "How long in milliseconds the task took to run.",
+ "type": "integer"
+ },
+ "errors": {
+ "description": "Errors that occurred during the task execution. It is possible to have several errors\nif `expect.soft()` failed multiple times or `retry` was triggered.",
+ "items": {
+ "$ref": "#/definitions/TestError"
+ },
+ "type": "array"
+ },
+ "heap": {
+ "description": "Heap size in bytes after the task finished.\nOnly available if `logHeapUsage` option is set and `process.memoryUsage` is defined.",
+ "type": "integer"
+ },
+ "hooks": {
+ "$ref": "#/definitions/Partial
,N>>",
+ "description": "State of related to this task hooks. Useful during reporting."
+ },
+ "repeatCount": {
+ "description": "The amount of times the task was repeated. The task is repeated only if\n`repeats` option is set. This number also contains `retryCount`.",
+ "type": "integer"
+ },
+ "retryCount": {
+ "description": "The amount of times the task was retried. The task is retried only if it\nfailed and `retry` option is set.",
+ "type": "integer"
+ },
+ "startTime": {
+ "description": "Time in milliseconds when the task started running.",
+ "type": "integer"
+ },
+ "state": {
+ "$ref": "#/definitions/TaskState",
+ "description": "State of the task. Inherits the `task.mode` during collection.\nWhen the task has finished, it will be changed to `pass` or `fail`.\n- **pass**: task ran successfully\n- **fail**: task failed"
+ }
+ },
+ "required": [
+ "state"
+ ],
+ "type": "object"
+ },
"ListTaskPushNotificationConfigParams": {
"description": "Defines parameters for listing all push notification configurations associated with a task.",
"properties": {
@@ -1603,6 +1995,23 @@
],
"type": "object"
},
+ "Location": {
+ "properties": {
+ "column": {
+ "description": "Column number in the line (1-indexed)",
+ "type": "integer"
+ },
+ "line": {
+ "description": "Line number in the source file (1-indexed)",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "column",
+ "line"
+ ],
+ "type": "object"
+ },
"Message": {
"description": "Represents a single message in the conversation between a user and an agent.",
"properties": {
@@ -1826,6 +2235,50 @@
],
"type": "object"
},
+ "P": {
+ "properties": {
+ "attachment": {
+ "$ref": "#/definitions/Z"
+ },
+ "location": {
+ "$ref": "#/definitions/X"
+ },
+ "message": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message",
+ "type"
+ ],
+ "type": "object"
+ },
+ "ParsedStack": {
+ "properties": {
+ "column": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "line": {
+ "type": "integer"
+ },
+ "method": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "column",
+ "file",
+ "line",
+ "method"
+ ],
+ "type": "object"
+ },
"Part": {
"anyOf": [
{
@@ -1851,6 +2304,29 @@
},
"type": "object"
},
+ "Partial,N>>": {
+ "properties": {
+ "afterAll": {
+ "$ref": "#/definitions/TaskState"
+ },
+ "afterEach": {
+ "$ref": "#/definitions/TaskState"
+ },
+ "aroundAll": {
+ "$ref": "#/definitions/TaskState"
+ },
+ "aroundEach": {
+ "$ref": "#/definitions/TaskState"
+ },
+ "beforeAll": {
+ "$ref": "#/definitions/TaskState"
+ },
+ "beforeEach": {
+ "$ref": "#/definitions/TaskState"
+ }
+ },
+ "type": "object"
+ },
"PasswordOAuthFlow": {
"description": "Defines configuration details for the OAuth 2.0 Resource Owner Password flow.",
"properties": {
@@ -1876,13 +2352,24 @@
],
"type": "object"
},
- "PushNotificationAuthenticationInfo": {
- "description": "Defines authentication details for a push notification endpoint.",
+ "Promise": {
"properties": {
- "credentials": {
- "description": "Optional credentials required by the push notification endpoint.",
+ "__@toStringTag@170": {
"type": "string"
- },
+ }
+ },
+ "required": [
+ "__@toStringTag@170"
+ ],
+ "type": "object"
+ },
+ "PushNotificationAuthenticationInfo": {
+ "description": "Defines authentication details for a push notification endpoint.",
+ "properties": {
+ "credentials": {
+ "description": "Optional credentials required by the push notification endpoint.",
+ "type": "string"
+ },
"schemes": {
"description": "A list of supported authentication schemes (e.g., 'Basic', 'Bearer').",
"items": {
@@ -1944,6 +2431,229 @@
],
"type": "object"
},
+ "Q": {
+ "properties": {
+ "annotation": {
+ "$ref": "#/definitions/P"
+ },
+ "attachments": {
+ "description": "File or data attachments associated with this artifact",
+ "items": {
+ "$ref": "#/definitions/Z"
+ },
+ "type": "array"
+ },
+ "location": {
+ "$ref": "#/definitions/X",
+ "description": "Source location where this artifact was created"
+ },
+ "type": {
+ "const": "internal:annotation",
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotation",
+ "type"
+ ],
+ "type": "object"
+ },
+ "R": {
+ "anyOf": [
+ {
+ "properties": {
+ "condition": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/RegExp"
+ },
+ {
+ "type": "object"
+ }
+ ],
+ "default": "undefined (retry on all errors)",
+ "description": "Condition to determine if a test should be retried based on the error.\n- If a RegExp, it is tested against the error message\n- If a function, called with the TestError object; return true to retry\n\nNOTE: Functions can only be used in test files, not in vitest.config.ts,\nbecause the configuration is serialized when passed to worker threads."
+ },
+ "count": {
+ "default": 0,
+ "description": "The number of times to retry the test if it fails.",
+ "type": "integer"
+ },
+ "delay": {
+ "default": 0,
+ "description": "Delay in milliseconds between retry attempts.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "integer"
+ }
+ ],
+ "description": "Retry configuration for tests.\nCan be a number for simple retry count, or an object for advanced retry control."
+ },
+ "Record": {
+ "type": "object"
+ },
+ "RegExp": {
+ "properties": {
+ "dotAll": {
+ "type": "boolean"
+ },
+ "flags": {
+ "type": "string"
+ },
+ "global": {
+ "type": "boolean"
+ },
+ "ignoreCase": {
+ "type": "boolean"
+ },
+ "lastIndex": {
+ "type": "integer"
+ },
+ "multiline": {
+ "type": "boolean"
+ },
+ "source": {
+ "type": "string"
+ },
+ "sticky": {
+ "type": "boolean"
+ },
+ "unicode": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "dotAll",
+ "flags",
+ "global",
+ "ignoreCase",
+ "lastIndex",
+ "multiline",
+ "source",
+ "sticky",
+ "unicode"
+ ],
+ "type": "object"
+ },
+ "RunMode": {
+ "enum": [
+ "only",
+ "queued",
+ "run",
+ "skip",
+ "todo"
+ ],
+ "type": "string"
+ },
+ "S": {
+ "properties": {
+ "concurrent": {
+ "description": "Whether the task should run concurrently with other tasks.",
+ "type": "boolean"
+ },
+ "dynamic": {
+ "description": "If the test was collected by parsing the file AST, and the name\nis not a static string, this property will be set to `true`.",
+ "type": "boolean"
+ },
+ "each": {
+ "description": "Whether the task was produced with `.each()` method.",
+ "type": "boolean"
+ },
+ "file": {
+ "$ref": "#/definitions/c",
+ "description": "File task. It's the root task of the file."
+ },
+ "fullName": {
+ "description": "Full name including the file path, any parent suites, and this task's name.\n\nUses ` > ` as the separator between levels.",
+ "type": "string"
+ },
+ "fullTestName": {
+ "description": "Full name excluding the file path, including any parent suites and this task's name. `undefined` for file tasks.\n\nUses ` > ` as the separator between levels.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Unique task identifier. Based on the file id and the position of the task.\nThe id of the file task is based on the file path relative to root and project name.\nIt will not change between runs.",
+ "type": "string"
+ },
+ "location": {
+ "$ref": "#/definitions/Location",
+ "description": "Location of the task in the file. This field is populated only if\n`includeTaskLocation` option is set. It is generated by calling `new Error`\nand parsing the stack trace, so the location might differ depending on the runtime."
+ },
+ "logs": {
+ "items": {
+ "$ref": "#/definitions/U"
+ },
+ "type": "array"
+ },
+ "meta": {
+ "$ref": "#/definitions/J",
+ "description": "Custom metadata for the task. JSON reporter will save this data."
+ },
+ "mode": {
+ "$ref": "#/definitions/RunMode",
+ "description": "Task mode.\n- **skip**: task is skipped\n- **only**: only this task and other tasks with `only` mode will run\n- **todo**: task is marked as a todo, alias for `skip`\n- **run**: task will run or already ran\n- **queued**: task will start running next. It can only exist on the File"
+ },
+ "name": {
+ "description": "Task name provided by the user. If no name was provided, it will be an empty string.",
+ "type": "string"
+ },
+ "repeats": {
+ "default": 0,
+ "description": "The amount of times the task should be repeated after the successful run.\nIf the task fails, it will not be retried unless `retry` is specified.",
+ "type": "integer"
+ },
+ "result": {
+ "$ref": "#/definitions/L",
+ "description": "Result of the task. Suite and file tasks will only have the result if there\nwas an error during collection or inside `afterAll`/`beforeAll`."
+ },
+ "retry": {
+ "$ref": "#/definitions/R",
+ "default": 0,
+ "description": "Retry configuration for the task.\n- If a number, specifies how many times to retry\n- If an object, allows fine-grained retry control"
+ },
+ "shuffle": {
+ "description": "Whether the tasks of the suite run in a random order.",
+ "type": "boolean"
+ },
+ "suite": {
+ "$ref": "#/definitions/S",
+ "description": "Suite that this task is part of. File task or the global suite will have no parent."
+ },
+ "tags": {
+ "description": "Custom tags of the task. Useful for filtering tasks.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "tasks": {
+ "description": "An array of tasks that are part of the suite.",
+ "items": {
+ "$ref": "#/definitions/e"
+ },
+ "type": "array"
+ },
+ "type": {
+ "const": "suite",
+ "type": "string"
+ }
+ },
+ "required": [
+ "file",
+ "fullName",
+ "id",
+ "meta",
+ "mode",
+ "name",
+ "tasks",
+ "type"
+ ],
+ "type": "object"
+ },
"SecurityScheme": {
"anyOf": [
{
@@ -2210,6 +2920,39 @@
],
"type": "object"
},
+ "SharedArrayBuffer": {
+ "properties": {
+ "__@species@3577": {
+ "$ref": "#/definitions/SharedArrayBuffer"
+ },
+ "__@toStringTag@170": {
+ "const": "SharedArrayBuffer",
+ "type": "string"
+ },
+ "byteLength": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "__@species@3577",
+ "__@toStringTag@170",
+ "byteLength"
+ ],
+ "type": "object"
+ },
+ "T": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/Q"
+ },
+ {
+ "$ref": "#/definitions/a4"
+ },
+ {
+ "$ref": "#/definitions/m"
+ }
+ ]
+ },
"Task": {
"description": "Represents a single, stateful operation or conversation between a client and an agent.",
"properties": {
@@ -2438,6 +3181,18 @@
"type": "object"
},
"TaskState": {
+ "enum": [
+ "fail",
+ "only",
+ "pass",
+ "queued",
+ "run",
+ "skip",
+ "todo"
+ ],
+ "type": "string"
+ },
+ "TaskState_1": {
"description": "Defines the lifecycle states of a Task.",
"enum": [
"submitted",
@@ -2460,7 +3215,7 @@
"description": "An optional, human-readable message providing more details about the current status."
},
"state": {
- "$ref": "#/definitions/TaskState",
+ "$ref": "#/definitions/TaskState_1",
"description": "The current state of the task's lifecycle."
},
"timestamp": {
@@ -2515,6 +3270,41 @@
],
"type": "object"
},
+ "TestError": {
+ "properties": {
+ "actual": {
+ "type": "string"
+ },
+ "cause": {
+ "$ref": "#/definitions/TestError"
+ },
+ "diff": {
+ "type": "string"
+ },
+ "expected": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "stack": {
+ "type": "string"
+ },
+ "stacks": {
+ "items": {
+ "$ref": "#/definitions/ParsedStack"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "message"
+ ],
+ "type": "object"
+ },
"TextPart": {
"description": "Represents a text segment within a message or artifact.",
"properties": {
@@ -2548,6 +3338,42 @@
],
"type": "string"
},
+ "U": {
+ "properties": {
+ "browser": {
+ "type": "boolean"
+ },
+ "content": {
+ "type": "string"
+ },
+ "origin": {
+ "type": "string"
+ },
+ "size": {
+ "type": "integer"
+ },
+ "taskId": {
+ "type": "string"
+ },
+ "time": {
+ "type": "integer"
+ },
+ "type": {
+ "enum": [
+ "stderr",
+ "stdout"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "content",
+ "size",
+ "time",
+ "type"
+ ],
+ "type": "object"
+ },
"UnsupportedOperationError": {
"description": "An A2A-specific error indicating that the requested operation is not supported by the agent.",
"properties": {
@@ -2570,6 +3396,727 @@
"message"
],
"type": "object"
+ },
+ "VisualRegressionArtifactAttachment": {
+ "properties": {
+ "body": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[0-9]+$": {
+ "type": "integer"
+ }
+ },
+ "properties": {
+ "BYTES_PER_ELEMENT": {
+ "type": "integer"
+ },
+ "__@toStringTag@170": {
+ "const": "Uint8Array",
+ "type": "string"
+ },
+ "buffer": {
+ "$ref": "#/definitions/ArrayBufferLike"
+ },
+ "byteLength": {
+ "type": "integer"
+ },
+ "byteOffset": {
+ "type": "integer"
+ },
+ "length": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "BYTES_PER_ELEMENT",
+ "__@toStringTag@170",
+ "buffer",
+ "byteLength",
+ "byteOffset",
+ "length"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Inline attachment content as a string or raw binary data"
+ },
+ "contentType": {
+ "description": "MIME type of the attachment (e.g., 'image/png', 'text/plain')",
+ "type": "string"
+ },
+ "height": {
+ "type": "integer"
+ },
+ "name": {
+ "enum": [
+ "actual",
+ "diff",
+ "reference"
+ ],
+ "type": "string"
+ },
+ "path": {
+ "description": "File system path to the attachment",
+ "type": "string"
+ },
+ "width": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "height",
+ "name",
+ "width"
+ ],
+ "type": "object"
+ },
+ "X": {
+ "description": "Source code location information for a test artifact.\n\nIndicates where in the source code the artifact originated from.",
+ "properties": {
+ "column": {
+ "description": "Column number in the line (1-indexed)",
+ "type": "integer"
+ },
+ "file": {
+ "description": "Path to the source file",
+ "type": "string"
+ },
+ "line": {
+ "description": "Line number in the source file (1-indexed)",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "column",
+ "file",
+ "line"
+ ],
+ "type": "object"
+ },
+ "Z": {
+ "description": "Represents a file or data attachment associated with a test artifact.\n\nAttachments can be either file-based (via `path`) or inline content (via `body`).\nThe `contentType` helps consumers understand how to interpret the attachment data.",
+ "properties": {
+ "body": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[0-9]+$": {
+ "type": "integer"
+ }
+ },
+ "properties": {
+ "BYTES_PER_ELEMENT": {
+ "type": "integer"
+ },
+ "__@toStringTag@170": {
+ "const": "Uint8Array",
+ "type": "string"
+ },
+ "buffer": {
+ "$ref": "#/definitions/ArrayBufferLike"
+ },
+ "byteLength": {
+ "type": "integer"
+ },
+ "byteOffset": {
+ "type": "integer"
+ },
+ "length": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "BYTES_PER_ELEMENT",
+ "__@toStringTag@170",
+ "buffer",
+ "byteLength",
+ "byteOffset",
+ "length"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Inline attachment content as a string or raw binary data"
+ },
+ "contentType": {
+ "description": "MIME type of the attachment (e.g., 'image/png', 'text/plain')",
+ "type": "string"
+ },
+ "path": {
+ "description": "File system path to the attachment",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "_": {
+ "description": "User's custom test context.",
+ "properties": {
+ "_local": {
+ "type": "boolean"
+ },
+ "annotate": {
+ "description": "Add a test annotation that will be displayed by your reporter.",
+ "type": "object"
+ },
+ "expect": {
+ "$ref": "#/definitions/ExpectStatic",
+ "description": "`expect` instance bound to the current test.\n\nThis API is useful for running snapshot tests concurrently because global expect cannot track them."
+ },
+ "onTestFailed": {
+ "description": "Register a callback to run when this specific test fails.\nUseful when tests run concurrently.",
+ "type": "object"
+ },
+ "onTestFinished": {
+ "description": "Register a callback to run when this specific test finishes.\nUseful when tests run concurrently.",
+ "type": "object"
+ },
+ "signal": {
+ "$ref": "#/definitions/AbortSignal",
+ "description": "An [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that will be aborted if the test times out or\nthe test run was cancelled."
+ },
+ "skip": {
+ "description": "Mark tests as skipped. All execution after this call will be skipped.\nThis function throws an error, so make sure you are not catching it accidentally.",
+ "type": "object"
+ },
+ "task": {
+ "$ref": "#/definitions/a