@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,521 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Galaxy Tool & Workflow Checker - BioBlend-based automation for nf-to-galaxy conversions
4
+
5
+ This script provides THREE main capabilities:
6
+ 1. Tool Availability Checking - Check if tools exist on Galaxy instance
7
+ 2. Workflow Validation - Validate .ga files (check all tools are available)
8
+ 3. Workflow Testing - Import and run workflows on Galaxy
9
+
10
+ Usage:
11
+
12
+ TOOL CHECKING:
13
+ # Check single tool
14
+ python galaxy_tool_checker.py --url https://usegalaxy.org --api-key KEY --tool hyphy
15
+
16
+ # Check multiple tools
17
+ python galaxy_tool_checker.py --url https://usegalaxy.org --api-key KEY --tool hyphy iqtree seqkit
18
+
19
+ # Check tools from file
20
+ python galaxy_tool_checker.py --url https://usegalaxy.org --api-key KEY --tool-list tools.txt
21
+
22
+ WORKFLOW VALIDATION:
23
+ # Validate .ga workflow (check all tools exist)
24
+ python galaxy_tool_checker.py --url https://usegalaxy.org --api-key KEY --workflow workflow.ga
25
+
26
+ WORKFLOW TESTING:
27
+ # Test workflow execution (import and run)
28
+ python galaxy_tool_checker.py --url https://usegalaxy.org --api-key KEY --workflow workflow.ga --test --wait
29
+
30
+ OUTPUT:
31
+ # Save results to JSON
32
+ python galaxy_tool_checker.py --url https://usegalaxy.org --api-key KEY --tool hyphy --output report.json
33
+ """
34
+
35
+ import argparse
36
+ import json
37
+ import os
38
+ import sys
39
+ import time
40
+ from pathlib import Path
41
+ from typing import Any, Dict, List, Optional, Tuple
42
+
43
+ # Try to load .env file if it exists
44
+ try:
45
+ from dotenv import load_dotenv
46
+ # Look for .env in current directory and parent directories
47
+ env_path = Path.cwd()
48
+ while env_path != env_path.parent:
49
+ env_file = env_path / ".env"
50
+ if env_file.exists():
51
+ load_dotenv(env_file)
52
+ break
53
+ env_path = env_path.parent
54
+ except ImportError:
55
+ # python-dotenv not installed, skip .env loading
56
+ pass
57
+
58
+ try:
59
+ from bioblend.galaxy import GalaxyInstance
60
+ from bioblend.galaxy.tools import ToolClient
61
+ except ImportError:
62
+ print("Error: bioblend is not installed. Install with: pip install bioblend", file=sys.stderr)
63
+ sys.exit(1)
64
+
65
+
66
+ class GalaxyToolChecker:
67
+ """Check tool availability on a Galaxy instance"""
68
+
69
+ def __init__(self, url: str, api_key: str):
70
+ """
71
+ Initialize Galaxy connection
72
+
73
+ Args:
74
+ url: Galaxy instance URL
75
+ api_key: Galaxy API key
76
+ """
77
+ self.url = url if url.endswith('/') else f"{url}/"
78
+ self.api_key = api_key
79
+ self.gi = None
80
+ self._connect()
81
+
82
+ def _connect(self):
83
+ """Establish connection to Galaxy"""
84
+ try:
85
+ self.gi = GalaxyInstance(url=self.url, key=self.api_key)
86
+ # Test connection
87
+ self.gi.users.get_current_user()
88
+ except Exception as e:
89
+ raise ConnectionError(f"Failed to connect to Galaxy at {self.url}: {e}")
90
+
91
+ def search_tool(self, tool_name: str, exact: bool = False) -> List[Dict[str, Any]]:
92
+ """
93
+ Search for a tool by name
94
+
95
+ Args:
96
+ tool_name: Tool name to search for
97
+ exact: If True, only return exact matches
98
+
99
+ Returns:
100
+ List of matching tools with id, name, version
101
+ """
102
+ try:
103
+ # Get all tools
104
+ tools = self.gi.tools.get_tools()
105
+
106
+ # Filter by name
107
+ matches = []
108
+ tool_name_lower = tool_name.lower()
109
+
110
+ for tool in tools:
111
+ tool_id = tool.get('id', '')
112
+ tool_display_name = tool.get('name', '')
113
+
114
+ # Skip tool labels
115
+ if tool_id.endswith('_label'):
116
+ continue
117
+
118
+ # Check for match
119
+ if exact:
120
+ if tool_display_name.lower() == tool_name_lower or tool_name_lower in tool_id.lower():
121
+ matches.append(tool)
122
+ else:
123
+ if tool_name_lower in tool_display_name.lower() or tool_name_lower in tool_id.lower():
124
+ matches.append(tool)
125
+
126
+ return matches
127
+
128
+ except Exception as e:
129
+ raise RuntimeError(f"Failed to search for tool '{tool_name}': {e}")
130
+
131
+ def get_tool_details(self, tool_id: str) -> Dict[str, Any]:
132
+ """
133
+ Get detailed information about a tool
134
+
135
+ Args:
136
+ tool_id: Galaxy tool ID
137
+
138
+ Returns:
139
+ Tool details including inputs, outputs, version
140
+ """
141
+ try:
142
+ return self.gi.tools.show_tool(tool_id, io_details=True)
143
+ except Exception as e:
144
+ raise RuntimeError(f"Failed to get details for tool '{tool_id}': {e}")
145
+
146
+ def check_tools_batch(self, tool_names: List[str]) -> Dict[str, Any]:
147
+ """
148
+ Check multiple tools at once
149
+
150
+ Args:
151
+ tool_names: List of tool names to check
152
+
153
+ Returns:
154
+ Dictionary with results for each tool
155
+ """
156
+ results = {
157
+ "galaxy_url": self.url,
158
+ "checked_at": time.strftime("%Y-%m-%d %H:%M:%S UTC", time.gmtime()),
159
+ "tools": {}
160
+ }
161
+
162
+ for tool_name in tool_names:
163
+ try:
164
+ matches = self.search_tool(tool_name)
165
+ results["tools"][tool_name] = {
166
+ "found": len(matches) > 0,
167
+ "match_count": len(matches),
168
+ "matches": [
169
+ {
170
+ "id": t.get("id"),
171
+ "name": t.get("name"),
172
+ "version": t.get("version"),
173
+ "description": t.get("description", "")[:100] # Truncate
174
+ }
175
+ for t in matches[:5] # Limit to top 5 matches
176
+ ]
177
+ }
178
+ except Exception as e:
179
+ results["tools"][tool_name] = {
180
+ "found": False,
181
+ "error": str(e)
182
+ }
183
+
184
+ # Add summary
185
+ found_count = sum(1 for t in results["tools"].values() if t.get("found", False))
186
+ results["summary"] = {
187
+ "total_tools": len(tool_names),
188
+ "found": found_count,
189
+ "not_found": len(tool_names) - found_count,
190
+ "success_rate": f"{(found_count / len(tool_names) * 100):.1f}%" if tool_names else "0%"
191
+ }
192
+
193
+ return results
194
+
195
+ def validate_workflow(self, workflow_path: str) -> Dict[str, Any]:
196
+ """
197
+ Validate a Galaxy workflow file (.ga) by checking all tools exist
198
+
199
+ Args:
200
+ workflow_path: Path to .ga workflow file
201
+
202
+ Returns:
203
+ Validation results
204
+ """
205
+ try:
206
+ with open(workflow_path, 'r') as f:
207
+ workflow = json.load(f)
208
+ except Exception as e:
209
+ raise ValueError(f"Failed to load workflow file: {e}")
210
+
211
+ results = {
212
+ "workflow_name": workflow.get("name", "Unknown"),
213
+ "workflow_file": workflow_path,
214
+ "galaxy_url": self.url,
215
+ "steps": {},
216
+ "tools_checked": set(),
217
+ "validation": {
218
+ "valid": True,
219
+ "errors": [],
220
+ "warnings": []
221
+ }
222
+ }
223
+
224
+ # Check each step
225
+ steps = workflow.get("steps", {})
226
+ for step_id, step in steps.items():
227
+ step_type = step.get("type")
228
+ tool_id = step.get("tool_id")
229
+
230
+ if step_type == "tool" and tool_id:
231
+ results["tools_checked"].add(tool_id)
232
+
233
+ try:
234
+ # Try to get tool details
235
+ tool_details = self.get_tool_details(tool_id)
236
+ results["steps"][step_id] = {
237
+ "name": step.get("name", "Unknown"),
238
+ "tool_id": tool_id,
239
+ "status": "ok",
240
+ "tool_name": tool_details.get("name"),
241
+ "tool_version": tool_details.get("version")
242
+ }
243
+ except Exception as e:
244
+ results["steps"][step_id] = {
245
+ "name": step.get("name", "Unknown"),
246
+ "tool_id": tool_id,
247
+ "status": "error",
248
+ "error": str(e)
249
+ }
250
+ results["validation"]["valid"] = False
251
+ results["validation"]["errors"].append(
252
+ f"Step {step_id} ({step.get('name')}): Tool '{tool_id}' not found or not accessible"
253
+ )
254
+
255
+ results["tools_checked"] = list(results["tools_checked"])
256
+ results["validation"]["total_steps"] = len(steps)
257
+ results["validation"]["tool_steps"] = len([s for s in steps.values() if s.get("type") == "tool"])
258
+ results["validation"]["valid_tools"] = len([s for s in results["steps"].values() if s.get("status") == "ok"])
259
+
260
+ return results
261
+
262
+ def test_workflow(self, workflow_path: str, history_name: Optional[str] = None,
263
+ inputs: Optional[Dict[str, str]] = None, wait: bool = False) -> Dict[str, Any]:
264
+ """
265
+ Test a workflow by importing and optionally running it
266
+
267
+ Args:
268
+ workflow_path: Path to .ga workflow file
269
+ history_name: Name for test history (optional)
270
+ inputs: Input dataset mappings (optional)
271
+ wait: Wait for workflow completion (optional)
272
+
273
+ Returns:
274
+ Test results
275
+ """
276
+ # First validate the workflow
277
+ validation = self.validate_workflow(workflow_path)
278
+
279
+ if not validation["validation"]["valid"]:
280
+ return {
281
+ "success": False,
282
+ "message": "Workflow validation failed",
283
+ "validation": validation
284
+ }
285
+
286
+ # Import workflow
287
+ try:
288
+ with open(workflow_path, 'r') as f:
289
+ workflow_dict = json.load(f)
290
+
291
+ imported = self.gi.workflows.import_workflow_dict(workflow_dict)
292
+ workflow_id = imported["id"]
293
+
294
+ result = {
295
+ "success": True,
296
+ "message": "Workflow imported successfully",
297
+ "workflow_id": workflow_id,
298
+ "workflow_name": imported.get("name"),
299
+ "validation": validation
300
+ }
301
+
302
+ # If inputs provided, try to run it
303
+ if inputs and history_name:
304
+ history = self.gi.histories.create_history(history_name)
305
+ history_id = history["id"]
306
+
307
+ invocation = self.gi.workflows.invoke_workflow(
308
+ workflow_id=workflow_id,
309
+ inputs=inputs,
310
+ history_id=history_id
311
+ )
312
+
313
+ result["invocation"] = {
314
+ "id": invocation.get("id"),
315
+ "history_id": history_id,
316
+ "state": invocation.get("state")
317
+ }
318
+
319
+ # Wait for completion if requested
320
+ if wait:
321
+ result["invocation"]["final_state"] = self._wait_for_workflow(
322
+ invocation.get("id"),
323
+ timeout=3600
324
+ )
325
+
326
+ return result
327
+
328
+ except Exception as e:
329
+ return {
330
+ "success": False,
331
+ "message": f"Failed to test workflow: {e}",
332
+ "validation": validation
333
+ }
334
+
335
+ def _wait_for_workflow(self, invocation_id: str, timeout: int = 3600) -> str:
336
+ """Wait for workflow invocation to complete"""
337
+ start_time = time.time()
338
+ while time.time() - start_time < timeout:
339
+ try:
340
+ invocation = self.gi.invocations.show_invocation(invocation_id)
341
+ state = invocation.get("state")
342
+ if state in ["scheduled", "ok", "error", "failed"]:
343
+ return state
344
+ time.sleep(10)
345
+ except Exception:
346
+ break
347
+ return "timeout"
348
+
349
+
350
+ def main():
351
+ parser = argparse.ArgumentParser(
352
+ description="Check Galaxy tool availability for nf-to-galaxy conversions",
353
+ formatter_class=argparse.RawDescriptionHelpFormatter,
354
+ epilog=__doc__
355
+ )
356
+
357
+ # Connection arguments
358
+ parser.add_argument("--url", help="Galaxy instance URL (or set GALAXY_URL env var)")
359
+ parser.add_argument("--api-key", help="Galaxy API key (or set GALAXY_API_KEY env var)")
360
+
361
+ # Tool checking arguments
362
+ parser.add_argument("--tool", nargs="+", help="Tool name(s) to check")
363
+ parser.add_argument("--tool-list", type=Path, help="File containing tool names (one per line)")
364
+ parser.add_argument("--exact", action="store_true", help="Require exact name matches")
365
+
366
+ # Workflow testing arguments
367
+ parser.add_argument("--workflow", type=Path, help="Workflow file (.ga) to validate/test")
368
+ parser.add_argument("--test", action="store_true", help="Actually test workflow (import and run)")
369
+ parser.add_argument("--history", help="History name for workflow test")
370
+ parser.add_argument("--wait", action="store_true", help="Wait for workflow completion")
371
+
372
+ # Output arguments
373
+ parser.add_argument("--output", type=Path, help="Output file for JSON results")
374
+ parser.add_argument("--verbose", action="store_true", help="Verbose output")
375
+ parser.add_argument("--quiet", action="store_true", help="Minimal output")
376
+
377
+ args = parser.parse_args()
378
+
379
+ # Get URL and API key from args or environment
380
+ url = args.url or os.environ.get("GALAXY_URL")
381
+ api_key = args.api_key or os.environ.get("GALAXY_API_KEY")
382
+
383
+ # Check for missing credentials
384
+ if not url:
385
+ print("Error: Galaxy URL required", file=sys.stderr)
386
+ print(" Provide via: --url https://usegalaxy.org", file=sys.stderr)
387
+ print(" Or set: GALAXY_URL environment variable", file=sys.stderr)
388
+ print(" Or create: .env file with GALAXY_URL=https://usegalaxy.org/", file=sys.stderr)
389
+ sys.exit(1)
390
+
391
+ if not api_key:
392
+ print("Error: Galaxy API key required", file=sys.stderr)
393
+ print(" Provide via: --api-key YOUR_KEY", file=sys.stderr)
394
+ print(" Or set: GALAXY_API_KEY environment variable", file=sys.stderr)
395
+ print(" Or create: .env file with GALAXY_API_KEY=your_key", file=sys.stderr)
396
+ print("", file=sys.stderr)
397
+ print(" Get your API key from Galaxy:", file=sys.stderr)
398
+ print(f" {url}user/api_key" if url else " https://usegalaxy.org/user/api_key", file=sys.stderr)
399
+ sys.exit(1)
400
+
401
+ # Initialize checker
402
+ try:
403
+ checker = GalaxyToolChecker(url, api_key)
404
+ if args.verbose:
405
+ print(f"Connected to Galaxy at {url}")
406
+ except Exception as e:
407
+ print(f"Error: {e}", file=sys.stderr)
408
+ sys.exit(1)
409
+
410
+ results = None
411
+
412
+ # Check tools
413
+ if args.tool or args.tool_list:
414
+ tool_names = args.tool or []
415
+
416
+ if args.tool_list:
417
+ try:
418
+ with open(args.tool_list, 'r') as f:
419
+ tool_names.extend([line.strip() for line in f if line.strip()])
420
+ except Exception as e:
421
+ print(f"Error reading tool list: {e}", file=sys.stderr)
422
+ sys.exit(1)
423
+
424
+ if not tool_names:
425
+ print("Error: No tools specified", file=sys.stderr)
426
+ sys.exit(1)
427
+
428
+ results = checker.check_tools_batch(tool_names)
429
+
430
+ if not args.quiet:
431
+ print(f"\n{'='*60}")
432
+ print(f"Tool Availability Report")
433
+ print(f"Galaxy: {args.url}")
434
+ print(f"{'='*60}\n")
435
+
436
+ for tool_name, result in results["tools"].items():
437
+ if result.get("found"):
438
+ print(f"✅ {tool_name}: Found {result['match_count']} match(es)")
439
+ if args.verbose and result.get("matches"):
440
+ for match in result["matches"]:
441
+ print(f" - {match['name']} ({match['version']})")
442
+ print(f" ID: {match['id']}")
443
+ else:
444
+ print(f"❌ {tool_name}: Not found")
445
+ if result.get("error"):
446
+ print(f" Error: {result['error']}")
447
+
448
+ print(f"\n{'='*60}")
449
+ print(f"Summary: {results['summary']['found']}/{results['summary']['total_tools']} tools found "
450
+ f"({results['summary']['success_rate']})")
451
+ print(f"{'='*60}\n")
452
+
453
+ # Validate/test workflow
454
+ elif args.workflow:
455
+ if args.test:
456
+ results = checker.test_workflow(
457
+ str(args.workflow),
458
+ history_name=args.history,
459
+ wait=args.wait
460
+ )
461
+ else:
462
+ results = checker.validate_workflow(str(args.workflow))
463
+
464
+ if not args.quiet:
465
+ print(f"\n{'='*60}")
466
+ print(f"Workflow Validation Report")
467
+ print(f"Workflow: {results.get('workflow_name', 'Unknown')}")
468
+ print(f"Galaxy: {args.url}")
469
+ print(f"{'='*60}\n")
470
+
471
+ validation = results.get("validation", {})
472
+ if validation.get("valid"):
473
+ print(f"✅ Workflow is valid")
474
+ print(f" - {validation.get('valid_tools', 0)}/{validation.get('tool_steps', 0)} tools available")
475
+ else:
476
+ print(f"❌ Workflow validation failed")
477
+ for error in validation.get("errors", []):
478
+ print(f" - {error}")
479
+
480
+ if args.test and results.get("success"):
481
+ print(f"\n✅ Workflow imported successfully")
482
+ print(f" Workflow ID: {results.get('workflow_id')}")
483
+ if results.get("invocation"):
484
+ inv = results["invocation"]
485
+ print(f" Invocation ID: {inv.get('id')}")
486
+ print(f" History ID: {inv.get('history_id')}")
487
+ if inv.get("final_state"):
488
+ print(f" Final state: {inv.get('final_state')}")
489
+
490
+ print(f"\n{'='*60}\n")
491
+
492
+ else:
493
+ print("Error: Must specify --tool, --tool-list, or --workflow", file=sys.stderr)
494
+ parser.print_help()
495
+ sys.exit(1)
496
+
497
+ # Output JSON if requested
498
+ if args.output and results:
499
+ try:
500
+ with open(args.output, 'w') as f:
501
+ json.dump(results, f, indent=2)
502
+ if not args.quiet:
503
+ print(f"Results written to {args.output}")
504
+ except Exception as e:
505
+ print(f"Error writing output: {e}", file=sys.stderr)
506
+ sys.exit(1)
507
+
508
+ # Exit with appropriate code
509
+ if results:
510
+ if "validation" in results:
511
+ sys.exit(0 if results["validation"].get("valid", False) else 1)
512
+ elif "summary" in results:
513
+ sys.exit(0 if results["summary"]["found"] == results["summary"]["total_tools"] else 1)
514
+ elif "success" in results:
515
+ sys.exit(0 if results["success"] else 1)
516
+
517
+ sys.exit(0)
518
+
519
+
520
+ if __name__ == "__main__":
521
+ main()
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: galaxy-mcp-reference
3
+ description: "Use when driving a Galaxy server through its MCP tools -- connecting to an instance, listing or creating histories, uploading data, finding and running tools, invoking workflows, inspecting datasets and jobs. Read before the first Galaxy MCP call in a session; covers which tool to reach for and the common traps (id vs name, history vs dataset ids, collection shapes)."
4
+ metadata:
5
+ surfaces: [loom]
6
+ when_to_use: >
7
+ Reach for this before any Galaxy MCP tool call -- creating/listing histories,
8
+ uploading data, finding and running tools, inspecting datasets or invocations --
9
+ and for the common gotchas (id vs name, history vs dataset ids, collection shapes).
10
+ user_invocable: true
11
+ ---
12
+
13
+ # Galaxy MCP Tools Reference
14
+
15
+ Tools are named below as the Galaxy MCP server exposes them. Clients prefix them differently --
16
+ Claude Code and Codex surface `connect` as `mcp__galaxy__connect`, other clients may use the bare
17
+ name or their own scheme. Match the operation, not the spelling; check your client's tool list if a
18
+ name doesn't resolve.
19
+
20
+ Complete reference for Galaxy MCP server functions.
21
+
22
+ ## Connection
23
+
24
+ ```
25
+ connect(url, api_key) # Connect to Galaxy instance
26
+ get_server_info() # Server version and config
27
+ get_user() # Current user details
28
+ ```
29
+
30
+ ## Histories
31
+
32
+ ```
33
+ list_history_ids() # Quick list: {id, name}
34
+ get_histories(limit, offset, name) # Paginated, filterable
35
+ get_history_details(history_id) # Metadata only, no datasets
36
+ get_history_contents(history_id, limit, offset, order) # Datasets
37
+ create_history(history_name) # Create new history
38
+ ```
39
+
40
+ ## Datasets
41
+
42
+ ```
43
+ get_dataset_details(dataset_id, include_preview, preview_lines)
44
+ download_dataset(dataset_id, file_path) # Omit file_path for memory
45
+ upload_file(path, history_id)
46
+ upload_file_from_url(url, history_id, file_type, dbkey)
47
+ get_job_details(dataset_id) # Job that created this dataset
48
+ ```
49
+
50
+ ## Tools
51
+
52
+ ```
53
+ search_tools_by_name(query)
54
+ search_tools_by_keywords(keywords) # keywords is a list
55
+ get_tool_details(tool_id, io_details)
56
+ get_tool_run_examples(tool_id) # XML test cases
57
+ get_tool_citations(tool_id)
58
+ get_tool_panel() # Full toolbox hierarchy
59
+ run_tool(history_id, tool_id, inputs)
60
+ ```
61
+
62
+ ## Workflows
63
+
64
+ ```
65
+ list_workflows(workflow_id, name, published)
66
+ get_workflow_details(workflow_id, version)
67
+ invoke_workflow(workflow_id, inputs, params, history_id)
68
+ get_invocations(invocation_id, workflow_id, history_id)
69
+ cancel_workflow_invocation(invocation_id)
70
+ ```
71
+
72
+ ## IWC (Intergalactic Workflow Commission)
73
+
74
+ ```
75
+ get_iwc_workflows() # Full manifest
76
+ search_iwc_workflows(query) # Search by name/description/tags
77
+ import_workflow_from_iwc(trs_id)
78
+ ```
79
+
80
+ ## Common Patterns
81
+
82
+ ### Tool Discovery
83
+ ```python
84
+ # Find candidate tools
85
+ search_tools_by_name(query="hyphy")
86
+
87
+ # Inspect I/O
88
+ get_tool_details(tool_id="toolshed.g2.bx.psu.edu/repos/iuc/hyphy_fel/hyphy_fel/2.5.84+galaxy0", io_details=True)
89
+ ```
90
+
91
+ ### Workflow Testing Loop
92
+ ```python
93
+ # 1. Create history
94
+ create_history(history_name="Test: My Workflow")
95
+
96
+ # 2. Upload or reuse datasets
97
+ upload_file(path="/path/to/data.txt", history_id="...")
98
+
99
+ # 3. Invoke workflow
100
+ invoke_workflow(workflow_id="...", inputs={"0": {"id": "DATASET_ID", "src": "hda"}}, history_id="...")
101
+
102
+ # 4. Inspect outputs
103
+ get_history_contents(history_id="...", order="create_time-dsc")
104
+
105
+ # 5. Fix and repeat
106
+ ```
107
+
108
+ ### History Contents with Pagination
109
+ ```python
110
+ # Page 1 (newest first)
111
+ get_history_contents(history_id="...", limit=100, offset=0, order="hid-dsc")
112
+
113
+ # Page 2
114
+ get_history_contents(history_id="...", limit=100, offset=100, order="hid-dsc")
115
+ ```
116
+
117
+ ## Order Options for History Contents
118
+
119
+ - `hid-asc` - oldest first (default)
120
+ - `hid-dsc` - newest first
121
+ - `create_time-dsc` - most recently created
122
+ - `update_time-dsc` - most recently modified
123
+ - `name-asc` - alphabetical
124
+
125
+ ## See Also
126
+
127
+ - `history-access.md` - Detailed history/dataset access patterns
128
+ - `gotchas.md` - Common pitfalls and solutions