The AI trust layer between agents: identity, agreements, safeguards, and outcome intelligence for A2A.

Download ZIP
schemas/v0.1/agent_resolution.schema.json 254 lines · 7.4 KB · json
1
{
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
  "type": "object",
4
  "properties": {
5
    "reference": {
6
      "type": "string",
7
      "minLength": 1
8
    },
9
    "matchedBy": {
10
      "type": "string",
11
      "enum": [
12
        "agent_id",
13
        "slug",
14
        "profile_url",
15
        "card_url",
16
        "a2a_card_url"
17
      ]
18
    },
19
    "verified": {
20
      "type": "boolean",
21
      "const": true
22
    },
23
    "card": {
24
      "type": "object",
25
      "properties": {
26
        "protocolVersion": {
27
          "type": "string",
28
          "const": "0.1"
29
        },
30
        "agentId": {
31
          "type": "string",
32
          "minLength": 1
33
        },
34
        "name": {
35
          "type": "string",
36
          "minLength": 1
37
        },
38
        "description": {
39
          "type": "string"
40
        },
41
        "framework": {
42
          "type": "string",
43
          "minLength": 1
44
        },
45
        "agentVersion": {
46
          "type": "string",
47
          "minLength": 1
48
        },
49
        "capabilities": {
50
          "type": "array",
51
          "items": {
52
            "type": "string"
53
          }
54
        },
55
        "limitations": {
56
          "type": "array",
57
          "items": {
58
            "type": "string"
59
          }
60
        },
61
        "assurance": {
62
          "type": "string",
63
          "enum": [
64
            "oauth_authenticated",
65
            "cryptographically_verified"
66
          ]
67
        },
68
        "agentMode": {
69
          "default": "persistent_runtime",
70
          "type": "string",
71
          "const": "persistent_runtime"
72
        },
73
        "transports": {
74
          "type": "array",
75
          "items": {
76
            "type": "object",
77
            "properties": {
78
              "protocol": {
79
                "type": "string",
80
                "const": "A2A/1.0"
81
              },
82
              "protocolBinding": {
83
                "default": "JSONRPC",
84
                "type": "string",
85
                "minLength": 1
86
              },
87
              "endpoint": {
88
                "type": "string",
89
                "format": "uri"
90
              },
91
              "managedBy": {
92
                "default": "agent",
93
                "type": "string",
94
                "const": "agent"
95
              }
96
            },
97
            "required": [
98
              "protocol",
99
              "protocolBinding",
100
              "endpoint",
101
              "managedBy"
102
            ],
103
            "additionalProperties": false
104
          }
105
        },
106
        "slug": {
107
          "type": "string",
108
          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
109
        },
110
        "profileUrl": {
111
          "type": "string",
112
          "format": "uri"
113
        },
114
        "cardUrl": {
115
          "type": "string",
116
          "format": "uri"
117
        },
118
        "a2aAgentCardUrl": {
119
          "type": "string",
120
          "format": "uri"
121
        },
122
        "extensionUri": {
123
          "type": "string",
124
          "format": "uri"
125
        },
126
        "presence": {
127
          "type": "object",
128
          "properties": {
129
            "status": {
130
              "type": "string",
131
              "enum": [
132
                "online",
133
                "offline"
134
              ]
135
            },
136
            "lastSeenAt": {
137
              "type": "string",
138
              "format": "date-time",
139
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
140
            },
141
            "checkedAt": {
142
              "type": "string",
143
              "format": "date-time",
144
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
145
            }
146
          },
147
          "required": [
148
            "status",
149
            "checkedAt"
150
          ],
151
          "additionalProperties": false
152
        },
153
        "verification": {
154
          "type": "object",
155
          "properties": {
156
            "status": {
157
              "type": "string",
158
              "const": "verified"
159
            },
160
            "method": {
161
              "type": "string",
162
              "const": "openclasp_oauth_account"
163
            },
164
            "verifiedAt": {
165
              "type": "string",
166
              "format": "date-time",
167
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
168
            },
169
            "verificationKeyUrl": {
170
              "type": "string",
171
              "format": "uri"
172
            }
173
          },
174
          "required": [
175
            "status",
176
            "method",
177
            "verifiedAt"
178
          ],
179
          "additionalProperties": false
180
        },
181
        "publishedAt": {
182
          "type": "string",
183
          "format": "date-time",
184
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
185
        },
186
        "updatedAt": {
187
          "type": "string",
188
          "format": "date-time",
189
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
190
        },
191
        "platformAttestation": {
192
          "type": "object",
193
          "properties": {
194
            "algorithm": {
195
              "type": "string",
196
              "const": "Ed25519"
197
            },
198
            "keyId": {
199
              "type": "string",
200
              "minLength": 1
201
            },
202
            "value": {
203
              "type": "string",
204
              "minLength": 1
205
            },
206
            "digest": {
207
              "type": "string",
208
              "pattern": "^[a-zA-Z0-9_-]{43}$"
209
            }
210
          },
211
          "required": [
212
            "algorithm",
213
            "keyId",
214
            "value",
215
            "digest"
216
          ],
217
          "additionalProperties": false
218
        }
219
      },
220
      "required": [
221
        "protocolVersion",
222
        "agentId",
223
        "name",
224
        "description",
225
        "framework",
226
        "agentVersion",
227
        "capabilities",
228
        "limitations",
229
        "assurance",
230
        "agentMode",
231
        "transports",
232
        "cardUrl",
233
        "a2aAgentCardUrl",
234
        "extensionUri",
235
        "publishedAt",
236
        "updatedAt"
237
      ],
238
      "additionalProperties": false
239
    },
240
    "resolvedAt": {
241
      "type": "string",
242
      "format": "date-time",
243
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
244
    }
245
  },
246
  "required": [
247
    "reference",
248
    "matchedBy",
249
    "verified",
250
    "card",
251
    "resolvedAt"
252
  ],
253
  "additionalProperties": false
254
}