@galaxy-tool-util/schema 1.14.0 → 1.15.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.
Files changed (67) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/user-tool-source/schema.generated.d.ts +1203 -266
  6. package/dist/user-tool-source/schema.generated.d.ts.map +1 -1
  7. package/dist/user-tool-source/schema.generated.js +1522 -367
  8. package/dist/user-tool-source/schema.generated.js.map +1 -1
  9. package/dist/workflow/index.d.ts +1 -1
  10. package/dist/workflow/index.d.ts.map +1 -1
  11. package/dist/workflow/index.js +1 -1
  12. package/dist/workflow/index.js.map +1 -1
  13. package/dist/workflow/input-parameter.d.ts +280 -0
  14. package/dist/workflow/input-parameter.d.ts.map +1 -0
  15. package/dist/workflow/input-parameter.js +38 -0
  16. package/dist/workflow/input-parameter.js.map +1 -0
  17. package/dist/workflow/lint.d.ts.map +1 -1
  18. package/dist/workflow/lint.js +156 -50
  19. package/dist/workflow/lint.js.map +1 -1
  20. package/dist/workflow/mermaid.d.ts.map +1 -1
  21. package/dist/workflow/mermaid.js +1 -0
  22. package/dist/workflow/mermaid.js.map +1 -1
  23. package/dist/workflow/normalized/native.js +5 -4
  24. package/dist/workflow/normalized/native.js.map +1 -1
  25. package/dist/workflow/normalized/toFormat2.d.ts +1 -0
  26. package/dist/workflow/normalized/toFormat2.d.ts.map +1 -1
  27. package/dist/workflow/normalized/toFormat2.js +24 -2
  28. package/dist/workflow/normalized/toFormat2.js.map +1 -1
  29. package/dist/workflow/normalized/toNative.d.ts +3 -1
  30. package/dist/workflow/normalized/toNative.d.ts.map +1 -1
  31. package/dist/workflow/normalized/toNative.js +32 -11
  32. package/dist/workflow/normalized/toNative.js.map +1 -1
  33. package/dist/workflow/raw/gxformat2-draft.d.ts +67 -9
  34. package/dist/workflow/raw/gxformat2-draft.d.ts.map +1 -1
  35. package/dist/workflow/raw/gxformat2-draft.effect.d.ts +1073 -161
  36. package/dist/workflow/raw/gxformat2-draft.effect.d.ts.map +1 -1
  37. package/dist/workflow/raw/gxformat2-draft.effect.js +184 -120
  38. package/dist/workflow/raw/gxformat2-draft.effect.js.map +1 -1
  39. package/dist/workflow/raw/gxformat2-draft.js +6 -0
  40. package/dist/workflow/raw/gxformat2-draft.js.map +1 -1
  41. package/dist/workflow/raw/gxformat2.d.ts +67 -9
  42. package/dist/workflow/raw/gxformat2.d.ts.map +1 -1
  43. package/dist/workflow/raw/gxformat2.effect.d.ts +591 -143
  44. package/dist/workflow/raw/gxformat2.effect.d.ts.map +1 -1
  45. package/dist/workflow/raw/gxformat2.effect.js +169 -105
  46. package/dist/workflow/raw/gxformat2.effect.js.map +1 -1
  47. package/dist/workflow/raw/gxformat2.js +6 -0
  48. package/dist/workflow/raw/gxformat2.js.map +1 -1
  49. package/dist/workflow/raw/native.d.ts +14 -0
  50. package/dist/workflow/raw/native.d.ts.map +1 -1
  51. package/dist/workflow/raw/native.effect.d.ts +45 -30
  52. package/dist/workflow/raw/native.effect.d.ts.map +1 -1
  53. package/dist/workflow/raw/native.effect.js +40 -26
  54. package/dist/workflow/raw/native.effect.js.map +1 -1
  55. package/dist/workflow/raw/native.js.map +1 -1
  56. package/dist/workflow/schema_rules.yml +9 -0
  57. package/dist/workflow/semantic-validators.d.ts.map +1 -1
  58. package/dist/workflow/semantic-validators.js +17 -8
  59. package/dist/workflow/semantic-validators.js.map +1 -1
  60. package/dist/workflow/strict-checks.d.ts.map +1 -1
  61. package/dist/workflow/strict-checks.js +2 -3
  62. package/dist/workflow/strict-checks.js.map +1 -1
  63. package/dist/workflow/validators.d.ts +7 -4
  64. package/dist/workflow/validators.d.ts.map +1 -1
  65. package/dist/workflow/validators.js +20 -9
  66. package/dist/workflow/validators.js.map +1 -1
  67. package/package.json +1 -1
@@ -3,6 +3,7 @@
3
3
  export const userToolSourceSchema = {
4
4
  $defs: {
5
5
  Citation: {
6
+ additionalProperties: false,
6
7
  properties: {
7
8
  content: {
8
9
  title: "Content",
@@ -37,6 +38,7 @@ export const userToolSourceSchema = {
37
38
  type: "object",
38
39
  },
39
40
  Container: {
41
+ additionalProperties: false,
40
42
  properties: {
41
43
  container_id: {
42
44
  title: "Container Id",
@@ -53,6 +55,7 @@ export const userToolSourceSchema = {
53
55
  type: "object",
54
56
  },
55
57
  ContainerRequirement: {
58
+ additionalProperties: false,
56
59
  properties: {
57
60
  container: {
58
61
  $ref: "#/$defs/Container",
@@ -69,9 +72,16 @@ export const userToolSourceSchema = {
69
72
  },
70
73
  EmptyFieldParameterValidatorModel: {
71
74
  additionalProperties: false,
75
+ description: "Require a value that is neither an empty string nor null.",
76
+ examples: [
77
+ {
78
+ type: "empty_field",
79
+ },
80
+ ],
72
81
  properties: {
73
82
  implicit: {
74
83
  default: false,
84
+ description: "Set internally when Galaxy added the validator automatically; tool authors normally leave this false.",
75
85
  title: "Implicit",
76
86
  type: "boolean",
77
87
  },
@@ -85,26 +95,42 @@ export const userToolSourceSchema = {
85
95
  },
86
96
  ],
87
97
  default: null,
98
+ description: "Error message shown when validation fails; `%s` is replaced with the rejected value.",
88
99
  title: "Message",
89
100
  },
90
101
  negate: {
91
102
  default: false,
103
+ description: "Require the value to be empty or null instead.",
92
104
  title: "Negate",
93
105
  type: "boolean",
94
106
  },
95
107
  type: {
96
108
  const: "empty_field",
97
109
  default: "empty_field",
110
+ description: "Fails validation when the submitted value is an empty string or null.",
98
111
  title: "Type",
99
112
  type: "string",
100
113
  },
101
114
  },
102
115
  title: "EmptyFieldParameterValidatorModel",
103
116
  type: "object",
117
+ "x-parameter-example": {
118
+ label: "Sample name",
119
+ name: "sample_name",
120
+ type: "text",
121
+ validators: [
122
+ {
123
+ type: "empty_field",
124
+ },
125
+ ],
126
+ },
104
127
  },
105
128
  FilePatternDatasetCollectionDescription: {
129
+ additionalProperties: false,
106
130
  properties: {
107
131
  assign_primary_output: {
132
+ default: false,
133
+ description: "Whether the first matching file replaces the primary dataset output.",
108
134
  title: "Assign Primary Output",
109
135
  type: "boolean",
110
136
  },
@@ -117,10 +143,14 @@ export const userToolSourceSchema = {
117
143
  type: "null",
118
144
  },
119
145
  ],
146
+ default: null,
147
+ description: "Directory to search, relative to the job working directory.",
120
148
  title: "Directory",
121
149
  },
122
150
  discover_via: {
123
151
  const: "pattern",
152
+ default: "pattern",
153
+ description: "Discover datasets by matching files produced by the command.",
124
154
  title: "Discover Via",
125
155
  type: "string",
126
156
  },
@@ -133,56 +163,60 @@ export const userToolSourceSchema = {
133
163
  type: "null",
134
164
  },
135
165
  ],
166
+ default: null,
167
+ description: "Galaxy datatype extension assigned to each discovered dataset.",
136
168
  title: "Format",
137
169
  },
138
170
  match_relative_path: {
171
+ default: false,
172
+ description: "Whether `pattern` matches each file's relative path instead of only its filename.",
139
173
  title: "Match Relative Path",
140
174
  type: "boolean",
141
175
  },
142
176
  pattern: {
177
+ description: "Regular expression matched against produced filenames. Named groups such as `name`, `designation`, `ext`, and `dbkey` set discovered dataset metadata.",
143
178
  title: "Pattern",
144
179
  type: "string",
145
180
  },
146
181
  recurse: {
182
+ default: false,
183
+ description: "Whether to search recursively below `directory`.",
147
184
  title: "Recurse",
148
185
  type: "boolean",
149
186
  },
150
187
  sort_comp: {
188
+ default: "lexical",
189
+ description: "Whether the sort key is compared as text or as a number.",
151
190
  enum: ["lexical", "numeric"],
152
191
  title: "Sort Comp",
153
192
  type: "string",
154
193
  },
155
194
  sort_key: {
195
+ default: "filename",
196
+ description: "Discovered metadata used to order matching files.",
156
197
  enum: ["filename", "name", "designation", "dbkey"],
157
198
  title: "Sort Key",
158
199
  type: "string",
159
200
  },
160
201
  sort_reverse: {
161
202
  default: false,
203
+ description: "Whether to reverse the discovered dataset order.",
162
204
  title: "Sort Reverse",
163
205
  type: "boolean",
164
206
  },
165
207
  visible: {
208
+ default: false,
209
+ description: "Whether discovered datasets are visible in the history.",
166
210
  title: "Visible",
167
211
  type: "boolean",
168
212
  },
169
213
  },
170
- required: [
171
- "discover_via",
172
- "format",
173
- "visible",
174
- "assign_primary_output",
175
- "directory",
176
- "recurse",
177
- "match_relative_path",
178
- "sort_key",
179
- "sort_comp",
180
- "pattern",
181
- ],
214
+ required: ["pattern"],
182
215
  title: "FilePatternDatasetCollectionDescription",
183
216
  type: "object",
184
217
  },
185
218
  HelpContent: {
219
+ additionalProperties: false,
186
220
  properties: {
187
221
  content: {
188
222
  title: "Content",
@@ -200,19 +234,30 @@ export const userToolSourceSchema = {
200
234
  },
201
235
  InRangeParameterValidatorModel: {
202
236
  additionalProperties: false,
237
+ description: "Require a numeric value to fall within optional lower and upper bounds.",
238
+ examples: [
239
+ {
240
+ max: 1,
241
+ min: 0,
242
+ type: "in_range",
243
+ },
244
+ ],
203
245
  properties: {
204
246
  exclude_max: {
205
247
  default: false,
248
+ description: "Whether a value equal to `max` is rejected.",
206
249
  title: "Exclude Max",
207
250
  type: "boolean",
208
251
  },
209
252
  exclude_min: {
210
253
  default: false,
254
+ description: "Whether a value equal to `min` is rejected.",
211
255
  title: "Exclude Min",
212
256
  type: "boolean",
213
257
  },
214
258
  implicit: {
215
259
  default: false,
260
+ description: "Set internally when Galaxy added the validator automatically; tool authors normally leave this false.",
216
261
  title: "Implicit",
217
262
  type: "boolean",
218
263
  },
@@ -229,6 +274,7 @@ export const userToolSourceSchema = {
229
274
  },
230
275
  ],
231
276
  default: null,
277
+ description: "Rejects larger values; omit to leave the range without an upper bound.",
232
278
  title: "Max",
233
279
  },
234
280
  message: {
@@ -241,6 +287,7 @@ export const userToolSourceSchema = {
241
287
  },
242
288
  ],
243
289
  default: null,
290
+ description: "Error message shown when validation fails; `%s` is replaced with the rejected value.",
244
291
  title: "Message",
245
292
  },
246
293
  min: {
@@ -256,24 +303,47 @@ export const userToolSourceSchema = {
256
303
  },
257
304
  ],
258
305
  default: null,
306
+ description: "Rejects smaller values; omit to leave the range without a lower bound.",
259
307
  title: "Min",
260
308
  },
261
309
  negate: {
262
310
  default: false,
311
+ description: "Reject values inside the configured range instead of values outside it.",
263
312
  title: "Negate",
264
313
  type: "boolean",
265
314
  },
266
315
  type: {
267
316
  const: "in_range",
268
317
  default: "in_range",
318
+ description: "Enforces the numeric boundaries configured by `min` and `max`.",
269
319
  title: "Type",
270
320
  type: "string",
271
321
  },
272
322
  },
273
323
  title: "InRangeParameterValidatorModel",
274
324
  type: "object",
325
+ "x-parameter-example": {
326
+ label: "Score threshold",
327
+ name: "threshold",
328
+ type: "float",
329
+ validators: [
330
+ {
331
+ max: 1,
332
+ min: 0,
333
+ type: "in_range",
334
+ },
335
+ ],
336
+ value: 0.5,
337
+ },
275
338
  },
276
- IncomingToolOutputCollection: {
339
+ IncomingToolOutputBoolean: {
340
+ description: "A boolean value emitted as a workflow-visible scalar output.",
341
+ examples: [
342
+ {
343
+ name: "matched",
344
+ type: "boolean",
345
+ },
346
+ ],
277
347
  properties: {
278
348
  hidden: {
279
349
  anyOf: [
@@ -298,9 +368,156 @@ export const userToolSourceSchema = {
298
368
  },
299
369
  ],
300
370
  default: null,
301
- description: "Output label. Will be used as dataset name in history.",
371
+ description: "Name shown for the produced dataset or collection in the history.",
372
+ title: "Label",
373
+ },
374
+ name: {
375
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
376
+ title: "Name",
377
+ type: "string",
378
+ },
379
+ type: {
380
+ const: "boolean",
381
+ title: "Type",
382
+ type: "string",
383
+ },
384
+ },
385
+ required: ["name", "type"],
386
+ title: "IncomingToolOutputBoolean",
387
+ type: "object",
388
+ },
389
+ IncomingToolOutputCollection: {
390
+ additionalProperties: false,
391
+ description: "A dataset collection populated by discovering files produced by the command.",
392
+ examples: [
393
+ {
394
+ collection_type: "list",
395
+ discover_datasets: [
396
+ {
397
+ format: "txt",
398
+ pattern: "(?P<name>.+)\\.txt",
399
+ },
400
+ ],
401
+ label: "Results",
402
+ name: "results",
403
+ type: "collection",
404
+ },
405
+ ],
406
+ properties: {
407
+ collection_type: {
408
+ anyOf: [
409
+ {
410
+ type: "string",
411
+ },
412
+ {
413
+ type: "null",
414
+ },
415
+ ],
416
+ default: null,
417
+ description: "Fixed structure Galaxy creates for this output, such as `list`, `paired`, or a nested type such as `list:paired`.",
418
+ title: "Collection Type",
419
+ },
420
+ collection_type_source: {
421
+ anyOf: [
422
+ {
423
+ type: "string",
424
+ },
425
+ {
426
+ type: "null",
427
+ },
428
+ ],
429
+ default: null,
430
+ description: "Declared data-collection input whose runtime structure determines this output's collection type.",
431
+ title: "Collection Type Source",
432
+ },
433
+ discover_datasets: {
434
+ anyOf: [
435
+ {
436
+ items: {
437
+ anyOf: [
438
+ {
439
+ $ref: "#/$defs/FilePatternDatasetCollectionDescription",
440
+ },
441
+ {
442
+ $ref: "#/$defs/ToolProvidedMetadataDatasetCollection",
443
+ },
444
+ ],
445
+ },
446
+ type: "array",
447
+ },
448
+ {
449
+ type: "null",
450
+ },
451
+ ],
452
+ default: null,
453
+ description: "Rules used to discover and populate collection elements from produced files.",
454
+ title: "Discover Datasets",
455
+ },
456
+ format: {
457
+ anyOf: [
458
+ {
459
+ type: "string",
460
+ },
461
+ {
462
+ type: "null",
463
+ },
464
+ ],
465
+ default: null,
466
+ description: "Default datatype extension assigned to collection elements.",
467
+ title: "Format",
468
+ },
469
+ format_source: {
470
+ anyOf: [
471
+ {
472
+ type: "string",
473
+ },
474
+ {
475
+ type: "null",
476
+ },
477
+ ],
478
+ default: null,
479
+ description: "Input whose datatype supplies the default format for collection elements.",
480
+ title: "Format Source",
481
+ },
482
+ hidden: {
483
+ anyOf: [
484
+ {
485
+ type: "boolean",
486
+ },
487
+ {
488
+ type: "null",
489
+ },
490
+ ],
491
+ default: null,
492
+ description: "Hide the output in the history. The dataset is still created and usable by other tools and workflows.",
493
+ title: "Hidden",
494
+ },
495
+ label: {
496
+ anyOf: [
497
+ {
498
+ type: "string",
499
+ },
500
+ {
501
+ type: "null",
502
+ },
503
+ ],
504
+ default: null,
505
+ description: "Name shown for the produced dataset or collection in the history.",
302
506
  title: "Label",
303
507
  },
508
+ metadata_source: {
509
+ anyOf: [
510
+ {
511
+ type: "string",
512
+ },
513
+ {
514
+ type: "null",
515
+ },
516
+ ],
517
+ default: null,
518
+ description: "Dataset input whose metadata supplies defaults for collection elements.",
519
+ title: "Metadata Source",
520
+ },
304
521
  name: {
305
522
  anyOf: [
306
523
  {
@@ -311,23 +528,44 @@ export const userToolSourceSchema = {
311
528
  },
312
529
  ],
313
530
  default: null,
314
- description: "Parameter name. Used when referencing parameter in workflows.",
531
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
315
532
  title: "Name",
316
533
  },
317
- structure: {
318
- $ref: "#/$defs/ToolOutputCollectionStructure",
534
+ structured_like: {
535
+ anyOf: [
536
+ {
537
+ type: "string",
538
+ },
539
+ {
540
+ type: "null",
541
+ },
542
+ ],
543
+ default: null,
544
+ description: "Declared input whose element count, identifiers, and nesting this output mirrors. Use this when each produced element corresponds to an input element.",
545
+ title: "Structured Like",
319
546
  },
320
547
  type: {
321
548
  const: "collection",
549
+ description: "Creates one history dataset collection populated from files produced by the command.",
322
550
  title: "Type",
323
551
  type: "string",
324
552
  },
325
553
  },
326
- required: ["type", "structure"],
554
+ required: ["type"],
327
555
  title: "IncomingToolOutputCollection",
328
556
  type: "object",
329
557
  },
330
558
  IncomingToolOutputDataset: {
559
+ description: "A dataset collected from a file produced in the job working directory.",
560
+ examples: [
561
+ {
562
+ format: "txt",
563
+ from_work_dir: "result.txt",
564
+ label: "Result",
565
+ name: "result",
566
+ type: "data",
567
+ },
568
+ ],
331
569
  properties: {
332
570
  discover_datasets: {
333
571
  anyOf: [
@@ -349,6 +587,7 @@ export const userToolSourceSchema = {
349
587
  },
350
588
  ],
351
589
  default: null,
590
+ description: "Rules for discovering additional datasets produced by the command.",
352
591
  title: "Discover Datasets",
353
592
  },
354
593
  format: {
@@ -361,7 +600,7 @@ export const userToolSourceSchema = {
361
600
  },
362
601
  ],
363
602
  default: null,
364
- description: "The short name for the output datatype.",
603
+ description: "Galaxy datatype extension assigned when the command always produces a fixed representation. Use `format_source` instead when the datatype depends on an input.",
365
604
  title: "Format",
366
605
  },
367
606
  format_source: {
@@ -374,7 +613,7 @@ export const userToolSourceSchema = {
374
613
  },
375
614
  ],
376
615
  default: null,
377
- description: "This sets the data type of the output dataset(s) to be the same format as that of the specified tool input.",
616
+ description: "Data or collection input whose datatype extension this output inherits. Use this when the command preserves the input representation, such as filtering reads without changing their format.",
378
617
  title: "Format Source",
379
618
  },
380
619
  from_work_dir: {
@@ -387,7 +626,7 @@ export const userToolSourceSchema = {
387
626
  },
388
627
  ],
389
628
  default: null,
390
- description: "Relative path to a file produced by the tool in its working directory. Output\u2019s contents are set to this file\u2019s contents.",
629
+ description: "Relative path, inside the job working directory, that the command writes for this output. Galaxy claims that file after the command finishes.",
391
630
  title: "from_work_dir",
392
631
  },
393
632
  hidden: {
@@ -400,7 +639,7 @@ export const userToolSourceSchema = {
400
639
  },
401
640
  ],
402
641
  default: null,
403
- description: "If true, the output will not be shown in the history.",
642
+ description: "Hide the output in the history. The dataset is still created and usable by other tools and workflows.",
404
643
  title: "Hidden",
405
644
  },
406
645
  label: {
@@ -413,7 +652,7 @@ export const userToolSourceSchema = {
413
652
  },
414
653
  ],
415
654
  default: null,
416
- description: "Output label. Will be used as dataset name in history.",
655
+ description: "Name shown for the produced dataset or collection in the history.",
417
656
  title: "Label",
418
657
  },
419
658
  metadata_source: {
@@ -426,7 +665,7 @@ export const userToolSourceSchema = {
426
665
  },
427
666
  ],
428
667
  default: null,
429
- description: "This copies the metadata information from the tool\u2019s input dataset to serve as default for information that cannot be detected from the output. One prominent use case is interval data with a non-standard column order that cannot be deduced from a header line, but which is known to be identical in the input and output datasets.",
668
+ description: "Data input whose datatype-specific metadata this output copies as defaults. Use this when the command preserves metadata Galaxy cannot infer from the output, such as interval column assignments.",
430
669
  title: "Metadata Source",
431
670
  },
432
671
  name: {
@@ -439,7 +678,7 @@ export const userToolSourceSchema = {
439
678
  },
440
679
  ],
441
680
  default: null,
442
- description: "Parameter name. Used when referencing parameter in workflows.",
681
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
443
682
  title: "Name",
444
683
  },
445
684
  precreate_directory: {
@@ -452,10 +691,12 @@ export const userToolSourceSchema = {
452
691
  },
453
692
  ],
454
693
  default: false,
694
+ description: "Set true when `from_work_dir` names a produced directory for a composite datatype. Galaxy copies the directory contents into the output dataset's extra-files area.",
455
695
  title: "Precreate Directory",
456
696
  },
457
697
  type: {
458
698
  const: "data",
699
+ description: "Creates one history dataset from a file produced by the command.",
459
700
  title: "Type",
460
701
  type: "string",
461
702
  },
@@ -464,13 +705,686 @@ export const userToolSourceSchema = {
464
705
  title: "IncomingToolOutputDataset",
465
706
  type: "object",
466
707
  },
467
- JavascriptRequirement: {
708
+ IncomingToolOutputFloat: {
709
+ description: "A floating-point value emitted as a workflow-visible scalar output.",
710
+ examples: [
711
+ {
712
+ name: "score",
713
+ type: "float",
714
+ },
715
+ ],
716
+ properties: {
717
+ hidden: {
718
+ anyOf: [
719
+ {
720
+ type: "boolean",
721
+ },
722
+ {
723
+ type: "null",
724
+ },
725
+ ],
726
+ default: null,
727
+ description: "If true, the output will not be shown in the history.",
728
+ title: "Hidden",
729
+ },
730
+ label: {
731
+ anyOf: [
732
+ {
733
+ type: "string",
734
+ },
735
+ {
736
+ type: "null",
737
+ },
738
+ ],
739
+ default: null,
740
+ description: "Name shown for the produced dataset or collection in the history.",
741
+ title: "Label",
742
+ },
743
+ name: {
744
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
745
+ title: "Name",
746
+ type: "string",
747
+ },
748
+ type: {
749
+ const: "float",
750
+ title: "Type",
751
+ type: "string",
752
+ },
753
+ },
754
+ required: ["name", "type"],
755
+ title: "IncomingToolOutputFloat",
756
+ type: "object",
757
+ },
758
+ IncomingToolOutputInteger: {
759
+ description: "An integer value emitted as a workflow-visible scalar output.",
760
+ examples: [
761
+ {
762
+ name: "match_count",
763
+ type: "integer",
764
+ },
765
+ ],
766
+ properties: {
767
+ hidden: {
768
+ anyOf: [
769
+ {
770
+ type: "boolean",
771
+ },
772
+ {
773
+ type: "null",
774
+ },
775
+ ],
776
+ default: null,
777
+ description: "If true, the output will not be shown in the history.",
778
+ title: "Hidden",
779
+ },
780
+ label: {
781
+ anyOf: [
782
+ {
783
+ type: "string",
784
+ },
785
+ {
786
+ type: "null",
787
+ },
788
+ ],
789
+ default: null,
790
+ description: "Name shown for the produced dataset or collection in the history.",
791
+ title: "Label",
792
+ },
793
+ name: {
794
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
795
+ title: "Name",
796
+ type: "string",
797
+ },
798
+ type: {
799
+ const: "integer",
800
+ title: "Type",
801
+ type: "string",
802
+ },
803
+ },
804
+ required: ["name", "type"],
805
+ title: "IncomingToolOutputInteger",
806
+ type: "object",
807
+ },
808
+ IncomingToolOutputText: {
809
+ description: "A text value emitted as a workflow-visible scalar output.",
810
+ examples: [
811
+ {
812
+ name: "message",
813
+ type: "text",
814
+ },
815
+ ],
816
+ properties: {
817
+ hidden: {
818
+ anyOf: [
819
+ {
820
+ type: "boolean",
821
+ },
822
+ {
823
+ type: "null",
824
+ },
825
+ ],
826
+ default: null,
827
+ description: "If true, the output will not be shown in the history.",
828
+ title: "Hidden",
829
+ },
830
+ label: {
831
+ anyOf: [
832
+ {
833
+ type: "string",
834
+ },
835
+ {
836
+ type: "null",
837
+ },
838
+ ],
839
+ default: null,
840
+ description: "Name shown for the produced dataset or collection in the history.",
841
+ title: "Label",
842
+ },
843
+ name: {
844
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
845
+ title: "Name",
846
+ type: "string",
847
+ },
848
+ type: {
849
+ const: "text",
850
+ title: "Type",
851
+ type: "string",
852
+ },
853
+ },
854
+ required: ["name", "type"],
855
+ title: "IncomingToolOutputText",
856
+ type: "object",
857
+ },
858
+ IncomingUserToolOutputCollection: {
859
+ additionalProperties: false,
860
+ description: "A user-defined tool collection populated only by matching produced filenames.",
861
+ examples: [
862
+ {
863
+ collection_type: "list",
864
+ discover_datasets: [
865
+ {
866
+ format: "txt",
867
+ pattern: "(?P<name>.+)\\.txt",
868
+ },
869
+ ],
870
+ label: "Results",
871
+ name: "results",
872
+ type: "collection",
873
+ },
874
+ ],
875
+ properties: {
876
+ collection_type: {
877
+ anyOf: [
878
+ {
879
+ type: "string",
880
+ },
881
+ {
882
+ type: "null",
883
+ },
884
+ ],
885
+ default: null,
886
+ description: "Fixed structure Galaxy creates for this output, such as `list`, `paired`, or a nested type such as `list:paired`.",
887
+ title: "Collection Type",
888
+ },
889
+ collection_type_source: {
890
+ anyOf: [
891
+ {
892
+ type: "string",
893
+ },
894
+ {
895
+ type: "null",
896
+ },
897
+ ],
898
+ default: null,
899
+ description: "Declared data-collection input whose runtime structure determines this output's collection type.",
900
+ title: "Collection Type Source",
901
+ },
902
+ discover_datasets: {
903
+ anyOf: [
904
+ {
905
+ items: {
906
+ $ref: "#/$defs/FilePatternDatasetCollectionDescription",
907
+ },
908
+ type: "array",
909
+ },
910
+ {
911
+ type: "null",
912
+ },
913
+ ],
914
+ default: null,
915
+ description: "Filename pattern used to discover and populate collection elements.",
916
+ title: "Discover Datasets",
917
+ },
918
+ format: {
919
+ anyOf: [
920
+ {
921
+ type: "string",
922
+ },
923
+ {
924
+ type: "null",
925
+ },
926
+ ],
927
+ default: null,
928
+ description: "Default datatype extension assigned to collection elements.",
929
+ title: "Format",
930
+ },
931
+ format_source: {
932
+ anyOf: [
933
+ {
934
+ type: "string",
935
+ },
936
+ {
937
+ type: "null",
938
+ },
939
+ ],
940
+ default: null,
941
+ description: "Input whose datatype supplies the default format for collection elements.",
942
+ title: "Format Source",
943
+ },
944
+ hidden: {
945
+ anyOf: [
946
+ {
947
+ type: "boolean",
948
+ },
949
+ {
950
+ type: "null",
951
+ },
952
+ ],
953
+ default: null,
954
+ description: "Hide the output in the history. The dataset is still created and usable by other tools and workflows.",
955
+ title: "Hidden",
956
+ },
957
+ label: {
958
+ anyOf: [
959
+ {
960
+ maxLength: 250,
961
+ type: "string",
962
+ },
963
+ {
964
+ type: "null",
965
+ },
966
+ ],
967
+ default: null,
968
+ description: "Name shown for the produced dataset or collection in the history. `$(inputs.<name>)` and `$(runtime.on_string)` references are filled in when the job is created.",
969
+ title: "Label",
970
+ },
971
+ metadata_source: {
972
+ anyOf: [
973
+ {
974
+ type: "string",
975
+ },
976
+ {
977
+ type: "null",
978
+ },
979
+ ],
980
+ default: null,
981
+ description: "Dataset input whose metadata supplies defaults for collection elements.",
982
+ title: "Metadata Source",
983
+ },
984
+ name: {
985
+ anyOf: [
986
+ {
987
+ type: "string",
988
+ },
989
+ {
990
+ type: "null",
991
+ },
992
+ ],
993
+ default: null,
994
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
995
+ title: "Name",
996
+ },
997
+ structured_like: {
998
+ anyOf: [
999
+ {
1000
+ type: "string",
1001
+ },
1002
+ {
1003
+ type: "null",
1004
+ },
1005
+ ],
1006
+ default: null,
1007
+ description: "Declared input whose element count, identifiers, and nesting this output mirrors. Use this when each produced element corresponds to an input element.",
1008
+ title: "Structured Like",
1009
+ },
1010
+ type: {
1011
+ const: "collection",
1012
+ description: "Creates one history dataset collection populated from files produced by the command.",
1013
+ title: "Type",
1014
+ type: "string",
1015
+ },
1016
+ },
1017
+ required: ["type"],
1018
+ title: "IncomingUserToolOutputCollection",
1019
+ type: "object",
1020
+ "x-usage-examples": [
1021
+ {
1022
+ definition: {
1023
+ inputs: [],
1024
+ outputs: [
1025
+ {
1026
+ collection_type: "list",
1027
+ discover_datasets: [
1028
+ {
1029
+ directory: "reports",
1030
+ format: "tabular",
1031
+ pattern: "(?P<name>.+)\\.tsv",
1032
+ },
1033
+ ],
1034
+ name: "reports",
1035
+ type: "collection",
1036
+ },
1037
+ ],
1038
+ shell_command: "mkdir reports && printf 'sample\\tvalue\\nA\\t1\\n' > reports/A.tsv && printf 'sample\\tvalue\\nB\\t2\\n' > reports/B.tsv",
1039
+ },
1040
+ description: "`collection_type` can be used to declare a fixed output structure. A `list` contains an ordered set of discovered elements; `paired` requires `forward` and `reverse` identifiers.",
1041
+ field: "collection_type",
1042
+ },
1043
+ {
1044
+ definition: {
1045
+ inputs: [
1046
+ {
1047
+ collection_type: "paired",
1048
+ format: ["fastqsanger"],
1049
+ name: "reads",
1050
+ type: "data_collection",
1051
+ },
1052
+ ],
1053
+ outputs: [
1054
+ {
1055
+ collection_type_source: "reads",
1056
+ discover_datasets: [
1057
+ {
1058
+ directory: "copied",
1059
+ format: "fastqsanger",
1060
+ pattern: "(?P<name>forward|reverse)\\.fastq",
1061
+ },
1062
+ ],
1063
+ name: "copied_reads",
1064
+ type: "collection",
1065
+ },
1066
+ ],
1067
+ shell_command: "mkdir copied && cp '$(inputs.reads.elements.forward.path)' copied/forward.fastq && cp '$(inputs.reads.elements.reverse.path)' copied/reverse.fastq",
1068
+ },
1069
+ description: "`collection_type_source` can be used when the output has the same runtime collection type as a declared data-collection input, including when that input accepts more than one structure.",
1070
+ field: "collection_type_source",
1071
+ },
1072
+ {
1073
+ definition: {
1074
+ inputs: [
1075
+ {
1076
+ collection_type: "paired",
1077
+ format: ["fastqsanger"],
1078
+ name: "reads",
1079
+ type: "data_collection",
1080
+ },
1081
+ ],
1082
+ outputs: [
1083
+ {
1084
+ collection_type: "paired",
1085
+ discover_datasets: [
1086
+ {
1087
+ directory: "trimmed",
1088
+ format: "fastqsanger",
1089
+ pattern: "(?P<name>forward|reverse)\\.fastq",
1090
+ },
1091
+ ],
1092
+ name: "trimmed_reads",
1093
+ structured_like: "reads",
1094
+ type: "collection",
1095
+ },
1096
+ ],
1097
+ shell_command: "mkdir trimmed && head -n 400 '$(inputs.reads.elements.forward.path)' > trimmed/forward.fastq && head -n 400 '$(inputs.reads.elements.reverse.path)' > trimmed/reverse.fastq",
1098
+ },
1099
+ description: "`structured_like` can be used when each produced element corresponds to an element of a declared input. Galaxy mirrors that input's element identifiers and nesting in the output.",
1100
+ field: "structured_like",
1101
+ },
1102
+ ],
1103
+ },
1104
+ IncomingUserToolOutputDataset: {
1105
+ additionalProperties: false,
1106
+ description: "A user-defined tool dataset discovered only from files inside the job working directory.",
1107
+ examples: [
1108
+ {
1109
+ format: "txt",
1110
+ from_work_dir: "result.txt",
1111
+ label: "Result",
1112
+ name: "result",
1113
+ type: "data",
1114
+ },
1115
+ ],
1116
+ properties: {
1117
+ discover_datasets: {
1118
+ anyOf: [
1119
+ {
1120
+ items: {
1121
+ $ref: "#/$defs/FilePatternDatasetCollectionDescription",
1122
+ },
1123
+ type: "array",
1124
+ },
1125
+ {
1126
+ type: "null",
1127
+ },
1128
+ ],
1129
+ default: null,
1130
+ description: "Filename pattern used to discover additional datasets produced by the command.",
1131
+ title: "Discover Datasets",
1132
+ },
1133
+ format: {
1134
+ anyOf: [
1135
+ {
1136
+ type: "string",
1137
+ },
1138
+ {
1139
+ type: "null",
1140
+ },
1141
+ ],
1142
+ default: null,
1143
+ description: "Galaxy datatype extension assigned when the command always produces a fixed representation. Use `format_source` instead when the datatype depends on an input.",
1144
+ title: "Format",
1145
+ },
1146
+ format_source: {
1147
+ anyOf: [
1148
+ {
1149
+ type: "string",
1150
+ },
1151
+ {
1152
+ type: "null",
1153
+ },
1154
+ ],
1155
+ default: null,
1156
+ description: "Data or collection input whose datatype extension this output inherits. Use this when the command preserves the input representation, such as filtering reads without changing their format.",
1157
+ title: "Format Source",
1158
+ },
1159
+ from_work_dir: {
1160
+ anyOf: [
1161
+ {
1162
+ type: "string",
1163
+ },
1164
+ {
1165
+ type: "null",
1166
+ },
1167
+ ],
1168
+ default: null,
1169
+ description: "Relative path, inside the job working directory, that the command writes for this output. Galaxy claims that file after the command finishes.",
1170
+ title: "from_work_dir",
1171
+ },
1172
+ hidden: {
1173
+ anyOf: [
1174
+ {
1175
+ type: "boolean",
1176
+ },
1177
+ {
1178
+ type: "null",
1179
+ },
1180
+ ],
1181
+ default: null,
1182
+ description: "Hide the output in the history. The dataset is still created and usable by other tools and workflows.",
1183
+ title: "Hidden",
1184
+ },
1185
+ label: {
1186
+ anyOf: [
1187
+ {
1188
+ maxLength: 250,
1189
+ type: "string",
1190
+ },
1191
+ {
1192
+ type: "null",
1193
+ },
1194
+ ],
1195
+ default: null,
1196
+ description: "Name shown for the produced dataset or collection in the history. `$(inputs.<name>)` and `$(runtime.on_string)` references are filled in when the job is created.",
1197
+ title: "Label",
1198
+ },
1199
+ metadata_source: {
1200
+ anyOf: [
1201
+ {
1202
+ type: "string",
1203
+ },
1204
+ {
1205
+ type: "null",
1206
+ },
1207
+ ],
1208
+ default: null,
1209
+ description: "Data input whose datatype-specific metadata this output copies as defaults. Use this when the command preserves metadata Galaxy cannot infer from the output, such as interval column assignments.",
1210
+ title: "Metadata Source",
1211
+ },
1212
+ name: {
1213
+ anyOf: [
1214
+ {
1215
+ type: "string",
1216
+ },
1217
+ {
1218
+ type: "null",
1219
+ },
1220
+ ],
1221
+ default: null,
1222
+ description: "Identifier used to connect this output in workflows and address it in tool tests.",
1223
+ title: "Name",
1224
+ },
1225
+ precreate_directory: {
1226
+ anyOf: [
1227
+ {
1228
+ type: "boolean",
1229
+ },
1230
+ {
1231
+ type: "null",
1232
+ },
1233
+ ],
1234
+ default: false,
1235
+ description: "Set true when `from_work_dir` names a produced directory for a composite datatype. Galaxy copies the directory contents into the output dataset's extra-files area.",
1236
+ title: "Precreate Directory",
1237
+ },
1238
+ type: {
1239
+ const: "data",
1240
+ description: "Creates one history dataset from a file produced by the command.",
1241
+ title: "Type",
1242
+ type: "string",
1243
+ },
1244
+ },
1245
+ required: ["type"],
1246
+ title: "IncomingUserToolOutputDataset",
1247
+ type: "object",
1248
+ "x-usage-examples": [
1249
+ {
1250
+ definition: {
1251
+ inputs: [
1252
+ {
1253
+ format: ["fastqsanger"],
1254
+ name: "reads",
1255
+ type: "data",
1256
+ },
1257
+ ],
1258
+ outputs: [
1259
+ {
1260
+ format: "fastqsanger",
1261
+ from_work_dir: "first.fastq",
1262
+ label: "$(inputs.reads.element_identifier) (first 400 lines)",
1263
+ name: "first_reads",
1264
+ type: "data",
1265
+ },
1266
+ ],
1267
+ shell_command: "head -n 400 '$(inputs.reads.path)' > first.fastq",
1268
+ },
1269
+ description: "`label` can be used to name the output after the run's inputs. When the run maps over a collection, `$(inputs.reads.element_identifier)` is the sample name. [Output labels](#output-labels) lists the references a label can use.",
1270
+ field: "label",
1271
+ },
1272
+ {
1273
+ definition: {
1274
+ inputs: [],
1275
+ outputs: [
1276
+ {
1277
+ format: "tabular",
1278
+ from_work_dir: "scores.tsv",
1279
+ name: "scores",
1280
+ type: "data",
1281
+ },
1282
+ ],
1283
+ shell_command: "printf 'gene\\tscore\\nBRCA1\\t0.95\\n' > scores.tsv",
1284
+ },
1285
+ description: "`format` can be used to assign a fixed Galaxy datatype when every run writes the same representation. The value is a datatype extension, not a filename suffix.",
1286
+ field: "format",
1287
+ },
1288
+ {
1289
+ definition: {
1290
+ inputs: [
1291
+ {
1292
+ format: ["fastq", "fastqsanger"],
1293
+ name: "reads",
1294
+ type: "data",
1295
+ },
1296
+ ],
1297
+ outputs: [
1298
+ {
1299
+ format_source: "reads",
1300
+ from_work_dir: "first.fastq",
1301
+ name: "first_reads",
1302
+ type: "data",
1303
+ },
1304
+ ],
1305
+ shell_command: "head -n 400 '$(inputs.reads.path)' > first.fastq",
1306
+ },
1307
+ description: "`format_source` can be used to assign an output the selected input dataset's datatype when the command preserves its representation.",
1308
+ field: "format_source",
1309
+ },
1310
+ {
1311
+ definition: {
1312
+ inputs: [
1313
+ {
1314
+ format: ["interval"],
1315
+ name: "intervals",
1316
+ type: "data",
1317
+ },
1318
+ ],
1319
+ outputs: [
1320
+ {
1321
+ format: "interval",
1322
+ from_work_dir: "filtered.interval",
1323
+ metadata_source: "intervals",
1324
+ name: "filtered_intervals",
1325
+ type: "data",
1326
+ },
1327
+ ],
1328
+ shell_command: "awk '$3 > $2' '$(inputs.intervals.path)' > filtered.interval",
1329
+ },
1330
+ description: "`metadata_source` can be used to copy datatype-specific metadata from an input when the command preserves information Galaxy cannot infer from the produced file, such as interval column assignments.",
1331
+ field: "metadata_source",
1332
+ },
1333
+ {
1334
+ definition: {
1335
+ inputs: [
1336
+ {
1337
+ label: "Message",
1338
+ name: "message",
1339
+ type: "text",
1340
+ },
1341
+ ],
1342
+ outputs: [
1343
+ {
1344
+ format: "txt",
1345
+ from_work_dir: "message.txt",
1346
+ name: "message_file",
1347
+ type: "data",
1348
+ },
1349
+ ],
1350
+ shell_command: "printf '%s\\n' '$(inputs.message)' > message.txt",
1351
+ },
1352
+ description: "`from_work_dir` can be used to claim a file written by the command. The relative path must match the command's destination and remain inside the job working directory.",
1353
+ field: "from_work_dir",
1354
+ },
1355
+ {
1356
+ definition: {
1357
+ inputs: [
1358
+ {
1359
+ format: ["fasta"],
1360
+ name: "reference",
1361
+ type: "data",
1362
+ },
1363
+ ],
1364
+ outputs: [
1365
+ {
1366
+ format: "bwa_mem2_index",
1367
+ from_work_dir: "index",
1368
+ name: "index",
1369
+ precreate_directory: true,
1370
+ type: "data",
1371
+ },
1372
+ ],
1373
+ shell_command: "mkdir index && bwa-mem2 index -p index/reference '$(inputs.reference.path)'",
1374
+ },
1375
+ description: "`precreate_directory` can be used with a directory-backed composite datatype. The command creates the directory named by `from_work_dir`; Galaxy then copies its contents into the output dataset's extra-files area.",
1376
+ field: "precreate_directory",
1377
+ },
1378
+ ],
1379
+ },
1380
+ JavascriptRequirement: {
1381
+ additionalProperties: false,
468
1382
  properties: {
469
1383
  expression_lib: {
470
1384
  anyOf: [
471
1385
  {
472
1386
  items: {
473
- description: "Provide Javascript/ECMAScript 5.1 code here that will be available for expressions inside the `shell_command` field.",
1387
+ description: "Provide Javascript/ECMAScript 5.1 code here that will be available for expressions inside `shell_command` and `configfiles[*].content`.",
474
1388
  examples: [
475
1389
  'function pickValue() {\n if (inputs.conditional_parameter.test_parameter == "a") {\n return inputs.conditional_parameter.integer_parameter\n } else {\n return inputs.conditional_parameter.boolean_parameter\n }\n}',
476
1390
  ],
@@ -497,9 +1411,18 @@ export const userToolSourceSchema = {
497
1411
  },
498
1412
  LengthParameterValidatorModel: {
499
1413
  additionalProperties: false,
1414
+ description: "Require the number of characters in a text value to fall within optional bounds.",
1415
+ examples: [
1416
+ {
1417
+ max: 20,
1418
+ min: 1,
1419
+ type: "length",
1420
+ },
1421
+ ],
500
1422
  properties: {
501
1423
  implicit: {
502
1424
  default: false,
1425
+ description: "Set internally when Galaxy added the validator automatically; tool authors normally leave this false.",
503
1426
  title: "Implicit",
504
1427
  type: "boolean",
505
1428
  },
@@ -513,6 +1436,7 @@ export const userToolSourceSchema = {
513
1436
  },
514
1437
  ],
515
1438
  default: null,
1439
+ description: "Rejects text with more characters; omit to leave the length without an upper bound.",
516
1440
  title: "Max",
517
1441
  },
518
1442
  message: {
@@ -525,6 +1449,7 @@ export const userToolSourceSchema = {
525
1449
  },
526
1450
  ],
527
1451
  default: null,
1452
+ description: "Error message shown when validation fails; `%s` is replaced with the rejected value.",
528
1453
  title: "Message",
529
1454
  },
530
1455
  min: {
@@ -537,28 +1462,67 @@ export const userToolSourceSchema = {
537
1462
  },
538
1463
  ],
539
1464
  default: null,
1465
+ description: "Rejects text with fewer characters; omit to leave the length without a lower bound.",
540
1466
  title: "Min",
541
1467
  },
542
1468
  negate: {
543
1469
  default: false,
1470
+ description: "Reject values whose length is inside the configured range instead of outside it.",
544
1471
  title: "Negate",
545
1472
  type: "boolean",
546
1473
  },
547
1474
  type: {
548
1475
  const: "length",
549
1476
  default: "length",
1477
+ description: "Enforces character-count boundaries on a submitted text value.",
550
1478
  title: "Type",
551
1479
  type: "string",
552
1480
  },
553
1481
  },
554
1482
  title: "LengthParameterValidatorModel",
555
1483
  type: "object",
1484
+ "x-parameter-example": {
1485
+ label: "Sample name",
1486
+ name: "sample_name",
1487
+ type: "text",
1488
+ validators: [
1489
+ {
1490
+ max: 20,
1491
+ min: 1,
1492
+ type: "length",
1493
+ },
1494
+ ],
1495
+ },
1496
+ },
1497
+ MarkdownHelpContent: {
1498
+ additionalProperties: false,
1499
+ properties: {
1500
+ content: {
1501
+ title: "Content",
1502
+ type: "string",
1503
+ },
1504
+ format: {
1505
+ const: "markdown",
1506
+ title: "Format",
1507
+ type: "string",
1508
+ },
1509
+ },
1510
+ required: ["format", "content"],
1511
+ title: "MarkdownHelpContent",
1512
+ type: "object",
556
1513
  },
557
1514
  NoOptionsParameterValidatorModel: {
558
1515
  additionalProperties: false,
1516
+ description: "Require a select parameter to have at least one available option.",
1517
+ examples: [
1518
+ {
1519
+ type: "no_options",
1520
+ },
1521
+ ],
559
1522
  properties: {
560
1523
  implicit: {
561
1524
  default: false,
1525
+ description: "Set internally when Galaxy added the validator automatically; tool authors normally leave this false.",
562
1526
  title: "Implicit",
563
1527
  type: "boolean",
564
1528
  },
@@ -572,22 +1536,41 @@ export const userToolSourceSchema = {
572
1536
  },
573
1537
  ],
574
1538
  default: null,
1539
+ description: "Error message shown when validation fails; `%s` is replaced with the rejected value.",
575
1540
  title: "Message",
576
1541
  },
577
1542
  negate: {
578
1543
  default: false,
1544
+ description: "Require the select parameter to have no available options instead.",
579
1545
  title: "Negate",
580
1546
  type: "boolean",
581
1547
  },
582
1548
  type: {
583
1549
  const: "no_options",
584
1550
  default: "no_options",
1551
+ description: "Fails validation when a select input has no choices available.",
585
1552
  title: "Type",
586
1553
  type: "string",
587
1554
  },
588
1555
  },
589
1556
  title: "NoOptionsParameterValidatorModel",
590
1557
  type: "object",
1558
+ "x-parameter-example": {
1559
+ label: "Reference database",
1560
+ name: "database",
1561
+ options: [
1562
+ {
1563
+ label: "Human",
1564
+ value: "human",
1565
+ },
1566
+ ],
1567
+ type: "select",
1568
+ validators: [
1569
+ {
1570
+ type: "no_options",
1571
+ },
1572
+ ],
1573
+ },
591
1574
  },
592
1575
  OutputCompareType: {
593
1576
  enum: ["diff", "re_match", "sim_size", "re_match_multiline", "contains", "image_diff"],
@@ -596,14 +1579,22 @@ export const userToolSourceSchema = {
596
1579
  },
597
1580
  RegexParameterValidatorModel: {
598
1581
  additionalProperties: false,
599
- description: "Check if a regular expression **matches** the value, i.e. appears\nat the beginning of the value. To enforce a match of the complete value use\n``$`` at the end of the expression. The expression is given is the content\nof the validator tag. Note that for ``selects`` each option is checked\nseparately.",
1582
+ description: "Require a regular expression to match from the start of the value.\n\nEnd the expression with ``$`` to require a full-value match. Each option of\na select parameter is checked separately.",
1583
+ examples: [
1584
+ {
1585
+ expression: "^[ACGT]+$",
1586
+ type: "regex",
1587
+ },
1588
+ ],
600
1589
  properties: {
601
1590
  expression: {
1591
+ description: "Regular expression matched from the start of the value. Add `$` at the end to require a complete-value match.",
602
1592
  title: "Expression",
603
1593
  type: "string",
604
1594
  },
605
1595
  implicit: {
606
1596
  default: false,
1597
+ description: "Set internally when Galaxy added the validator automatically; tool authors normally leave this false.",
607
1598
  title: "Implicit",
608
1599
  type: "boolean",
609
1600
  },
@@ -617,16 +1608,19 @@ export const userToolSourceSchema = {
617
1608
  },
618
1609
  ],
619
1610
  default: null,
1611
+ description: "Error message shown when validation fails; `%s` is replaced with the rejected value.",
620
1612
  title: "Message",
621
1613
  },
622
1614
  negate: {
623
1615
  default: false,
1616
+ description: "Reject matching values instead of values that do not match.",
624
1617
  title: "Negate",
625
1618
  type: "boolean",
626
1619
  },
627
1620
  type: {
628
1621
  const: "regex",
629
1622
  default: "regex",
1623
+ description: "Applies the regular expression in `expression` to each submitted text value.",
630
1624
  title: "Type",
631
1625
  type: "string",
632
1626
  },
@@ -634,8 +1628,21 @@ export const userToolSourceSchema = {
634
1628
  required: ["expression"],
635
1629
  title: "RegexParameterValidatorModel",
636
1630
  type: "object",
1631
+ "x-parameter-example": {
1632
+ label: "DNA motif",
1633
+ name: "motif",
1634
+ type: "text",
1635
+ validators: [
1636
+ {
1637
+ expression: "^[ACGT]+$",
1638
+ type: "regex",
1639
+ },
1640
+ ],
1641
+ },
637
1642
  },
638
1643
  ResourceRequirement: {
1644
+ additionalProperties: false,
1645
+ description: "A tool's compute resource request.\n\nSet the minimum resources needed to run the job and, when useful, an upper\nlimit. Galaxy exposes the allocated CPU count to the command as\n``$GALAXY_SLOTS``. Use numbers or numeric strings. Other strings are\nreserved for expressions, which are not supported yet: a non-numeric value\nfails the create-time lint check.",
639
1646
  properties: {
640
1647
  cores_max: {
641
1648
  anyOf: [
@@ -645,6 +1652,9 @@ export const userToolSourceSchema = {
645
1652
  {
646
1653
  type: "number",
647
1654
  },
1655
+ {
1656
+ type: "string",
1657
+ },
648
1658
  {
649
1659
  type: "null",
650
1660
  },
@@ -661,6 +1671,9 @@ export const userToolSourceSchema = {
661
1671
  {
662
1672
  type: "number",
663
1673
  },
1674
+ {
1675
+ type: "string",
1676
+ },
664
1677
  {
665
1678
  type: "null",
666
1679
  },
@@ -671,77 +1684,97 @@ export const userToolSourceSchema = {
671
1684
  },
672
1685
  cuda_compute_capability: {
673
1686
  anyOf: [
1687
+ {
1688
+ type: "integer",
1689
+ },
674
1690
  {
675
1691
  type: "number",
676
1692
  },
677
1693
  {
678
- type: "integer",
1694
+ type: "string",
679
1695
  },
680
1696
  {
681
1697
  type: "null",
682
1698
  },
683
1699
  ],
684
1700
  default: null,
1701
+ description: "Minimum CUDA compute capability required, e.g. 7.5.",
685
1702
  title: "Cuda Compute Capability",
686
1703
  },
687
1704
  cuda_device_count_max: {
688
1705
  anyOf: [
1706
+ {
1707
+ type: "integer",
1708
+ },
689
1709
  {
690
1710
  type: "number",
691
1711
  },
692
1712
  {
693
- type: "integer",
1713
+ type: "string",
694
1714
  },
695
1715
  {
696
1716
  type: "null",
697
1717
  },
698
1718
  ],
699
1719
  default: null,
1720
+ description: "Maximum number of GPUs to reserve.",
700
1721
  title: "Cuda Device Count Max",
701
1722
  },
702
1723
  cuda_device_count_min: {
703
1724
  anyOf: [
1725
+ {
1726
+ type: "integer",
1727
+ },
704
1728
  {
705
1729
  type: "number",
706
1730
  },
707
1731
  {
708
- type: "integer",
1732
+ type: "string",
709
1733
  },
710
1734
  {
711
1735
  type: "null",
712
1736
  },
713
1737
  ],
714
1738
  default: null,
1739
+ description: "Minimum number of GPUs to reserve.",
715
1740
  title: "Cuda Device Count Min",
716
1741
  },
717
1742
  cuda_version_min: {
718
1743
  anyOf: [
1744
+ {
1745
+ type: "integer",
1746
+ },
719
1747
  {
720
1748
  type: "number",
721
1749
  },
722
1750
  {
723
- type: "integer",
1751
+ type: "string",
724
1752
  },
725
1753
  {
726
1754
  type: "null",
727
1755
  },
728
1756
  ],
729
1757
  default: null,
1758
+ description: "Minimum CUDA runtime version required, e.g. 11.2.",
730
1759
  title: "Cuda Version Min",
731
1760
  },
732
1761
  gpu_memory_min: {
733
1762
  anyOf: [
1763
+ {
1764
+ type: "integer",
1765
+ },
734
1766
  {
735
1767
  type: "number",
736
1768
  },
737
1769
  {
738
- type: "integer",
1770
+ type: "string",
739
1771
  },
740
1772
  {
741
1773
  type: "null",
742
1774
  },
743
1775
  ],
744
1776
  default: null,
1777
+ description: "Minimum GPU memory required, in mebibytes (2**20).",
745
1778
  title: "Gpu Memory Min",
746
1779
  },
747
1780
  ram_max: {
@@ -752,6 +1785,9 @@ export const userToolSourceSchema = {
752
1785
  {
753
1786
  type: "number",
754
1787
  },
1788
+ {
1789
+ type: "string",
1790
+ },
755
1791
  {
756
1792
  type: "null",
757
1793
  },
@@ -768,6 +1804,9 @@ export const userToolSourceSchema = {
768
1804
  {
769
1805
  type: "number",
770
1806
  },
1807
+ {
1808
+ type: "string",
1809
+ },
771
1810
  {
772
1811
  type: "null",
773
1812
  },
@@ -778,17 +1817,21 @@ export const userToolSourceSchema = {
778
1817
  },
779
1818
  shm_size: {
780
1819
  anyOf: [
1820
+ {
1821
+ type: "integer",
1822
+ },
781
1823
  {
782
1824
  type: "number",
783
1825
  },
784
1826
  {
785
- type: "integer",
1827
+ type: "string",
786
1828
  },
787
1829
  {
788
1830
  type: "null",
789
1831
  },
790
1832
  ],
791
1833
  default: null,
1834
+ description: "Size of /dev/shm to request, in bytes.",
792
1835
  title: "Shm Size",
793
1836
  },
794
1837
  timelimit: {
@@ -799,6 +1842,9 @@ export const userToolSourceSchema = {
799
1842
  {
800
1843
  type: "number",
801
1844
  },
1845
+ {
1846
+ type: "string",
1847
+ },
802
1848
  {
803
1849
  type: "null",
804
1850
  },
@@ -809,32 +1855,40 @@ export const userToolSourceSchema = {
809
1855
  },
810
1856
  tmpdir_max: {
811
1857
  anyOf: [
1858
+ {
1859
+ type: "integer",
1860
+ },
812
1861
  {
813
1862
  type: "number",
814
1863
  },
815
1864
  {
816
- type: "integer",
1865
+ type: "string",
817
1866
  },
818
1867
  {
819
1868
  type: "null",
820
1869
  },
821
1870
  ],
822
1871
  default: null,
1872
+ description: "Maximum reserved temporary directory space, in mebibytes (2**20).",
823
1873
  title: "Tmpdir Max",
824
1874
  },
825
1875
  tmpdir_min: {
826
1876
  anyOf: [
1877
+ {
1878
+ type: "integer",
1879
+ },
827
1880
  {
828
1881
  type: "number",
829
1882
  },
830
1883
  {
831
- type: "integer",
1884
+ type: "string",
832
1885
  },
833
1886
  {
834
1887
  type: "null",
835
1888
  },
836
1889
  ],
837
1890
  default: null,
1891
+ description: "Minimum reserved temporary directory space, in mebibytes (2**20).",
838
1892
  title: "Tmpdir Min",
839
1893
  },
840
1894
  type: {
@@ -863,6 +1917,18 @@ export const userToolSourceSchema = {
863
1917
  default: "Collection",
864
1918
  title: "Class",
865
1919
  },
1920
+ count: {
1921
+ anyOf: [
1922
+ {
1923
+ type: "integer",
1924
+ },
1925
+ {
1926
+ type: "null",
1927
+ },
1928
+ ],
1929
+ default: null,
1930
+ title: "Count",
1931
+ },
866
1932
  element_tests: {
867
1933
  anyOf: [
868
1934
  {
@@ -907,6 +1973,30 @@ export const userToolSourceSchema = {
907
1973
  default: null,
908
1974
  title: "Elements",
909
1975
  },
1976
+ max: {
1977
+ anyOf: [
1978
+ {
1979
+ type: "integer",
1980
+ },
1981
+ {
1982
+ type: "null",
1983
+ },
1984
+ ],
1985
+ default: null,
1986
+ title: "Maximum Count",
1987
+ },
1988
+ min: {
1989
+ anyOf: [
1990
+ {
1991
+ type: "integer",
1992
+ },
1993
+ {
1994
+ type: "null",
1995
+ },
1996
+ ],
1997
+ default: null,
1998
+ title: "Minimum Count",
1999
+ },
910
2000
  },
911
2001
  title: "TestCollectionCollectionElementAssertions",
912
2002
  type: "object",
@@ -1275,180 +2365,35 @@ export const userToolSourceSchema = {
1275
2365
  ],
1276
2366
  default: null,
1277
2367
  description: "If true, decompress files before comparison. Applies to assertions expressed with `assert_contents` or `compare` set to anything but `sim_size`. Useful for testing compressed outputs that are non-deterministic despite having deterministic decompressed contents. By default, only files compressed with bz2, gzip and zip are automatically decompressed.",
1278
- title: "Decompress",
1279
- },
1280
- delta: {
1281
- anyOf: [
1282
- {
1283
- type: "integer",
1284
- },
1285
- {
1286
- type: "null",
1287
- },
1288
- ],
1289
- default: null,
1290
- description: "If `compare` is set to `sim_size`, the maximum allowed absolute size difference (in bytes) between the generated data set and the reference file in `test-data/`. Default is 10000 bytes. Can be combined with `delta_frac`.",
1291
- title: "Delta",
1292
- },
1293
- delta_frac: {
1294
- anyOf: [
1295
- {
1296
- type: "number",
1297
- },
1298
- {
1299
- type: "null",
1300
- },
1301
- ],
1302
- default: null,
1303
- description: "If `compare` is set to `sim_size`, the maximum allowed relative size difference between the generated data set and the reference file in `test-data/`. 0.1 means the generated file can differ by at most 10%. Default is not to check for relative size difference. Can be combined with `delta`.",
1304
- title: "Delta Frac",
1305
- },
1306
- file: {
1307
- anyOf: [
1308
- {
1309
- type: "string",
1310
- },
1311
- {
1312
- type: "null",
1313
- },
1314
- ],
1315
- default: null,
1316
- description: "Name of the output file stored in the target `test-data` directory that will be used to compare against the results of executing the tool via the functional test framework.",
1317
- title: "File",
1318
- },
1319
- ftype: {
1320
- anyOf: [
1321
- {
1322
- type: "string",
1323
- },
1324
- {
1325
- type: "null",
1326
- },
1327
- ],
1328
- default: null,
1329
- description: "If specified, this value is checked against the corresponding output's data type. If these do not match, the test will fail.",
1330
- title: "File Type",
1331
- },
1332
- lines_diff: {
1333
- anyOf: [
1334
- {
1335
- type: "integer",
1336
- },
1337
- {
1338
- type: "null",
1339
- },
1340
- ],
1341
- default: null,
1342
- description: "Applies when `compare` is set to `diff`, `re_match`, or `contains`. For `diff`, the number of lines of difference to allow (a modified line counts as two: one added, one removed).",
1343
- title: "Lines Diff",
1344
- },
1345
- location: {
1346
- anyOf: [
1347
- {
1348
- format: "uri",
1349
- minLength: 1,
1350
- type: "string",
1351
- },
1352
- {
1353
- type: "null",
1354
- },
1355
- ],
1356
- default: null,
1357
- description: "URL that points to a remote output file that will be downloaded and used for output comparison. Use only when the file cannot be included in the `test-data` folder. May be combined with `file` (downloads when missing on disk) or used alone (filename inferred from the URL). A `checksum` is also used to verify the download when provided.",
1358
- title: "Location",
1359
- },
1360
- metadata: {
1361
- anyOf: [
1362
- {
1363
- additionalProperties: true,
1364
- type: "object",
1365
- },
1366
- {
1367
- type: "null",
1368
- },
1369
- ],
1370
- default: null,
1371
- description: "Mapping of metadata keys to expected values for this output.",
1372
- title: "Metadata",
1373
- },
1374
- path: {
1375
- anyOf: [
1376
- {
1377
- type: "string",
1378
- },
1379
- {
1380
- type: "null",
1381
- },
1382
- ],
1383
- default: null,
1384
- description: "Filesystem path to a local output file used for comparison.",
1385
- title: "Path",
1386
- },
1387
- sort: {
1388
- anyOf: [
1389
- {
1390
- type: "boolean",
1391
- },
1392
- {
1393
- type: "null",
1394
- },
1395
- ],
1396
- default: null,
1397
- description: "Applies only if `compare` is `diff`, `re_match` or `re_match_multiline`. Sorts the lines of the history data set before comparison; for `diff` and `re_match` the local file is also sorted. Useful for non-deterministic output.",
1398
- title: "Sort",
1399
- },
1400
- },
1401
- title: "TestDataOutputAssertions",
1402
- type: "object",
1403
- },
1404
- ToolOutputBoolean: {
1405
- properties: {
1406
- hidden: {
1407
- description: "If true, the output will not be shown in the history.",
1408
- title: "Hidden",
2368
+ title: "Decompress",
1409
2369
  },
1410
- label: {
2370
+ delta: {
1411
2371
  anyOf: [
1412
2372
  {
1413
- type: "string",
2373
+ type: "integer",
1414
2374
  },
1415
2375
  {
1416
2376
  type: "null",
1417
2377
  },
1418
2378
  ],
1419
2379
  default: null,
1420
- description: "Output label. Will be used as dataset name in history.",
1421
- title: "Label",
1422
- },
1423
- name: {
1424
- description: "Parameter name. Used when referencing parameter in workflows.",
1425
- title: "Name",
1426
- },
1427
- type: {
1428
- const: "boolean",
1429
- title: "Type",
1430
- type: "string",
2380
+ description: "If `compare` is set to `sim_size`, the maximum allowed absolute size difference (in bytes) between the generated data set and the reference file in `test-data/`. Default is 10000 bytes. Can be combined with `delta_frac`.",
2381
+ title: "Delta",
1431
2382
  },
1432
- },
1433
- required: ["name", "hidden", "type"],
1434
- title: "ToolOutputBoolean",
1435
- type: "object",
1436
- },
1437
- ToolOutputCollectionStructure: {
1438
- properties: {
1439
- collection_type: {
2383
+ delta_frac: {
1440
2384
  anyOf: [
1441
2385
  {
1442
- type: "string",
2386
+ type: "number",
1443
2387
  },
1444
2388
  {
1445
2389
  type: "null",
1446
2390
  },
1447
2391
  ],
1448
2392
  default: null,
1449
- title: "Collection Type",
2393
+ description: "If `compare` is set to `sim_size`, the maximum allowed relative size difference between the generated data set and the reference file in `test-data/`. 0.1 means the generated file can differ by at most 10%. Default is not to check for relative size difference. Can be combined with `delta`.",
2394
+ title: "Delta Frac",
1450
2395
  },
1451
- collection_type_from_rules: {
2396
+ file: {
1452
2397
  anyOf: [
1453
2398
  {
1454
2399
  type: "string",
@@ -1458,9 +2403,10 @@ export const userToolSourceSchema = {
1458
2403
  },
1459
2404
  ],
1460
2405
  default: null,
1461
- title: "Collection Type From Rules",
2406
+ description: "Name of the output file stored in the target `test-data` directory that will be used to compare against the results of executing the tool via the functional test framework.",
2407
+ title: "File",
1462
2408
  },
1463
- collection_type_source: {
2409
+ ftype: {
1464
2410
  anyOf: [
1465
2411
  {
1466
2412
  type: "string",
@@ -1470,33 +2416,27 @@ export const userToolSourceSchema = {
1470
2416
  },
1471
2417
  ],
1472
2418
  default: null,
1473
- title: "Collection Type Source",
2419
+ description: "If specified, this value is checked against the corresponding output's data type. If these do not match, the test will fail.",
2420
+ title: "File Type",
1474
2421
  },
1475
- discover_datasets: {
2422
+ lines_diff: {
1476
2423
  anyOf: [
1477
2424
  {
1478
- items: {
1479
- anyOf: [
1480
- {
1481
- $ref: "#/$defs/FilePatternDatasetCollectionDescription",
1482
- },
1483
- {
1484
- $ref: "#/$defs/ToolProvidedMetadataDatasetCollection",
1485
- },
1486
- ],
1487
- },
1488
- type: "array",
2425
+ type: "integer",
1489
2426
  },
1490
2427
  {
1491
2428
  type: "null",
1492
2429
  },
1493
2430
  ],
1494
2431
  default: null,
1495
- title: "Discover Datasets",
2432
+ description: "Applies when `compare` is set to `diff`, `re_match`, or `contains`. For `diff`, the number of lines of difference to allow (a modified line counts as two: one added, one removed).",
2433
+ title: "Lines Diff",
1496
2434
  },
1497
- structured_like: {
2435
+ location: {
1498
2436
  anyOf: [
1499
2437
  {
2438
+ format: "uri",
2439
+ minLength: 1,
1500
2440
  type: "string",
1501
2441
  },
1502
2442
  {
@@ -1504,52 +2444,24 @@ export const userToolSourceSchema = {
1504
2444
  },
1505
2445
  ],
1506
2446
  default: null,
1507
- title: "Structured Like",
1508
- },
1509
- },
1510
- title: "ToolOutputCollectionStructure",
1511
- type: "object",
1512
- },
1513
- ToolOutputFloat: {
1514
- properties: {
1515
- hidden: {
1516
- description: "If true, the output will not be shown in the history.",
1517
- title: "Hidden",
2447
+ description: "URL that points to a remote output file that will be downloaded and used for output comparison. Use only when the file cannot be included in the `test-data` folder. May be combined with `file` (downloads when missing on disk) or used alone (filename inferred from the URL). A `checksum` is also used to verify the download when provided.",
2448
+ title: "Location",
1518
2449
  },
1519
- label: {
2450
+ metadata: {
1520
2451
  anyOf: [
1521
2452
  {
1522
- type: "string",
2453
+ additionalProperties: true,
2454
+ type: "object",
1523
2455
  },
1524
2456
  {
1525
2457
  type: "null",
1526
2458
  },
1527
2459
  ],
1528
2460
  default: null,
1529
- description: "Output label. Will be used as dataset name in history.",
1530
- title: "Label",
1531
- },
1532
- name: {
1533
- description: "Parameter name. Used when referencing parameter in workflows.",
1534
- title: "Name",
1535
- },
1536
- type: {
1537
- const: "float",
1538
- title: "Type",
1539
- type: "string",
1540
- },
1541
- },
1542
- required: ["name", "hidden", "type"],
1543
- title: "ToolOutputFloat",
1544
- type: "object",
1545
- },
1546
- ToolOutputInteger: {
1547
- properties: {
1548
- hidden: {
1549
- description: "If true, the output will not be shown in the history.",
1550
- title: "Hidden",
2461
+ description: "Mapping of metadata keys to expected values for this output.",
2462
+ title: "Metadata",
1551
2463
  },
1552
- label: {
2464
+ path: {
1553
2465
  anyOf: [
1554
2466
  {
1555
2467
  type: "string",
@@ -1559,59 +2471,32 @@ export const userToolSourceSchema = {
1559
2471
  },
1560
2472
  ],
1561
2473
  default: null,
1562
- description: "Output label. Will be used as dataset name in history.",
1563
- title: "Label",
1564
- },
1565
- name: {
1566
- description: "Parameter name. Used when referencing parameter in workflows.",
1567
- title: "Name",
1568
- },
1569
- type: {
1570
- const: "integer",
1571
- title: "Type",
1572
- type: "string",
1573
- },
1574
- },
1575
- required: ["name", "hidden", "type"],
1576
- title: "ToolOutputInteger",
1577
- type: "object",
1578
- },
1579
- ToolOutputText: {
1580
- properties: {
1581
- hidden: {
1582
- description: "If true, the output will not be shown in the history.",
1583
- title: "Hidden",
2474
+ description: "Filesystem path to a local output file used for comparison.",
2475
+ title: "Path",
1584
2476
  },
1585
- label: {
2477
+ sort: {
1586
2478
  anyOf: [
1587
2479
  {
1588
- type: "string",
2480
+ type: "boolean",
1589
2481
  },
1590
2482
  {
1591
2483
  type: "null",
1592
2484
  },
1593
2485
  ],
1594
2486
  default: null,
1595
- description: "Output label. Will be used as dataset name in history.",
1596
- title: "Label",
1597
- },
1598
- name: {
1599
- description: "Parameter name. Used when referencing parameter in workflows.",
1600
- title: "Name",
1601
- },
1602
- type: {
1603
- const: "text",
1604
- title: "Type",
1605
- type: "string",
2487
+ description: "Applies only if `compare` is `diff`, `re_match` or `re_match_multiline`. Sorts the lines of the history data set before comparison; for `diff` and `re_match` the local file is also sorted. Useful for non-deterministic output.",
2488
+ title: "Sort",
1606
2489
  },
1607
2490
  },
1608
- required: ["name", "hidden", "type"],
1609
- title: "ToolOutputText",
2491
+ title: "TestDataOutputAssertions",
1610
2492
  type: "object",
1611
2493
  },
1612
2494
  ToolProvidedMetadataDatasetCollection: {
2495
+ additionalProperties: false,
1613
2496
  properties: {
1614
2497
  assign_primary_output: {
2498
+ default: false,
2499
+ description: "Whether the first matching file replaces the primary dataset output.",
1615
2500
  title: "Assign Primary Output",
1616
2501
  type: "boolean",
1617
2502
  },
@@ -1624,10 +2509,13 @@ export const userToolSourceSchema = {
1624
2509
  type: "null",
1625
2510
  },
1626
2511
  ],
2512
+ default: null,
2513
+ description: "Directory to search, relative to the job working directory.",
1627
2514
  title: "Directory",
1628
2515
  },
1629
2516
  discover_via: {
1630
2517
  const: "tool_provided_metadata",
2518
+ description: "Read discovered dataset details from the tool-provided metadata file.",
1631
2519
  title: "Discover Via",
1632
2520
  type: "string",
1633
2521
  },
@@ -1640,35 +2528,62 @@ export const userToolSourceSchema = {
1640
2528
  type: "null",
1641
2529
  },
1642
2530
  ],
2531
+ default: null,
2532
+ description: "Galaxy datatype extension assigned to each discovered dataset.",
1643
2533
  title: "Format",
1644
2534
  },
1645
2535
  match_relative_path: {
2536
+ default: false,
2537
+ description: "Whether `pattern` matches each file's relative path instead of only its filename.",
1646
2538
  title: "Match Relative Path",
1647
2539
  type: "boolean",
1648
2540
  },
1649
2541
  recurse: {
2542
+ default: false,
2543
+ description: "Whether to search recursively below `directory`.",
1650
2544
  title: "Recurse",
1651
2545
  type: "boolean",
1652
2546
  },
1653
2547
  visible: {
2548
+ default: false,
2549
+ description: "Whether discovered datasets are visible in the history.",
1654
2550
  title: "Visible",
1655
2551
  type: "boolean",
1656
2552
  },
1657
2553
  },
1658
- required: [
1659
- "discover_via",
1660
- "format",
1661
- "visible",
1662
- "assign_primary_output",
1663
- "directory",
1664
- "recurse",
1665
- "match_relative_path",
1666
- ],
2554
+ required: ["discover_via"],
1667
2555
  title: "ToolProvidedMetadataDatasetCollection",
1668
2556
  type: "object",
1669
2557
  },
1670
2558
  UserToolSource: {
1671
2559
  additionalProperties: false,
2560
+ description: "Full unprivileged tool source, including the optional ``tests`` block.\n\nThis is the model persisted and validated on the API surface\n(``DynamicUnprivilegedToolCreatePayload.representation``). LLM authoring\nuses the slimmer ``UserToolSourceAuthoringView`` parent; ``tests`` is added\nback here so direct authors and stored rows can still carry tests.",
2561
+ examples: [
2562
+ {
2563
+ class: "GalaxyUserTool",
2564
+ container: "quay.io/biocontainers/grep:3.4--hf43ccf4_4",
2565
+ description: "from a text file",
2566
+ id: "remove_comments",
2567
+ inputs: [
2568
+ {
2569
+ format: ["txt"],
2570
+ name: "input_file",
2571
+ type: "data",
2572
+ },
2573
+ ],
2574
+ name: "Remove Comment Lines",
2575
+ outputs: [
2576
+ {
2577
+ format_source: "input_file",
2578
+ from_work_dir: "output.txt",
2579
+ name: "output_file",
2580
+ type: "data",
2581
+ },
2582
+ ],
2583
+ shell_command: "grep -v '^#' '$(inputs.input_file.path)' > output.txt || test \"$?\" = 1",
2584
+ version: "0.1.0",
2585
+ },
2586
+ ],
1672
2587
  properties: {
1673
2588
  citations: {
1674
2589
  anyOf: [
@@ -1683,6 +2598,7 @@ export const userToolSourceSchema = {
1683
2598
  },
1684
2599
  ],
1685
2600
  default: null,
2601
+ description: "DOI or BibTeX references for publications describing the wrapped tool.",
1686
2602
  title: "citations",
1687
2603
  },
1688
2604
  class: {
@@ -1703,11 +2619,11 @@ export const userToolSourceSchema = {
1703
2619
  },
1704
2620
  ],
1705
2621
  default: null,
1706
- description: "A list of config files for this tool.",
2622
+ description: "Files Galaxy writes into the job working directory before running the command. Their content is evaluated with the same sandboxed ECMAScript expressions as `shell_command`. Put scripts and other substantial command logic here, then keep `shell_command` to a short invocation.",
1707
2623
  title: "configfiles",
1708
2624
  },
1709
2625
  container: {
1710
- description: "Container image to use for this tool.",
2626
+ description: "Docker container image for the tool, as a fully qualified registry/repository:tag string. This image is the tool's entire execution environment, so every command used by shell_command must already exist in it. Do not prefix the value with 'docker://' -- Galaxy adds that itself for Singularity and Apptainer destinations. An unqualified name is resolved against the container runtime's own default registry (Docker Hub), which is rarely what you want.",
1711
2627
  examples: ["quay.io/biocontainers/python:3.13"],
1712
2628
  title: "container",
1713
2629
  type: "string",
@@ -1738,6 +2654,7 @@ export const userToolSourceSchema = {
1738
2654
  },
1739
2655
  ],
1740
2656
  default: null,
2657
+ description: "EDAM operation identifiers such as `operation_0308`.",
1741
2658
  title: "edam_operations",
1742
2659
  },
1743
2660
  edam_topics: {
@@ -1753,19 +2670,20 @@ export const userToolSourceSchema = {
1753
2670
  },
1754
2671
  ],
1755
2672
  default: null,
2673
+ description: "EDAM topic identifiers such as `topic_0102`.",
1756
2674
  title: "edam_topics",
1757
2675
  },
1758
2676
  help: {
1759
2677
  anyOf: [
1760
2678
  {
1761
- $ref: "#/$defs/HelpContent",
2679
+ $ref: "#/$defs/MarkdownHelpContent",
1762
2680
  },
1763
2681
  {
1764
2682
  type: "null",
1765
2683
  },
1766
2684
  ],
1767
2685
  default: null,
1768
- description: "Help text shown below the tool interface.",
2686
+ description: "Help shown below the tool form. Set `format` to `markdown` and put the documentation in `content`.",
1769
2687
  title: "help",
1770
2688
  },
1771
2689
  id: {
@@ -1787,6 +2705,7 @@ export const userToolSourceSchema = {
1787
2705
  },
1788
2706
  inputs: {
1789
2707
  default: [],
2708
+ description: "Parameters displayed on the tool form. Each item needs a unique `name` and a supported `type`. Reference scalar values as `$(inputs.input_name)` and data inputs as `$(inputs.input_name.path)` in `shell_command` or config files. Conditional, repeat, and section inputs contain nested parameters.",
1790
2709
  items: {
1791
2710
  $ref: "#/$defs/YamlGalaxyToolParameter",
1792
2711
  },
@@ -1815,36 +2734,21 @@ export const userToolSourceSchema = {
1815
2734
  },
1816
2735
  outputs: {
1817
2736
  default: [],
2737
+ description: "Datasets and dataset collections Galaxy collects after the command finishes. A data output identifies its produced file with `from_work_dir` or `discover_datasets`; a collection output uses `discover_datasets`.",
1818
2738
  items: {
1819
2739
  discriminator: {
1820
2740
  mapping: {
1821
- boolean: "#/$defs/ToolOutputBoolean",
1822
- collection: "#/$defs/IncomingToolOutputCollection",
1823
- data: "#/$defs/IncomingToolOutputDataset",
1824
- float: "#/$defs/ToolOutputFloat",
1825
- integer: "#/$defs/ToolOutputInteger",
1826
- text: "#/$defs/ToolOutputText",
2741
+ collection: "#/$defs/IncomingUserToolOutputCollection",
2742
+ data: "#/$defs/IncomingUserToolOutputDataset",
1827
2743
  },
1828
2744
  propertyName: "type",
1829
2745
  },
1830
2746
  oneOf: [
1831
2747
  {
1832
- $ref: "#/$defs/IncomingToolOutputDataset",
1833
- },
1834
- {
1835
- $ref: "#/$defs/IncomingToolOutputCollection",
1836
- },
1837
- {
1838
- $ref: "#/$defs/ToolOutputText",
1839
- },
1840
- {
1841
- $ref: "#/$defs/ToolOutputInteger",
1842
- },
1843
- {
1844
- $ref: "#/$defs/ToolOutputFloat",
2748
+ $ref: "#/$defs/IncomingUserToolOutputDataset",
1845
2749
  },
1846
2750
  {
1847
- $ref: "#/$defs/ToolOutputBoolean",
2751
+ $ref: "#/$defs/IncomingUserToolOutputCollection",
1848
2752
  },
1849
2753
  ],
1850
2754
  },
@@ -1874,9 +2778,6 @@ export const userToolSourceSchema = {
1874
2778
  {
1875
2779
  $ref: "#/$defs/ResourceRequirement",
1876
2780
  },
1877
- {
1878
- $ref: "#/$defs/ContainerRequirement",
1879
- },
1880
2781
  ],
1881
2782
  },
1882
2783
  type: "array",
@@ -1886,12 +2787,12 @@ export const userToolSourceSchema = {
1886
2787
  },
1887
2788
  ],
1888
2789
  default: [],
1889
- description: "A list of requirements needed to execute this tool. These can be javascript expressions, resource requirements or container images.",
2790
+ description: "JavaScript helpers and compute resource requests needed to execute this tool.",
1890
2791
  title: "requirements",
1891
2792
  },
1892
2793
  shell_command: {
1893
- description: "A string that contains the command to be executed. Parameters can be referenced inside $().",
1894
- examples: ["head -n '$(inputs.n_lines)' '$(inputs.data_input.path)'"],
2794
+ description: "A string that contains the command to be executed. Reference inputs inside `$()` as `$(inputs.input_name)` for scalar values and `$(inputs.input_name.path)` for files; `${ ... }` evaluates a JavaScript function body that must return a value. Substituted values are not shell-quoted, so quote them yourself. Because `$(` and `${` are consumed by the expression evaluator, shell command substitution and braced parameter expansion do not reach the shell: escape them as `\\$(` and `\\${`, and prefer unbraced variables such as `$GALAXY_SLOTS`.",
2795
+ examples: ["head -n '$(inputs.num_lines)' '$(inputs.input_file.path)' > output.txt"],
1895
2796
  title: "shell_command",
1896
2797
  type: "string",
1897
2798
  },
@@ -1908,21 +2809,14 @@ export const userToolSourceSchema = {
1908
2809
  },
1909
2810
  ],
1910
2811
  default: null,
2812
+ description: "Tool test declarations with input values and expected outputs. Database-stored user-defined tools retain these declarations but do not currently run them in the application.",
1911
2813
  title: "tests",
1912
2814
  },
1913
2815
  version: {
1914
- anyOf: [
1915
- {
1916
- type: "string",
1917
- },
1918
- {
1919
- type: "null",
1920
- },
1921
- ],
1922
- default: null,
1923
2816
  description: "Version for the tool.",
1924
2817
  examples: ["0.1.0"],
1925
2818
  title: "version",
2819
+ type: "string",
1926
2820
  },
1927
2821
  xrefs: {
1928
2822
  anyOf: [
@@ -1937,12 +2831,34 @@ export const userToolSourceSchema = {
1937
2831
  },
1938
2832
  ],
1939
2833
  default: null,
2834
+ description: "External registry identifiers, each with a registry `type` and identifier `value`.",
1940
2835
  title: "xrefs",
1941
2836
  },
1942
2837
  },
1943
- required: ["name", "shell_command", "class", "container"],
2838
+ required: ["version", "name", "shell_command", "class", "container"],
1944
2839
  title: "UserToolSource",
1945
2840
  type: "object",
2841
+ "x-field-order": [
2842
+ "class",
2843
+ "id",
2844
+ "name",
2845
+ "version",
2846
+ "description",
2847
+ "container",
2848
+ "requirements",
2849
+ "shell_command",
2850
+ "configfiles",
2851
+ "inputs",
2852
+ "outputs",
2853
+ "citations",
2854
+ "license",
2855
+ "profile",
2856
+ "edam_operations",
2857
+ "edam_topics",
2858
+ "xrefs",
2859
+ "help",
2860
+ "tests",
2861
+ ],
1946
2862
  },
1947
2863
  XrefDict: {
1948
2864
  additionalProperties: false,
@@ -1962,6 +2878,15 @@ export const userToolSourceSchema = {
1962
2878
  },
1963
2879
  YamlBooleanParameter: {
1964
2880
  additionalProperties: false,
2881
+ description: "A true-or-false input.",
2882
+ examples: [
2883
+ {
2884
+ label: "Include a header line",
2885
+ name: "include_header",
2886
+ type: "boolean",
2887
+ value: true,
2888
+ },
2889
+ ],
1965
2890
  properties: {
1966
2891
  help: {
1967
2892
  anyOf: [
@@ -1973,6 +2898,7 @@ export const userToolSourceSchema = {
1973
2898
  },
1974
2899
  ],
1975
2900
  default: null,
2901
+ description: "Additional guidance shown on the tool form to help users choose a value.",
1976
2902
  title: "Help",
1977
2903
  },
1978
2904
  label: {
@@ -1985,19 +2911,23 @@ export const userToolSourceSchema = {
1985
2911
  },
1986
2912
  ],
1987
2913
  default: null,
2914
+ description: "Label shown for the input on the tool form.",
1988
2915
  title: "Label",
1989
2916
  },
1990
2917
  name: {
2918
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
1991
2919
  title: "Name",
1992
2920
  type: "string",
1993
2921
  },
1994
2922
  optional: {
1995
2923
  default: false,
2924
+ description: "Set true when the command can run without the user supplying this input.",
1996
2925
  title: "Optional",
1997
2926
  type: "boolean",
1998
2927
  },
1999
2928
  type: {
2000
2929
  const: "boolean",
2930
+ description: "Presents a true-or-false choice and supplies the selected Boolean value to expressions.",
2001
2931
  title: "Type",
2002
2932
  type: "string",
2003
2933
  },
@@ -2011,15 +2941,26 @@ export const userToolSourceSchema = {
2011
2941
  },
2012
2942
  ],
2013
2943
  default: false,
2944
+ description: "Initial choice shown when the user first opens the tool form.",
2014
2945
  title: "Value",
2015
2946
  },
2016
2947
  },
2017
2948
  required: ["name", "type"],
2018
2949
  title: "YamlBooleanParameter",
2019
2950
  type: "object",
2951
+ "x-shell-command": 'include_header="$(inputs.include_header)"',
2020
2952
  },
2021
2953
  YamlColorParameter: {
2022
2954
  additionalProperties: false,
2955
+ description: "A color-picker input.",
2956
+ examples: [
2957
+ {
2958
+ label: "Plot color",
2959
+ name: "plot_color",
2960
+ type: "color",
2961
+ value: "#3366cc",
2962
+ },
2963
+ ],
2023
2964
  properties: {
2024
2965
  help: {
2025
2966
  anyOf: [
@@ -2031,6 +2972,7 @@ export const userToolSourceSchema = {
2031
2972
  },
2032
2973
  ],
2033
2974
  default: null,
2975
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2034
2976
  title: "Help",
2035
2977
  },
2036
2978
  label: {
@@ -2043,19 +2985,23 @@ export const userToolSourceSchema = {
2043
2985
  },
2044
2986
  ],
2045
2987
  default: null,
2988
+ description: "Label shown for the input on the tool form.",
2046
2989
  title: "Label",
2047
2990
  },
2048
2991
  name: {
2992
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2049
2993
  title: "Name",
2050
2994
  type: "string",
2051
2995
  },
2052
2996
  optional: {
2053
2997
  default: false,
2998
+ description: "Set true when the command can run without the user supplying this input.",
2054
2999
  title: "Optional",
2055
3000
  type: "boolean",
2056
3001
  },
2057
3002
  type: {
2058
3003
  const: "color",
3004
+ description: "Presents a color picker and supplies the selected hexadecimal color string.",
2059
3005
  title: "Type",
2060
3006
  type: "string",
2061
3007
  },
@@ -2069,15 +3015,57 @@ export const userToolSourceSchema = {
2069
3015
  },
2070
3016
  ],
2071
3017
  default: null,
3018
+ description: "Color initially selected in the picker, written in hexadecimal notation.",
2072
3019
  title: "Value",
2073
3020
  },
2074
3021
  },
2075
3022
  required: ["name", "type"],
2076
3023
  title: "YamlColorParameter",
2077
3024
  type: "object",
3025
+ "x-shell-command": 'plot_color="$(inputs.plot_color)"',
2078
3026
  },
2079
3027
  YamlConditionalParameter: {
2080
3028
  additionalProperties: false,
3029
+ description: "A control input that selects which nested inputs are displayed and supplied to the command.",
3030
+ examples: [
3031
+ {
3032
+ name: "search_options",
3033
+ test_parameter: {
3034
+ label: "Search mode",
3035
+ name: "mode",
3036
+ options: [
3037
+ {
3038
+ label: "Fast",
3039
+ selected: true,
3040
+ value: "fast",
3041
+ },
3042
+ {
3043
+ label: "Sensitive",
3044
+ selected: false,
3045
+ value: "sensitive",
3046
+ },
3047
+ ],
3048
+ type: "select",
3049
+ },
3050
+ type: "conditional",
3051
+ whens: [
3052
+ {
3053
+ discriminator: "fast",
3054
+ parameters: [],
3055
+ },
3056
+ {
3057
+ discriminator: "sensitive",
3058
+ parameters: [
3059
+ {
3060
+ name: "iterations",
3061
+ type: "integer",
3062
+ value: 3,
3063
+ },
3064
+ ],
3065
+ },
3066
+ ],
3067
+ },
3068
+ ],
2081
3069
  properties: {
2082
3070
  help: {
2083
3071
  anyOf: [
@@ -2089,6 +3077,7 @@ export const userToolSourceSchema = {
2089
3077
  },
2090
3078
  ],
2091
3079
  default: null,
3080
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2092
3081
  title: "Help",
2093
3082
  },
2094
3083
  label: {
@@ -2101,18 +3090,22 @@ export const userToolSourceSchema = {
2101
3090
  },
2102
3091
  ],
2103
3092
  default: null,
3093
+ description: "Label shown for the input on the tool form.",
2104
3094
  title: "Label",
2105
3095
  },
2106
3096
  name: {
3097
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2107
3098
  title: "Name",
2108
3099
  type: "string",
2109
3100
  },
2110
3101
  optional: {
2111
3102
  default: false,
3103
+ description: "Set true when the command can run without the user supplying this input.",
2112
3104
  title: "Optional",
2113
3105
  type: "boolean",
2114
3106
  },
2115
3107
  test_parameter: {
3108
+ description: "Boolean or select input whose submitted value chooses the active `whens` branch.",
2116
3109
  discriminator: {
2117
3110
  mapping: {
2118
3111
  boolean: "#/$defs/YamlBooleanParameter",
@@ -2132,10 +3125,12 @@ export const userToolSourceSchema = {
2132
3125
  },
2133
3126
  type: {
2134
3127
  const: "conditional",
3128
+ description: "Shows one set of nested inputs at a time according to a Boolean or select control.",
2135
3129
  title: "Type",
2136
3130
  type: "string",
2137
3131
  },
2138
3132
  whens: {
3133
+ description: "Maps each control value to the nested parameters shown and supplied for that branch.",
2139
3134
  items: {
2140
3135
  $ref: "#/$defs/YamlConditionalWhen",
2141
3136
  },
@@ -2147,6 +3142,7 @@ export const userToolSourceSchema = {
2147
3142
  required: ["name", "type", "test_parameter", "whens"],
2148
3143
  title: "YamlConditionalParameter",
2149
3144
  type: "object",
3145
+ "x-shell-command": 'mode="$(inputs.search_options.mode)"\niterations="$(inputs.search_options.iterations)"',
2150
3146
  },
2151
3147
  YamlConditionalWhen: {
2152
3148
  additionalProperties: false,
@@ -2177,6 +3173,16 @@ export const userToolSourceSchema = {
2177
3173
  },
2178
3174
  YamlDataCollectionParameter: {
2179
3175
  additionalProperties: false,
3176
+ description: "A dataset collection input.",
3177
+ examples: [
3178
+ {
3179
+ collection_type: "paired",
3180
+ format: ["fastqsanger"],
3181
+ label: "Paired reads",
3182
+ name: "reads",
3183
+ type: "data_collection",
3184
+ },
3185
+ ],
2180
3186
  properties: {
2181
3187
  collection_type: {
2182
3188
  anyOf: [
@@ -2188,10 +3194,12 @@ export const userToolSourceSchema = {
2188
3194
  },
2189
3195
  ],
2190
3196
  default: null,
3197
+ description: "Limits selectable collections to this structure, such as `list` or `paired`.",
2191
3198
  title: "Collection Type",
2192
3199
  },
2193
3200
  format: {
2194
3201
  default: ["data"],
3202
+ description: "Requires every selectable collection element to use one of these datatype extensions.",
2195
3203
  items: {
2196
3204
  type: "string",
2197
3205
  },
@@ -2208,6 +3216,7 @@ export const userToolSourceSchema = {
2208
3216
  },
2209
3217
  ],
2210
3218
  default: null,
3219
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2211
3220
  title: "Help",
2212
3221
  },
2213
3222
  label: {
@@ -2220,19 +3229,23 @@ export const userToolSourceSchema = {
2220
3229
  },
2221
3230
  ],
2222
3231
  default: null,
3232
+ description: "Label shown for the input on the tool form.",
2223
3233
  title: "Label",
2224
3234
  },
2225
3235
  name: {
3236
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2226
3237
  title: "Name",
2227
3238
  type: "string",
2228
3239
  },
2229
3240
  optional: {
2230
3241
  default: false,
3242
+ description: "Set true when the command can run without the user supplying this input.",
2231
3243
  title: "Optional",
2232
3244
  type: "boolean",
2233
3245
  },
2234
3246
  type: {
2235
3247
  const: "data_collection",
3248
+ description: "Lets the user select a history collection and exposes its elements to expressions.",
2236
3249
  title: "Type",
2237
3250
  type: "string",
2238
3251
  },
@@ -2240,12 +3253,23 @@ export const userToolSourceSchema = {
2240
3253
  required: ["name", "type"],
2241
3254
  title: "YamlDataCollectionParameter",
2242
3255
  type: "object",
3256
+ "x-shell-command": "forward='$(inputs.reads.elements.forward.path)'\nreverse='$(inputs.reads.elements.reverse.path)'",
2243
3257
  },
2244
3258
  YamlDataParameter: {
2245
3259
  additionalProperties: false,
3260
+ description: "One dataset, or a list of datasets when ``multiple`` is true.",
3261
+ examples: [
3262
+ {
3263
+ format: ["txt", "tabular"],
3264
+ label: "Input file",
3265
+ name: "input_file",
3266
+ type: "data",
3267
+ },
3268
+ ],
2246
3269
  properties: {
2247
3270
  format: {
2248
3271
  default: ["data"],
3272
+ description: "Limits selectable datasets to these Galaxy datatype extensions.",
2249
3273
  items: {
2250
3274
  type: "string",
2251
3275
  },
@@ -2262,6 +3286,7 @@ export const userToolSourceSchema = {
2262
3286
  },
2263
3287
  ],
2264
3288
  default: null,
3289
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2265
3290
  title: "Help",
2266
3291
  },
2267
3292
  label: {
@@ -2274,48 +3299,29 @@ export const userToolSourceSchema = {
2274
3299
  },
2275
3300
  ],
2276
3301
  default: null,
3302
+ description: "Label shown for the input on the tool form.",
2277
3303
  title: "Label",
2278
3304
  },
2279
- max: {
2280
- anyOf: [
2281
- {
2282
- type: "integer",
2283
- },
2284
- {
2285
- type: "null",
2286
- },
2287
- ],
2288
- default: null,
2289
- title: "Max",
2290
- },
2291
- min: {
2292
- anyOf: [
2293
- {
2294
- type: "integer",
2295
- },
2296
- {
2297
- type: "null",
2298
- },
2299
- ],
2300
- default: null,
2301
- title: "Min",
2302
- },
2303
3305
  multiple: {
2304
3306
  default: false,
3307
+ description: "Set true to accept several datasets (a list) for this input instead of one.",
2305
3308
  title: "Multiple",
2306
3309
  type: "boolean",
2307
3310
  },
2308
3311
  name: {
3312
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2309
3313
  title: "Name",
2310
3314
  type: "string",
2311
3315
  },
2312
3316
  optional: {
2313
3317
  default: false,
3318
+ description: "Set true when the command can run without the user supplying this input.",
2314
3319
  title: "Optional",
2315
3320
  type: "boolean",
2316
3321
  },
2317
3322
  type: {
2318
3323
  const: "data",
3324
+ description: "Lets the user select history datasets and exposes their paths and metadata to expressions.",
2319
3325
  title: "Type",
2320
3326
  type: "string",
2321
3327
  },
@@ -2323,9 +3329,21 @@ export const userToolSourceSchema = {
2323
3329
  required: ["name", "type"],
2324
3330
  title: "YamlDataParameter",
2325
3331
  type: "object",
3332
+ "x-shell-command": "input_file='$(inputs.input_file.path)'",
2326
3333
  },
2327
3334
  YamlFloatParameter: {
2328
3335
  additionalProperties: false,
3336
+ description: "A numeric input with optional bounds and validators.",
3337
+ examples: [
3338
+ {
3339
+ label: "Score threshold",
3340
+ max: 1.0,
3341
+ min: 0.0,
3342
+ name: "threshold",
3343
+ type: "float",
3344
+ value: 0.5,
3345
+ },
3346
+ ],
2329
3347
  properties: {
2330
3348
  help: {
2331
3349
  anyOf: [
@@ -2337,6 +3355,7 @@ export const userToolSourceSchema = {
2337
3355
  },
2338
3356
  ],
2339
3357
  default: null,
3358
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2340
3359
  title: "Help",
2341
3360
  },
2342
3361
  label: {
@@ -2349,6 +3368,7 @@ export const userToolSourceSchema = {
2349
3368
  },
2350
3369
  ],
2351
3370
  default: null,
3371
+ description: "Label shown for the input on the tool form.",
2352
3372
  title: "Label",
2353
3373
  },
2354
3374
  max: {
@@ -2361,6 +3381,7 @@ export const userToolSourceSchema = {
2361
3381
  },
2362
3382
  ],
2363
3383
  default: null,
3384
+ description: "Rejects submitted values larger than this inclusive upper bound.",
2364
3385
  title: "Max",
2365
3386
  },
2366
3387
  min: {
@@ -2373,24 +3394,29 @@ export const userToolSourceSchema = {
2373
3394
  },
2374
3395
  ],
2375
3396
  default: null,
3397
+ description: "Rejects submitted values smaller than this inclusive lower bound.",
2376
3398
  title: "Min",
2377
3399
  },
2378
3400
  name: {
3401
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2379
3402
  title: "Name",
2380
3403
  type: "string",
2381
3404
  },
2382
3405
  optional: {
2383
3406
  default: false,
3407
+ description: "Set true when the command can run without the user supplying this input.",
2384
3408
  title: "Optional",
2385
3409
  type: "boolean",
2386
3410
  },
2387
3411
  type: {
2388
3412
  const: "float",
3413
+ description: "Accepts a number, including decimal values, and supplies it to expressions.",
2389
3414
  title: "Type",
2390
3415
  type: "string",
2391
3416
  },
2392
3417
  validators: {
2393
3418
  default: [],
3419
+ description: "Additional validation rules; supports `in_range`.",
2394
3420
  items: {
2395
3421
  $ref: "#/$defs/InRangeParameterValidatorModel",
2396
3422
  },
@@ -2407,12 +3433,14 @@ export const userToolSourceSchema = {
2407
3433
  },
2408
3434
  ],
2409
3435
  default: null,
3436
+ description: "Number prefilled when the user first opens the tool form.",
2410
3437
  title: "Value",
2411
3438
  },
2412
3439
  },
2413
3440
  required: ["name", "type"],
2414
3441
  title: "YamlFloatParameter",
2415
3442
  type: "object",
3443
+ "x-shell-command": 'threshold="$(inputs.threshold)"',
2416
3444
  },
2417
3445
  YamlGalaxyToolParameter: {
2418
3446
  discriminator: {
@@ -2470,6 +3498,17 @@ export const userToolSourceSchema = {
2470
3498
  },
2471
3499
  YamlIntegerParameter: {
2472
3500
  additionalProperties: false,
3501
+ description: "A whole-number input with optional bounds and validators.",
3502
+ examples: [
3503
+ {
3504
+ label: "Number of lines",
3505
+ max: 1000,
3506
+ min: 1,
3507
+ name: "num_lines",
3508
+ type: "integer",
3509
+ value: 10,
3510
+ },
3511
+ ],
2473
3512
  properties: {
2474
3513
  help: {
2475
3514
  anyOf: [
@@ -2481,6 +3520,7 @@ export const userToolSourceSchema = {
2481
3520
  },
2482
3521
  ],
2483
3522
  default: null,
3523
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2484
3524
  title: "Help",
2485
3525
  },
2486
3526
  label: {
@@ -2493,6 +3533,7 @@ export const userToolSourceSchema = {
2493
3533
  },
2494
3534
  ],
2495
3535
  default: null,
3536
+ description: "Label shown for the input on the tool form.",
2496
3537
  title: "Label",
2497
3538
  },
2498
3539
  max: {
@@ -2505,6 +3546,7 @@ export const userToolSourceSchema = {
2505
3546
  },
2506
3547
  ],
2507
3548
  default: null,
3549
+ description: "Rejects submitted values larger than this inclusive upper bound.",
2508
3550
  title: "Max",
2509
3551
  },
2510
3552
  min: {
@@ -2517,24 +3559,29 @@ export const userToolSourceSchema = {
2517
3559
  },
2518
3560
  ],
2519
3561
  default: null,
3562
+ description: "Rejects submitted values smaller than this inclusive lower bound.",
2520
3563
  title: "Min",
2521
3564
  },
2522
3565
  name: {
3566
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2523
3567
  title: "Name",
2524
3568
  type: "string",
2525
3569
  },
2526
3570
  optional: {
2527
3571
  default: false,
3572
+ description: "Set true when the command can run without the user supplying this input.",
2528
3573
  title: "Optional",
2529
3574
  type: "boolean",
2530
3575
  },
2531
3576
  type: {
2532
3577
  const: "integer",
3578
+ description: "Accepts a whole number and supplies it as a numeric value to expressions.",
2533
3579
  title: "Type",
2534
3580
  type: "string",
2535
3581
  },
2536
3582
  validators: {
2537
3583
  default: [],
3584
+ description: "Additional validation rules; supports `in_range`.",
2538
3585
  items: {
2539
3586
  $ref: "#/$defs/InRangeParameterValidatorModel",
2540
3587
  },
@@ -2551,14 +3598,17 @@ export const userToolSourceSchema = {
2551
3598
  },
2552
3599
  ],
2553
3600
  default: null,
3601
+ description: "Number prefilled when the user first opens the tool form.",
2554
3602
  title: "Value",
2555
3603
  },
2556
3604
  },
2557
3605
  required: ["name", "type"],
2558
3606
  title: "YamlIntegerParameter",
2559
3607
  type: "object",
3608
+ "x-shell-command": 'num_lines="$(inputs.num_lines)"',
2560
3609
  },
2561
3610
  YamlLabelValue: {
3611
+ additionalProperties: false,
2562
3612
  description: "YAML-friendly option model \u2014 ``selected`` defaults to ``False``.",
2563
3613
  properties: {
2564
3614
  label: {
@@ -2581,6 +3631,23 @@ export const userToolSourceSchema = {
2581
3631
  },
2582
3632
  YamlRepeatParameter: {
2583
3633
  additionalProperties: false,
3634
+ description: "A group the user may add multiple times, with ``parameters`` defining one repeated entry.",
3635
+ examples: [
3636
+ {
3637
+ label: "Additional files",
3638
+ max: 3,
3639
+ min: 0,
3640
+ name: "extra_files",
3641
+ parameters: [
3642
+ {
3643
+ format: ["txt"],
3644
+ name: "input_file",
3645
+ type: "data",
3646
+ },
3647
+ ],
3648
+ type: "repeat",
3649
+ },
3650
+ ],
2584
3651
  properties: {
2585
3652
  help: {
2586
3653
  anyOf: [
@@ -2592,6 +3659,7 @@ export const userToolSourceSchema = {
2592
3659
  },
2593
3660
  ],
2594
3661
  default: null,
3662
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2595
3663
  title: "Help",
2596
3664
  },
2597
3665
  label: {
@@ -2604,6 +3672,7 @@ export const userToolSourceSchema = {
2604
3672
  },
2605
3673
  ],
2606
3674
  default: null,
3675
+ description: "Label shown for the input on the tool form.",
2607
3676
  title: "Label",
2608
3677
  },
2609
3678
  max: {
@@ -2616,6 +3685,7 @@ export const userToolSourceSchema = {
2616
3685
  },
2617
3686
  ],
2618
3687
  default: null,
3688
+ description: "Prevents the user from adding more than this many entries.",
2619
3689
  title: "Max",
2620
3690
  },
2621
3691
  min: {
@@ -2628,19 +3698,23 @@ export const userToolSourceSchema = {
2628
3698
  },
2629
3699
  ],
2630
3700
  default: null,
3701
+ description: "Keeps at least this many entries in the group and creates them when the form opens.",
2631
3702
  title: "Min",
2632
3703
  },
2633
3704
  name: {
3705
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2634
3706
  title: "Name",
2635
3707
  type: "string",
2636
3708
  },
2637
3709
  optional: {
2638
3710
  default: false,
3711
+ description: "Set true when the command can run without the user supplying this input.",
2639
3712
  title: "Optional",
2640
3713
  type: "boolean",
2641
3714
  },
2642
3715
  parameters: {
2643
3716
  default: [],
3717
+ description: "Nested inputs that make up one entry in the repeated group.",
2644
3718
  items: {
2645
3719
  $ref: "#/$defs/YamlGalaxyToolParameter",
2646
3720
  },
@@ -2649,6 +3723,7 @@ export const userToolSourceSchema = {
2649
3723
  },
2650
3724
  type: {
2651
3725
  const: "repeat",
3726
+ description: "Lets the user add multiple entries that all contain the same nested inputs.",
2652
3727
  title: "Type",
2653
3728
  type: "string",
2654
3729
  },
@@ -2656,9 +3731,27 @@ export const userToolSourceSchema = {
2656
3731
  required: ["name", "type"],
2657
3732
  title: "YamlRepeatParameter",
2658
3733
  type: "object",
3734
+ "x-shell-command": "files='$(inputs.extra_files.map((item) => item.input_file.path).join(\" \"))'",
2659
3735
  },
2660
3736
  YamlSectionParameter: {
2661
3737
  additionalProperties: false,
3738
+ description: "Related inputs that users can expand or collapse to reduce form complexity.",
3739
+ examples: [
3740
+ {
3741
+ label: "Advanced options",
3742
+ name: "advanced",
3743
+ parameters: [
3744
+ {
3745
+ max: 1.0,
3746
+ min: 0.0,
3747
+ name: "threshold",
3748
+ type: "float",
3749
+ value: 0.5,
3750
+ },
3751
+ ],
3752
+ type: "section",
3753
+ },
3754
+ ],
2662
3755
  properties: {
2663
3756
  help: {
2664
3757
  anyOf: [
@@ -2670,6 +3763,7 @@ export const userToolSourceSchema = {
2670
3763
  },
2671
3764
  ],
2672
3765
  default: null,
3766
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2673
3767
  title: "Help",
2674
3768
  },
2675
3769
  label: {
@@ -2682,19 +3776,23 @@ export const userToolSourceSchema = {
2682
3776
  },
2683
3777
  ],
2684
3778
  default: null,
3779
+ description: "Label shown for the input on the tool form.",
2685
3780
  title: "Label",
2686
3781
  },
2687
3782
  name: {
3783
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2688
3784
  title: "Name",
2689
3785
  type: "string",
2690
3786
  },
2691
3787
  optional: {
2692
3788
  default: false,
3789
+ description: "Set true when the command can run without the user supplying this input.",
2693
3790
  title: "Optional",
2694
3791
  type: "boolean",
2695
3792
  },
2696
3793
  parameters: {
2697
3794
  default: [],
3795
+ description: "Nested inputs displayed together inside the section.",
2698
3796
  items: {
2699
3797
  $ref: "#/$defs/YamlGalaxyToolParameter",
2700
3798
  },
@@ -2703,6 +3801,7 @@ export const userToolSourceSchema = {
2703
3801
  },
2704
3802
  type: {
2705
3803
  const: "section",
3804
+ description: "Places related inputs in a collapsible group to simplify the tool form.",
2706
3805
  title: "Type",
2707
3806
  type: "string",
2708
3807
  },
@@ -2710,9 +3809,30 @@ export const userToolSourceSchema = {
2710
3809
  required: ["name", "type"],
2711
3810
  title: "YamlSectionParameter",
2712
3811
  type: "object",
3812
+ "x-shell-command": 'threshold="$(inputs.advanced.threshold)"',
2713
3813
  },
2714
3814
  YamlSelectParameter: {
2715
3815
  additionalProperties: false,
3816
+ description: "A choice from a fixed list of options.",
3817
+ examples: [
3818
+ {
3819
+ label: "Search mode",
3820
+ name: "mode",
3821
+ options: [
3822
+ {
3823
+ label: "Fast",
3824
+ selected: true,
3825
+ value: "fast",
3826
+ },
3827
+ {
3828
+ label: "Sensitive",
3829
+ selected: false,
3830
+ value: "sensitive",
3831
+ },
3832
+ ],
3833
+ type: "select",
3834
+ },
3835
+ ],
2716
3836
  properties: {
2717
3837
  help: {
2718
3838
  anyOf: [
@@ -2724,6 +3844,7 @@ export const userToolSourceSchema = {
2724
3844
  },
2725
3845
  ],
2726
3846
  default: null,
3847
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2727
3848
  title: "Help",
2728
3849
  },
2729
3850
  label: {
@@ -2736,23 +3857,28 @@ export const userToolSourceSchema = {
2736
3857
  },
2737
3858
  ],
2738
3859
  default: null,
3860
+ description: "Label shown for the input on the tool form.",
2739
3861
  title: "Label",
2740
3862
  },
2741
3863
  multiple: {
2742
3864
  default: false,
3865
+ description: "Set true to let the user select and supply several option values instead of one.",
2743
3866
  title: "Multiple",
2744
3867
  type: "boolean",
2745
3868
  },
2746
3869
  name: {
3870
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2747
3871
  title: "Name",
2748
3872
  type: "string",
2749
3873
  },
2750
3874
  optional: {
2751
3875
  default: false,
3876
+ description: "Set true when the command can run without the user supplying this input.",
2752
3877
  title: "Optional",
2753
3878
  type: "boolean",
2754
3879
  },
2755
3880
  options: {
3881
+ description: "Choices presented on the tool form, each with a display label and value.",
2756
3882
  items: {
2757
3883
  $ref: "#/$defs/YamlLabelValue",
2758
3884
  },
@@ -2762,11 +3888,13 @@ export const userToolSourceSchema = {
2762
3888
  },
2763
3889
  type: {
2764
3890
  const: "select",
3891
+ description: "Lets the user choose from the declared `options` and supplies the selected value.",
2765
3892
  title: "Type",
2766
3893
  type: "string",
2767
3894
  },
2768
3895
  validators: {
2769
3896
  default: [],
3897
+ description: "Additional validation rules; supports `no_options`.",
2770
3898
  items: {
2771
3899
  $ref: "#/$defs/NoOptionsParameterValidatorModel",
2772
3900
  },
@@ -2777,8 +3905,10 @@ export const userToolSourceSchema = {
2777
3905
  required: ["name", "type", "options"],
2778
3906
  title: "YamlSelectParameter",
2779
3907
  type: "object",
3908
+ "x-shell-command": 'mode="$(inputs.mode)"',
2780
3909
  },
2781
3910
  YamlTemplateConfigFile: {
3911
+ additionalProperties: false,
2782
3912
  properties: {
2783
3913
  content: {
2784
3914
  title: "Content",
@@ -2883,9 +4013,20 @@ export const userToolSourceSchema = {
2883
4013
  },
2884
4014
  YamlTextParameter: {
2885
4015
  additionalProperties: false,
4016
+ description: "A single-line or multiline text input.",
4017
+ examples: [
4018
+ {
4019
+ area: false,
4020
+ label: "Sequence motif",
4021
+ name: "motif",
4022
+ type: "text",
4023
+ value: "ACGT",
4024
+ },
4025
+ ],
2886
4026
  properties: {
2887
4027
  area: {
2888
4028
  default: false,
4029
+ description: "Set true to use a multiline editor instead of a single-line text box.",
2889
4030
  title: "Area",
2890
4031
  type: "boolean",
2891
4032
  },
@@ -2899,6 +4040,7 @@ export const userToolSourceSchema = {
2899
4040
  },
2900
4041
  ],
2901
4042
  default: null,
4043
+ description: "Additional guidance shown on the tool form to help users choose a value.",
2902
4044
  title: "Help",
2903
4045
  },
2904
4046
  label: {
@@ -2911,24 +4053,29 @@ export const userToolSourceSchema = {
2911
4053
  },
2912
4054
  ],
2913
4055
  default: null,
4056
+ description: "Label shown for the input on the tool form.",
2914
4057
  title: "Label",
2915
4058
  },
2916
4059
  name: {
4060
+ description: "Identifier used to read this input from `shell_command` and other expressions.",
2917
4061
  title: "Name",
2918
4062
  type: "string",
2919
4063
  },
2920
4064
  optional: {
2921
4065
  default: false,
4066
+ description: "Set true when the command can run without the user supplying this input.",
2922
4067
  title: "Optional",
2923
4068
  type: "boolean",
2924
4069
  },
2925
4070
  type: {
2926
4071
  const: "text",
4072
+ description: "Accepts user-entered text and supplies the resulting string to expressions.",
2927
4073
  title: "Type",
2928
4074
  type: "string",
2929
4075
  },
2930
4076
  validators: {
2931
4077
  default: [],
4078
+ description: "Additional validation rules; supports `length`, `regex`, and `empty_field`.",
2932
4079
  items: {
2933
4080
  anyOf: [
2934
4081
  {
@@ -2955,12 +4102,14 @@ export const userToolSourceSchema = {
2955
4102
  },
2956
4103
  ],
2957
4104
  default: null,
4105
+ description: "Text prefilled when the user first opens the tool form.",
2958
4106
  title: "Value",
2959
4107
  },
2960
4108
  },
2961
4109
  required: ["name", "type"],
2962
4110
  title: "YamlTextParameter",
2963
4111
  type: "object",
4112
+ "x-shell-command": 'motif="$(inputs.motif)"',
2964
4113
  },
2965
4114
  YamlToolSource: {
2966
4115
  additionalProperties: false,
@@ -2978,6 +4127,7 @@ export const userToolSourceSchema = {
2978
4127
  },
2979
4128
  ],
2980
4129
  default: null,
4130
+ description: "DOI or BibTeX references for publications describing the wrapped tool.",
2981
4131
  title: "citations",
2982
4132
  },
2983
4133
  class: {
@@ -2998,7 +4148,7 @@ export const userToolSourceSchema = {
2998
4148
  },
2999
4149
  ],
3000
4150
  default: null,
3001
- description: "A list of config files for this tool.",
4151
+ description: "Files Galaxy writes into the job working directory before running the command. Their content is evaluated with the same sandboxed ECMAScript expressions as `shell_command`. Put scripts and other substantial command logic here, then keep `shell_command` to a short invocation.",
3002
4152
  title: "configfiles",
3003
4153
  },
3004
4154
  container: {
@@ -3041,6 +4191,7 @@ export const userToolSourceSchema = {
3041
4191
  },
3042
4192
  ],
3043
4193
  default: null,
4194
+ description: "EDAM operation identifiers such as `operation_0308`.",
3044
4195
  title: "edam_operations",
3045
4196
  },
3046
4197
  edam_topics: {
@@ -3056,6 +4207,7 @@ export const userToolSourceSchema = {
3056
4207
  },
3057
4208
  ],
3058
4209
  default: null,
4210
+ description: "EDAM topic identifiers such as `topic_0102`.",
3059
4211
  title: "edam_topics",
3060
4212
  },
3061
4213
  help: {
@@ -3068,7 +4220,7 @@ export const userToolSourceSchema = {
3068
4220
  },
3069
4221
  ],
3070
4222
  default: null,
3071
- description: "Help text shown below the tool interface.",
4223
+ description: "Help shown below the tool form. Set `format` to `markdown`, `restructuredtext`, or `plain_text`, and put the documentation in `content`.",
3072
4224
  title: "help",
3073
4225
  },
3074
4226
  id: {
@@ -3090,6 +4242,7 @@ export const userToolSourceSchema = {
3090
4242
  },
3091
4243
  inputs: {
3092
4244
  default: [],
4245
+ description: "Parameters displayed on the tool form. Each item needs a unique `name` and a supported `type`. Reference scalar values as `$(inputs.input_name)` and data inputs as `$(inputs.input_name.path)` in `shell_command` or config files. Conditional, repeat, and section inputs contain nested parameters.",
3093
4246
  items: {
3094
4247
  $ref: "#/$defs/YamlGalaxyToolParameter",
3095
4248
  },
@@ -3118,15 +4271,16 @@ export const userToolSourceSchema = {
3118
4271
  },
3119
4272
  outputs: {
3120
4273
  default: [],
4274
+ description: "Results Galaxy collects after the command finishes. A data output identifies its produced file with `from_work_dir` or `discover_datasets`; a collection output uses `discover_datasets`. Scalar output types are `text`, `integer`, `float`, and `boolean`.",
3121
4275
  items: {
3122
4276
  discriminator: {
3123
4277
  mapping: {
3124
- boolean: "#/$defs/ToolOutputBoolean",
4278
+ boolean: "#/$defs/IncomingToolOutputBoolean",
3125
4279
  collection: "#/$defs/IncomingToolOutputCollection",
3126
4280
  data: "#/$defs/IncomingToolOutputDataset",
3127
- float: "#/$defs/ToolOutputFloat",
3128
- integer: "#/$defs/ToolOutputInteger",
3129
- text: "#/$defs/ToolOutputText",
4281
+ float: "#/$defs/IncomingToolOutputFloat",
4282
+ integer: "#/$defs/IncomingToolOutputInteger",
4283
+ text: "#/$defs/IncomingToolOutputText",
3130
4284
  },
3131
4285
  propertyName: "type",
3132
4286
  },
@@ -3138,16 +4292,16 @@ export const userToolSourceSchema = {
3138
4292
  $ref: "#/$defs/IncomingToolOutputCollection",
3139
4293
  },
3140
4294
  {
3141
- $ref: "#/$defs/ToolOutputText",
4295
+ $ref: "#/$defs/IncomingToolOutputText",
3142
4296
  },
3143
4297
  {
3144
- $ref: "#/$defs/ToolOutputInteger",
4298
+ $ref: "#/$defs/IncomingToolOutputInteger",
3145
4299
  },
3146
4300
  {
3147
- $ref: "#/$defs/ToolOutputFloat",
4301
+ $ref: "#/$defs/IncomingToolOutputFloat",
3148
4302
  },
3149
4303
  {
3150
- $ref: "#/$defs/ToolOutputBoolean",
4304
+ $ref: "#/$defs/IncomingToolOutputBoolean",
3151
4305
  },
3152
4306
  ],
3153
4307
  },
@@ -3189,12 +4343,12 @@ export const userToolSourceSchema = {
3189
4343
  },
3190
4344
  ],
3191
4345
  default: [],
3192
- description: "A list of requirements needed to execute this tool. These can be javascript expressions, resource requirements or container images.",
4346
+ description: "JavaScript helpers and compute resource requests needed to execute this tool.",
3193
4347
  title: "requirements",
3194
4348
  },
3195
4349
  shell_command: {
3196
- description: "A string that contains the command to be executed. Parameters can be referenced inside $().",
3197
- examples: ["head -n '$(inputs.n_lines)' '$(inputs.data_input.path)'"],
4350
+ description: "A string that contains the command to be executed. Reference inputs inside `$()` as `$(inputs.input_name)` for scalar values and `$(inputs.input_name.path)` for files; `${ ... }` evaluates a JavaScript function body that must return a value. Substituted values are not shell-quoted, so quote them yourself. Because `$(` and `${` are consumed by the expression evaluator, shell command substitution and braced parameter expansion do not reach the shell: escape them as `\\$(` and `\\${`, and prefer unbraced variables such as `$GALAXY_SLOTS`.",
4351
+ examples: ["head -n '$(inputs.num_lines)' '$(inputs.input_file.path)' > output.txt"],
3198
4352
  title: "shell_command",
3199
4353
  type: "string",
3200
4354
  },
@@ -3240,6 +4394,7 @@ export const userToolSourceSchema = {
3240
4394
  },
3241
4395
  ],
3242
4396
  default: null,
4397
+ description: "External registry identifiers, each with a registry `type` and identifier `value`.",
3243
4398
  title: "xrefs",
3244
4399
  },
3245
4400
  },