@ora-ai/cli 0.1.0 → 0.2.1

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.
@@ -1,9 +1,9 @@
1
1
  // GENERATED by scripts/generate.mjs — DO NOT EDIT.
2
- // Source: openapi/ora-public.openapi.json (sha256 d1aeca5bf5255cdfbdf7836aace5a10fc4242ce23a30dd16761092e8383291b0)
2
+ // Source: openapi/ora-public.openapi.json (sha256 352c6714b3c9a03fd9709b5d06bd71c0fd7d8e7932375de27624661484bb76f5)
3
3
  // Regenerate: yarn nx run ora-cli:generate
4
4
  export const SPEC = {
5
5
  "version": "1.0.0",
6
- "contentHash": "d1aeca5bf5255cdfbdf7836aace5a10fc4242ce23a30dd16761092e8383291b0",
6
+ "contentHash": "352c6714b3c9a03fd9709b5d06bd71c0fd7d8e7932375de27624661484bb76f5",
7
7
  "server": "https://api.agentfront.sh",
8
8
  "bin": "ora"
9
9
  };
@@ -210,6 +210,394 @@ export const OPERATIONS = [
210
210
  "command": "ora analytics overview"
211
211
  }
212
212
  },
213
+ {
214
+ "id": "benchmarks.create",
215
+ "commandPath": [
216
+ "benchmarks",
217
+ "create"
218
+ ],
219
+ "method": "post",
220
+ "pathTemplate": "/experiment/v1/benchmarks",
221
+ "summary": "Create a benchmark and start async task generation (poll get until status 'ready', then launch)",
222
+ "scope": "benchmarks:write",
223
+ "product": "experiment",
224
+ "pathParams": [],
225
+ "queryParams": [],
226
+ "hasBody": true,
227
+ "bodyRequired": true,
228
+ "isStream": false,
229
+ "bodyFields": [
230
+ {
231
+ "name": "name",
232
+ "required": true,
233
+ "kind": "string",
234
+ "description": "Display name for the benchmark (≤160 chars).",
235
+ "placeholder": "tavily-search A/B"
236
+ },
237
+ {
238
+ "name": "description",
239
+ "required": false,
240
+ "kind": "string",
241
+ "description": "Optional longer description shown on the benchmark card.",
242
+ "placeholder": "<description>"
243
+ },
244
+ {
245
+ "name": "subjectKind",
246
+ "required": false,
247
+ "kind": "string",
248
+ "enum": [
249
+ "skill",
250
+ "tools",
251
+ "addon",
252
+ "custom"
253
+ ],
254
+ "description": "What the benchmark measures — defaults to 'skill'. See the enum description for each kind's rules.",
255
+ "placeholder": "addon"
256
+ },
257
+ {
258
+ "name": "skillRef",
259
+ "required": false,
260
+ "kind": "string",
261
+ "description": "The skill under test as '<source>:<id>' — sources: 'custom' (an org-authored skill, id from the skills API), 'builtin' (a starter example), 'git' (a git-imported skill). E.g. 'custom:8c1d…'. REQUIRED iff subjectKind 'skill'; forbidden otherwise.",
262
+ "placeholder": "<skillRef>"
263
+ },
264
+ {
265
+ "name": "subjectName",
266
+ "required": false,
267
+ "kind": "string",
268
+ "description": "Display name of a NON-skill subject (e.g. 'Tavily search', 'monday.com remote MCP'). Required iff subjectKind ≠ 'skill'; forbidden for 'skill' (the skill's own name is used).",
269
+ "placeholder": "Tavily search"
270
+ },
271
+ {
272
+ "name": "armConfig",
273
+ "required": false,
274
+ "kind": "object",
275
+ "description": "Frozen per-arm run-payload deltas. Required for subjectKind 'custom' and comparisonMode 'ab_custom'; for 'tools'/'addon' subjects the treatment side is derived when omitted.",
276
+ "placeholder": "{\"treatment\":{\"addons\":{\"tavily\":{\"secretId\":\"<org-secret-uuid>\"}}}}"
277
+ },
278
+ {
279
+ "name": "comparisonMode",
280
+ "required": false,
281
+ "kind": "string",
282
+ "enum": [
283
+ "ab_vs_none",
284
+ "ab_custom",
285
+ "single"
286
+ ],
287
+ "description": "The baseline design — defaults to 'ab_vs_none'. See the enum description for each mode.",
288
+ "placeholder": "ab_vs_none"
289
+ },
290
+ {
291
+ "name": "baselineLabel",
292
+ "required": false,
293
+ "kind": "string",
294
+ "description": "Baseline arm's display label (e.g. 'REST API'). Required iff comparisonMode 'ab_custom'; forbidden otherwise.",
295
+ "placeholder": "<baselineLabel>"
296
+ },
297
+ {
298
+ "name": "treatmentLabel",
299
+ "required": false,
300
+ "kind": "string",
301
+ "description": "Treatment arm's display label (e.g. 'Remote MCP'). Required iff comparisonMode 'ab_custom'; forbidden otherwise.",
302
+ "placeholder": "<treatmentLabel>"
303
+ },
304
+ {
305
+ "name": "taskCount",
306
+ "required": false,
307
+ "kind": "number",
308
+ "description": "How many tasks to auto-generate (1–50, default 5). Runs launched = taskCount × matrix cells × arms (2 arms unless 'single').",
309
+ "placeholder": "5"
310
+ },
311
+ {
312
+ "name": "matrix",
313
+ "required": true,
314
+ "kind": "array",
315
+ "description": "The (harness, model) cells to fan out over — 1 to 12 cells.",
316
+ "placeholder": "[{\"harness\":\"claude-code\",\"model\":\"claude-sonnet-5\"},{\"harness\":\"codex\",\"model\":\"gpt-5.5\"}]"
317
+ },
318
+ {
319
+ "name": "promise",
320
+ "required": false,
321
+ "kind": "string",
322
+ "description": "The claim under test, driving task generation and the pre-registered rubrics (e.g. 'Tavily search finds fresher, better-sourced answers than no web access'). Optional for subjectKind 'skill' (omitted → extracted from the skill body); REQUIRED for every other kind.",
323
+ "placeholder": "Web search via Tavily produces fresher, better-sourced answers than no web access"
324
+ }
325
+ ],
326
+ "watchable": true,
327
+ "help": {
328
+ "command": "ora benchmarks create --file run.json --watch",
329
+ "body": "{\n \"name\": \"tavily-search A/B\",\n \"subjectKind\": \"addon\",\n \"subjectName\": \"Tavily search\",\n \"promise\": \"Web search via Tavily produces fresher, better-sourced answers than no web access\",\n \"armConfig\": {\n \"treatment\": {\n \"addons\": {\n \"tavily\": {\n \"secretId\": \"<org-secret-uuid>\"\n }\n }\n }\n },\n \"taskCount\": 5,\n \"matrix\": [\n {\n \"harness\": \"claude-code\",\n \"model\": \"claude-sonnet-5\"\n },\n {\n \"harness\": \"codex\",\n \"model\": \"gpt-5.5\"\n }\n ]\n}"
330
+ }
331
+ },
332
+ {
333
+ "id": "benchmarks.delete",
334
+ "commandPath": [
335
+ "benchmarks",
336
+ "delete"
337
+ ],
338
+ "method": "delete",
339
+ "pathTemplate": "/experiment/v1/benchmarks/{id}",
340
+ "summary": "Delete a benchmark and its tasks/facts (409 while running)",
341
+ "scope": "benchmarks:write",
342
+ "product": "experiment",
343
+ "pathParams": [
344
+ {
345
+ "name": "id"
346
+ }
347
+ ],
348
+ "queryParams": [],
349
+ "hasBody": false,
350
+ "bodyRequired": false,
351
+ "isStream": false,
352
+ "watchable": false,
353
+ "help": {
354
+ "command": "ora benchmarks delete <id>"
355
+ }
356
+ },
357
+ {
358
+ "id": "benchmarks.generate",
359
+ "commandPath": [
360
+ "benchmarks",
361
+ "generate"
362
+ ],
363
+ "method": "post",
364
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/generate",
365
+ "summary": "Regenerate the task corpus (status ready/failed only — wipes existing tasks and their rubrics)",
366
+ "scope": "benchmarks:write",
367
+ "product": "experiment",
368
+ "pathParams": [
369
+ {
370
+ "name": "id"
371
+ }
372
+ ],
373
+ "queryParams": [],
374
+ "hasBody": false,
375
+ "bodyRequired": false,
376
+ "isStream": false,
377
+ "watchable": true,
378
+ "help": {
379
+ "command": "ora benchmarks generate <id> --watch"
380
+ }
381
+ },
382
+ {
383
+ "id": "benchmarks.get",
384
+ "commandPath": [
385
+ "benchmarks",
386
+ "get"
387
+ ],
388
+ "method": "get",
389
+ "pathTemplate": "/experiment/v1/benchmarks/{id}",
390
+ "summary": "Benchmark detail: status to poll, tasks + rubrics, per-run facts, live aggregate + verdict",
391
+ "scope": "benchmarks:read",
392
+ "product": "experiment",
393
+ "pathParams": [
394
+ {
395
+ "name": "id"
396
+ }
397
+ ],
398
+ "queryParams": [],
399
+ "hasBody": false,
400
+ "bodyRequired": false,
401
+ "isStream": false,
402
+ "watchable": false,
403
+ "help": {
404
+ "command": "ora benchmarks get 1f7e4d1c-4b2a-4f3e-9d8c-5a6b7c8d9e0f"
405
+ }
406
+ },
407
+ {
408
+ "id": "benchmarks.launch",
409
+ "commandPath": [
410
+ "benchmarks",
411
+ "launch"
412
+ ],
413
+ "method": "post",
414
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/launch",
415
+ "summary": "Launch: fan out task × matrix-cell × arm runs (async — poll get until status 'completed')",
416
+ "scope": "benchmarks:write",
417
+ "product": "experiment",
418
+ "pathParams": [
419
+ {
420
+ "name": "id"
421
+ }
422
+ ],
423
+ "queryParams": [],
424
+ "hasBody": false,
425
+ "bodyRequired": false,
426
+ "isStream": false,
427
+ "watchable": true,
428
+ "help": {
429
+ "command": "ora benchmarks launch <id> --watch"
430
+ }
431
+ },
432
+ {
433
+ "id": "benchmarks.list",
434
+ "commandPath": [
435
+ "benchmarks",
436
+ "list"
437
+ ],
438
+ "method": "get",
439
+ "pathTemplate": "/experiment/v1/benchmarks",
440
+ "summary": "List the org's benchmarks (id, status, verdict, subject)",
441
+ "scope": "benchmarks:read",
442
+ "product": "experiment",
443
+ "pathParams": [],
444
+ "queryParams": [],
445
+ "hasBody": false,
446
+ "bodyRequired": false,
447
+ "isStream": false,
448
+ "watchable": false,
449
+ "help": {
450
+ "command": "ora benchmarks list"
451
+ }
452
+ },
453
+ {
454
+ "id": "benchmarks.publish",
455
+ "commandPath": [
456
+ "benchmarks",
457
+ "publish"
458
+ ],
459
+ "method": "post",
460
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/publish",
461
+ "summary": "Publish a completed benchmark to the anonymous public catalog (idempotent slug upsert)",
462
+ "scope": "benchmarks:write",
463
+ "product": "experiment",
464
+ "pathParams": [
465
+ {
466
+ "name": "id"
467
+ }
468
+ ],
469
+ "queryParams": [],
470
+ "hasBody": true,
471
+ "bodyRequired": true,
472
+ "isStream": false,
473
+ "bodyFields": [
474
+ {
475
+ "name": "slug",
476
+ "required": false,
477
+ "kind": "string",
478
+ "description": "Public catalog URL slug (lowercase [a-z0-9-], ≤80). Omitted → the benchmark's own generated slug. 409 benchmark_slug_taken if another published benchmark holds it.",
479
+ "placeholder": "tavily-search-ab"
480
+ }
481
+ ],
482
+ "watchable": false,
483
+ "help": {
484
+ "command": "ora benchmarks publish 1f7e4d1c-4b2a-4f3e-9d8c-5a6b7c8d9e0f --file run.json",
485
+ "body": "{\n \"slug\": \"tavily-search-ab\"\n}"
486
+ }
487
+ },
488
+ {
489
+ "id": "benchmarks.regrade",
490
+ "commandPath": [
491
+ "benchmarks",
492
+ "regrade"
493
+ ],
494
+ "method": "post",
495
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/regrade",
496
+ "summary": "Clear and re-run judge-panel grading (rubrics + blind pairwise) for a completed benchmark",
497
+ "scope": "benchmarks:write",
498
+ "product": "experiment",
499
+ "pathParams": [
500
+ {
501
+ "name": "id"
502
+ }
503
+ ],
504
+ "queryParams": [],
505
+ "hasBody": false,
506
+ "bodyRequired": false,
507
+ "isStream": false,
508
+ "watchable": true,
509
+ "help": {
510
+ "command": "ora benchmarks regrade <id> --watch"
511
+ }
512
+ },
513
+ {
514
+ "id": "benchmarks.stream",
515
+ "commandPath": [
516
+ "benchmarks",
517
+ "stream"
518
+ ],
519
+ "method": "get",
520
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/stream",
521
+ "summary": "Live SSE stream: status transitions, per-run facts, grading, publish state (terminal status closes it)",
522
+ "scope": "benchmarks:read",
523
+ "product": "experiment",
524
+ "pathParams": [
525
+ {
526
+ "name": "id"
527
+ }
528
+ ],
529
+ "queryParams": [],
530
+ "hasBody": false,
531
+ "bodyRequired": false,
532
+ "isStream": true,
533
+ "watchable": false,
534
+ "help": {
535
+ "command": "ora benchmarks stream 1f7e4d1c-4b2a-4f3e-9d8c-5a6b7c8d9e0f"
536
+ }
537
+ },
538
+ {
539
+ "id": "benchmarks.unpublish",
540
+ "commandPath": [
541
+ "benchmarks",
542
+ "unpublish"
543
+ ],
544
+ "method": "post",
545
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/unpublish",
546
+ "summary": "Remove a benchmark from the public catalog (data kept; re-publish any time)",
547
+ "scope": "benchmarks:write",
548
+ "product": "experiment",
549
+ "pathParams": [
550
+ {
551
+ "name": "id"
552
+ }
553
+ ],
554
+ "queryParams": [],
555
+ "hasBody": false,
556
+ "bodyRequired": false,
557
+ "isStream": false,
558
+ "watchable": false,
559
+ "help": {
560
+ "command": "ora benchmarks unpublish <id>"
561
+ }
562
+ },
563
+ {
564
+ "id": "benchmarks.updateTask",
565
+ "commandPath": [
566
+ "benchmarks",
567
+ "update-task"
568
+ ],
569
+ "method": "put",
570
+ "pathTemplate": "/experiment/v1/benchmarks/{id}/tasks/{taskId}",
571
+ "summary": "Edit a generated task's prompt before launch (status 'ready' only)",
572
+ "scope": "benchmarks:write",
573
+ "product": "experiment",
574
+ "pathParams": [
575
+ {
576
+ "name": "id"
577
+ },
578
+ {
579
+ "name": "taskId"
580
+ }
581
+ ],
582
+ "queryParams": [],
583
+ "hasBody": true,
584
+ "bodyRequired": true,
585
+ "isStream": false,
586
+ "bodyFields": [
587
+ {
588
+ "name": "prompt",
589
+ "required": true,
590
+ "kind": "string",
591
+ "description": "The replacement task prompt, dispatched verbatim as each run's intent. Editable only while the benchmark is 'ready' (pre-launch).",
592
+ "placeholder": "Research the three largest EU battery-storage tenders announced this quarter and cite each source."
593
+ }
594
+ ],
595
+ "watchable": false,
596
+ "help": {
597
+ "command": "ora benchmarks update-task 1f7e4d1c-4b2a-4f3e-9d8c-5a6b7c8d9e0f 8a9b0c1d-2e3f-4a5b-8c7d-6e5f4a3b2c1d --file run.json",
598
+ "body": "{\n \"prompt\": \"Research the three largest EU battery-storage tenders announced this quarter and cite each source.\"\n}"
599
+ }
600
+ },
213
601
  {
214
602
  "id": "domains.add",
215
603
  "commandPath": [
@@ -286,6 +674,27 @@ export const OPERATIONS = [
286
674
  "command": "ora domains remove <id>"
287
675
  }
288
676
  },
677
+ {
678
+ "id": "experiment.catalog",
679
+ "commandPath": [
680
+ "experiment",
681
+ "catalog"
682
+ ],
683
+ "method": "get",
684
+ "pathTemplate": "/experiment/v1/catalog",
685
+ "summary": "Harness × model catalog: valid matrix cells, defaults, modes, and withheld harnesses with reasons",
686
+ "scope": null,
687
+ "product": "experiment",
688
+ "pathParams": [],
689
+ "queryParams": [],
690
+ "hasBody": false,
691
+ "bodyRequired": false,
692
+ "isStream": false,
693
+ "watchable": false,
694
+ "help": {
695
+ "command": "ora experiment catalog"
696
+ }
697
+ },
289
698
  {
290
699
  "id": "experiment.runs.create",
291
700
  "commandPath": [
@@ -587,6 +996,93 @@ export const OPERATIONS = [
587
996
  "command": "ora experiment runs trajectory <id>"
588
997
  }
589
998
  },
999
+ {
1000
+ "id": "experiment.secrets.create",
1001
+ "commandPath": [
1002
+ "experiment",
1003
+ "secrets",
1004
+ "create"
1005
+ ],
1006
+ "method": "post",
1007
+ "pathTemplate": "/experiment/v1/secrets",
1008
+ "summary": "Create an org secret (encrypted at rest; the value is never readable back through this surface)",
1009
+ "scope": "secrets:write",
1010
+ "product": "platform",
1011
+ "pathParams": [],
1012
+ "queryParams": [],
1013
+ "hasBody": true,
1014
+ "bodyRequired": true,
1015
+ "isStream": false,
1016
+ "bodyFields": [
1017
+ {
1018
+ "name": "name",
1019
+ "required": true,
1020
+ "kind": "string",
1021
+ "description": "Secret name (letters, numbers, '.', '_', '-') — how add-on configs and env bindings will refer to it in the UI; the wire references use the returned id.",
1022
+ "placeholder": "MONDAY_API_KEY"
1023
+ },
1024
+ {
1025
+ "name": "value",
1026
+ "required": true,
1027
+ "kind": "string",
1028
+ "description": "The secret value (an API token, key, …). Encrypted at rest; NEVER echoed back by any read this surface offers — reads return metadata only.",
1029
+ "placeholder": "<the token — never logged, never echoed>"
1030
+ }
1031
+ ],
1032
+ "watchable": false,
1033
+ "help": {
1034
+ "command": "ora experiment secrets create --file run.json",
1035
+ "body": "{\n \"name\": \"MONDAY_API_KEY\",\n \"value\": \"<the token — never logged, never echoed>\"\n}"
1036
+ }
1037
+ },
1038
+ {
1039
+ "id": "experiment.secrets.delete",
1040
+ "commandPath": [
1041
+ "experiment",
1042
+ "secrets",
1043
+ "delete"
1044
+ ],
1045
+ "method": "delete",
1046
+ "pathTemplate": "/experiment/v1/secrets/{id}",
1047
+ "summary": "Delete an org secret (runs already launched keep nothing; future boot-fetches fail closed)",
1048
+ "scope": "secrets:write",
1049
+ "product": "platform",
1050
+ "pathParams": [
1051
+ {
1052
+ "name": "id"
1053
+ }
1054
+ ],
1055
+ "queryParams": [],
1056
+ "hasBody": false,
1057
+ "bodyRequired": false,
1058
+ "isStream": false,
1059
+ "watchable": false,
1060
+ "help": {
1061
+ "command": "ora experiment secrets delete <id>"
1062
+ }
1063
+ },
1064
+ {
1065
+ "id": "experiment.secrets.list",
1066
+ "commandPath": [
1067
+ "experiment",
1068
+ "secrets",
1069
+ "list"
1070
+ ],
1071
+ "method": "get",
1072
+ "pathTemplate": "/experiment/v1/secrets",
1073
+ "summary": "List the org's secrets (metadata only — ids for armConfig/envBindings references)",
1074
+ "scope": "secrets:read",
1075
+ "product": "platform",
1076
+ "pathParams": [],
1077
+ "queryParams": [],
1078
+ "hasBody": false,
1079
+ "bodyRequired": false,
1080
+ "isStream": false,
1081
+ "watchable": false,
1082
+ "help": {
1083
+ "command": "ora experiment secrets list"
1084
+ }
1085
+ },
590
1086
  {
591
1087
  "id": "intents.addPrompt",
592
1088
  "commandPath": [