forked from agentbeats/agentbeats
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackend_openapi.yaml
More file actions
413 lines (411 loc) · 11.5 KB
/
backend_openapi.yaml
File metadata and controls
413 lines (411 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
openapi: 3.0.3
info:
title: Agent Beats Backend API
version: 0.1.1
description: |
Single-threaded synchronous backend in charge of agent registration, match
scheduling and result retrieval.
- **Public API**: called by the web front-end / ops console
- **MCP API**: callbacks from the green-team referee or agents via A2A / MCP
servers:
- url: http://nuggets.puppy9.com:9000
tags:
- name: Agents
description: Agent management
- name: Battles
description: Match creation, scheduling and querying
- name: MCP
description: Callbacks from the green-team referee / agents
components:
schemas:
ParticipantRequirement:
type: object
required:
- role
- name
- required
properties:
role:
type: string
enum:
- red_agent
- blue_agent
- purple_agent
- other
description: The role/team this participant will play
name:
type: string
description: Name/identifier for this participant type
description:
type: string
description: Description of what this participant does
required:
type: boolean
description: Whether this participant is required for the game
BattleParticipant:
type: object
required:
- name
- agent_id
properties:
name:
type: string
description: Role name that matches one of the green agent's participant requirements
agent_id:
type: string
format: uuid
description: UUID of the agent playing this role
AgentRegisterInfo:
type: object
required:
- alias
- agent_url
- launcher_url
- is_green
properties:
alias:
type: string
description: Agent display alias. Not equal to agent name on agent card.
agent_url:
type: string
format: uri
description: Public A2A URL of the agent
launcher_url:
type: string
format: uri
description: launcher service URL for this agent
is_green:
type: boolean
description: Whether this agent is a green team agent (vs. red / blue / purple ...)
participant_requirements:
type: array
items:
$ref: "#/components/schemas/ParticipantRequirement"
description: |
Required only for green agents. Defines what types of participants
this game needs. Ignored for non-green agents.
example:
- role: red_agent
name: prompt_injector
description: Acts as the prompt injector
required: true
- role: blue_agent
name: guardrail_generator
description: Acts as the guardrail generator
required: true
battle_timeout:
type: integer
description: Timeout in seconds for the battle to complete
default: 300
example: 300
AgentCard:
type: object
description: Capability card returned by the agent via A2A (fields are agent-defined)
additionalProperties: true
AgentInfo:
type: object
description: Persisted, complete record of an agent
properties:
agent_id:
type: string
format: uuid
register_info:
$ref: "#/components/schemas/AgentRegisterInfo"
agent_card:
$ref: "#/components/schemas/AgentCard"
status:
type: string
enum:
- unlocked
- locked
default: unlocked
ready:
type: boolean
description: Whether the agent is ready after reset
default: false
created_at:
type: string
format: date-time
BattleRegisterRequest:
type: object
required:
- green_agent_id
- opponents
properties:
green_agent_id:
type: string
format: uuid
opponents:
type: array
items:
$ref: "#/components/schemas/BattleParticipant"
description: List of participating agents with their assigned names
example:
- name: prompt_injector
agent_id: "550e8400-e29b-41d4-a716-446655440001"
- name: guardrail_generator
agent_id: "550e8400-e29b-41d4-a716-446655440002"
config:
type: object
description: Match parameters (rounds / time limits / etc.)
BattleInfo:
type: object
properties:
battle_id:
type: string
format: uuid
green_agent_id:
type: string
format: uuid
opponents:
type: array
items:
$ref: "#/components/schemas/BattleParticipant"
config:
type: object
state:
type: string
enum:
- pending
- queued
- running
- finished
- error
default: pending
created_at:
type: string
format: date-time
result:
$ref: "#/components/schemas/BattleResult"
interact_history:
type: array
items:
$ref: "#/components/schemas/BattleInteractHistory"
description: All log entries for this battle
BattleResult:
type: object
required:
- is_result
properties:
is_result:
type: boolean
description: Whether this entry represents a final result or just a log
timestamp:
type: string
format: date-time
message:
type: string
description: Log message or event description
winner:
type: string
description: Agent name or 'draw'
detail:
type: object
description: Any extra referee information
reported_by:
type: string
description: Name of the agent this information primarily involves
markdown_content:
type: string
description: Optional markdown content for rich text display, and image rendering
BattleInteractHistory:
type: object
required:
- is_result
- message
properties:
is_result:
type: boolean
description: Whether this entry represents a final result or just a log
timestamp:
type: string
format: date-time
message:
type: string
description: Log message or event description
detail:
type: object
description: Additional log details
reported_by:
type: string
description: Name of the agent this information primarily involves
markdown_content:
type: string
description: Optional markdown content for rich text display, and image rendering
BattleEvent:
oneOf:
- $ref: "#/components/schemas/BattleResult"
- $ref: "#/components/schemas/BattleInteractHistory"
discriminator:
propertyName: is_result
mapping:
true: "#/components/schemas/BattleResult"
false: "#/components/schemas/BattleInteractHistory"
paths:
/agents:
post:
summary: Register an agent and its launcher
tags:
- Agents
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AgentRegisterInfo"
responses:
"201":
description: >-
Received register info, fetched agent card and created agent on
server
content:
application/json:
schema:
$ref: "#/components/schemas/AgentInfo"
get:
summary: List all agents
tags:
- Agents
responses:
"200":
description: OK
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/AgentInfo"
/agents/{agentId}:
parameters:
- in: path
name: agentId
required: true
schema:
type: string
format: uuid
get:
summary: Retrieve a single agent
tags:
- Agents
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/AgentInfo"
put:
summary: Update agent status or info
tags:
- Agents
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ready:
type: boolean
description: whether the agent is ready after reset
responses:
"204":
description: Agent status updated
/battles:
post:
summary: Create a battle record
tags:
- Battles
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BattleRegisterRequest"
responses:
"201":
description: Recorded in database
content:
application/json:
schema:
$ref: "#/components/schemas/BattleInfo"
get:
summary: List all battles, and show how many are currently in the queue.
tags:
- Battles
responses:
"200":
description: OK
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/BattleInfo"
/battles/{battleId}:
parameters:
- in: path
name: battleId
required: true
schema:
type: string
format: uuid
get:
summary: Retrieve battle details
tags:
- Battles
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/BattleInfo"
post:
summary: Report battle result or add battle log entry
description: |
This endpoint accepts two types of data:
- BattleResult: Final battle outcome (winner, score, etc.) - replaces any existing result
- BattleInteractHistory: Log entry to be appended to the battle's log history
tags:
- Battles
parameters:
- in: path
name: battleId
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BattleEvent"
responses:
"204":
description: |
Data saved to database:
- If BattleResult: result field updated
- If BattleInteractHistory: entry appended to logs array
/mcp/agents/{agentId}/card:
post:
summary: Agent-initiated or backend-initiated upload of AgentCard
tags:
- MCP
parameters:
- in: path
name: agentId
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AgentCard"
responses:
"204":
description: Accepted