@galaxyproject/orbit 0.0.0 → 0.9.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 (451) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/LICENSE +21 -0
  3. package/README.md +760 -5
  4. package/bin/legacy-mcp-config.js +363 -0
  5. package/bin/orbit.js +810 -0
  6. package/bin/pi-extension-path.d.ts +4 -0
  7. package/bin/pi-extension-path.js +44 -0
  8. package/bin/provider-auth.d.ts +22 -0
  9. package/bin/provider-auth.js +77 -0
  10. package/bin/thinking-pref.js +38 -0
  11. package/bin/update-check.d.ts +15 -0
  12. package/bin/update-check.js +137 -0
  13. package/extensions/cli-update/index.ts +32 -0
  14. package/extensions/orbit/activity-hooks.ts +141 -0
  15. package/extensions/orbit/activity.ts +116 -0
  16. package/extensions/orbit/agent-dir.ts +11 -0
  17. package/extensions/orbit/auto-resume.ts +352 -0
  18. package/extensions/orbit/config.ts +3 -0
  19. package/extensions/orbit/confusables.ts +1 -0
  20. package/extensions/orbit/context.ts +957 -0
  21. package/extensions/orbit/dashboard-commands.ts +191 -0
  22. package/extensions/orbit/dashboard-store.ts +473 -0
  23. package/extensions/orbit/dashboard-tools.ts +1185 -0
  24. package/extensions/orbit/empty-completion.ts +99 -0
  25. package/extensions/orbit/evidence-gate.ts +1276 -0
  26. package/extensions/orbit/evidence-override-command.ts +294 -0
  27. package/extensions/orbit/exec-guard/bash-risk.ts +1408 -0
  28. package/extensions/orbit/exec-guard/gate.ts +181 -0
  29. package/extensions/orbit/exec-guard/guardian-config.ts +54 -0
  30. package/extensions/orbit/exec-guard/index.ts +1 -0
  31. package/extensions/orbit/exec-guard/model-tier.ts +36 -0
  32. package/extensions/orbit/exec-guard/path-jail.ts +54 -0
  33. package/extensions/orbit/exec-guard/policy.ts +342 -0
  34. package/extensions/orbit/exec-guard/runtime-state.ts +15 -0
  35. package/extensions/orbit/exec-guard/sensitive-read.ts +525 -0
  36. package/extensions/orbit/exec-guard/types.ts +42 -0
  37. package/extensions/orbit/execution-commands.ts +134 -0
  38. package/extensions/orbit/feedback-command.ts +81 -0
  39. package/extensions/orbit/feedback.ts +96 -0
  40. package/extensions/orbit/galaxy-api.test.ts +122 -0
  41. package/extensions/orbit/galaxy-api.ts +606 -0
  42. package/extensions/orbit/galaxy-artifact-link-guidance.ts +5 -0
  43. package/extensions/orbit/galaxy-destructive-gate.ts +113 -0
  44. package/extensions/orbit/galaxy-enrich.ts +1108 -0
  45. package/extensions/orbit/galaxy-failure.ts +101 -0
  46. package/extensions/orbit/galaxy-fixture.ts +126 -0
  47. package/extensions/orbit/galaxy-history-guard.ts +233 -0
  48. package/extensions/orbit/galaxy-job-block.ts +347 -0
  49. package/extensions/orbit/galaxy-job-ops.ts +288 -0
  50. package/extensions/orbit/galaxy-live-source.ts +929 -0
  51. package/extensions/orbit/galaxy-markdown-adapter.ts +248 -0
  52. package/extensions/orbit/galaxy-op-policy.ts +332 -0
  53. package/extensions/orbit/galaxy-ops-tools.ts +326 -0
  54. package/extensions/orbit/galaxy-output-store.ts +80 -0
  55. package/extensions/orbit/galaxy-output.ts +346 -0
  56. package/extensions/orbit/galaxy-page-binding.ts +222 -0
  57. package/extensions/orbit/galaxy-page-markdown-guidance.ts +15 -0
  58. package/extensions/orbit/galaxy-page-ops.ts +159 -0
  59. package/extensions/orbit/galaxy-page-sync.test.ts +417 -0
  60. package/extensions/orbit/galaxy-page-sync.ts +318 -0
  61. package/extensions/orbit/galaxy-pages-api.ts +203 -0
  62. package/extensions/orbit/galaxy-pages-sync.ts +409 -0
  63. package/extensions/orbit/galaxy-poll-guard.ts +189 -0
  64. package/extensions/orbit/galaxy-poller.ts +706 -0
  65. package/extensions/orbit/galaxy-provenance.ts +623 -0
  66. package/extensions/orbit/galaxy-reconcile.ts +956 -0
  67. package/extensions/orbit/galaxy-recovery.ts +176 -0
  68. package/extensions/orbit/galaxy-repeat-guard.ts +55 -0
  69. package/extensions/orbit/galaxy-submission-capture.ts +707 -0
  70. package/extensions/orbit/galaxy-submission.ts +502 -0
  71. package/extensions/orbit/galaxy-tool-source.ts +78 -0
  72. package/extensions/orbit/galaxy-tool-wrap.ts +234 -0
  73. package/extensions/orbit/galaxy-udt-block.ts +127 -0
  74. package/extensions/orbit/galaxy-upload-tus.ts +334 -0
  75. package/extensions/orbit/galaxy-upload.ts +300 -0
  76. package/extensions/orbit/galaxy-version-capture.ts +65 -0
  77. package/extensions/orbit/git.ts +173 -0
  78. package/extensions/orbit/harness-block-fields.ts +597 -0
  79. package/extensions/orbit/index.ts +593 -0
  80. package/extensions/orbit/init-gate.ts +284 -0
  81. package/extensions/orbit/instructions-command.ts +136 -0
  82. package/extensions/orbit/invocation-failure-hint.ts +57 -0
  83. package/extensions/orbit/iwc-plan-check.ts +94 -0
  84. package/extensions/orbit/lesson-command.ts +303 -0
  85. package/extensions/orbit/lesson-hint.ts +245 -0
  86. package/extensions/orbit/lesson-nudge.ts +106 -0
  87. package/extensions/orbit/lessons/compose.ts +177 -0
  88. package/extensions/orbit/lessons/counters.ts +120 -0
  89. package/extensions/orbit/lessons/enabled.ts +116 -0
  90. package/extensions/orbit/lessons/matcher.ts +346 -0
  91. package/extensions/orbit/lessons/paths.ts +286 -0
  92. package/extensions/orbit/lessons/pi-event-contract.ts +105 -0
  93. package/extensions/orbit/lessons/propose-replay.ts +103 -0
  94. package/extensions/orbit/lessons/propose-tool.ts +222 -0
  95. package/extensions/orbit/lessons/propose.ts +502 -0
  96. package/extensions/orbit/lessons/replay.ts +89 -0
  97. package/extensions/orbit/lessons/reproduction-index.ts +83 -0
  98. package/extensions/orbit/lessons/search-tool.ts +99 -0
  99. package/extensions/orbit/lessons/search.ts +136 -0
  100. package/extensions/orbit/lessons/store.ts +415 -0
  101. package/extensions/orbit/lessons/text.ts +36 -0
  102. package/extensions/orbit/lessons/types.ts +69 -0
  103. package/extensions/orbit/lessons/user-dir.ts +24 -0
  104. package/extensions/orbit/lessons/user-lesson.ts +88 -0
  105. package/extensions/orbit/lessons/wrapper.ts +61 -0
  106. package/extensions/orbit/lessons-command.ts +147 -0
  107. package/extensions/orbit/local-exec.ts +39 -0
  108. package/extensions/orbit/mcp-output.ts +179 -0
  109. package/extensions/orbit/mcp-servers.test.ts +24 -0
  110. package/extensions/orbit/mcp-servers.ts +25 -0
  111. package/extensions/orbit/model-script.ts +351 -0
  112. package/extensions/orbit/notebook-anchors.ts +342 -0
  113. package/extensions/orbit/notebook-writer.ts +863 -0
  114. package/extensions/orbit/observation-allowlists.ts +1109 -0
  115. package/extensions/orbit/observation-replay.ts +148 -0
  116. package/extensions/orbit/observation-triggers.ts +563 -0
  117. package/extensions/orbit/observation-ui.ts +175 -0
  118. package/extensions/orbit/observations-command.ts +421 -0
  119. package/extensions/orbit/observations-config.ts +200 -0
  120. package/extensions/orbit/observations.ts +1381 -0
  121. package/extensions/orbit/profiles.ts +270 -0
  122. package/extensions/orbit/progress-updates.ts +95 -0
  123. package/extensions/orbit/proposal-commands.ts +882 -0
  124. package/extensions/orbit/provenance-fs-file.ts +59 -0
  125. package/extensions/orbit/provenance-fs.ts +32 -0
  126. package/extensions/orbit/provenance-memory-fs.ts +59 -0
  127. package/extensions/orbit/record-store-file.ts +177 -0
  128. package/extensions/orbit/record-store-page.ts +77 -0
  129. package/extensions/orbit/record-store-seam.ts +47 -0
  130. package/extensions/orbit/record-store.ts +149 -0
  131. package/extensions/orbit/registry-carrier.ts +107 -0
  132. package/extensions/orbit/registry-eligibility.ts +95 -0
  133. package/extensions/orbit/registry-evaluation.ts +403 -0
  134. package/extensions/orbit/registry-evaluator.ts +519 -0
  135. package/extensions/orbit/registry-import.ts +91 -0
  136. package/extensions/orbit/registry-lock.ts +221 -0
  137. package/extensions/orbit/registry-memory-fs.ts +42 -0
  138. package/extensions/orbit/registry-page-carrier.ts +103 -0
  139. package/extensions/orbit/registry-proposal.ts +1348 -0
  140. package/extensions/orbit/registry-runtime.ts +234 -0
  141. package/extensions/orbit/registry-schema.ts +735 -0
  142. package/extensions/orbit/registry-submitter.ts +59 -0
  143. package/extensions/orbit/registry-templates.ts +346 -0
  144. package/extensions/orbit/registry.ts +476 -0
  145. package/extensions/orbit/sandbox/index.ts +120 -0
  146. package/extensions/orbit/sandbox/sandbox-bash.ts +93 -0
  147. package/extensions/orbit/sandbox/sandbox-config.ts +87 -0
  148. package/extensions/orbit/sandbox/sandbox-init-message.ts +28 -0
  149. package/extensions/orbit/secret-redaction.ts +247 -0
  150. package/extensions/orbit/session-index/cwd.ts +18 -0
  151. package/extensions/orbit/session-index/db.ts +56 -0
  152. package/extensions/orbit/session-index/indexer.ts +154 -0
  153. package/extensions/orbit/session-index/is-enabled.ts +17 -0
  154. package/extensions/orbit/session-index/parse.ts +254 -0
  155. package/extensions/orbit/session-index/query.ts +209 -0
  156. package/extensions/orbit/session-index/schema.ts +72 -0
  157. package/extensions/orbit/session-index/tools.ts +152 -0
  158. package/extensions/orbit/session-lifecycle.ts +321 -0
  159. package/extensions/orbit/skill-triggers.ts +159 -0
  160. package/extensions/orbit/skills-command.ts +48 -0
  161. package/extensions/orbit/skills-discovery.ts +435 -0
  162. package/extensions/orbit/skills.ts +84 -0
  163. package/extensions/orbit/sra-import-gate.ts +77 -0
  164. package/extensions/orbit/state.ts +265 -0
  165. package/extensions/orbit/submission-replay.ts +147 -0
  166. package/extensions/orbit/sync-command.ts +157 -0
  167. package/extensions/orbit/teams/critic-parser.ts +93 -0
  168. package/extensions/orbit/teams/dispatcher.ts +210 -0
  169. package/extensions/orbit/teams/is-enabled.ts +22 -0
  170. package/extensions/orbit/teams/tool.ts +187 -0
  171. package/extensions/orbit/teams/types.ts +57 -0
  172. package/extensions/orbit/teams/validate.ts +42 -0
  173. package/extensions/orbit/tester-id-command.ts +133 -0
  174. package/extensions/orbit/tools-sync.ts +279 -0
  175. package/extensions/orbit/tools.ts +1300 -0
  176. package/extensions/orbit/types.ts +41 -0
  177. package/extensions/orbit/ui-bridge.ts +55 -0
  178. package/extensions/orbit/ulid.ts +60 -0
  179. package/extensions/orbit/user-instructions.ts +388 -0
  180. package/extensions/orbit/vendor/skills/_catalog.json +68 -0
  181. package/extensions/orbit/vendor/skills/_manifest.json +1106 -0
  182. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/SKILL.md +112 -0
  183. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/_provenance.json +218 -0
  184. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/_required_tools.json +33 -0
  185. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/_verify.json +4 -0
  186. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/add.json +50 -0
  187. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/draft-extract.json +51 -0
  188. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/draft-next-step.json +42 -0
  189. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/draft-validate.json +140 -0
  190. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/list.json +32 -0
  191. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/notes/galaxy-tool-job-failure-reference.md +137 -0
  192. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/notes/open-requirements-ledger.md +173 -0
  193. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/schemas/galaxy-tool-summary.schema.json +175 -0
  194. package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/schemas/galaxy-workflow-draft.schema.json +2727 -0
  195. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/SKILL.md +82 -0
  196. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/_provenance.json +133 -0
  197. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/_required_tools.json +16 -0
  198. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/_verify.json +4 -0
  199. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/cli/draft-validate.json +140 -0
  200. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/notes/galaxy-workflow-draft-format.md +135 -0
  201. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/notes/open-requirements-ledger.md +173 -0
  202. package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/schemas/galaxy-workflow-draft.schema.json +2727 -0
  203. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/SKILL.md +84 -0
  204. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/_provenance.json +166 -0
  205. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/_verify.json +29 -0
  206. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/galaxy-workflow-testability-design.md +136 -0
  207. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
  208. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/iwc-test-data-conventions.md +308 -0
  209. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/planemo-asserts-idioms.md +246 -0
  210. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/planemo-workflow-test-architecture.md +151 -0
  211. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/schemas/galaxy-workflow-test-plan.schema.json +552 -0
  212. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/schemas/summary-galaxy-workflow.schema.json +687 -0
  213. package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/schemas/tests-format.schema.json +7328 -0
  214. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/SKILL.md +127 -0
  215. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/_provenance.json +198 -0
  216. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/_required_tools.json +16 -0
  217. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/_verify.json +4 -0
  218. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/cli/convert.json +123 -0
  219. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/galaxy-data-flow-draft-contract.md +129 -0
  220. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
  221. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/iwc-test-data-conventions.md +308 -0
  222. package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/open-requirements-ledger.md +173 -0
  223. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/SKILL.md +73 -0
  224. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/_provenance.json +160 -0
  225. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/_verify.json +4 -0
  226. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-collection-semantics.md +43 -0
  227. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-collection-semantics.yml +1250 -0
  228. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-tool-job-failure-reference.md +137 -0
  229. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-workflow-invocation-failure-reference.md +138 -0
  230. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
  231. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/nextflow-operators-to-galaxy-collection-recipes.md +98 -0
  232. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/planemo-asserts-idioms.md +246 -0
  233. package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/planemo-workflow-test-architecture.md +151 -0
  234. package/extensions/orbit/vendor/skills/discover-shed-tool/SKILL.md +174 -0
  235. package/extensions/orbit/vendor/skills/discover-shed-tool/_provenance.json +130 -0
  236. package/extensions/orbit/vendor/skills/discover-shed-tool/_required_tools.json +18 -0
  237. package/extensions/orbit/vendor/skills/discover-shed-tool/_verify.json +17 -0
  238. package/extensions/orbit/vendor/skills/discover-shed-tool/references/cli/tool-revisions.json +48 -0
  239. package/extensions/orbit/vendor/skills/discover-shed-tool/references/cli/tool-search.json +95 -0
  240. package/extensions/orbit/vendor/skills/discover-shed-tool/references/cli/tool-versions.json +39 -0
  241. package/extensions/orbit/vendor/skills/discover-shed-tool/references/notes/component-tool-shed-search.md +230 -0
  242. package/extensions/orbit/vendor/skills/discover-shed-tool/references/schemas/galaxy-tool-discovery.schema.json +231 -0
  243. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/SKILL.md +93 -0
  244. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/_provenance.json +201 -0
  245. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/_required_tools.json +28 -0
  246. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/_verify.json +17 -0
  247. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/cli/planemo.md +44 -0
  248. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/cli/validate-tests.json +40 -0
  249. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/galaxy-workflow-testability-design.md +136 -0
  250. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
  251. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/iwc-test-data-conventions.md +308 -0
  252. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/planemo-asserts-idioms.md +246 -0
  253. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/planemo-workflow-test-architecture.md +151 -0
  254. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/schemas/galaxy-workflow-test-plan.schema.json +552 -0
  255. package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/schemas/tests-format.schema.json +7328 -0
  256. package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/SKILL.md +81 -0
  257. package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/_provenance.json +93 -0
  258. package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/_verify.json +17 -0
  259. package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/references/notes/open-requirements-ledger.md +173 -0
  260. package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/references/schemas/summary-galaxy-workflow.schema.json +687 -0
  261. package/extensions/orbit/vendor/skills/pipeline-update-interview-to-galaxy/SKILL.md +81 -0
  262. package/extensions/orbit/vendor/skills/pipeline-update-interview-to-galaxy/_assembly.json +23 -0
  263. package/extensions/orbit/vendor/skills/run-workflow-test/SKILL.md +79 -0
  264. package/extensions/orbit/vendor/skills/run-workflow-test/_provenance.json +125 -0
  265. package/extensions/orbit/vendor/skills/run-workflow-test/_required_tools.json +28 -0
  266. package/extensions/orbit/vendor/skills/run-workflow-test/_verify.json +4 -0
  267. package/extensions/orbit/vendor/skills/run-workflow-test/references/cli/planemo.md +44 -0
  268. package/extensions/orbit/vendor/skills/run-workflow-test/references/cli/validate-tests.json +40 -0
  269. package/extensions/orbit/vendor/skills/run-workflow-test/references/notes/galaxy-workflow-invocation-failure-reference.md +138 -0
  270. package/extensions/orbit/vendor/skills/run-workflow-test/references/notes/planemo-asserts-idioms.md +246 -0
  271. package/extensions/orbit/vendor/skills/run-workflow-test/references/notes/planemo-workflow-test-architecture.md +151 -0
  272. package/extensions/orbit/vendor/skills/run-workflow-test/references/schemas/tests-format.schema.json +7328 -0
  273. package/extensions/orbit/vendor/skills/skills/LICENSE +21 -0
  274. package/extensions/orbit/vendor/skills/skills/collection-manipulation/README.md +39 -0
  275. package/extensions/orbit/vendor/skills/skills/collection-manipulation/SKILL.md +892 -0
  276. package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/api-patterns.md +927 -0
  277. package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/apply-rules.md +1482 -0
  278. package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/test-patterns.md +996 -0
  279. package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/tools.md +609 -0
  280. package/extensions/orbit/vendor/skills/skills/galaxy-data-libraries/SKILL.md +170 -0
  281. package/extensions/orbit/vendor/skills/skills/galaxy-integration/README.md +162 -0
  282. package/extensions/orbit/vendor/skills/skills/galaxy-integration/SKILL.md +99 -0
  283. package/extensions/orbit/vendor/skills/skills/galaxy-integration/examples/README.md +119 -0
  284. package/extensions/orbit/vendor/skills/skills/galaxy-integration/examples/tool-checking.md +419 -0
  285. package/extensions/orbit/vendor/skills/skills/galaxy-integration/examples/workflow-testing.md +617 -0
  286. package/extensions/orbit/vendor/skills/skills/galaxy-integration/galaxy-integration.md +614 -0
  287. package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/SKILL.md +144 -0
  288. package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/average_col3.ipynb +68 -0
  289. package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/extract_sample_metadata.ipynb +190 -0
  290. package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/variant_annotation.ipynb +816 -0
  291. package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/vcp_variant_map.ipynb +443 -0
  292. package/extensions/orbit/vendor/skills/skills/galaxy-integration/scripts/README.md +165 -0
  293. package/extensions/orbit/vendor/skills/skills/galaxy-integration/scripts/galaxy_tool_checker.py +521 -0
  294. package/extensions/orbit/vendor/skills/skills/galaxy-mcp-reference/SKILL.md +128 -0
  295. package/extensions/orbit/vendor/skills/skills/galaxy-mcp-reference/gotchas.md +135 -0
  296. package/extensions/orbit/vendor/skills/skills/galaxy-mcp-reference/history-access.md +132 -0
  297. package/extensions/orbit/vendor/skills/skills/reproduciblify/SKILL.md +146 -0
  298. package/extensions/orbit/vendor/skills/skills/reproduciblify/references/directives.yml +496 -0
  299. package/extensions/orbit/vendor/skills/skills/udt-authoring/SKILL.md +245 -0
  300. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/01-minimal-echo.yml +27 -0
  301. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/02-single-data-in-out.yml +27 -0
  302. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/03-multiple-data-js.yml +28 -0
  303. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/04-select-integer-boolean.yml +41 -0
  304. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/05-resource-requirements.yml +25 -0
  305. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/06-biocontainer-tool.yml +38 -0
  306. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/07-inline-python-script.yml +56 -0
  307. package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/08-configfile-script.yml +74 -0
  308. package/extensions/orbit/vendor/skills/skills/udt-authoring/references/common-mistakes.md +76 -0
  309. package/extensions/orbit/vendor/skills/skills/udt-authoring/references/schema-reference.md +155 -0
  310. package/extensions/orbit/vendor/skills/skills/udt-authoring/references/templating.md +196 -0
  311. package/extensions/orbit/vendor/skills/skills/udt-authoring/scripts/validate.py +109 -0
  312. package/extensions/orbit/vendor/skills/skills/workflow-reports/README.md +71 -0
  313. package/extensions/orbit/vendor/skills/skills/workflow-reports/SKILL.md +190 -0
  314. package/extensions/orbit/vendor/skills/skills/workflow-reports/examples/histology-staining.md +145 -0
  315. package/extensions/orbit/vendor/skills/skills/workflow-reports/examples/tissue-microarray-analysis.md +176 -0
  316. package/extensions/orbit/vendor/skills/skills/workflow-reports/references/directives.md +415 -0
  317. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/SKILL.md +98 -0
  318. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/_provenance.json +93 -0
  319. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/_required_tools.json +28 -0
  320. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/_verify.json +17 -0
  321. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/cli/convert.json +123 -0
  322. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/cli/foundry.md +25 -0
  323. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/cli/validate.json +142 -0
  324. package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/schemas/summary-galaxy-workflow.schema.json +687 -0
  325. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/SKILL.md +74 -0
  326. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/_provenance.json +71 -0
  327. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/_required_tools.json +16 -0
  328. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/_verify.json +4 -0
  329. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/references/cli/validate.json +142 -0
  330. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/references/notes/galaxy-workflow-invocation-failure-reference.md +138 -0
  331. package/extensions/orbit/vendor/skills/validate-galaxy-workflow/references/notes/galaxy-workflow-testability-design.md +136 -0
  332. package/extensions/orbit/vendor-skills.ts +283 -0
  333. package/extensions/orbit/workspace-state-dir.ts +46 -0
  334. package/extensions/orbit-handoff/index.ts +73 -0
  335. package/extensions/orbit-handoff/orbit-launcher.ts +142 -0
  336. package/extensions/whats-new/index.ts +98 -0
  337. package/lessons/LICENSE +17 -0
  338. package/lessons/README.md +117 -0
  339. package/lessons/SCHEMA.md +187 -0
  340. package/lessons/build-snapshot.mjs +311 -0
  341. package/lessons/data/downloaded-file-is-not-what-its-extension-says.md +61 -0
  342. package/lessons/galaxy-api/403-history-is-a-hard-stop.md +57 -0
  343. package/lessons/galaxy-api/collection-into-single-dataset-input.md +61 -0
  344. package/lessons/galaxy-api/connectedvalue-in-command-line.md +62 -0
  345. package/lessons/galaxy-api/hid-is-not-an-id.md +59 -0
  346. package/lessons/galaxy-api/invoke-workflow-inputs-not-params.md +60 -0
  347. package/lessons/galaxy-api/repeat-param-pipe-keys.md +63 -0
  348. package/lessons/galaxy-api/run-tool-returns-on-submit.md +61 -0
  349. package/lessons/galaxy-tools/reference-index-not-on-server.md +62 -0
  350. package/lessons/log.md +42 -0
  351. package/lessons/reproduction/input-population-mismatch.md +59 -0
  352. package/lessons/reproduction/methods-text-vs-executed-parameters.md +62 -0
  353. package/lessons/snapshot.json +1004 -0
  354. package/lessons/stats/de-contrast-direction-and-sample-labels.md +63 -0
  355. package/lessons/stats/na-coerced-to-zero-in-filters.md +59 -0
  356. package/lessons/validate.mjs +1219 -0
  357. package/package.json +103 -5
  358. package/shared/agent-prompt.d.ts +8 -0
  359. package/shared/agent-prompt.js +15 -0
  360. package/shared/approval-prompt.d.ts +4 -0
  361. package/shared/approval-prompt.js +61 -0
  362. package/shared/brain-env.d.ts +14 -0
  363. package/shared/brain-env.js +108 -0
  364. package/shared/brain-exit.d.ts +20 -0
  365. package/shared/brain-exit.js +149 -0
  366. package/shared/capability-profile.d.ts +16 -0
  367. package/shared/capability-profile.js +75 -0
  368. package/shared/config-source.d.ts +13 -0
  369. package/shared/config-source.js +17 -0
  370. package/shared/confusables.d.ts +3 -0
  371. package/shared/confusables.js +93 -0
  372. package/shared/custom-provider.d.ts +45 -0
  373. package/shared/custom-provider.js +169 -0
  374. package/shared/dashboard-contract.d.ts +123 -0
  375. package/shared/dashboard-contract.js +560 -0
  376. package/shared/dashboard-layout-store.d.ts +44 -0
  377. package/shared/dashboard-layout-store.js +281 -0
  378. package/shared/feedback-contract.d.ts +61 -0
  379. package/shared/feedback-contract.js +146 -0
  380. package/shared/galaxy-artifact-links.d.ts +30 -0
  381. package/shared/galaxy-artifact-links.js +166 -0
  382. package/shared/galaxy-credentials.d.ts +26 -0
  383. package/shared/galaxy-credentials.js +71 -0
  384. package/shared/galaxy-destructive.d.ts +21 -0
  385. package/shared/galaxy-destructive.js +269 -0
  386. package/shared/galaxy-guidance.d.ts +2 -0
  387. package/shared/galaxy-guidance.js +53 -0
  388. package/shared/galaxy-live-contract.d.ts +92 -0
  389. package/shared/galaxy-live-contract.js +180 -0
  390. package/shared/galaxy-page-cells.d.ts +2 -0
  391. package/shared/galaxy-page-cells.js +22 -0
  392. package/shared/galaxy-tool-family.d.ts +5 -0
  393. package/shared/galaxy-tool-family.js +27 -0
  394. package/shared/galaxy-url.d.ts +1 -0
  395. package/shared/galaxy-url.js +48 -0
  396. package/shared/gtn.d.ts +31 -0
  397. package/shared/gtn.js +253 -0
  398. package/shared/handled-prompt.d.ts +3 -0
  399. package/shared/handled-prompt.js +26 -0
  400. package/shared/known-provider.d.ts +11 -0
  401. package/shared/known-provider.js +89 -0
  402. package/shared/lesson-hint-marker.d.ts +7 -0
  403. package/shared/lesson-hint-marker.js +32 -0
  404. package/shared/lesson-rules.d.ts +150 -0
  405. package/shared/lesson-rules.js +203 -0
  406. package/shared/malformed-object-ids.d.ts +1 -0
  407. package/shared/malformed-object-ids.js +37 -0
  408. package/shared/markdown-sections.d.ts +10 -0
  409. package/shared/markdown-sections.js +118 -0
  410. package/shared/notebook-fences.d.ts +12 -0
  411. package/shared/notebook-fences.js +53 -0
  412. package/shared/observation-contract.d.ts +91 -0
  413. package/shared/observation-contract.js +544 -0
  414. package/shared/orbit-config.d.ts +226 -0
  415. package/shared/orbit-config.js +189 -0
  416. package/shared/orbit-env.d.ts +13 -0
  417. package/shared/orbit-env.js +124 -0
  418. package/shared/orbit-shell-contract.d.ts +74 -0
  419. package/shared/orbit-shell-contract.js +30 -0
  420. package/shared/page-content-hash.d.ts +1 -0
  421. package/shared/page-content-hash.js +13 -0
  422. package/shared/pi-default-model.d.ts +7 -0
  423. package/shared/pi-default-model.js +41 -0
  424. package/shared/prompt-blocks.d.ts +87 -0
  425. package/shared/prompt-blocks.js +898 -0
  426. package/shared/provider-auth-caps.d.ts +22 -0
  427. package/shared/provider-auth-caps.js +57 -0
  428. package/shared/random.d.ts +2 -0
  429. package/shared/random.js +15 -0
  430. package/shared/record-excerpt.d.ts +4 -0
  431. package/shared/record-excerpt.js +16 -0
  432. package/shared/redirect-guard.d.ts +36 -0
  433. package/shared/redirect-guard.js +235 -0
  434. package/shared/skills-pin.d.ts +8 -0
  435. package/shared/skills-pin.js +9 -0
  436. package/shared/skills-router.d.ts +17 -0
  437. package/shared/skills-router.js +63 -0
  438. package/shared/sra-import.d.ts +34 -0
  439. package/shared/sra-import.js +206 -0
  440. package/shared/state-dir.d.ts +21 -0
  441. package/shared/state-dir.js +240 -0
  442. package/shared/team-dispatch-contract.d.ts +28 -0
  443. package/shared/team-dispatch-contract.js +1 -0
  444. package/shared/truncate-middle.d.ts +11 -0
  445. package/shared/truncate-middle.js +68 -0
  446. package/shared/version-compare.d.ts +10 -0
  447. package/shared/version-compare.js +74 -0
  448. package/shared/whats-new.d.ts +31 -0
  449. package/shared/whats-new.js +83 -0
  450. package/shared/wsl.d.ts +10 -0
  451. package/shared/wsl.js +24 -0
@@ -0,0 +1,927 @@
1
+ # Galaxy Tools API Research
2
+
3
+ ## Context
4
+
5
+ This document describes the Galaxy Tools API and demonstrates how to invoke collection operation tools programmatically. Per project goals, **Claude should recommend using Galaxy's native collection operation tools through the API** rather than implementing custom collection manipulation logic, ensuring reproducibility and workflow compatibility.
6
+
7
+ ## API Endpoint
8
+
9
+ **Primary tool execution endpoint:** `POST /api/tools`
10
+
11
+ ## Tool Invocation Structure
12
+
13
+ ### Basic Payload Format
14
+
15
+ ```python
16
+ {
17
+ "tool_id": "tool_identifier",
18
+ "inputs": {
19
+ # JSON-encoded tool inputs
20
+ },
21
+ "history_id": "history_id_string"
22
+ }
23
+ ```
24
+
25
+ ### Complete Payload Options
26
+
27
+ ```python
28
+ {
29
+ "tool_id": "tool_identifier", # Required (unless tool_uuid provided)
30
+ "tool_uuid": "uuid", # Alternative to tool_id
31
+ "tool_version": "1.0.0", # Optional: specify tool version
32
+ "inputs": { # Required: tool-specific parameters
33
+ # ... input parameters ...
34
+ },
35
+ "history_id": "history_id_string", # Required: target history
36
+ "input_format": "legacy", # Optional: "legacy" (default) or "21.01"
37
+ "use_cached_job": false, # Optional: reuse existing job results
38
+ "__tags": ["#tag1", "#tag2"] # Optional: tags to apply to outputs
39
+ }
40
+ ```
41
+
42
+ **Key Point:** The `inputs` field is JSON-encoded when sent via API (as a string), but the structure is a nested dictionary.
43
+
44
+ ## Collection Input Formats
45
+
46
+ ### Dataset Collection Input Structure
47
+
48
+ Collections are referenced using a source/ID structure:
49
+
50
+ ```python
51
+ {
52
+ "src": "hdca", # History Dataset Collection Association
53
+ "id": "collection_id_string"
54
+ }
55
+ ```
56
+
57
+ ### Single Dataset Input
58
+
59
+ ```python
60
+ {
61
+ "src": "hda", # History Dataset Association
62
+ "id": "dataset_id_string"
63
+ }
64
+ ```
65
+
66
+ ### Example: Simple Collection Input
67
+
68
+ ```python
69
+ inputs = {
70
+ "input": {
71
+ "src": "hdca",
72
+ "id": "f2db41e1fa331b3e"
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## Collection Operation Tool Examples
78
+
79
+ ### 1. Unzip Collection (`__UNZIP_COLLECTION__`)
80
+
81
+ **Purpose:** Split paired collection into forward/reverse lists
82
+
83
+ ```python
84
+ payload = {
85
+ "tool_id": "__UNZIP_COLLECTION__",
86
+ "history_id": "abc123",
87
+ "inputs": {
88
+ "input": {
89
+ "src": "hdca",
90
+ "id": "paired_collection_id"
91
+ }
92
+ }
93
+ }
94
+
95
+ response = requests.post(f"{galaxy_url}/api/tools", json=payload, headers=headers)
96
+ ```
97
+
98
+ **Response Structure:**
99
+ ```python
100
+ {
101
+ "outputs": [
102
+ {
103
+ "id": "forward_collection_id",
104
+ "name": "forward",
105
+ # ... dataset details
106
+ },
107
+ {
108
+ "id": "reverse_collection_id",
109
+ "name": "reverse",
110
+ # ... dataset details
111
+ }
112
+ ],
113
+ "jobs": [
114
+ {
115
+ "id": "job_id",
116
+ # ... job details
117
+ }
118
+ ]
119
+ }
120
+ ```
121
+
122
+ ---
123
+
124
+ ### 2. Zip Collections (`__ZIP_COLLECTION__`)
125
+
126
+ **Purpose:** Combine two datasets/collections into paired collection
127
+
128
+ ```python
129
+ payload = {
130
+ "tool_id": "__ZIP_COLLECTION__",
131
+ "history_id": "abc123",
132
+ "inputs": {
133
+ "input_forward": {
134
+ "src": "hda", # or "hdca" for collection
135
+ "id": "forward_dataset_id"
136
+ },
137
+ "input_reverse": {
138
+ "src": "hda", # or "hdca" for collection
139
+ "id": "reverse_dataset_id"
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ **Response Structure:**
146
+ ```python
147
+ {
148
+ "output_collections": [
149
+ {
150
+ "id": "paired_collection_id",
151
+ "hid": 5,
152
+ "collection_type": "paired",
153
+ # ... collection details
154
+ }
155
+ ],
156
+ "jobs": [ ... ]
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ### 3. Filter Collection (`__FILTER_FROM_FILE__`)
163
+
164
+ **Purpose:** Filter collection elements using identifier file
165
+
166
+ ```python
167
+ payload = {
168
+ "tool_id": "__FILTER_FROM_FILE__",
169
+ "history_id": "abc123",
170
+ "inputs": {
171
+ "input": {
172
+ "src": "hdca",
173
+ "id": "collection_id"
174
+ },
175
+ "how": {
176
+ "how_filter": "remove_if_absent", # or "remove_if_present"
177
+ "filter_source": {
178
+ "src": "hda",
179
+ "id": "identifier_file_id"
180
+ }
181
+ }
182
+ }
183
+ }
184
+ ```
185
+
186
+ **Response Structure:**
187
+ ```python
188
+ {
189
+ "output_collections": [
190
+ {
191
+ "name": "output_filtered",
192
+ # ... filtered collection
193
+ },
194
+ {
195
+ "name": "output_discarded",
196
+ # ... discarded elements
197
+ }
198
+ ],
199
+ "jobs": [ ... ]
200
+ }
201
+ ```
202
+
203
+ ---
204
+
205
+ ### 4. Flatten Collection (`__FLATTEN__`)
206
+
207
+ **Purpose:** Flatten nested collection to simple list
208
+
209
+ ```python
210
+ payload = {
211
+ "tool_id": "__FLATTEN__",
212
+ "history_id": "abc123",
213
+ "inputs": {
214
+ "input": {
215
+ "src": "hdca",
216
+ "id": "nested_collection_id"
217
+ },
218
+ "join_identifier": "_" # String to join identifier levels
219
+ }
220
+ }
221
+ ```
222
+
223
+ ---
224
+
225
+ ### 5. Relabel Identifiers (`__RELABEL_FROM_FILE__`)
226
+
227
+ **Purpose:** Rename collection elements using mapping file
228
+
229
+ ```python
230
+ payload = {
231
+ "tool_id": "__RELABEL_FROM_FILE__",
232
+ "history_id": "abc123",
233
+ "inputs": {
234
+ "input": {
235
+ "src": "hdca",
236
+ "id": "collection_id"
237
+ },
238
+ "how": {
239
+ "how_select": "tabular", # or "txt" or "tabular_extended"
240
+ "labels": {
241
+ "src": "hda",
242
+ "id": "mapping_file_id"
243
+ },
244
+ "strict": False # Optional: enforce exact matching
245
+ }
246
+ }
247
+ }
248
+ ```
249
+
250
+ ---
251
+
252
+ ### 6. Sort Collection (`__SORTLIST__`)
253
+
254
+ **Purpose:** Sort collection elements
255
+
256
+ ```python
257
+ payload = {
258
+ "tool_id": "__SORTLIST__",
259
+ "history_id": "abc123",
260
+ "inputs": {
261
+ "input": {
262
+ "src": "hdca",
263
+ "id": "collection_id"
264
+ },
265
+ "sort_type": {
266
+ "sort_type": "alpha" # or "numeric" or "file"
267
+ # If "file":
268
+ # "sort_file": {"src": "hda", "id": "sort_order_file_id"}
269
+ }
270
+ }
271
+ }
272
+ ```
273
+
274
+ ---
275
+
276
+ ### 7. Merge Collections (`__MERGE_COLLECTION__`)
277
+
278
+ **Purpose:** Merge multiple collections into one
279
+
280
+ ```python
281
+ payload = {
282
+ "tool_id": "__MERGE_COLLECTION__",
283
+ "history_id": "abc123",
284
+ "inputs": {
285
+ "inputs_0|input": {
286
+ "src": "hdca",
287
+ "id": "collection1_id"
288
+ },
289
+ "inputs_1|input": {
290
+ "src": "hdca",
291
+ "id": "collection2_id"
292
+ },
293
+ "advanced": {
294
+ "conflict": {
295
+ "duplicate_options": "keep_first", # or other options
296
+ "suffix_pattern": "_#" # for suffix modes
297
+ }
298
+ }
299
+ }
300
+ }
301
+ ```
302
+
303
+ ---
304
+
305
+ ### 8. Build List (`__BUILD_LIST__`)
306
+
307
+ **Purpose:** Build list collection from datasets
308
+
309
+ ```python
310
+ payload = {
311
+ "tool_id": "__BUILD_LIST__",
312
+ "history_id": "abc123",
313
+ "inputs": {
314
+ "datasets_0|input": {
315
+ "src": "hda",
316
+ "id": "dataset1_id"
317
+ },
318
+ "datasets_1|input": {
319
+ "src": "hda",
320
+ "id": "dataset2_id"
321
+ }
322
+ }
323
+ }
324
+ ```
325
+
326
+ ---
327
+
328
+ ### 9. Extract Dataset (`__EXTRACT_DATASET__`)
329
+
330
+ **Purpose:** Extract single dataset from collection
331
+
332
+ ```python
333
+ payload = {
334
+ "tool_id": "__EXTRACT_DATASET__",
335
+ "history_id": "abc123",
336
+ "inputs": {
337
+ "input": {
338
+ "src": "hdca",
339
+ "id": "collection_id"
340
+ },
341
+ "which": {
342
+ "which_dataset": "by_identifier", # or "first" or "by_index"
343
+ "identifier": "element_name" # if by_identifier
344
+ # "index": 0 # if by_index
345
+ }
346
+ }
347
+ }
348
+ ```
349
+
350
+ ---
351
+
352
+ ### 10. Filter Empty/Failed Datasets
353
+
354
+ **Filter Empty:**
355
+ ```python
356
+ payload = {
357
+ "tool_id": "__FILTER_EMPTY_DATASETS__",
358
+ "history_id": "abc123",
359
+ "inputs": {
360
+ "input": {
361
+ "src": "hdca",
362
+ "id": "collection_id"
363
+ }
364
+ }
365
+ }
366
+ ```
367
+
368
+ **Filter Failed:**
369
+ ```python
370
+ payload = {
371
+ "tool_id": "__FILTER_FAILED_DATASETS__",
372
+ "history_id": "abc123",
373
+ "inputs": {
374
+ "input": {
375
+ "src": "hdca",
376
+ "id": "collection_id"
377
+ },
378
+ "replacement": { # Optional
379
+ "src": "hda",
380
+ "id": "replacement_dataset_id"
381
+ }
382
+ }
383
+ }
384
+ ```
385
+
386
+ ---
387
+
388
+ ### 11. Apply Rules (`__APPLY_RULES__`)
389
+
390
+ **Purpose:** Advanced collection restructuring
391
+
392
+ ```python
393
+ payload = {
394
+ "tool_id": "__APPLY_RULES__",
395
+ "history_id": "abc123",
396
+ "inputs": {
397
+ "input": {
398
+ "src": "hdca",
399
+ "id": "collection_id"
400
+ },
401
+ "rules": {
402
+ # Complex rules structure (JSON rule definition)
403
+ # See references/apply-rules.md for rule builder syntax
404
+ }
405
+ }
406
+ }
407
+ ```
408
+
409
+ **Note:** Apply Rules typically requires interactive rule building. Rules can be exported as JSON and reused programmatically.
410
+
411
+ ---
412
+
413
+ ## Advanced Collection Operations
414
+
415
+ ### Map-Over Behavior (Batch Processing)
416
+
417
+ When tools process collections element-by-element, use the batch flag:
418
+
419
+ ```python
420
+ inputs = {
421
+ "input1": {
422
+ "batch": True,
423
+ "values": [
424
+ {
425
+ "src": "hdca",
426
+ "id": "collection_id"
427
+ }
428
+ ]
429
+ }
430
+ }
431
+ ```
432
+
433
+ **Result:** Tool runs once per collection element, creating implicit output collection.
434
+
435
+ ---
436
+
437
+ ### Map-Over Multiple Collections (Linked)
438
+
439
+ Process two collections together, element-by-element:
440
+
441
+ ```python
442
+ inputs = {
443
+ "input1": {
444
+ "batch": True,
445
+ "values": [
446
+ {"src": "hdca", "id": "collection1_id"}
447
+ ]
448
+ },
449
+ "input2": {
450
+ "batch": True,
451
+ "values": [
452
+ {"src": "hdca", "id": "collection2_id"}
453
+ ]
454
+ }
455
+ }
456
+ ```
457
+
458
+ **Result:** Corresponding elements processed together (forward with forward, reverse with reverse).
459
+
460
+ ---
461
+
462
+ ### Map-Over Multiple Collections (Unlinked)
463
+
464
+ Process all combinations of elements from two collections:
465
+
466
+ ```python
467
+ inputs = {
468
+ "input1": {
469
+ "batch": True,
470
+ "linked": False,
471
+ "values": [
472
+ {"src": "hdca", "id": "collection1_id"}
473
+ ]
474
+ },
475
+ "input2": {
476
+ "batch": True,
477
+ "linked": False,
478
+ "values": [
479
+ {"src": "hdca", "id": "collection2_id"}
480
+ ]
481
+ }
482
+ }
483
+ ```
484
+
485
+ **Result:** Cartesian product - all pairs processed (collection1[0] with collection2[0], collection1[0] with collection2[1], etc.).
486
+
487
+ **Alternative:** Use `__CROSS_PRODUCT_FLAT__` tool for explicit all-vs-all comparisons.
488
+
489
+ ---
490
+
491
+ ### Map-Over Nested Collections
492
+
493
+ For nested collections (e.g., list:paired), specify which level to map over:
494
+
495
+ ```python
496
+ inputs = {
497
+ "input": {
498
+ "batch": True,
499
+ "values": [
500
+ {
501
+ "src": "hdca",
502
+ "map_over_type": "paired", # Map over paired level
503
+ "id": "nested_collection_id"
504
+ }
505
+ ]
506
+ }
507
+ }
508
+ ```
509
+
510
+ ---
511
+
512
+ ## Response Structure
513
+
514
+ ### Successful Tool Execution
515
+
516
+ ```python
517
+ {
518
+ "id": "invocation_id",
519
+ "model_class": "WorkflowInvocation",
520
+ "outputs": [
521
+ {
522
+ "id": "output_dataset_id",
523
+ "hid": 10,
524
+ "name": "Output name",
525
+ "history_id": "abc123",
526
+ # ... dataset details
527
+ }
528
+ ],
529
+ "output_collections": [
530
+ {
531
+ "id": "output_collection_id",
532
+ "hid": 11,
533
+ "name": "Collection name",
534
+ "collection_type": "list",
535
+ "history_id": "abc123",
536
+ # ... collection details
537
+ }
538
+ ],
539
+ "jobs": [
540
+ {
541
+ "id": "job_id",
542
+ "tool_id": "tool_id",
543
+ "state": "new",
544
+ # ... job details
545
+ }
546
+ ],
547
+ "implicit_collections": [
548
+ {
549
+ "id": "implicit_collection_id",
550
+ "hid": 12,
551
+ "name": "Implicit collection name",
552
+ # ... created by map-over operations
553
+ }
554
+ ]
555
+ }
556
+ ```
557
+
558
+ ### Key Response Fields
559
+
560
+ - **`outputs`**: Individual dataset outputs
561
+ - **`output_collections`**: Explicitly created collection outputs
562
+ - **`jobs`**: Job records for execution tracking
563
+ - **`implicit_collections`**: Collections created by map-over/batch operations
564
+
565
+ ---
566
+
567
+ ## Error Handling
568
+
569
+ ### Common Error Responses
570
+
571
+ **Permission Denied:**
572
+ ```python
573
+ {
574
+ "err_msg": "User does not have permission to access dataset.",
575
+ "err_code": 403003
576
+ }
577
+ ```
578
+
579
+ **Invalid Parameters:**
580
+ ```python
581
+ {
582
+ "err_msg": "Tool parameter validation failed.",
583
+ "err_code": 400001
584
+ }
585
+ ```
586
+
587
+ **Tool Not Found:**
588
+ ```python
589
+ {
590
+ "err_msg": "Tool not found: tool_id",
591
+ "err_code": 404001
592
+ }
593
+ ```
594
+
595
+ ---
596
+
597
+ ## Input Format Versions
598
+
599
+ ### Legacy Format (Default)
600
+
601
+ Inputs nested in conditionals/repeats use pipe notation:
602
+
603
+ ```python
604
+ {
605
+ "conditional_name|input_name": value,
606
+ "repeat_0|input_name": value,
607
+ "repeat_1|input_name": value
608
+ }
609
+ ```
610
+
611
+ ### 21.01 Format
612
+
613
+ Inputs nested in conditionals/repeats are nested objects:
614
+
615
+ ```python
616
+ {
617
+ "conditional_name": {
618
+ "input_name": value
619
+ },
620
+ "repeat": [
621
+ {"input_name": value},
622
+ {"input_name": value}
623
+ ]
624
+ }
625
+ ```
626
+
627
+ Specify format in payload:
628
+ ```python
629
+ {
630
+ "input_format": "21.01",
631
+ # ...
632
+ }
633
+ ```
634
+
635
+ ---
636
+
637
+ ## Best Practices for API-Based Collection Operations
638
+
639
+ ### 1. Always Use Collection Operation Tools
640
+
641
+ **Don't do this:**
642
+ ```python
643
+ # Fetch collection metadata via API
644
+ collection = get_collection_details(collection_id)
645
+
646
+ # Manipulate in Python
647
+ filtered_elements = [e for e in collection["elements"] if condition(e)]
648
+
649
+ # Create new collection via API
650
+ create_new_collection(filtered_elements)
651
+ ```
652
+
653
+ **Do this:**
654
+ ```python
655
+ # Use Filter from File tool
656
+ create_identifier_file(identifiers_to_keep)
657
+ payload = {
658
+ "tool_id": "__FILTER_FROM_FILE__",
659
+ "inputs": {
660
+ "input": {"src": "hdca", "id": collection_id},
661
+ "how": {
662
+ "how_filter": "remove_if_absent",
663
+ "filter_source": {"src": "hda", "id": identifier_file_id}
664
+ }
665
+ }
666
+ }
667
+ ```
668
+
669
+ **Why:** Tool-based operations are:
670
+ - Reproducible (captured in history)
671
+ - Workflow-compatible (can be extracted)
672
+ - Tested and validated
673
+ - Properly handle edge cases
674
+
675
+ ---
676
+
677
+ ### 2. Chain Operations Through History
678
+
679
+ Operations naturally flow through history:
680
+
681
+ ```python
682
+ # Step 1: Filter collection
683
+ filter_result = execute_tool("__FILTER_FROM_FILE__", ...)
684
+ filtered_collection_id = filter_result["output_collections"][0]["id"]
685
+
686
+ # Step 2: Sort filtered collection
687
+ sort_result = execute_tool("__SORTLIST__", {
688
+ "input": {"src": "hdca", "id": filtered_collection_id},
689
+ # ...
690
+ })
691
+ ```
692
+
693
+ **Benefit:** Complete audit trail in Galaxy history.
694
+
695
+ ---
696
+
697
+ ### 3. Wait for Job Completion
698
+
699
+ Jobs execute asynchronously. Poll job status:
700
+
701
+ ```python
702
+ def wait_for_job(job_id):
703
+ while True:
704
+ response = requests.get(f"{galaxy_url}/api/jobs/{job_id}")
705
+ job = response.json()
706
+ if job["state"] in ["ok", "error"]:
707
+ return job
708
+ time.sleep(2)
709
+
710
+ result = execute_tool(...)
711
+ for job in result["jobs"]:
712
+ wait_for_job(job["id"])
713
+ ```
714
+
715
+ ---
716
+
717
+ ### 4. Use Appropriate Tools for Operations
718
+
719
+ **Filtering:**
720
+ - Simple: `__FILTER_EMPTY_DATASETS__`, `__FILTER_FAILED_DATASETS__`
721
+ - By identifiers: `__FILTER_FROM_FILE__`
722
+ - Single element: `__EXTRACT_DATASET__`
723
+
724
+ **Restructuring:**
725
+ - Flatten: `__FLATTEN__`
726
+ - Nest: `__NEST__`
727
+ - Zip/Unzip: `__ZIP_COLLECTION__`, `__UNZIP_COLLECTION__`
728
+ - Complex: `__APPLY_RULES__`
729
+
730
+ **Organization:**
731
+ - Rename: `__RELABEL_FROM_FILE__`
732
+ - Sort: `__SORTLIST__`
733
+ - Merge: `__MERGE_COLLECTION__`
734
+
735
+ ---
736
+
737
+ ### 5. Leverage Map-Over for Batch Processing
738
+
739
+ Instead of iterating in code:
740
+
741
+ ```python
742
+ # Process collection elements automatically
743
+ payload = {
744
+ "tool_id": "analysis_tool",
745
+ "inputs": {
746
+ "input": {
747
+ "batch": True,
748
+ "values": [{"src": "hdca", "id": collection_id}]
749
+ }
750
+ }
751
+ }
752
+ ```
753
+
754
+ Galaxy handles parallelization and creates output collection automatically.
755
+
756
+ ---
757
+
758
+ ## Complete Example: Multi-Step Collection Pipeline
759
+
760
+ ```python
761
+ import requests
762
+ import time
763
+
764
+ galaxy_url = "https://usegalaxy.org"
765
+ api_key = "your_api_key"
766
+ headers = {"x-api-key": api_key}
767
+
768
+ def execute_tool(tool_id, history_id, inputs):
769
+ """Execute tool and wait for completion"""
770
+ payload = {
771
+ "tool_id": tool_id,
772
+ "history_id": history_id,
773
+ "inputs": inputs
774
+ }
775
+ response = requests.post(
776
+ f"{galaxy_url}/api/tools",
777
+ json=payload,
778
+ headers=headers
779
+ )
780
+ result = response.json()
781
+
782
+ # Wait for jobs
783
+ for job in result["jobs"]:
784
+ wait_for_job(job["id"])
785
+
786
+ return result
787
+
788
+ def wait_for_job(job_id):
789
+ """Poll job until complete"""
790
+ while True:
791
+ response = requests.get(
792
+ f"{galaxy_url}/api/jobs/{job_id}",
793
+ headers=headers
794
+ )
795
+ job = response.json()
796
+ if job["state"] == "ok":
797
+ return True
798
+ elif job["state"] == "error":
799
+ raise Exception(f"Job {job_id} failed")
800
+ time.sleep(2)
801
+
802
+ # Pipeline: Filter → Sort → Relabel
803
+ history_id = "abc123"
804
+ collection_id = "original_collection"
805
+
806
+ # Step 1: Filter failed datasets
807
+ result1 = execute_tool(
808
+ "__FILTER_FAILED_DATASETS__",
809
+ history_id,
810
+ {"input": {"src": "hdca", "id": collection_id}}
811
+ )
812
+ filtered_id = result1["output_collections"][0]["id"]
813
+
814
+ # Step 2: Sort alphabetically
815
+ result2 = execute_tool(
816
+ "__SORTLIST__",
817
+ history_id,
818
+ {
819
+ "input": {"src": "hdca", "id": filtered_id},
820
+ "sort_type": {"sort_type": "alpha"}
821
+ }
822
+ )
823
+ sorted_id = result2["output_collections"][0]["id"]
824
+
825
+ # Step 3: Relabel with mapping file
826
+ mapping_file_id = "uploaded_mapping_file"
827
+ result3 = execute_tool(
828
+ "__RELABEL_FROM_FILE__",
829
+ history_id,
830
+ {
831
+ "input": {"src": "hdca", "id": sorted_id},
832
+ "how": {
833
+ "how_select": "tabular",
834
+ "labels": {"src": "hda", "id": mapping_file_id}
835
+ }
836
+ }
837
+ )
838
+
839
+ final_collection_id = result3["output_collections"][0]["id"]
840
+ print(f"Pipeline complete. Final collection: {final_collection_id}")
841
+ ```
842
+
843
+ ---
844
+
845
+ ## Why API Tool Invocation Over Direct Manipulation
846
+
847
+ ### Reproducibility
848
+
849
+ **Direct API manipulation:**
850
+ - Operations lost after execution
851
+ - Cannot recreate analysis
852
+ - No audit trail
853
+
854
+ **Tool-based approach:**
855
+ - All operations in history
856
+ - Complete provenance tracking
857
+ - Re-executable
858
+
859
+ ### Workflow Compatibility
860
+
861
+ **Direct API manipulation:**
862
+ - Cannot extract to workflow
863
+ - Not shareable
864
+
865
+ **Tool-based approach:**
866
+ - Workflow-extractable
867
+ - Shareable with community
868
+ - Published methods remain executable
869
+
870
+ ### Reliability
871
+
872
+ **Direct API manipulation:**
873
+ - Custom logic may have bugs
874
+ - Edge cases not handled
875
+ - No validation
876
+
877
+ **Tool-based approach:**
878
+ - Tested and validated
879
+ - Handles edge cases
880
+ - Built-in validation
881
+
882
+ ---
883
+
884
+ ## Summary: The Galaxy API Way
885
+
886
+ When working with collections via API:
887
+
888
+ 1. **Identify the operation needed** (filter, sort, merge, etc.)
889
+ 2. **Select appropriate collection operation tool** (see `references/tools.md`)
890
+ 3. **Construct tool payload** with collection references
891
+ 4. **Execute via POST /api/tools**
892
+ 5. **Use output collection ID** for next operation
893
+
894
+ **Result:** Reproducible, workflow-compatible, shareable collection operations that align with Galaxy best practices.
895
+
896
+ ---
897
+
898
+ ## Additional Resources
899
+
900
+ - **Tool Catalog:** See `references/tools.md` for complete list of collection operation tools
901
+ - **Apply Rules DSL:** See `references/apply-rules.md` for rule builder syntax
902
+ - **Galaxy API Documentation:** https://docs.galaxyproject.org/en/master/api_doc.html
903
+ - **BioBlend Library:** https://bioblend.readthedocs.io/ (Python wrapper for Galaxy API)
904
+
905
+ ---
906
+
907
+ ## Quick Reference: Common Tool IDs
908
+
909
+ | Operation | Tool ID |
910
+ |-----------|---------|
911
+ | Filter by file | `__FILTER_FROM_FILE__` |
912
+ | Filter empty | `__FILTER_EMPTY_DATASETS__` |
913
+ | Filter failed | `__FILTER_FAILED_DATASETS__` |
914
+ | Keep success | `__KEEP_SUCCESS_DATASETS__` |
915
+ | Extract dataset | `__EXTRACT_DATASET__` |
916
+ | Flatten | `__FLATTEN__` |
917
+ | Zip | `__ZIP_COLLECTION__` |
918
+ | Unzip | `__UNZIP_COLLECTION__` |
919
+ | Nest | `__NEST__` |
920
+ | Build list | `__BUILD_LIST__` |
921
+ | Merge | `__MERGE_COLLECTION__` |
922
+ | Relabel | `__RELABEL_FROM_FILE__` |
923
+ | Sort | `__SORTLIST__` |
924
+ | Tag | `__TAG_FROM_FILE__` |
925
+ | Apply rules | `__APPLY_RULES__` |
926
+ | Cross product | `__CROSS_PRODUCT_FLAT__` |
927
+ | Duplicate | `__DUPLICATE_FILE_TO_COLLECTION__` |