@ancplua/qyl-api-schema 11.6.0-rc.1 → 12.0.0

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.
package/api/workbench.tsp CHANGED
@@ -3,6 +3,7 @@ import "@typespec/http";
3
3
  import "@typespec/sse";
4
4
 
5
5
  import "../common/errors.tsp";
6
+ import "../common/pagination.tsp";
6
7
  import "../models/workbench.tsp";
7
8
 
8
9
  using TypeSpec.Events;
@@ -10,6 +11,7 @@ using TypeSpec.Http;
10
11
  using TypeSpec.SSE;
11
12
 
12
13
  using Qyl.Api.Contracts.Common.Errors;
14
+ using Qyl.Api.Contracts.Common.Pagination;
13
15
  using Qyl.Api.Contracts.Workbench;
14
16
 
15
17
  namespace TypeSpec.Http {
@@ -19,6 +21,19 @@ namespace TypeSpec.Http {
19
21
  }
20
22
 
21
23
  namespace Qyl.Api.Contracts.Workbench {
24
+ // Problem bodies carry no headers (common/errors.tsp). The workbench answers
25
+ // a missing or invalid session cookie with a challenge naming its scheme, so
26
+ // its 401 declares the header here, on the workbench operations.
27
+ @doc("The local workbench session cookie is missing or invalid (401). `WWW-Authenticate` names the `Cookie` scheme.")
28
+ @error
29
+ model WorkbenchUnauthorizedResponse {
30
+ @doc("Authentication challenge. The workbench sends `Cookie`.")
31
+ @header("WWW-Authenticate")
32
+ wwwAuthenticate: string;
33
+
34
+ @bodyRoot problem: UnauthorizedError;
35
+ }
36
+
22
37
  @events
23
38
  union WorkbenchProtocolEvents {
24
39
  message: WorkbenchProtocolEvent,
@@ -37,7 +52,7 @@ namespace Qyl.Api.Contracts.Workbench {
37
52
  @get
38
53
  get():
39
54
  | WorkbenchSession
40
- | UnauthorizedError
55
+ | WorkbenchUnauthorizedResponse
41
56
  | ForbiddenError
42
57
  | ServiceUnavailableError
43
58
  | InternalServerError;
@@ -46,7 +61,7 @@ namespace Qyl.Api.Contracts.Workbench {
46
61
  @post
47
62
  bootstrap():
48
63
  | WorkbenchSessionBootstrapResponse
49
- | UnauthorizedError
64
+ | WorkbenchUnauthorizedResponse
50
65
  | ForbiddenError
51
66
  | ConflictError
52
67
  | ServiceUnavailableError
@@ -60,7 +75,7 @@ namespace Qyl.Api.Contracts.Workbench {
60
75
  @get
61
76
  list():
62
77
  | WorkbenchWorkspaceListResponse
63
- | UnauthorizedError
78
+ | WorkbenchUnauthorizedResponse
64
79
  | ForbiddenError
65
80
  | ServiceUnavailableError
66
81
  | InternalServerError;
@@ -69,7 +84,7 @@ namespace Qyl.Api.Contracts.Workbench {
69
84
  create(@body request: WorkbenchWorkspaceCreateRequest):
70
85
  | WorkbenchWorkspace
71
86
  | ValidationError
72
- | UnauthorizedError
87
+ | WorkbenchUnauthorizedResponse
73
88
  | ForbiddenError
74
89
  | ConflictError
75
90
  | ServiceUnavailableError
@@ -79,7 +94,7 @@ namespace Qyl.Api.Contracts.Workbench {
79
94
  @route("/{workspace_id}")
80
95
  get(@path("workspace_id") workspaceId: WorkbenchWorkspaceId):
81
96
  | WorkbenchWorkspace
82
- | UnauthorizedError
97
+ | WorkbenchUnauthorizedResponse
83
98
  | ForbiddenError
84
99
  | NotFoundError
85
100
  | ServiceUnavailableError
@@ -93,7 +108,7 @@ namespace Qyl.Api.Contracts.Workbench {
93
108
  ):
94
109
  | WorkbenchWorkspace
95
110
  | ValidationError
96
- | UnauthorizedError
111
+ | WorkbenchUnauthorizedResponse
97
112
  | ForbiddenError
98
113
  | NotFoundError
99
114
  | ConflictError
@@ -104,7 +119,7 @@ namespace Qyl.Api.Contracts.Workbench {
104
119
  @route("/{workspace_id}")
105
120
  delete(@path("workspace_id") workspaceId: WorkbenchWorkspaceId):
106
121
  | WorkbenchDeleted
107
- | UnauthorizedError
122
+ | WorkbenchUnauthorizedResponse
108
123
  | ForbiddenError
109
124
  | NotFoundError
110
125
  | ConflictError
@@ -115,7 +130,7 @@ namespace Qyl.Api.Contracts.Workbench {
115
130
  @route("/{workspace_id}/preferences")
116
131
  getPreferences(@path("workspace_id") workspaceId: WorkbenchWorkspaceId):
117
132
  | WorkbenchWorkspacePreferences
118
- | UnauthorizedError
133
+ | WorkbenchUnauthorizedResponse
119
134
  | ForbiddenError
120
135
  | NotFoundError
121
136
  | ServiceUnavailableError
@@ -129,7 +144,7 @@ namespace Qyl.Api.Contracts.Workbench {
129
144
  ):
130
145
  | WorkbenchWorkspacePreferences
131
146
  | ValidationError
132
- | UnauthorizedError
147
+ | WorkbenchUnauthorizedResponse
133
148
  | ForbiddenError
134
149
  | NotFoundError
135
150
  | ServiceUnavailableError
@@ -143,7 +158,7 @@ namespace Qyl.Api.Contracts.Workbench {
143
158
  @get
144
159
  list(@path("workspace_id") workspaceId: WorkbenchWorkspaceId):
145
160
  | WorkbenchServerListResponse
146
- | UnauthorizedError
161
+ | WorkbenchUnauthorizedResponse
147
162
  | ForbiddenError
148
163
  | NotFoundError
149
164
  | ServiceUnavailableError
@@ -156,7 +171,7 @@ namespace Qyl.Api.Contracts.Workbench {
156
171
  ):
157
172
  | WorkbenchServer
158
173
  | ValidationError
159
- | UnauthorizedError
174
+ | WorkbenchUnauthorizedResponse
160
175
  | ForbiddenError
161
176
  | NotFoundError
162
177
  | ConflictError
@@ -170,7 +185,7 @@ namespace Qyl.Api.Contracts.Workbench {
170
185
  @path("server_id") serverId: WorkbenchServerId,
171
186
  ):
172
187
  | WorkbenchServer
173
- | UnauthorizedError
188
+ | WorkbenchUnauthorizedResponse
174
189
  | ForbiddenError
175
190
  | NotFoundError
176
191
  | ServiceUnavailableError
@@ -185,7 +200,7 @@ namespace Qyl.Api.Contracts.Workbench {
185
200
  ):
186
201
  | WorkbenchServer
187
202
  | ValidationError
188
- | UnauthorizedError
203
+ | WorkbenchUnauthorizedResponse
189
204
  | ForbiddenError
190
205
  | NotFoundError
191
206
  | ConflictError
@@ -199,7 +214,7 @@ namespace Qyl.Api.Contracts.Workbench {
199
214
  @path("server_id") serverId: WorkbenchServerId,
200
215
  ):
201
216
  | WorkbenchDeleted
202
- | UnauthorizedError
217
+ | WorkbenchUnauthorizedResponse
203
218
  | ForbiddenError
204
219
  | NotFoundError
205
220
  | ConflictError
@@ -213,7 +228,7 @@ namespace Qyl.Api.Contracts.Workbench {
213
228
  @path("server_id") serverId: WorkbenchServerId,
214
229
  ):
215
230
  | WorkbenchServerActionAccepted
216
- | UnauthorizedError
231
+ | WorkbenchUnauthorizedResponse
217
232
  | ForbiddenError
218
233
  | NotFoundError
219
234
  | ConflictError
@@ -228,7 +243,7 @@ namespace Qyl.Api.Contracts.Workbench {
228
243
  @path("server_id") serverId: WorkbenchServerId,
229
244
  ):
230
245
  | WorkbenchServerActionAccepted
231
- | UnauthorizedError
246
+ | WorkbenchUnauthorizedResponse
232
247
  | ForbiddenError
233
248
  | NotFoundError
234
249
  | ConflictError
@@ -242,7 +257,7 @@ namespace Qyl.Api.Contracts.Workbench {
242
257
  @path("server_id") serverId: WorkbenchServerId,
243
258
  ):
244
259
  | WorkbenchServerActionAccepted
245
- | UnauthorizedError
260
+ | WorkbenchUnauthorizedResponse
246
261
  | ForbiddenError
247
262
  | NotFoundError
248
263
  | ConflictError
@@ -257,7 +272,7 @@ namespace Qyl.Api.Contracts.Workbench {
257
272
  @path("server_id") serverId: WorkbenchServerId,
258
273
  ):
259
274
  | WorkbenchDiscoverySnapshot
260
- | UnauthorizedError
275
+ | WorkbenchUnauthorizedResponse
261
276
  | ForbiddenError
262
277
  | NotFoundError
263
278
  | ConflictError
@@ -272,7 +287,7 @@ namespace Qyl.Api.Contracts.Workbench {
272
287
  @path("server_id") serverId: WorkbenchServerId,
273
288
  ):
274
289
  | WorkbenchDiscoverySnapshot
275
- | UnauthorizedError
290
+ | WorkbenchUnauthorizedResponse
276
291
  | ForbiddenError
277
292
  | NotFoundError
278
293
  | ConflictError
@@ -280,21 +295,17 @@ namespace Qyl.Api.Contracts.Workbench {
280
295
  | ServiceUnavailableError
281
296
  | InternalServerError;
282
297
 
298
+ @list
283
299
  @get
284
300
  @route("/{server_id}/protocol")
285
301
  protocolEvents(
286
302
  @path("workspace_id") workspaceId: WorkbenchWorkspaceId,
287
303
  @path("server_id") serverId: WorkbenchServerId,
288
- @query cursor?: string,
289
-
290
- @query
291
- @minValue(1)
292
- @maxValue(1000)
293
- limit?: int32 = 200,
304
+ ...CursorPageQuery,
294
305
  ):
295
306
  | WorkbenchProtocolEventPage
296
307
  | ValidationError
297
- | UnauthorizedError
308
+ | WorkbenchUnauthorizedResponse
298
309
  | ForbiddenError
299
310
  | NotFoundError
300
311
  | ServiceUnavailableError
@@ -308,7 +319,7 @@ namespace Qyl.Api.Contracts.Workbench {
308
319
  @header("Last-Event-ID") lastEventId?: string,
309
320
  ):
310
321
  | SSEStream<WorkbenchProtocolEvents>
311
- | UnauthorizedError
322
+ | WorkbenchUnauthorizedResponse
312
323
  | ForbiddenError
313
324
  | NotFoundError
314
325
  | ServiceUnavailableError
@@ -328,27 +339,23 @@ namespace Qyl.Api.Contracts.Workbench {
328
339
  @header("Last-Event-ID") lastEventId?: string,
329
340
  ):
330
341
  | SSEStream<WorkbenchExecutionUpdateEvents>
331
- | UnauthorizedError
342
+ | WorkbenchUnauthorizedResponse
332
343
  | ForbiddenError
333
344
  | NotFoundError
334
345
  | ServiceUnavailableError
335
346
  | InternalServerError;
336
347
 
348
+ @list
337
349
  @get
338
350
  list(
339
351
  @path("workspace_id") workspaceId: WorkbenchWorkspaceId,
340
352
  @path("server_id") serverId: WorkbenchServerId,
341
353
  @query status?: WorkbenchExecutionStatus,
342
- @query cursor?: string,
343
-
344
- @query
345
- @minValue(1)
346
- @maxValue(1000)
347
- limit?: int32 = 100,
354
+ ...CursorPageQuery,
348
355
  ):
349
356
  | WorkbenchExecutionPage
350
357
  | ValidationError
351
- | UnauthorizedError
358
+ | WorkbenchUnauthorizedResponse
352
359
  | ForbiddenError
353
360
  | NotFoundError
354
361
  | ServiceUnavailableError
@@ -362,7 +369,7 @@ namespace Qyl.Api.Contracts.Workbench {
362
369
  ):
363
370
  | WorkbenchExecutionAccepted
364
371
  | ValidationError
365
- | UnauthorizedError
372
+ | WorkbenchUnauthorizedResponse
366
373
  | ForbiddenError
367
374
  | NotFoundError
368
375
  | ConflictError
@@ -378,7 +385,7 @@ namespace Qyl.Api.Contracts.Workbench {
378
385
  @path("execution_id") executionId: WorkbenchExecutionId,
379
386
  ):
380
387
  | WorkbenchExecutionRecord
381
- | UnauthorizedError
388
+ | WorkbenchUnauthorizedResponse
382
389
  | ForbiddenError
383
390
  | NotFoundError
384
391
  | ServiceUnavailableError
@@ -394,7 +401,7 @@ namespace Qyl.Api.Contracts.Workbench {
394
401
  ):
395
402
  | WorkbenchExecutionAccepted
396
403
  | ValidationError
397
- | UnauthorizedError
404
+ | WorkbenchUnauthorizedResponse
398
405
  | ForbiddenError
399
406
  | NotFoundError
400
407
  | ConflictError
@@ -409,7 +416,7 @@ namespace Qyl.Api.Contracts.Workbench {
409
416
  @path("execution_id") executionId: WorkbenchExecutionId,
410
417
  ):
411
418
  | WorkbenchExecutionTelemetryResponse
412
- | UnauthorizedError
419
+ | WorkbenchUnauthorizedResponse
413
420
  | ForbiddenError
414
421
  | NotFoundError
415
422
  | ServiceUnavailableError
@@ -420,21 +427,17 @@ namespace Qyl.Api.Contracts.Workbench {
420
427
  @tag("Workbench MCP test cases")
421
428
  @useAuth(WorkbenchSessionCookieAuth)
422
429
  interface WorkbenchTestCasesApi {
430
+ @list
423
431
  @get
424
432
  list(
425
433
  @path("workspace_id") workspaceId: WorkbenchWorkspaceId,
426
434
  @query("server_id") serverId?: WorkbenchServerId,
427
435
  @query("tool_name") toolName?: string,
428
- @query cursor?: string,
429
-
430
- @query
431
- @minValue(1)
432
- @maxValue(1000)
433
- limit?: int32 = 100,
436
+ ...CursorPageQuery,
434
437
  ):
435
438
  | WorkbenchTestCasePage
436
439
  | ValidationError
437
- | UnauthorizedError
440
+ | WorkbenchUnauthorizedResponse
438
441
  | ForbiddenError
439
442
  | NotFoundError
440
443
  | ServiceUnavailableError
@@ -447,7 +450,7 @@ namespace Qyl.Api.Contracts.Workbench {
447
450
  ):
448
451
  | WorkbenchTestCase
449
452
  | ValidationError
450
- | UnauthorizedError
453
+ | WorkbenchUnauthorizedResponse
451
454
  | ForbiddenError
452
455
  | NotFoundError
453
456
  | ConflictError
@@ -461,7 +464,7 @@ namespace Qyl.Api.Contracts.Workbench {
461
464
  @path("test_case_id") testCaseId: WorkbenchTestCaseId,
462
465
  ):
463
466
  | WorkbenchTestCase
464
- | UnauthorizedError
467
+ | WorkbenchUnauthorizedResponse
465
468
  | ForbiddenError
466
469
  | NotFoundError
467
470
  | ServiceUnavailableError
@@ -476,7 +479,7 @@ namespace Qyl.Api.Contracts.Workbench {
476
479
  ):
477
480
  | WorkbenchTestCase
478
481
  | ValidationError
479
- | UnauthorizedError
482
+ | WorkbenchUnauthorizedResponse
480
483
  | ForbiddenError
481
484
  | NotFoundError
482
485
  | ConflictError
@@ -490,7 +493,7 @@ namespace Qyl.Api.Contracts.Workbench {
490
493
  @path("test_case_id") testCaseId: WorkbenchTestCaseId,
491
494
  ):
492
495
  | WorkbenchDeleted
493
- | UnauthorizedError
496
+ | WorkbenchUnauthorizedResponse
494
497
  | ForbiddenError
495
498
  | NotFoundError
496
499
  | ConflictError
@@ -506,7 +509,7 @@ namespace Qyl.Api.Contracts.Workbench {
506
509
  ):
507
510
  | WorkbenchEvaluationRunAccepted
508
511
  | ValidationError
509
- | UnauthorizedError
512
+ | WorkbenchUnauthorizedResponse
510
513
  | ForbiddenError
511
514
  | NotFoundError
512
515
  | ConflictError
@@ -518,19 +521,15 @@ namespace Qyl.Api.Contracts.Workbench {
518
521
  @tag("Workbench MCP suites")
519
522
  @useAuth(WorkbenchSessionCookieAuth)
520
523
  interface WorkbenchSuitesApi {
524
+ @list
521
525
  @get
522
526
  list(
523
527
  @path("workspace_id") workspaceId: WorkbenchWorkspaceId,
524
- @query cursor?: string,
525
-
526
- @query
527
- @minValue(1)
528
- @maxValue(1000)
529
- limit?: int32 = 100,
528
+ ...CursorPageQuery,
530
529
  ):
531
530
  | WorkbenchTestSuitePage
532
531
  | ValidationError
533
- | UnauthorizedError
532
+ | WorkbenchUnauthorizedResponse
534
533
  | ForbiddenError
535
534
  | NotFoundError
536
535
  | ServiceUnavailableError
@@ -543,7 +542,7 @@ namespace Qyl.Api.Contracts.Workbench {
543
542
  ):
544
543
  | WorkbenchTestSuite
545
544
  | ValidationError
546
- | UnauthorizedError
545
+ | WorkbenchUnauthorizedResponse
547
546
  | ForbiddenError
548
547
  | NotFoundError
549
548
  | ConflictError
@@ -557,7 +556,7 @@ namespace Qyl.Api.Contracts.Workbench {
557
556
  @path("suite_id") suiteId: WorkbenchSuiteId,
558
557
  ):
559
558
  | WorkbenchTestSuite
560
- | UnauthorizedError
559
+ | WorkbenchUnauthorizedResponse
561
560
  | ForbiddenError
562
561
  | NotFoundError
563
562
  | ServiceUnavailableError
@@ -572,7 +571,7 @@ namespace Qyl.Api.Contracts.Workbench {
572
571
  ):
573
572
  | WorkbenchTestSuite
574
573
  | ValidationError
575
- | UnauthorizedError
574
+ | WorkbenchUnauthorizedResponse
576
575
  | ForbiddenError
577
576
  | NotFoundError
578
577
  | ConflictError
@@ -586,7 +585,7 @@ namespace Qyl.Api.Contracts.Workbench {
586
585
  @path("suite_id") suiteId: WorkbenchSuiteId,
587
586
  ):
588
587
  | WorkbenchDeleted
589
- | UnauthorizedError
588
+ | WorkbenchUnauthorizedResponse
590
589
  | ForbiddenError
591
590
  | NotFoundError
592
591
  | ConflictError
@@ -602,7 +601,7 @@ namespace Qyl.Api.Contracts.Workbench {
602
601
  ):
603
602
  | WorkbenchEvaluationRunAccepted
604
603
  | ValidationError
605
- | UnauthorizedError
604
+ | WorkbenchUnauthorizedResponse
606
605
  | ForbiddenError
607
606
  | NotFoundError
608
607
  | ConflictError
@@ -614,20 +613,16 @@ namespace Qyl.Api.Contracts.Workbench {
614
613
  @tag("Workbench MCP evaluations")
615
614
  @useAuth(WorkbenchSessionCookieAuth)
616
615
  interface WorkbenchEvaluationRunsApi {
616
+ @list
617
617
  @get
618
618
  list(
619
619
  @path("workspace_id") workspaceId: WorkbenchWorkspaceId,
620
620
  @query status?: WorkbenchEvaluationRunStatus,
621
- @query cursor?: string,
622
-
623
- @query
624
- @minValue(1)
625
- @maxValue(1000)
626
- limit?: int32 = 100,
621
+ ...CursorPageQuery,
627
622
  ):
628
623
  | WorkbenchEvaluationRunPage
629
624
  | ValidationError
630
- | UnauthorizedError
625
+ | WorkbenchUnauthorizedResponse
631
626
  | ForbiddenError
632
627
  | NotFoundError
633
628
  | ServiceUnavailableError
@@ -640,7 +635,7 @@ namespace Qyl.Api.Contracts.Workbench {
640
635
  @path("evaluation_run_id") evaluationRunId: WorkbenchEvaluationRunId,
641
636
  ):
642
637
  | WorkbenchEvaluationRun
643
- | UnauthorizedError
638
+ | WorkbenchUnauthorizedResponse
644
639
  | ForbiddenError
645
640
  | NotFoundError
646
641
  | ServiceUnavailableError
@@ -654,7 +649,7 @@ namespace Qyl.Api.Contracts.Workbench {
654
649
  ):
655
650
  | WorkbenchEvaluationRunComparison
656
651
  | ValidationError
657
- | UnauthorizedError
652
+ | WorkbenchUnauthorizedResponse
658
653
  | ForbiddenError
659
654
  | NotFoundError
660
655
  | ConflictError
@@ -670,7 +665,7 @@ namespace Qyl.Api.Contracts.Workbench {
670
665
  ):
671
666
  | WorkbenchEvaluationExportAccepted
672
667
  | ValidationError
673
- | UnauthorizedError
668
+ | WorkbenchUnauthorizedResponse
674
669
  | ForbiddenError
675
670
  | NotFoundError
676
671
  | ConflictError
@@ -685,7 +680,7 @@ namespace Qyl.Api.Contracts.Workbench {
685
680
  @path("export_id") exportId: WorkbenchEvaluationExportId,
686
681
  ):
687
682
  | WorkbenchEvaluationExport
688
- | UnauthorizedError
683
+ | WorkbenchUnauthorizedResponse
689
684
  | ForbiddenError
690
685
  | NotFoundError
691
686
  | ServiceUnavailableError
@@ -699,7 +694,7 @@ namespace Qyl.Api.Contracts.Workbench {
699
694
  @path("export_id") exportId: WorkbenchEvaluationExportId,
700
695
  ):
701
696
  | WorkbenchEvaluationExportArtifact
702
- | UnauthorizedError
697
+ | WorkbenchUnauthorizedResponse
703
698
  | ForbiddenError
704
699
  | NotFoundError
705
700
  | ConflictError