@breign/client 1.0.194 → 1.0.196

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/apis/ExecutionNodesApi.d.ts +31 -3
  2. package/dist/apis/ExecutionNodesApi.js +66 -2
  3. package/dist/apis/NodeGroupsApi.d.ts +353 -0
  4. package/dist/apis/NodeGroupsApi.js +697 -0
  5. package/dist/apis/index.d.ts +1 -0
  6. package/dist/apis/index.js +1 -0
  7. package/dist/models/AgentExecutionGroupChoiceRuntimesInnerUio.d.ts +46 -0
  8. package/dist/models/AgentExecutionGroupChoiceRuntimesInnerUio.js +62 -0
  9. package/dist/models/AgentExecutionGroupChoiceUio.d.ts +70 -0
  10. package/dist/models/AgentExecutionGroupChoiceUio.js +76 -0
  11. package/dist/models/AgentExecutionGroupChoiceWorkspacesInnerUio.d.ts +44 -0
  12. package/dist/models/AgentExecutionGroupChoiceWorkspacesInnerUio.js +58 -0
  13. package/dist/models/AgentExecutionGroupUio.d.ts +38 -0
  14. package/dist/models/AgentExecutionGroupUio.js +54 -0
  15. package/dist/models/AgentExecutionUio.d.ts +27 -0
  16. package/dist/models/AgentExecutionUio.js +14 -1
  17. package/dist/models/CreateNodeGroupRequestUio.d.ts +56 -0
  18. package/dist/models/CreateNodeGroupRequestUio.js +58 -0
  19. package/dist/models/NodeGroupAgentUio.d.ts +58 -0
  20. package/dist/models/NodeGroupAgentUio.js +70 -0
  21. package/dist/models/NodeGroupBulkIdsUio.d.ts +32 -0
  22. package/dist/models/NodeGroupBulkIdsUio.js +50 -0
  23. package/dist/models/NodeGroupBulkResultResultsInnerUio.d.ts +50 -0
  24. package/dist/models/NodeGroupBulkResultResultsInnerUio.js +58 -0
  25. package/dist/models/NodeGroupBulkResultUio.d.ts +33 -0
  26. package/dist/models/NodeGroupBulkResultUio.js +51 -0
  27. package/dist/models/NodeGroupCandidateUio.d.ts +115 -0
  28. package/dist/models/NodeGroupCandidateUio.js +109 -0
  29. package/dist/models/NodeGroupDelaysUio.d.ts +44 -0
  30. package/dist/models/NodeGroupDelaysUio.js +52 -0
  31. package/dist/models/NodeGroupDetailUio.d.ts +100 -0
  32. package/dist/models/NodeGroupDetailUio.js +96 -0
  33. package/dist/models/NodeGroupEnvironmentPageCountsUio.d.ts +56 -0
  34. package/dist/models/NodeGroupEnvironmentPageCountsUio.js +66 -0
  35. package/dist/models/NodeGroupEnvironmentPageUio.d.ts +52 -0
  36. package/dist/models/NodeGroupEnvironmentPageUio.js +64 -0
  37. package/dist/models/NodeGroupEnvironmentReleaseFilterUio.d.ts +45 -0
  38. package/dist/models/NodeGroupEnvironmentReleaseFilterUio.js +59 -0
  39. package/dist/models/NodeGroupEnvironmentReleaseUio.d.ts +39 -0
  40. package/dist/models/NodeGroupEnvironmentReleaseUio.js +51 -0
  41. package/dist/models/NodeGroupEnvironmentUio.d.ts +140 -0
  42. package/dist/models/NodeGroupEnvironmentUio.js +130 -0
  43. package/dist/models/NodeGroupExecutionPageUio.d.ts +45 -0
  44. package/dist/models/NodeGroupExecutionPageUio.js +59 -0
  45. package/dist/models/NodeGroupExecutionUio.d.ts +180 -0
  46. package/dist/models/NodeGroupExecutionUio.js +155 -0
  47. package/dist/models/NodeGroupMemberNodeUio.d.ts +115 -0
  48. package/dist/models/NodeGroupMemberNodeUio.js +109 -0
  49. package/dist/models/NodeGroupNodeOverviewOtherGroupsInnerUio.d.ts +38 -0
  50. package/dist/models/NodeGroupNodeOverviewOtherGroupsInnerUio.js +54 -0
  51. package/dist/models/NodeGroupNodeOverviewRunningInnerUio.d.ts +62 -0
  52. package/dist/models/NodeGroupNodeOverviewRunningInnerUio.js +70 -0
  53. package/dist/models/NodeGroupNodeOverviewUio.d.ts +135 -0
  54. package/dist/models/NodeGroupNodeOverviewUio.js +123 -0
  55. package/dist/models/NodeGroupNodePageUio.d.ts +39 -0
  56. package/dist/models/NodeGroupNodePageUio.js +55 -0
  57. package/dist/models/NodeGroupNodeUio.d.ts +103 -0
  58. package/dist/models/NodeGroupNodeUio.js +101 -0
  59. package/dist/models/NodeGroupQueueSummaryEnvironmentsUio.d.ts +44 -0
  60. package/dist/models/NodeGroupQueueSummaryEnvironmentsUio.js +58 -0
  61. package/dist/models/NodeGroupQueueSummaryMedianWaitMsUio.d.ts +38 -0
  62. package/dist/models/NodeGroupQueueSummaryMedianWaitMsUio.js +54 -0
  63. package/dist/models/NodeGroupQueueSummaryNodesInnerUio.d.ts +56 -0
  64. package/dist/models/NodeGroupQueueSummaryNodesInnerUio.js +66 -0
  65. package/dist/models/NodeGroupQueueSummaryPendingByAgentInnerUio.d.ts +44 -0
  66. package/dist/models/NodeGroupQueueSummaryPendingByAgentInnerUio.js +58 -0
  67. package/dist/models/NodeGroupQueueSummaryUio.d.ts +115 -0
  68. package/dist/models/NodeGroupQueueSummaryUio.js +107 -0
  69. package/dist/models/NodeGroupQueueSummaryWaitingForUio.d.ts +44 -0
  70. package/dist/models/NodeGroupQueueSummaryWaitingForUio.js +58 -0
  71. package/dist/models/NodeGroupSummaryUio.d.ts +116 -0
  72. package/dist/models/NodeGroupSummaryUio.js +106 -0
  73. package/dist/models/NodeGroupUio.d.ts +86 -0
  74. package/dist/models/NodeGroupUio.js +86 -0
  75. package/dist/models/NodeQueueTurnGroupUio.d.ts +38 -0
  76. package/dist/models/NodeQueueTurnGroupUio.js +54 -0
  77. package/dist/models/NodeQueueTurnUio.d.ts +114 -0
  78. package/dist/models/NodeQueueTurnUio.js +106 -0
  79. package/dist/models/NodeRefUio.d.ts +44 -0
  80. package/dist/models/NodeRefUio.js +58 -0
  81. package/dist/models/NodeSessionDetailUio.d.ts +1 -1
  82. package/dist/models/NodeSessionStateUio.d.ts +2 -1
  83. package/dist/models/NodeSessionStateUio.js +2 -1
  84. package/dist/models/NodeSessionUio.d.ts +1 -1
  85. package/dist/models/SetAgentExecutionRequestUio.d.ts +20 -1
  86. package/dist/models/SetAgentExecutionRequestUio.js +8 -1
  87. package/dist/models/UpdateNodeGroupRequestUio.d.ts +56 -0
  88. package/dist/models/UpdateNodeGroupRequestUio.js +56 -0
  89. package/dist/models/WaitingForUio.d.ts +26 -0
  90. package/dist/models/WaitingForUio.js +52 -0
  91. package/dist/models/index.d.ts +38 -0
  92. package/dist/models/index.js +38 -0
  93. package/dist/openapi.json +1994 -8
  94. package/package.json +1 -1
package/dist/openapi.json CHANGED
@@ -96,6 +96,9 @@
96
96
  }, {
97
97
  "description" : "Breign Mate execution nodes, the agents that run on them and their turns",
98
98
  "name" : "execution-nodes"
99
+ }, {
100
+ "description" : "Groups of execution nodes of an organization, like runners",
101
+ "name" : "node-groups"
99
102
  }, {
100
103
  "description" : "Actions and mentions waiting for the current user",
101
104
  "name" : "inbox"
@@ -19960,6 +19963,873 @@
19960
19963
  "tags" : [ "execution-nodes" ]
19961
19964
  }
19962
19965
  },
19966
+ "/organizations/{organizationId}/node-groups" : {
19967
+ "get" : {
19968
+ "description" : "Les groupes de nœuds de l'organisation, avec leurs nœuds (en ligne ou non), leurs emplacements et le nombre d'agents rattachés. Demande `nodeGroup.read`.",
19969
+ "operationId" : "listNodeGroups",
19970
+ "parameters" : [ {
19971
+ "description" : "ID of the organization",
19972
+ "in" : "path",
19973
+ "name" : "organizationId",
19974
+ "required" : true,
19975
+ "schema" : {
19976
+ "type" : "string"
19977
+ }
19978
+ } ],
19979
+ "responses" : {
19980
+ "200" : {
19981
+ "content" : {
19982
+ "application/json" : {
19983
+ "schema" : {
19984
+ "items" : {
19985
+ "$ref" : "#/components/schemas/NodeGroupSummary"
19986
+ },
19987
+ "type" : "array"
19988
+ }
19989
+ }
19990
+ },
19991
+ "description" : "OK"
19992
+ },
19993
+ "401" : {
19994
+ "description" : "Unauthenticated"
19995
+ },
19996
+ "403" : {
19997
+ "description" : "Forbidden — missing nodeGroup.read"
19998
+ }
19999
+ },
20000
+ "summary" : "List the node groups of an organization",
20001
+ "tags" : [ "node-groups" ]
20002
+ },
20003
+ "post" : {
20004
+ "description" : "Crée un groupe vide ; les délais absents prennent les valeurs par défaut (attente du nœud de l'environnement 10 min, libération après 24 h, expiration de la file après 24 h). Demande `nodeGroup.create`.",
20005
+ "operationId" : "createNodeGroup",
20006
+ "parameters" : [ {
20007
+ "description" : "ID of the organization",
20008
+ "in" : "path",
20009
+ "name" : "organizationId",
20010
+ "required" : true,
20011
+ "schema" : {
20012
+ "type" : "string"
20013
+ }
20014
+ } ],
20015
+ "requestBody" : {
20016
+ "content" : {
20017
+ "application/json" : {
20018
+ "schema" : {
20019
+ "$ref" : "#/components/schemas/CreateNodeGroupRequest"
20020
+ }
20021
+ }
20022
+ },
20023
+ "required" : true
20024
+ },
20025
+ "responses" : {
20026
+ "201" : {
20027
+ "content" : {
20028
+ "application/json" : {
20029
+ "schema" : {
20030
+ "$ref" : "#/components/schemas/NodeGroupDetail"
20031
+ }
20032
+ }
20033
+ },
20034
+ "description" : "Created"
20035
+ },
20036
+ "400" : {
20037
+ "description" : "Invalid name or delays"
20038
+ },
20039
+ "401" : {
20040
+ "description" : "Unauthenticated"
20041
+ },
20042
+ "403" : {
20043
+ "description" : "Forbidden — missing nodeGroup.create"
20044
+ },
20045
+ "409" : {
20046
+ "description" : "A group of this name already exists (NODE_GROUP_NAME_TAKEN)"
20047
+ }
20048
+ },
20049
+ "summary" : "Create a node group",
20050
+ "tags" : [ "node-groups" ]
20051
+ }
20052
+ },
20053
+ "/organizations/{organizationId}/node-group-candidates" : {
20054
+ "get" : {
20055
+ "description" : "Les nœuds associés à l'organisation, avec ce qui empêche chacun d'entrer dans un groupe (un nœud doit parler le contrat v2 : Breign Mate ou Breign CLI à jour). Demande `nodeGroup.read`.",
20056
+ "operationId" : "listNodeGroupCandidates",
20057
+ "parameters" : [ {
20058
+ "description" : "ID of the organization",
20059
+ "in" : "path",
20060
+ "name" : "organizationId",
20061
+ "required" : true,
20062
+ "schema" : {
20063
+ "type" : "string"
20064
+ }
20065
+ } ],
20066
+ "responses" : {
20067
+ "200" : {
20068
+ "content" : {
20069
+ "application/json" : {
20070
+ "schema" : {
20071
+ "items" : {
20072
+ "$ref" : "#/components/schemas/NodeGroupCandidate"
20073
+ },
20074
+ "type" : "array"
20075
+ }
20076
+ }
20077
+ },
20078
+ "description" : "OK"
20079
+ },
20080
+ "401" : {
20081
+ "description" : "Unauthenticated"
20082
+ },
20083
+ "403" : {
20084
+ "description" : "Forbidden — missing nodeGroup.read"
20085
+ }
20086
+ },
20087
+ "summary" : "List the nodes that can join a node group",
20088
+ "tags" : [ "node-groups" ]
20089
+ }
20090
+ },
20091
+ "/node-groups/{groupId}" : {
20092
+ "delete" : {
20093
+ "description" : "Supprime le groupe et ses membres. Refusé tant qu'un agent y est rattaché. Demande `nodeGroup.delete`.",
20094
+ "operationId" : "deleteNodeGroup",
20095
+ "parameters" : [ {
20096
+ "description" : "ID of the node group",
20097
+ "in" : "path",
20098
+ "name" : "groupId",
20099
+ "required" : true,
20100
+ "schema" : {
20101
+ "format" : "uuid",
20102
+ "type" : "string"
20103
+ }
20104
+ } ],
20105
+ "responses" : {
20106
+ "204" : {
20107
+ "description" : "Deleted"
20108
+ },
20109
+ "401" : {
20110
+ "description" : "Unauthenticated"
20111
+ },
20112
+ "403" : {
20113
+ "description" : "Forbidden — missing nodeGroup.delete"
20114
+ },
20115
+ "404" : {
20116
+ "description" : "Group not found"
20117
+ },
20118
+ "409" : {
20119
+ "description" : "Agents are still bound to the group (NODE_GROUP_IN_USE)"
20120
+ }
20121
+ },
20122
+ "summary" : "Delete a node group",
20123
+ "tags" : [ "node-groups" ]
20124
+ },
20125
+ "get" : {
20126
+ "description" : "Le groupe, ses nœuds et les agents qui y sont rattachés. Demande `nodeGroup.read`.",
20127
+ "operationId" : "getNodeGroup",
20128
+ "parameters" : [ {
20129
+ "description" : "ID of the node group",
20130
+ "in" : "path",
20131
+ "name" : "groupId",
20132
+ "required" : true,
20133
+ "schema" : {
20134
+ "format" : "uuid",
20135
+ "type" : "string"
20136
+ }
20137
+ } ],
20138
+ "responses" : {
20139
+ "200" : {
20140
+ "content" : {
20141
+ "application/json" : {
20142
+ "schema" : {
20143
+ "$ref" : "#/components/schemas/NodeGroupDetail"
20144
+ }
20145
+ }
20146
+ },
20147
+ "description" : "OK"
20148
+ },
20149
+ "401" : {
20150
+ "description" : "Unauthenticated"
20151
+ },
20152
+ "403" : {
20153
+ "description" : "Forbidden — missing nodeGroup.read in the organization of the group"
20154
+ },
20155
+ "404" : {
20156
+ "description" : "Group not found"
20157
+ }
20158
+ },
20159
+ "summary" : "Get a node group",
20160
+ "tags" : [ "node-groups" ]
20161
+ },
20162
+ "patch" : {
20163
+ "description" : "Renomme le groupe ou change ses délais. Demande `nodeGroup.update`.",
20164
+ "operationId" : "updateNodeGroup",
20165
+ "parameters" : [ {
20166
+ "description" : "ID of the node group",
20167
+ "in" : "path",
20168
+ "name" : "groupId",
20169
+ "required" : true,
20170
+ "schema" : {
20171
+ "format" : "uuid",
20172
+ "type" : "string"
20173
+ }
20174
+ } ],
20175
+ "requestBody" : {
20176
+ "content" : {
20177
+ "application/json" : {
20178
+ "schema" : {
20179
+ "$ref" : "#/components/schemas/UpdateNodeGroupRequest"
20180
+ }
20181
+ }
20182
+ },
20183
+ "required" : true
20184
+ },
20185
+ "responses" : {
20186
+ "200" : {
20187
+ "content" : {
20188
+ "application/json" : {
20189
+ "schema" : {
20190
+ "$ref" : "#/components/schemas/NodeGroupDetail"
20191
+ }
20192
+ }
20193
+ },
20194
+ "description" : "OK"
20195
+ },
20196
+ "400" : {
20197
+ "description" : "Invalid name or delays"
20198
+ },
20199
+ "401" : {
20200
+ "description" : "Unauthenticated"
20201
+ },
20202
+ "403" : {
20203
+ "description" : "Forbidden — missing nodeGroup.update"
20204
+ },
20205
+ "404" : {
20206
+ "description" : "Group not found"
20207
+ },
20208
+ "409" : {
20209
+ "description" : "A group of this name already exists (NODE_GROUP_NAME_TAKEN)"
20210
+ }
20211
+ },
20212
+ "summary" : "Update a node group",
20213
+ "tags" : [ "node-groups" ]
20214
+ }
20215
+ },
20216
+ "/node-groups/{groupId}/nodes/{nodeId}" : {
20217
+ "delete" : {
20218
+ "description" : "Retire le nœud du groupe. Demande `nodeGroup.update`.",
20219
+ "operationId" : "removeNodeGroupNode",
20220
+ "parameters" : [ {
20221
+ "description" : "ID of the node group",
20222
+ "in" : "path",
20223
+ "name" : "groupId",
20224
+ "required" : true,
20225
+ "schema" : {
20226
+ "format" : "uuid",
20227
+ "type" : "string"
20228
+ }
20229
+ }, {
20230
+ "description" : "ID of the Breign Mate execution node",
20231
+ "in" : "path",
20232
+ "name" : "nodeId",
20233
+ "required" : true,
20234
+ "schema" : {
20235
+ "format" : "uuid",
20236
+ "type" : "string"
20237
+ }
20238
+ } ],
20239
+ "responses" : {
20240
+ "200" : {
20241
+ "content" : {
20242
+ "application/json" : {
20243
+ "schema" : {
20244
+ "$ref" : "#/components/schemas/NodeGroupDetail"
20245
+ }
20246
+ }
20247
+ },
20248
+ "description" : "OK"
20249
+ },
20250
+ "401" : {
20251
+ "description" : "Unauthenticated"
20252
+ },
20253
+ "403" : {
20254
+ "description" : "Forbidden — missing nodeGroup.update"
20255
+ },
20256
+ "404" : {
20257
+ "description" : "Group not found"
20258
+ }
20259
+ },
20260
+ "summary" : "Remove a node from a node group",
20261
+ "tags" : [ "node-groups" ]
20262
+ },
20263
+ "put" : {
20264
+ "description" : "Ajoute un nœud associé à l'organisation du groupe et parlant le contrat v2 ; sans effet s'il y est déjà. Demande `nodeGroup.update`.",
20265
+ "operationId" : "addNodeGroupNode",
20266
+ "parameters" : [ {
20267
+ "description" : "ID of the node group",
20268
+ "in" : "path",
20269
+ "name" : "groupId",
20270
+ "required" : true,
20271
+ "schema" : {
20272
+ "format" : "uuid",
20273
+ "type" : "string"
20274
+ }
20275
+ }, {
20276
+ "description" : "ID of the Breign Mate execution node",
20277
+ "in" : "path",
20278
+ "name" : "nodeId",
20279
+ "required" : true,
20280
+ "schema" : {
20281
+ "format" : "uuid",
20282
+ "type" : "string"
20283
+ }
20284
+ } ],
20285
+ "responses" : {
20286
+ "200" : {
20287
+ "content" : {
20288
+ "application/json" : {
20289
+ "schema" : {
20290
+ "$ref" : "#/components/schemas/NodeGroupDetail"
20291
+ }
20292
+ }
20293
+ },
20294
+ "description" : "OK"
20295
+ },
20296
+ "401" : {
20297
+ "description" : "Unauthenticated"
20298
+ },
20299
+ "403" : {
20300
+ "description" : "Forbidden — missing nodeGroup.update"
20301
+ },
20302
+ "404" : {
20303
+ "description" : "Group not found"
20304
+ },
20305
+ "409" : {
20306
+ "description" : "The node cannot join the group (NODE_NOT_ELIGIBLE)"
20307
+ }
20308
+ },
20309
+ "summary" : "Add a node to a node group",
20310
+ "tags" : [ "node-groups" ]
20311
+ }
20312
+ },
20313
+ "/node-groups/{groupId}/summary" : {
20314
+ "get" : {
20315
+ "description" : "Les compteurs de la file (en attente, en cours, attente médiane, causes d'attente), la file par agent, l'occupation des nœuds et les environnements conservés. Demande `nodeGroup.read`.",
20316
+ "operationId" : "getNodeGroupSummary",
20317
+ "parameters" : [ {
20318
+ "description" : "ID of the node group",
20319
+ "in" : "path",
20320
+ "name" : "groupId",
20321
+ "required" : true,
20322
+ "schema" : {
20323
+ "format" : "uuid",
20324
+ "type" : "string"
20325
+ }
20326
+ } ],
20327
+ "responses" : {
20328
+ "200" : {
20329
+ "content" : {
20330
+ "application/json" : {
20331
+ "schema" : {
20332
+ "$ref" : "#/components/schemas/NodeGroupQueueSummary"
20333
+ }
20334
+ }
20335
+ },
20336
+ "description" : "OK"
20337
+ },
20338
+ "401" : {
20339
+ "description" : "Unauthenticated"
20340
+ },
20341
+ "403" : {
20342
+ "description" : "Forbidden — missing nodeGroup.read"
20343
+ },
20344
+ "404" : {
20345
+ "description" : "Group not found"
20346
+ }
20347
+ },
20348
+ "summary" : "Get the queue summary of a node group",
20349
+ "tags" : [ "node-groups" ]
20350
+ }
20351
+ },
20352
+ "/node-groups/{groupId}/executions" : {
20353
+ "get" : {
20354
+ "description" : "En attente (avec leur place dans la file), en cours, ou terminées sur 24 h. Seules les exécutions des agents que l'appelant peut lire sont listées. Demande `nodeGroup.read`.",
20355
+ "operationId" : "listNodeGroupExecutions",
20356
+ "parameters" : [ {
20357
+ "description" : "ID of the node group",
20358
+ "in" : "path",
20359
+ "name" : "groupId",
20360
+ "required" : true,
20361
+ "schema" : {
20362
+ "format" : "uuid",
20363
+ "type" : "string"
20364
+ }
20365
+ }, {
20366
+ "in" : "query",
20367
+ "name" : "status",
20368
+ "required" : false,
20369
+ "schema" : {
20370
+ "enum" : [ "pending", "running", "done" ],
20371
+ "type" : "string"
20372
+ }
20373
+ }, {
20374
+ "in" : "query",
20375
+ "name" : "q",
20376
+ "required" : false,
20377
+ "schema" : {
20378
+ "type" : "string"
20379
+ }
20380
+ }, {
20381
+ "description" : "Agents",
20382
+ "in" : "query",
20383
+ "name" : "agentId",
20384
+ "required" : false,
20385
+ "schema" : {
20386
+ "type" : "string"
20387
+ }
20388
+ }, {
20389
+ "in" : "query",
20390
+ "name" : "origin",
20391
+ "required" : false,
20392
+ "schema" : {
20393
+ "enum" : [ "conversation", "ticket", "agent", "task" ],
20394
+ "type" : "string"
20395
+ }
20396
+ }, {
20397
+ "in" : "query",
20398
+ "name" : "waitingFor",
20399
+ "required" : false,
20400
+ "schema" : {
20401
+ "enum" : [ "free", "env_busy", "env_offline" ],
20402
+ "type" : "string"
20403
+ }
20404
+ }, {
20405
+ "in" : "query",
20406
+ "name" : "nodeId",
20407
+ "required" : false,
20408
+ "schema" : {
20409
+ "format" : "uuid",
20410
+ "type" : "string"
20411
+ }
20412
+ }, {
20413
+ "in" : "query",
20414
+ "name" : "runtime",
20415
+ "required" : false,
20416
+ "schema" : {
20417
+ "enum" : [ "claude", "opencode" ],
20418
+ "type" : "string"
20419
+ }
20420
+ }, {
20421
+ "in" : "query",
20422
+ "name" : "result",
20423
+ "required" : false,
20424
+ "schema" : {
20425
+ "enum" : [ "finished", "failed", "interrupted" ],
20426
+ "type" : "string"
20427
+ }
20428
+ }, {
20429
+ "in" : "query",
20430
+ "name" : "sort",
20431
+ "required" : false,
20432
+ "schema" : {
20433
+ "enum" : [ "oldest", "newest", "agent" ],
20434
+ "type" : "string"
20435
+ }
20436
+ }, {
20437
+ "in" : "query",
20438
+ "name" : "page",
20439
+ "required" : false,
20440
+ "schema" : {
20441
+ "minimum" : 1,
20442
+ "type" : "integer"
20443
+ }
20444
+ }, {
20445
+ "in" : "query",
20446
+ "name" : "limit",
20447
+ "required" : false,
20448
+ "schema" : {
20449
+ "maximum" : 100,
20450
+ "minimum" : 1,
20451
+ "type" : "integer"
20452
+ }
20453
+ } ],
20454
+ "responses" : {
20455
+ "200" : {
20456
+ "content" : {
20457
+ "application/json" : {
20458
+ "schema" : {
20459
+ "$ref" : "#/components/schemas/NodeGroupExecutionPage"
20460
+ }
20461
+ }
20462
+ },
20463
+ "description" : "OK"
20464
+ },
20465
+ "400" : {
20466
+ "description" : "Unknown filter value"
20467
+ },
20468
+ "401" : {
20469
+ "description" : "Unauthenticated"
20470
+ },
20471
+ "403" : {
20472
+ "description" : "Forbidden — missing nodeGroup.read"
20473
+ },
20474
+ "404" : {
20475
+ "description" : "Group not found"
20476
+ }
20477
+ },
20478
+ "summary" : "List the executions of a node group",
20479
+ "tags" : [ "node-groups" ]
20480
+ }
20481
+ },
20482
+ "/node-groups/{groupId}/executions/cancel" : {
20483
+ "post" : {
20484
+ "description" : "Annule ces exécutions (en attente ou en cours). Demande `nodeGroup.execution.manage`, sauf pour les exécutions des conversations de l'appelant.",
20485
+ "operationId" : "cancelNodeGroupExecutions",
20486
+ "parameters" : [ {
20487
+ "description" : "ID of the node group",
20488
+ "in" : "path",
20489
+ "name" : "groupId",
20490
+ "required" : true,
20491
+ "schema" : {
20492
+ "format" : "uuid",
20493
+ "type" : "string"
20494
+ }
20495
+ } ],
20496
+ "requestBody" : {
20497
+ "content" : {
20498
+ "application/json" : {
20499
+ "schema" : {
20500
+ "$ref" : "#/components/schemas/NodeGroupBulkIds"
20501
+ }
20502
+ }
20503
+ },
20504
+ "required" : true
20505
+ },
20506
+ "responses" : {
20507
+ "200" : {
20508
+ "content" : {
20509
+ "application/json" : {
20510
+ "schema" : {
20511
+ "$ref" : "#/components/schemas/NodeGroupBulkResult"
20512
+ }
20513
+ }
20514
+ },
20515
+ "description" : "Le résultat de chaque exécution"
20516
+ },
20517
+ "401" : {
20518
+ "description" : "Unauthenticated"
20519
+ },
20520
+ "403" : {
20521
+ "description" : "Forbidden — missing nodeGroup.execution.manage"
20522
+ },
20523
+ "404" : {
20524
+ "description" : "Group or execution not found"
20525
+ }
20526
+ },
20527
+ "summary" : "Cancel executions of a node group",
20528
+ "tags" : [ "node-groups" ]
20529
+ }
20530
+ },
20531
+ "/node-groups/{groupId}/executions/start-elsewhere" : {
20532
+ "post" : {
20533
+ "description" : "Ces exécutions n'attendent plus le nœud de leur environnement : le premier nœud libre du groupe les prend. Demande `nodeGroup.execution.manage`, sauf pour les exécutions des conversations de l'appelant.",
20534
+ "operationId" : "startNodeGroupExecutionsElsewhere",
20535
+ "parameters" : [ {
20536
+ "description" : "ID of the node group",
20537
+ "in" : "path",
20538
+ "name" : "groupId",
20539
+ "required" : true,
20540
+ "schema" : {
20541
+ "format" : "uuid",
20542
+ "type" : "string"
20543
+ }
20544
+ } ],
20545
+ "requestBody" : {
20546
+ "content" : {
20547
+ "application/json" : {
20548
+ "schema" : {
20549
+ "$ref" : "#/components/schemas/NodeGroupBulkIds"
20550
+ }
20551
+ }
20552
+ },
20553
+ "required" : true
20554
+ },
20555
+ "responses" : {
20556
+ "200" : {
20557
+ "content" : {
20558
+ "application/json" : {
20559
+ "schema" : {
20560
+ "$ref" : "#/components/schemas/NodeGroupBulkResult"
20561
+ }
20562
+ }
20563
+ },
20564
+ "description" : "Le résultat de chaque exécution"
20565
+ },
20566
+ "401" : {
20567
+ "description" : "Unauthenticated"
20568
+ },
20569
+ "403" : {
20570
+ "description" : "Forbidden — missing nodeGroup.execution.manage"
20571
+ },
20572
+ "404" : {
20573
+ "description" : "Group or execution not found"
20574
+ }
20575
+ },
20576
+ "summary" : "Start executions elsewhere",
20577
+ "tags" : [ "node-groups" ]
20578
+ }
20579
+ },
20580
+ "/node-groups/{groupId}/nodes" : {
20581
+ "get" : {
20582
+ "description" : "Les nœuds du groupe, leurs emplacements pris, ce qui y tourne, leurs environnements et leurs autres groupes. Demande `nodeGroup.read`.",
20583
+ "operationId" : "listNodeGroupNodes",
20584
+ "parameters" : [ {
20585
+ "description" : "ID of the node group",
20586
+ "in" : "path",
20587
+ "name" : "groupId",
20588
+ "required" : true,
20589
+ "schema" : {
20590
+ "format" : "uuid",
20591
+ "type" : "string"
20592
+ }
20593
+ }, {
20594
+ "in" : "query",
20595
+ "name" : "q",
20596
+ "required" : false,
20597
+ "schema" : {
20598
+ "type" : "string"
20599
+ }
20600
+ }, {
20601
+ "in" : "query",
20602
+ "name" : "status",
20603
+ "required" : false,
20604
+ "schema" : {
20605
+ "enum" : [ "online", "offline" ],
20606
+ "type" : "string"
20607
+ }
20608
+ }, {
20609
+ "in" : "query",
20610
+ "name" : "load",
20611
+ "required" : false,
20612
+ "schema" : {
20613
+ "enum" : [ "full", "free" ],
20614
+ "type" : "string"
20615
+ }
20616
+ }, {
20617
+ "in" : "query",
20618
+ "name" : "runtime",
20619
+ "required" : false,
20620
+ "schema" : {
20621
+ "enum" : [ "claude", "opencode" ],
20622
+ "type" : "string"
20623
+ }
20624
+ }, {
20625
+ "in" : "query",
20626
+ "name" : "ownerUserId",
20627
+ "required" : false,
20628
+ "schema" : {
20629
+ "type" : "string"
20630
+ }
20631
+ }, {
20632
+ "in" : "query",
20633
+ "name" : "sort",
20634
+ "required" : false,
20635
+ "schema" : {
20636
+ "enum" : [ "load", "name", "environments", "lastSeen" ],
20637
+ "type" : "string"
20638
+ }
20639
+ }, {
20640
+ "in" : "query",
20641
+ "name" : "page",
20642
+ "required" : false,
20643
+ "schema" : {
20644
+ "minimum" : 1,
20645
+ "type" : "integer"
20646
+ }
20647
+ }, {
20648
+ "in" : "query",
20649
+ "name" : "limit",
20650
+ "required" : false,
20651
+ "schema" : {
20652
+ "maximum" : 100,
20653
+ "minimum" : 1,
20654
+ "type" : "integer"
20655
+ }
20656
+ } ],
20657
+ "responses" : {
20658
+ "200" : {
20659
+ "content" : {
20660
+ "application/json" : {
20661
+ "schema" : {
20662
+ "$ref" : "#/components/schemas/NodeGroupNodePage"
20663
+ }
20664
+ }
20665
+ },
20666
+ "description" : "OK"
20667
+ },
20668
+ "401" : {
20669
+ "description" : "Unauthenticated"
20670
+ },
20671
+ "403" : {
20672
+ "description" : "Forbidden — missing nodeGroup.read"
20673
+ },
20674
+ "404" : {
20675
+ "description" : "Group not found"
20676
+ }
20677
+ },
20678
+ "summary" : "List the nodes of a node group with their load",
20679
+ "tags" : [ "node-groups" ]
20680
+ }
20681
+ },
20682
+ "/node-groups/{groupId}/environments" : {
20683
+ "get" : {
20684
+ "description" : "Les environnements que les nœuds du groupe gardent pour des conversations, avec leurs compteurs par état. Demande `nodeGroup.read`.",
20685
+ "operationId" : "listNodeGroupEnvironments",
20686
+ "parameters" : [ {
20687
+ "description" : "ID of the node group",
20688
+ "in" : "path",
20689
+ "name" : "groupId",
20690
+ "required" : true,
20691
+ "schema" : {
20692
+ "format" : "uuid",
20693
+ "type" : "string"
20694
+ }
20695
+ }, {
20696
+ "in" : "query",
20697
+ "name" : "state",
20698
+ "required" : false,
20699
+ "schema" : {
20700
+ "enum" : [ "running", "waiting", "idle", "releasing" ],
20701
+ "type" : "string"
20702
+ }
20703
+ }, {
20704
+ "in" : "query",
20705
+ "name" : "q",
20706
+ "required" : false,
20707
+ "schema" : {
20708
+ "type" : "string"
20709
+ }
20710
+ }, {
20711
+ "in" : "query",
20712
+ "name" : "nodeId",
20713
+ "required" : false,
20714
+ "schema" : {
20715
+ "format" : "uuid",
20716
+ "type" : "string"
20717
+ }
20718
+ }, {
20719
+ "in" : "query",
20720
+ "name" : "agentId",
20721
+ "required" : false,
20722
+ "schema" : {
20723
+ "type" : "string"
20724
+ }
20725
+ }, {
20726
+ "in" : "query",
20727
+ "name" : "idleBefore",
20728
+ "required" : false,
20729
+ "schema" : {
20730
+ "format" : "date-time",
20731
+ "type" : "string"
20732
+ }
20733
+ }, {
20734
+ "in" : "query",
20735
+ "name" : "sort",
20736
+ "required" : false,
20737
+ "schema" : {
20738
+ "enum" : [ "idle", "recent" ],
20739
+ "type" : "string"
20740
+ }
20741
+ }, {
20742
+ "in" : "query",
20743
+ "name" : "page",
20744
+ "required" : false,
20745
+ "schema" : {
20746
+ "minimum" : 1,
20747
+ "type" : "integer"
20748
+ }
20749
+ }, {
20750
+ "in" : "query",
20751
+ "name" : "limit",
20752
+ "required" : false,
20753
+ "schema" : {
20754
+ "maximum" : 100,
20755
+ "minimum" : 1,
20756
+ "type" : "integer"
20757
+ }
20758
+ } ],
20759
+ "responses" : {
20760
+ "200" : {
20761
+ "content" : {
20762
+ "application/json" : {
20763
+ "schema" : {
20764
+ "$ref" : "#/components/schemas/NodeGroupEnvironmentPage"
20765
+ }
20766
+ }
20767
+ },
20768
+ "description" : "OK"
20769
+ },
20770
+ "401" : {
20771
+ "description" : "Unauthenticated"
20772
+ },
20773
+ "403" : {
20774
+ "description" : "Forbidden — missing nodeGroup.read"
20775
+ },
20776
+ "404" : {
20777
+ "description" : "Group not found"
20778
+ }
20779
+ },
20780
+ "summary" : "List the environments kept by the nodes of a group",
20781
+ "tags" : [ "node-groups" ]
20782
+ }
20783
+ },
20784
+ "/node-groups/{groupId}/environments/release" : {
20785
+ "post" : {
20786
+ "description" : "Demande aux nœuds de supprimer ces environnements (ou tous les inactifs). Un environnement qu'une exécution utilise n'est pas libéré. Demande `nodeGroup.environment.release`.",
20787
+ "operationId" : "releaseNodeGroupEnvironments",
20788
+ "parameters" : [ {
20789
+ "description" : "ID of the node group",
20790
+ "in" : "path",
20791
+ "name" : "groupId",
20792
+ "required" : true,
20793
+ "schema" : {
20794
+ "format" : "uuid",
20795
+ "type" : "string"
20796
+ }
20797
+ } ],
20798
+ "requestBody" : {
20799
+ "content" : {
20800
+ "application/json" : {
20801
+ "schema" : {
20802
+ "$ref" : "#/components/schemas/NodeGroupEnvironmentRelease"
20803
+ }
20804
+ }
20805
+ },
20806
+ "required" : true
20807
+ },
20808
+ "responses" : {
20809
+ "200" : {
20810
+ "content" : {
20811
+ "application/json" : {
20812
+ "schema" : {
20813
+ "$ref" : "#/components/schemas/NodeGroupBulkResult"
20814
+ }
20815
+ }
20816
+ },
20817
+ "description" : "Le résultat de chaque environnement"
20818
+ },
20819
+ "401" : {
20820
+ "description" : "Unauthenticated"
20821
+ },
20822
+ "403" : {
20823
+ "description" : "Forbidden — missing nodeGroup.environment.release"
20824
+ },
20825
+ "404" : {
20826
+ "description" : "Group or environment not found"
20827
+ }
20828
+ },
20829
+ "summary" : "Release environments of a node group",
20830
+ "tags" : [ "node-groups" ]
20831
+ }
20832
+ },
19963
20833
  "/organizations/{organizationId}/support-settings" : {
19964
20834
  "get" : {
19965
20835
  "description" : "Lisibles par les membres de l'organisation, pour afficher la page Support.",
@@ -21013,7 +21883,7 @@
21013
21883
  "tags" : [ "execution-nodes" ]
21014
21884
  },
21015
21885
  "put" : {
21016
- "description" : "Ramène l'agent sur le serveur Breign, ou le fait tourner sur un runtime d'un nœud. Seul le propriétaire du nœud peut le choisir, sur un runtime et un alias que le nœud a déclarés ; pour un agent partagé, il faut aussi être admin de l'organisation (ou créateur d'un agent personnel).",
21886
+ "description" : "Ramène l'agent sur le serveur Breign, ou le fait tourner sur un runtime d'un nœud. Seul le propriétaire du nœud peut le choisir, sur un runtime et un alias que le nœud a déclarés ; pour un agent partagé, il faut aussi `agent.update` (ou être créateur d'un agent personnel). Un groupe de nœuds demande `agent.update` et `nodeGroup.read`.",
21017
21887
  "operationId" : "setAgentExecution",
21018
21888
  "parameters" : [ {
21019
21889
  "description" : "ID of the agent",
@@ -21063,6 +21933,95 @@
21063
21933
  "tags" : [ "execution-nodes" ]
21064
21934
  }
21065
21935
  },
21936
+ "/conversations/{conversationId}/messages/{messageId}/node-turn" : {
21937
+ "get" : {
21938
+ "description" : "Où en est le tour qui complète ce message : dans la file (ce qu'il attend, sa place), pris par un nœud, ou terminé. Alimente la carte d'attente du chat.",
21939
+ "operationId" : "getMessageNodeTurn",
21940
+ "parameters" : [ {
21941
+ "description" : "The ID of the conversation",
21942
+ "in" : "path",
21943
+ "name" : "conversationId",
21944
+ "required" : true,
21945
+ "schema" : {
21946
+ "type" : "string"
21947
+ }
21948
+ }, {
21949
+ "description" : "The ID of the message",
21950
+ "in" : "path",
21951
+ "name" : "messageId",
21952
+ "required" : true,
21953
+ "schema" : {
21954
+ "type" : "string"
21955
+ }
21956
+ } ],
21957
+ "responses" : {
21958
+ "200" : {
21959
+ "content" : {
21960
+ "application/json" : {
21961
+ "schema" : {
21962
+ "$ref" : "#/components/schemas/NodeQueueTurn"
21963
+ }
21964
+ }
21965
+ },
21966
+ "description" : "OK"
21967
+ },
21968
+ "401" : {
21969
+ "description" : "Unauthenticated"
21970
+ },
21971
+ "404" : {
21972
+ "description" : "Conversation or node turn not found"
21973
+ }
21974
+ },
21975
+ "summary" : "Get the node turn of a message",
21976
+ "tags" : [ "execution-nodes" ]
21977
+ }
21978
+ },
21979
+ "/conversations/{conversationId}/messages/{messageId}/node-turn/start-elsewhere" : {
21980
+ "post" : {
21981
+ "description" : "« Démarrer ailleurs maintenant » : le tour n'attend plus le nœud de l'environnement de la conversation ; le premier nœud libre du groupe le prend, avec l'historique et sans les fichiers.",
21982
+ "operationId" : "startMessageNodeTurnElsewhere",
21983
+ "parameters" : [ {
21984
+ "description" : "The ID of the conversation",
21985
+ "in" : "path",
21986
+ "name" : "conversationId",
21987
+ "required" : true,
21988
+ "schema" : {
21989
+ "type" : "string"
21990
+ }
21991
+ }, {
21992
+ "description" : "The ID of the message",
21993
+ "in" : "path",
21994
+ "name" : "messageId",
21995
+ "required" : true,
21996
+ "schema" : {
21997
+ "type" : "string"
21998
+ }
21999
+ } ],
22000
+ "responses" : {
22001
+ "200" : {
22002
+ "content" : {
22003
+ "application/json" : {
22004
+ "schema" : {
22005
+ "$ref" : "#/components/schemas/NodeQueueTurn"
22006
+ }
22007
+ }
22008
+ },
22009
+ "description" : "OK"
22010
+ },
22011
+ "401" : {
22012
+ "description" : "Unauthenticated"
22013
+ },
22014
+ "404" : {
22015
+ "description" : "Conversation or node turn not found"
22016
+ },
22017
+ "409" : {
22018
+ "description" : "The turn does not wait for a specific node of a group"
22019
+ }
22020
+ },
22021
+ "summary" : "Start the node turn of a message elsewhere",
22022
+ "tags" : [ "execution-nodes" ]
22023
+ }
22024
+ },
21066
22025
  "/conversations/{conversationId}/messages/{messageId}/node-turn/cancel" : {
21067
22026
  "post" : {
21068
22027
  "description" : "Depuis la conversation, pour un agent qui tourne sur un nœud Breign Mate.",
@@ -23091,6 +24050,16 @@
23091
24050
  "type" : "string"
23092
24051
  }
23093
24052
  },
24053
+ "nodeGroupIdPath" : {
24054
+ "description" : "ID of the node group",
24055
+ "in" : "path",
24056
+ "name" : "groupId",
24057
+ "required" : true,
24058
+ "schema" : {
24059
+ "format" : "uuid",
24060
+ "type" : "string"
24061
+ }
24062
+ },
23094
24063
  "fleetInstallationIdPath" : {
23095
24064
  "description" : "ID of the fleet installation",
23096
24065
  "in" : "path",
@@ -34311,7 +35280,7 @@
34311
35280
  "$ref" : "#/components/schemas/NodeSessionState"
34312
35281
  },
34313
35282
  "reason" : {
34314
- "description" : "Motif d'un tour interrompu ou en échec : cancelled, host_restart, unpaired, runtime_missing, runtime_failed, workdir_refused, invalid_task, node_unreachable, lost_on_node, node_dissociated (nœud retiré de l'organisation du tour)…",
35283
+ "description" : "Motif d'un tour interrompu ou en échec : cancelled, host_restart, unpaired, runtime_missing, runtime_failed, workdir_refused, invalid_task, node_unreachable, lost_on_node, node_dissociated (nœud retiré de l'organisation du tour), queue_expired (aucun nœud ne l'a pris à temps)…",
34315
35284
  "nullable" : true,
34316
35285
  "type" : "string"
34317
35286
  },
@@ -34345,8 +35314,8 @@
34345
35314
  "type" : "object"
34346
35315
  },
34347
35316
  "NodeSessionState" : {
34348
- "description" : "`dispatching` : écrit pour le nœud, pas encore acquitté. Les autres suivent le nœud.",
34349
- "enum" : [ "dispatching", "queued", "running", "interrupted", "finished", "failed" ],
35317
+ "description" : "`pending` : dans la file de la plateforme, pas encore pris par un nœud. `dispatching` : pris par un nœud, pas encore acquitté. Les autres suivent le nœud.",
35318
+ "enum" : [ "pending", "dispatching", "queued", "running", "interrupted", "finished", "failed" ],
34350
35319
  "type" : "string"
34351
35320
  },
34352
35321
  "NodeSessionMetrics" : {
@@ -34481,6 +35450,650 @@
34481
35450
  "enum" : [ "members", "admins", "none" ],
34482
35451
  "type" : "string"
34483
35452
  },
35453
+ "NodeGroupSummary" : {
35454
+ "allOf" : [ {
35455
+ "$ref" : "#/components/schemas/NodeGroup"
35456
+ }, {
35457
+ "properties" : {
35458
+ "nodeCount" : {
35459
+ "type" : "integer"
35460
+ },
35461
+ "onlineNodeCount" : {
35462
+ "type" : "integer"
35463
+ },
35464
+ "slots" : {
35465
+ "description" : "Emplacements de tous les nœuds du groupe",
35466
+ "type" : "integer"
35467
+ },
35468
+ "onlineSlots" : {
35469
+ "description" : "Emplacements des nœuds en ligne",
35470
+ "type" : "integer"
35471
+ },
35472
+ "agentCount" : {
35473
+ "type" : "integer"
35474
+ }
35475
+ },
35476
+ "required" : [ "agentCount", "nodeCount", "onlineNodeCount", "onlineSlots", "slots" ],
35477
+ "type" : "object"
35478
+ } ]
35479
+ },
35480
+ "NodeGroup" : {
35481
+ "allOf" : [ {
35482
+ "$ref" : "#/components/schemas/NodeGroupDelays"
35483
+ }, {
35484
+ "properties" : {
35485
+ "id" : {
35486
+ "format" : "uuid",
35487
+ "type" : "string"
35488
+ },
35489
+ "organizationId" : {
35490
+ "type" : "string"
35491
+ },
35492
+ "name" : {
35493
+ "type" : "string"
35494
+ },
35495
+ "description" : {
35496
+ "type" : "string"
35497
+ },
35498
+ "createdByUserId" : {
35499
+ "type" : "string"
35500
+ },
35501
+ "createdAt" : {
35502
+ "type" : "string"
35503
+ },
35504
+ "updatedAt" : {
35505
+ "type" : "string"
35506
+ }
35507
+ },
35508
+ "required" : [ "createdAt", "createdByUserId", "description", "envIdleTtlMs", "envWaitMs", "id", "name", "organizationId", "queueExpiryMs", "updatedAt" ],
35509
+ "type" : "object"
35510
+ } ]
35511
+ },
35512
+ "NodeGroupDelays" : {
35513
+ "properties" : {
35514
+ "envWaitMs" : {
35515
+ "description" : "Attente du nœud qui garde l'environnement d'une conversation, en millisecondes, avant d'en prendre un autre ; `null` : sans limite ; 0 : aucune attente.",
35516
+ "nullable" : true,
35517
+ "type" : "integer"
35518
+ },
35519
+ "envIdleTtlMs" : {
35520
+ "description" : "Libération d'un environnement après ce temps sans activité ; `null` : jamais.",
35521
+ "nullable" : true,
35522
+ "type" : "integer"
35523
+ },
35524
+ "queueExpiryMs" : {
35525
+ "description" : "Une exécution qu'aucun nœud ne prend dans ce délai échoue.",
35526
+ "type" : "integer"
35527
+ }
35528
+ },
35529
+ "type" : "object"
35530
+ },
35531
+ "CreateNodeGroupRequest" : {
35532
+ "allOf" : [ {
35533
+ "$ref" : "#/components/schemas/NodeGroupDelays"
35534
+ }, {
35535
+ "properties" : {
35536
+ "name" : {
35537
+ "maxLength" : 80,
35538
+ "type" : "string"
35539
+ },
35540
+ "description" : {
35541
+ "maxLength" : 500,
35542
+ "type" : "string"
35543
+ }
35544
+ },
35545
+ "required" : [ "name" ],
35546
+ "type" : "object"
35547
+ } ]
35548
+ },
35549
+ "NodeGroupDetail" : {
35550
+ "allOf" : [ {
35551
+ "$ref" : "#/components/schemas/NodeGroup"
35552
+ }, {
35553
+ "properties" : {
35554
+ "nodes" : {
35555
+ "items" : {
35556
+ "$ref" : "#/components/schemas/NodeGroupMemberNode"
35557
+ },
35558
+ "type" : "array"
35559
+ },
35560
+ "agents" : {
35561
+ "items" : {
35562
+ "$ref" : "#/components/schemas/NodeGroupAgent"
35563
+ },
35564
+ "type" : "array"
35565
+ }
35566
+ },
35567
+ "required" : [ "agents", "nodes" ],
35568
+ "type" : "object"
35569
+ } ]
35570
+ },
35571
+ "NodeGroupMemberNode" : {
35572
+ "allOf" : [ {
35573
+ "$ref" : "#/components/schemas/NodeGroupNode"
35574
+ }, {
35575
+ "properties" : {
35576
+ "addedByUserId" : {
35577
+ "type" : "string"
35578
+ },
35579
+ "addedAt" : {
35580
+ "type" : "string"
35581
+ }
35582
+ },
35583
+ "required" : [ "addedAt", "addedByUserId" ],
35584
+ "type" : "object"
35585
+ } ]
35586
+ },
35587
+ "NodeGroupNode" : {
35588
+ "properties" : {
35589
+ "id" : {
35590
+ "format" : "uuid",
35591
+ "type" : "string"
35592
+ },
35593
+ "name" : {
35594
+ "type" : "string"
35595
+ },
35596
+ "os" : {
35597
+ "enum" : [ "macos", "windows", "linux" ],
35598
+ "type" : "string"
35599
+ },
35600
+ "appVersion" : {
35601
+ "type" : "string"
35602
+ },
35603
+ "connected" : {
35604
+ "type" : "boolean"
35605
+ },
35606
+ "revoked" : {
35607
+ "type" : "boolean"
35608
+ },
35609
+ "lastSeenAt" : {
35610
+ "nullable" : true,
35611
+ "type" : "string"
35612
+ },
35613
+ "slots" : {
35614
+ "description" : "Exécutions que le nœud mène en même temps",
35615
+ "type" : "integer"
35616
+ },
35617
+ "contractVersion" : {
35618
+ "description" : "Version du contrat parlée par le nœud ; un nœud v1 n'entre dans aucun groupe.",
35619
+ "type" : "integer"
35620
+ },
35621
+ "runtimes" : {
35622
+ "items" : {
35623
+ "$ref" : "#/components/schemas/ExecutionNodeRuntime"
35624
+ },
35625
+ "type" : "array"
35626
+ },
35627
+ "workspaces" : {
35628
+ "items" : {
35629
+ "$ref" : "#/components/schemas/ExecutionNodeWorkspace"
35630
+ },
35631
+ "type" : "array"
35632
+ }
35633
+ },
35634
+ "required" : [ "appVersion", "connected", "contractVersion", "id", "lastSeenAt", "name", "os", "revoked", "runtimes", "slots", "workspaces" ],
35635
+ "type" : "object"
35636
+ },
35637
+ "NodeGroupAgent" : {
35638
+ "properties" : {
35639
+ "agentId" : {
35640
+ "type" : "string"
35641
+ },
35642
+ "agentName" : {
35643
+ "nullable" : true,
35644
+ "type" : "string"
35645
+ },
35646
+ "runtime" : {
35647
+ "enum" : [ "claude", "opencode" ],
35648
+ "type" : "string"
35649
+ },
35650
+ "workspaceAlias" : {
35651
+ "type" : "string"
35652
+ }
35653
+ },
35654
+ "required" : [ "agentId", "agentName", "runtime", "workspaceAlias" ],
35655
+ "type" : "object"
35656
+ },
35657
+ "NodeGroupCandidate" : {
35658
+ "allOf" : [ {
35659
+ "$ref" : "#/components/schemas/NodeGroupNode"
35660
+ }, {
35661
+ "properties" : {
35662
+ "eligible" : {
35663
+ "type" : "boolean"
35664
+ },
35665
+ "ineligibleReason" : {
35666
+ "description" : "Pourquoi le nœud ne peut pas entrer dans un groupe (mise à jour à faire…)",
35667
+ "nullable" : true,
35668
+ "type" : "string"
35669
+ }
35670
+ },
35671
+ "required" : [ "eligible", "ineligibleReason" ],
35672
+ "type" : "object"
35673
+ } ]
35674
+ },
35675
+ "UpdateNodeGroupRequest" : {
35676
+ "allOf" : [ {
35677
+ "$ref" : "#/components/schemas/NodeGroupDelays"
35678
+ }, {
35679
+ "properties" : {
35680
+ "name" : {
35681
+ "maxLength" : 80,
35682
+ "type" : "string"
35683
+ },
35684
+ "description" : {
35685
+ "maxLength" : 500,
35686
+ "type" : "string"
35687
+ }
35688
+ },
35689
+ "type" : "object"
35690
+ } ]
35691
+ },
35692
+ "NodeGroupQueueSummary" : {
35693
+ "properties" : {
35694
+ "pendingCount" : {
35695
+ "type" : "integer"
35696
+ },
35697
+ "runningCount" : {
35698
+ "type" : "integer"
35699
+ },
35700
+ "oldestQueuedAt" : {
35701
+ "nullable" : true,
35702
+ "type" : "string"
35703
+ },
35704
+ "nodeCount" : {
35705
+ "type" : "integer"
35706
+ },
35707
+ "onlineNodeCount" : {
35708
+ "type" : "integer"
35709
+ },
35710
+ "slots" : {
35711
+ "type" : "integer"
35712
+ },
35713
+ "onlineSlots" : {
35714
+ "type" : "integer"
35715
+ },
35716
+ "medianWaitMs" : {
35717
+ "$ref" : "#/components/schemas/NodeGroupQueueSummary_medianWaitMs"
35718
+ },
35719
+ "claimedLastDay" : {
35720
+ "type" : "integer"
35721
+ },
35722
+ "waitingFor" : {
35723
+ "$ref" : "#/components/schemas/NodeGroupQueueSummary_waitingFor"
35724
+ },
35725
+ "pendingByAgent" : {
35726
+ "description" : "Les agents lisibles par l'appelant, du plus en attente au moins",
35727
+ "items" : {
35728
+ "$ref" : "#/components/schemas/NodeGroupQueueSummary_pendingByAgent_inner"
35729
+ },
35730
+ "type" : "array"
35731
+ },
35732
+ "hiddenPendingCount" : {
35733
+ "description" : "Les tours en attente d'agents que l'appelant ne peut pas lire",
35734
+ "type" : "integer"
35735
+ },
35736
+ "nodes" : {
35737
+ "items" : {
35738
+ "$ref" : "#/components/schemas/NodeGroupQueueSummary_nodes_inner"
35739
+ },
35740
+ "type" : "array"
35741
+ },
35742
+ "environments" : {
35743
+ "$ref" : "#/components/schemas/NodeGroupQueueSummary_environments"
35744
+ }
35745
+ },
35746
+ "required" : [ "claimedLastDay", "environments", "hiddenPendingCount", "medianWaitMs", "nodeCount", "nodes", "oldestQueuedAt", "onlineNodeCount", "onlineSlots", "pendingByAgent", "pendingCount", "runningCount", "slots", "waitingFor" ],
35747
+ "type" : "object"
35748
+ },
35749
+ "NodeGroupExecutionPage" : {
35750
+ "properties" : {
35751
+ "items" : {
35752
+ "items" : {
35753
+ "$ref" : "#/components/schemas/NodeGroupExecution"
35754
+ },
35755
+ "type" : "array"
35756
+ },
35757
+ "total" : {
35758
+ "type" : "integer"
35759
+ },
35760
+ "hiddenCount" : {
35761
+ "description" : "Les exécutions d'agents que l'appelant ne peut pas lire",
35762
+ "type" : "integer"
35763
+ }
35764
+ },
35765
+ "required" : [ "hiddenCount", "items", "total" ],
35766
+ "type" : "object"
35767
+ },
35768
+ "NodeGroupExecution" : {
35769
+ "properties" : {
35770
+ "id" : {
35771
+ "format" : "uuid",
35772
+ "type" : "string"
35773
+ },
35774
+ "state" : {
35775
+ "$ref" : "#/components/schemas/NodeSessionState"
35776
+ },
35777
+ "reason" : {
35778
+ "nullable" : true,
35779
+ "type" : "string"
35780
+ },
35781
+ "agentId" : {
35782
+ "type" : "string"
35783
+ },
35784
+ "agentName" : {
35785
+ "nullable" : true,
35786
+ "type" : "string"
35787
+ },
35788
+ "conversationId" : {
35789
+ "type" : "string"
35790
+ },
35791
+ "responseMessageId" : {
35792
+ "type" : "string"
35793
+ },
35794
+ "originType" : {
35795
+ "enum" : [ "conversation", "ticket", "agent", "task", null ],
35796
+ "nullable" : true,
35797
+ "type" : "string"
35798
+ },
35799
+ "originTitle" : {
35800
+ "nullable" : true,
35801
+ "type" : "string"
35802
+ },
35803
+ "runtime" : {
35804
+ "enum" : [ "claude", "opencode" ],
35805
+ "type" : "string"
35806
+ },
35807
+ "workspaceAlias" : {
35808
+ "type" : "string"
35809
+ },
35810
+ "node" : {
35811
+ "allOf" : [ {
35812
+ "$ref" : "#/components/schemas/NodeRef"
35813
+ } ],
35814
+ "nullable" : true
35815
+ },
35816
+ "target" : {
35817
+ "allOf" : [ {
35818
+ "$ref" : "#/components/schemas/NodeRef"
35819
+ } ],
35820
+ "nullable" : true
35821
+ },
35822
+ "targetUntil" : {
35823
+ "nullable" : true,
35824
+ "type" : "string"
35825
+ },
35826
+ "waitingFor" : {
35827
+ "allOf" : [ {
35828
+ "$ref" : "#/components/schemas/WaitingFor"
35829
+ } ],
35830
+ "nullable" : true
35831
+ },
35832
+ "position" : {
35833
+ "nullable" : true,
35834
+ "type" : "integer"
35835
+ },
35836
+ "progress" : {
35837
+ "allOf" : [ {
35838
+ "$ref" : "#/components/schemas/NodeSessionProgress"
35839
+ } ],
35840
+ "nullable" : true
35841
+ },
35842
+ "queuedAt" : {
35843
+ "nullable" : true,
35844
+ "type" : "string"
35845
+ },
35846
+ "claimedAt" : {
35847
+ "nullable" : true,
35848
+ "type" : "string"
35849
+ },
35850
+ "expiresAt" : {
35851
+ "nullable" : true,
35852
+ "type" : "string"
35853
+ },
35854
+ "createdAt" : {
35855
+ "type" : "string"
35856
+ },
35857
+ "updatedAt" : {
35858
+ "type" : "string"
35859
+ }
35860
+ },
35861
+ "required" : [ "agentId", "agentName", "claimedAt", "conversationId", "createdAt", "expiresAt", "id", "node", "originTitle", "originType", "position", "progress", "queuedAt", "reason", "responseMessageId", "runtime", "state", "target", "targetUntil", "updatedAt", "waitingFor", "workspaceAlias" ],
35862
+ "type" : "object"
35863
+ },
35864
+ "NodeRef" : {
35865
+ "properties" : {
35866
+ "id" : {
35867
+ "format" : "uuid",
35868
+ "type" : "string"
35869
+ },
35870
+ "name" : {
35871
+ "type" : "string"
35872
+ },
35873
+ "connected" : {
35874
+ "type" : "boolean"
35875
+ }
35876
+ },
35877
+ "required" : [ "connected", "id", "name" ],
35878
+ "type" : "object"
35879
+ },
35880
+ "WaitingFor" : {
35881
+ "description" : "Ce qu'attend un tour de la file : `free` le premier nœud libre, `env_busy` le nœud qui garde l'environnement de la conversation (occupé), `env_offline` ce nœud, hors ligne.",
35882
+ "enum" : [ "free", "env_busy", "env_offline" ],
35883
+ "type" : "string"
35884
+ },
35885
+ "NodeGroupBulkIds" : {
35886
+ "properties" : {
35887
+ "ids" : {
35888
+ "items" : {
35889
+ "format" : "uuid",
35890
+ "type" : "string"
35891
+ },
35892
+ "maxItems" : 100,
35893
+ "minItems" : 1,
35894
+ "type" : "array"
35895
+ }
35896
+ },
35897
+ "required" : [ "ids" ],
35898
+ "type" : "object"
35899
+ },
35900
+ "NodeGroupBulkResult" : {
35901
+ "properties" : {
35902
+ "results" : {
35903
+ "items" : {
35904
+ "$ref" : "#/components/schemas/NodeGroupBulkResult_results_inner"
35905
+ },
35906
+ "type" : "array"
35907
+ }
35908
+ },
35909
+ "required" : [ "results" ],
35910
+ "type" : "object"
35911
+ },
35912
+ "NodeGroupNodePage" : {
35913
+ "properties" : {
35914
+ "items" : {
35915
+ "items" : {
35916
+ "$ref" : "#/components/schemas/NodeGroupNodeOverview"
35917
+ },
35918
+ "type" : "array"
35919
+ },
35920
+ "total" : {
35921
+ "type" : "integer"
35922
+ }
35923
+ },
35924
+ "required" : [ "items", "total" ],
35925
+ "type" : "object"
35926
+ },
35927
+ "NodeGroupNodeOverview" : {
35928
+ "properties" : {
35929
+ "id" : {
35930
+ "format" : "uuid",
35931
+ "type" : "string"
35932
+ },
35933
+ "name" : {
35934
+ "type" : "string"
35935
+ },
35936
+ "os" : {
35937
+ "enum" : [ "macos", "windows", "linux" ],
35938
+ "type" : "string"
35939
+ },
35940
+ "appVersion" : {
35941
+ "type" : "string"
35942
+ },
35943
+ "ownerUserId" : {
35944
+ "type" : "string"
35945
+ },
35946
+ "connected" : {
35947
+ "type" : "boolean"
35948
+ },
35949
+ "lastSeenAt" : {
35950
+ "nullable" : true,
35951
+ "type" : "string"
35952
+ },
35953
+ "slots" : {
35954
+ "type" : "integer"
35955
+ },
35956
+ "usedSlots" : {
35957
+ "type" : "integer"
35958
+ },
35959
+ "runtimes" : {
35960
+ "items" : {
35961
+ "$ref" : "#/components/schemas/ExecutionNodeRuntime"
35962
+ },
35963
+ "type" : "array"
35964
+ },
35965
+ "workspaces" : {
35966
+ "items" : {
35967
+ "$ref" : "#/components/schemas/ExecutionNodeWorkspace"
35968
+ },
35969
+ "type" : "array"
35970
+ },
35971
+ "running" : {
35972
+ "items" : {
35973
+ "$ref" : "#/components/schemas/NodeGroupNodeOverview_running_inner"
35974
+ },
35975
+ "type" : "array"
35976
+ },
35977
+ "environmentCount" : {
35978
+ "type" : "integer"
35979
+ },
35980
+ "idleEnvironmentCount" : {
35981
+ "type" : "integer"
35982
+ },
35983
+ "releasePendingCount" : {
35984
+ "type" : "integer"
35985
+ },
35986
+ "otherGroups" : {
35987
+ "items" : {
35988
+ "$ref" : "#/components/schemas/NodeGroupNodeOverview_otherGroups_inner"
35989
+ },
35990
+ "type" : "array"
35991
+ }
35992
+ },
35993
+ "required" : [ "appVersion", "connected", "environmentCount", "id", "idleEnvironmentCount", "lastSeenAt", "name", "os", "otherGroups", "ownerUserId", "releasePendingCount", "running", "runtimes", "slots", "usedSlots", "workspaces" ],
35994
+ "type" : "object"
35995
+ },
35996
+ "NodeGroupEnvironmentPage" : {
35997
+ "properties" : {
35998
+ "counts" : {
35999
+ "$ref" : "#/components/schemas/NodeGroupEnvironmentPage_counts"
36000
+ },
36001
+ "hiddenCount" : {
36002
+ "type" : "integer"
36003
+ },
36004
+ "total" : {
36005
+ "type" : "integer"
36006
+ },
36007
+ "items" : {
36008
+ "items" : {
36009
+ "$ref" : "#/components/schemas/NodeGroupEnvironment"
36010
+ },
36011
+ "type" : "array"
36012
+ }
36013
+ },
36014
+ "required" : [ "counts", "hiddenCount", "items", "total" ],
36015
+ "type" : "object"
36016
+ },
36017
+ "NodeGroupEnvironment" : {
36018
+ "properties" : {
36019
+ "id" : {
36020
+ "format" : "uuid",
36021
+ "type" : "string"
36022
+ },
36023
+ "state" : {
36024
+ "description" : "`running` une exécution l'utilise, `waiting` une exécution l'attend, `idle` inactif, `releasing` libération demandée au nœud.",
36025
+ "enum" : [ "running", "waiting", "idle", "releasing" ],
36026
+ "type" : "string"
36027
+ },
36028
+ "agentId" : {
36029
+ "type" : "string"
36030
+ },
36031
+ "agentName" : {
36032
+ "nullable" : true,
36033
+ "type" : "string"
36034
+ },
36035
+ "conversationId" : {
36036
+ "type" : "string"
36037
+ },
36038
+ "originType" : {
36039
+ "nullable" : true,
36040
+ "type" : "string"
36041
+ },
36042
+ "originTitle" : {
36043
+ "nullable" : true,
36044
+ "type" : "string"
36045
+ },
36046
+ "node" : {
36047
+ "allOf" : [ {
36048
+ "$ref" : "#/components/schemas/NodeRef"
36049
+ } ],
36050
+ "nullable" : true
36051
+ },
36052
+ "runtime" : {
36053
+ "enum" : [ "claude", "opencode" ],
36054
+ "type" : "string"
36055
+ },
36056
+ "workspaceAlias" : {
36057
+ "type" : "string"
36058
+ },
36059
+ "lastUsedAt" : {
36060
+ "type" : "string"
36061
+ },
36062
+ "releaseAfter" : {
36063
+ "description" : "Libération automatique ; nul pendant une exécution ou si le groupe ne libère jamais",
36064
+ "nullable" : true,
36065
+ "type" : "string"
36066
+ },
36067
+ "releaseRequestedAt" : {
36068
+ "nullable" : true,
36069
+ "type" : "string"
36070
+ },
36071
+ "releaseReason" : {
36072
+ "enum" : [ "idle", "manual", "moved", "node", "dissociated", null ],
36073
+ "nullable" : true,
36074
+ "type" : "string"
36075
+ }
36076
+ },
36077
+ "required" : [ "agentId", "agentName", "conversationId", "id", "lastUsedAt", "node", "originTitle", "originType", "releaseAfter", "releaseReason", "releaseRequestedAt", "runtime", "state", "workspaceAlias" ],
36078
+ "type" : "object"
36079
+ },
36080
+ "NodeGroupEnvironmentRelease" : {
36081
+ "description" : "`{ ids }` libère ces environnements ; `{ filter: { state: idle, idleBefore? } }` libère tous les environnements inactifs (sans exécution) du groupe, inactifs depuis `idleBefore` si donné.",
36082
+ "properties" : {
36083
+ "ids" : {
36084
+ "items" : {
36085
+ "format" : "uuid",
36086
+ "type" : "string"
36087
+ },
36088
+ "maxItems" : 500,
36089
+ "type" : "array"
36090
+ },
36091
+ "filter" : {
36092
+ "$ref" : "#/components/schemas/NodeGroupEnvironmentRelease_filter"
36093
+ }
36094
+ },
36095
+ "type" : "object"
36096
+ },
34484
36097
  "SupportSettings" : {
34485
36098
  "description" : "La page Support d'une organisation. Réglée par les superadmins ; lue par les membres pour afficher la page.",
34486
36099
  "properties" : {
@@ -35425,9 +37038,21 @@
35425
37038
  "AgentExecution" : {
35426
37039
  "properties" : {
35427
37040
  "mode" : {
35428
- "enum" : [ "server", "node" ],
37041
+ "enum" : [ "server", "node", "group" ],
35429
37042
  "type" : "string"
35430
37043
  },
37044
+ "group" : {
37045
+ "$ref" : "#/components/schemas/AgentExecution_group"
37046
+ },
37047
+ "keepEnvironment" : {
37048
+ "description" : "Mode group — les messages suivants d'une conversation repartent sur le nœud qui en garde l'environnement.",
37049
+ "type" : "boolean"
37050
+ },
37051
+ "envWaitMs" : {
37052
+ "description" : "Mode group — attente du nœud de l'environnement ; `null` celle du groupe, -1 sans limite.",
37053
+ "nullable" : true,
37054
+ "type" : "integer"
37055
+ },
35431
37056
  "node" : {
35432
37057
  "$ref" : "#/components/schemas/AgentExecution_node"
35433
37058
  },
@@ -35446,9 +37071,17 @@
35446
37071
  "$ref" : "#/components/schemas/AgentExecutionNodeChoice"
35447
37072
  },
35448
37073
  "type" : "array"
37074
+ },
37075
+ "availableGroups" : {
37076
+ "description" : "Nul quand les groupes de nœuds sont éteints ou que l'utilisateur n'a pas `nodeGroup.read`.",
37077
+ "items" : {
37078
+ "$ref" : "#/components/schemas/AgentExecutionGroupChoice"
37079
+ },
37080
+ "nullable" : true,
37081
+ "type" : "array"
35449
37082
  }
35450
37083
  },
35451
- "required" : [ "availableNodes", "mode" ],
37084
+ "required" : [ "availableGroups", "availableNodes", "mode" ],
35452
37085
  "type" : "object"
35453
37086
  },
35454
37087
  "AgentExecutionNodeChoice" : {
@@ -35481,16 +37114,27 @@
35481
37114
  "type" : "object"
35482
37115
  },
35483
37116
  "SetAgentExecutionRequest" : {
35484
- "description" : "`{ mode: server }` ramène l'agent sur le serveur Breign. `{ mode: node, … }` le fait tourner sur un nœud ; seul son propriétaire peut le choisir, sur un runtime et un alias déclarés.",
37117
+ "description" : "`{ mode: server }` ramène l'agent sur le serveur Breign. `{ mode: node, … }` le fait tourner sur un nœud ; seul son propriétaire peut le choisir, sur un runtime et un alias déclarés. `{ mode: group, … }` le rattache à un groupe de nœuds de son organisation (`nodeGroup.read`).",
35485
37118
  "properties" : {
35486
37119
  "mode" : {
35487
- "enum" : [ "server", "node" ],
37120
+ "enum" : [ "server", "node", "group" ],
35488
37121
  "type" : "string"
35489
37122
  },
35490
37123
  "nodeId" : {
35491
37124
  "format" : "uuid",
35492
37125
  "type" : "string"
35493
37126
  },
37127
+ "groupId" : {
37128
+ "format" : "uuid",
37129
+ "type" : "string"
37130
+ },
37131
+ "keepEnvironment" : {
37132
+ "type" : "boolean"
37133
+ },
37134
+ "envWaitMs" : {
37135
+ "nullable" : true,
37136
+ "type" : "integer"
37137
+ },
35494
37138
  "runtime" : {
35495
37139
  "enum" : [ "claude", "opencode" ],
35496
37140
  "type" : "string"
@@ -35505,6 +37149,76 @@
35505
37149
  "required" : [ "mode" ],
35506
37150
  "type" : "object"
35507
37151
  },
37152
+ "NodeQueueTurn" : {
37153
+ "description" : "La carte d'attente du chat — où en est le tour qui complète un message.",
37154
+ "properties" : {
37155
+ "sessionId" : {
37156
+ "format" : "uuid",
37157
+ "type" : "string"
37158
+ },
37159
+ "state" : {
37160
+ "$ref" : "#/components/schemas/NodeSessionState"
37161
+ },
37162
+ "reason" : {
37163
+ "nullable" : true,
37164
+ "type" : "string"
37165
+ },
37166
+ "group" : {
37167
+ "$ref" : "#/components/schemas/NodeQueueTurn_group"
37168
+ },
37169
+ "waitingFor" : {
37170
+ "allOf" : [ {
37171
+ "$ref" : "#/components/schemas/WaitingFor"
37172
+ } ],
37173
+ "nullable" : true
37174
+ },
37175
+ "target" : {
37176
+ "allOf" : [ {
37177
+ "$ref" : "#/components/schemas/NodeRef"
37178
+ } ],
37179
+ "description" : "Le nœud attendu (rattachement direct, ou celui de l'environnement)",
37180
+ "nullable" : true
37181
+ },
37182
+ "targetUntil" : {
37183
+ "description" : "Fin de l'attente du nœud de l'environnement ; ensuite, un autre nœud du groupe",
37184
+ "nullable" : true,
37185
+ "type" : "string"
37186
+ },
37187
+ "node" : {
37188
+ "allOf" : [ {
37189
+ "$ref" : "#/components/schemas/NodeRef"
37190
+ } ],
37191
+ "description" : "Le nœud qui a pris le tour",
37192
+ "nullable" : true
37193
+ },
37194
+ "position" : {
37195
+ "description" : "La place dans sa file (1 = le prochain)",
37196
+ "nullable" : true,
37197
+ "type" : "integer"
37198
+ },
37199
+ "queuedAt" : {
37200
+ "nullable" : true,
37201
+ "type" : "string"
37202
+ },
37203
+ "claimedAt" : {
37204
+ "nullable" : true,
37205
+ "type" : "string"
37206
+ },
37207
+ "expiresAt" : {
37208
+ "nullable" : true,
37209
+ "type" : "string"
37210
+ },
37211
+ "environmentId" : {
37212
+ "nullable" : true,
37213
+ "type" : "string"
37214
+ },
37215
+ "canStartElsewhere" : {
37216
+ "type" : "boolean"
37217
+ }
37218
+ },
37219
+ "required" : [ "canStartElsewhere", "claimedAt", "environmentId", "expiresAt", "group", "node", "position", "queuedAt", "reason", "sessionId", "state", "target", "targetUntil", "waitingFor" ],
37220
+ "type" : "object"
37221
+ },
35508
37222
  "NodeTurnCancelResult" : {
35509
37223
  "properties" : {
35510
37224
  "cancelled" : {
@@ -37090,6 +38804,42 @@
37090
38804
  "enum" : [ "uploading", "ready" ],
37091
38805
  "type" : "string"
37092
38806
  },
38807
+ "AgentExecutionGroupChoice" : {
38808
+ "description" : "Un groupe que l'utilisateur peut choisir pour l'agent, avec ce que ses nœuds portent.",
38809
+ "properties" : {
38810
+ "id" : {
38811
+ "format" : "uuid",
38812
+ "type" : "string"
38813
+ },
38814
+ "name" : {
38815
+ "type" : "string"
38816
+ },
38817
+ "nodeCount" : {
38818
+ "type" : "integer"
38819
+ },
38820
+ "onlineNodeCount" : {
38821
+ "type" : "integer"
38822
+ },
38823
+ "envWaitMs" : {
38824
+ "nullable" : true,
38825
+ "type" : "integer"
38826
+ },
38827
+ "runtimes" : {
38828
+ "items" : {
38829
+ "$ref" : "#/components/schemas/AgentExecutionGroupChoice_runtimes_inner"
38830
+ },
38831
+ "type" : "array"
38832
+ },
38833
+ "workspaces" : {
38834
+ "items" : {
38835
+ "$ref" : "#/components/schemas/AgentExecutionGroupChoice_workspaces_inner"
38836
+ },
38837
+ "type" : "array"
38838
+ }
38839
+ },
38840
+ "required" : [ "envWaitMs", "id", "name", "nodeCount", "onlineNodeCount", "runtimes", "workspaces" ],
38841
+ "type" : "object"
38842
+ },
37093
38843
  "TicketProposalStatus" : {
37094
38844
  "enum" : [ "pending", "accepted", "rejected", "cancelled" ],
37095
38845
  "type" : "string"
@@ -39359,6 +41109,200 @@
39359
41109
  "required" : [ "callId", "question" ],
39360
41110
  "type" : "object"
39361
41111
  },
41112
+ "NodeGroupQueueSummary_medianWaitMs" : {
41113
+ "properties" : {
41114
+ "lastHour" : {
41115
+ "nullable" : true,
41116
+ "type" : "integer"
41117
+ },
41118
+ "lastDay" : {
41119
+ "nullable" : true,
41120
+ "type" : "integer"
41121
+ }
41122
+ },
41123
+ "required" : [ "lastDay", "lastHour" ],
41124
+ "type" : "object"
41125
+ },
41126
+ "NodeGroupQueueSummary_waitingFor" : {
41127
+ "properties" : {
41128
+ "free" : {
41129
+ "type" : "integer"
41130
+ },
41131
+ "env_busy" : {
41132
+ "type" : "integer"
41133
+ },
41134
+ "env_offline" : {
41135
+ "type" : "integer"
41136
+ }
41137
+ },
41138
+ "required" : [ "env_busy", "env_offline", "free" ],
41139
+ "type" : "object"
41140
+ },
41141
+ "NodeGroupQueueSummary_pendingByAgent_inner" : {
41142
+ "properties" : {
41143
+ "agentId" : {
41144
+ "type" : "string"
41145
+ },
41146
+ "agentName" : {
41147
+ "nullable" : true,
41148
+ "type" : "string"
41149
+ },
41150
+ "count" : {
41151
+ "type" : "integer"
41152
+ }
41153
+ },
41154
+ "required" : [ "agentId", "agentName", "count" ],
41155
+ "type" : "object"
41156
+ },
41157
+ "NodeGroupQueueSummary_nodes_inner" : {
41158
+ "properties" : {
41159
+ "id" : {
41160
+ "format" : "uuid",
41161
+ "type" : "string"
41162
+ },
41163
+ "name" : {
41164
+ "type" : "string"
41165
+ },
41166
+ "connected" : {
41167
+ "type" : "boolean"
41168
+ },
41169
+ "slots" : {
41170
+ "type" : "integer"
41171
+ },
41172
+ "usedSlots" : {
41173
+ "type" : "integer"
41174
+ }
41175
+ },
41176
+ "required" : [ "connected", "id", "name", "slots", "usedSlots" ],
41177
+ "type" : "object"
41178
+ },
41179
+ "NodeGroupQueueSummary_environments" : {
41180
+ "properties" : {
41181
+ "total" : {
41182
+ "type" : "integer"
41183
+ },
41184
+ "idleOver12h" : {
41185
+ "type" : "integer"
41186
+ },
41187
+ "releasePending" : {
41188
+ "type" : "integer"
41189
+ }
41190
+ },
41191
+ "required" : [ "idleOver12h", "releasePending", "total" ],
41192
+ "type" : "object"
41193
+ },
41194
+ "NodeGroupBulkResult_results_inner" : {
41195
+ "properties" : {
41196
+ "id" : {
41197
+ "format" : "uuid",
41198
+ "type" : "string"
41199
+ },
41200
+ "ok" : {
41201
+ "type" : "boolean"
41202
+ },
41203
+ "state" : {
41204
+ "type" : "string"
41205
+ },
41206
+ "error" : {
41207
+ "type" : "string"
41208
+ }
41209
+ },
41210
+ "required" : [ "id", "ok" ],
41211
+ "type" : "object"
41212
+ },
41213
+ "NodeGroupNodeOverview_running_inner" : {
41214
+ "properties" : {
41215
+ "sessionId" : {
41216
+ "format" : "uuid",
41217
+ "type" : "string"
41218
+ },
41219
+ "agentId" : {
41220
+ "type" : "string"
41221
+ },
41222
+ "agentName" : {
41223
+ "nullable" : true,
41224
+ "type" : "string"
41225
+ },
41226
+ "originType" : {
41227
+ "nullable" : true,
41228
+ "type" : "string"
41229
+ },
41230
+ "originTitle" : {
41231
+ "nullable" : true,
41232
+ "type" : "string"
41233
+ },
41234
+ "claimedAt" : {
41235
+ "nullable" : true,
41236
+ "type" : "string"
41237
+ }
41238
+ },
41239
+ "required" : [ "agentId", "agentName", "claimedAt", "originTitle", "originType", "sessionId" ],
41240
+ "type" : "object"
41241
+ },
41242
+ "NodeGroupNodeOverview_otherGroups_inner" : {
41243
+ "properties" : {
41244
+ "id" : {
41245
+ "format" : "uuid",
41246
+ "type" : "string"
41247
+ },
41248
+ "name" : {
41249
+ "type" : "string"
41250
+ }
41251
+ },
41252
+ "required" : [ "id", "name" ],
41253
+ "type" : "object"
41254
+ },
41255
+ "NodeGroupEnvironmentPage_counts" : {
41256
+ "description" : "Par état, sur tout le groupe",
41257
+ "properties" : {
41258
+ "all" : {
41259
+ "type" : "integer"
41260
+ },
41261
+ "running" : {
41262
+ "type" : "integer"
41263
+ },
41264
+ "waiting" : {
41265
+ "type" : "integer"
41266
+ },
41267
+ "idle" : {
41268
+ "type" : "integer"
41269
+ },
41270
+ "releasing" : {
41271
+ "type" : "integer"
41272
+ }
41273
+ },
41274
+ "required" : [ "all", "idle", "releasing", "running", "waiting" ],
41275
+ "type" : "object"
41276
+ },
41277
+ "NodeGroupEnvironmentRelease_filter" : {
41278
+ "properties" : {
41279
+ "state" : {
41280
+ "enum" : [ "idle" ],
41281
+ "type" : "string"
41282
+ },
41283
+ "idleBefore" : {
41284
+ "format" : "date-time",
41285
+ "type" : "string"
41286
+ }
41287
+ },
41288
+ "required" : [ "state" ],
41289
+ "type" : "object"
41290
+ },
41291
+ "AgentExecution_group" : {
41292
+ "description" : "Présent en mode group ; `name` est nul si l'utilisateur ne voit pas les groupes.",
41293
+ "properties" : {
41294
+ "id" : {
41295
+ "format" : "uuid",
41296
+ "type" : "string"
41297
+ },
41298
+ "name" : {
41299
+ "nullable" : true,
41300
+ "type" : "string"
41301
+ }
41302
+ },
41303
+ "required" : [ "id", "name" ],
41304
+ "type" : "object"
41305
+ },
39362
41306
  "AgentExecution_node" : {
39363
41307
  "description" : "Présent en mode node",
39364
41308
  "properties" : {
@@ -39379,6 +41323,20 @@
39379
41323
  "required" : [ "connected", "id", "name", "ownedByMe" ],
39380
41324
  "type" : "object"
39381
41325
  },
41326
+ "NodeQueueTurn_group" : {
41327
+ "nullable" : true,
41328
+ "properties" : {
41329
+ "id" : {
41330
+ "format" : "uuid",
41331
+ "type" : "string"
41332
+ },
41333
+ "name" : {
41334
+ "type" : "string"
41335
+ }
41336
+ },
41337
+ "required" : [ "id", "name" ],
41338
+ "type" : "object"
41339
+ },
39382
41340
  "GitlabRoutingTestResult_botAccount" : {
39383
41341
  "nullable" : true,
39384
41342
  "properties" : {
@@ -39630,6 +41588,34 @@
39630
41588
  },
39631
41589
  "required" : [ "status" ],
39632
41590
  "type" : "object"
41591
+ },
41592
+ "AgentExecutionGroupChoice_runtimes_inner" : {
41593
+ "properties" : {
41594
+ "id" : {
41595
+ "enum" : [ "claude", "opencode" ],
41596
+ "type" : "string"
41597
+ },
41598
+ "nodeCount" : {
41599
+ "type" : "integer"
41600
+ }
41601
+ },
41602
+ "required" : [ "id", "nodeCount" ],
41603
+ "type" : "object"
41604
+ },
41605
+ "AgentExecutionGroupChoice_workspaces_inner" : {
41606
+ "properties" : {
41607
+ "alias" : {
41608
+ "type" : "string"
41609
+ },
41610
+ "label" : {
41611
+ "type" : "string"
41612
+ },
41613
+ "nodeCount" : {
41614
+ "type" : "integer"
41615
+ }
41616
+ },
41617
+ "required" : [ "alias", "label", "nodeCount" ],
41618
+ "type" : "object"
39633
41619
  }
39634
41620
  },
39635
41621
  "securitySchemes" : {