@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.
- package/CHANGELOG.md +123 -0
- package/LICENSE +21 -0
- package/README.md +760 -5
- package/bin/legacy-mcp-config.js +363 -0
- package/bin/orbit.js +810 -0
- package/bin/pi-extension-path.d.ts +4 -0
- package/bin/pi-extension-path.js +44 -0
- package/bin/provider-auth.d.ts +22 -0
- package/bin/provider-auth.js +77 -0
- package/bin/thinking-pref.js +38 -0
- package/bin/update-check.d.ts +15 -0
- package/bin/update-check.js +137 -0
- package/extensions/cli-update/index.ts +32 -0
- package/extensions/orbit/activity-hooks.ts +141 -0
- package/extensions/orbit/activity.ts +116 -0
- package/extensions/orbit/agent-dir.ts +11 -0
- package/extensions/orbit/auto-resume.ts +352 -0
- package/extensions/orbit/config.ts +3 -0
- package/extensions/orbit/confusables.ts +1 -0
- package/extensions/orbit/context.ts +957 -0
- package/extensions/orbit/dashboard-commands.ts +191 -0
- package/extensions/orbit/dashboard-store.ts +473 -0
- package/extensions/orbit/dashboard-tools.ts +1185 -0
- package/extensions/orbit/empty-completion.ts +99 -0
- package/extensions/orbit/evidence-gate.ts +1276 -0
- package/extensions/orbit/evidence-override-command.ts +294 -0
- package/extensions/orbit/exec-guard/bash-risk.ts +1408 -0
- package/extensions/orbit/exec-guard/gate.ts +181 -0
- package/extensions/orbit/exec-guard/guardian-config.ts +54 -0
- package/extensions/orbit/exec-guard/index.ts +1 -0
- package/extensions/orbit/exec-guard/model-tier.ts +36 -0
- package/extensions/orbit/exec-guard/path-jail.ts +54 -0
- package/extensions/orbit/exec-guard/policy.ts +342 -0
- package/extensions/orbit/exec-guard/runtime-state.ts +15 -0
- package/extensions/orbit/exec-guard/sensitive-read.ts +525 -0
- package/extensions/orbit/exec-guard/types.ts +42 -0
- package/extensions/orbit/execution-commands.ts +134 -0
- package/extensions/orbit/feedback-command.ts +81 -0
- package/extensions/orbit/feedback.ts +96 -0
- package/extensions/orbit/galaxy-api.test.ts +122 -0
- package/extensions/orbit/galaxy-api.ts +606 -0
- package/extensions/orbit/galaxy-artifact-link-guidance.ts +5 -0
- package/extensions/orbit/galaxy-destructive-gate.ts +113 -0
- package/extensions/orbit/galaxy-enrich.ts +1108 -0
- package/extensions/orbit/galaxy-failure.ts +101 -0
- package/extensions/orbit/galaxy-fixture.ts +126 -0
- package/extensions/orbit/galaxy-history-guard.ts +233 -0
- package/extensions/orbit/galaxy-job-block.ts +347 -0
- package/extensions/orbit/galaxy-job-ops.ts +288 -0
- package/extensions/orbit/galaxy-live-source.ts +929 -0
- package/extensions/orbit/galaxy-markdown-adapter.ts +248 -0
- package/extensions/orbit/galaxy-op-policy.ts +332 -0
- package/extensions/orbit/galaxy-ops-tools.ts +326 -0
- package/extensions/orbit/galaxy-output-store.ts +80 -0
- package/extensions/orbit/galaxy-output.ts +346 -0
- package/extensions/orbit/galaxy-page-binding.ts +222 -0
- package/extensions/orbit/galaxy-page-markdown-guidance.ts +15 -0
- package/extensions/orbit/galaxy-page-ops.ts +159 -0
- package/extensions/orbit/galaxy-page-sync.test.ts +417 -0
- package/extensions/orbit/galaxy-page-sync.ts +318 -0
- package/extensions/orbit/galaxy-pages-api.ts +203 -0
- package/extensions/orbit/galaxy-pages-sync.ts +409 -0
- package/extensions/orbit/galaxy-poll-guard.ts +189 -0
- package/extensions/orbit/galaxy-poller.ts +706 -0
- package/extensions/orbit/galaxy-provenance.ts +623 -0
- package/extensions/orbit/galaxy-reconcile.ts +956 -0
- package/extensions/orbit/galaxy-recovery.ts +176 -0
- package/extensions/orbit/galaxy-repeat-guard.ts +55 -0
- package/extensions/orbit/galaxy-submission-capture.ts +707 -0
- package/extensions/orbit/galaxy-submission.ts +502 -0
- package/extensions/orbit/galaxy-tool-source.ts +78 -0
- package/extensions/orbit/galaxy-tool-wrap.ts +234 -0
- package/extensions/orbit/galaxy-udt-block.ts +127 -0
- package/extensions/orbit/galaxy-upload-tus.ts +334 -0
- package/extensions/orbit/galaxy-upload.ts +300 -0
- package/extensions/orbit/galaxy-version-capture.ts +65 -0
- package/extensions/orbit/git.ts +173 -0
- package/extensions/orbit/harness-block-fields.ts +597 -0
- package/extensions/orbit/index.ts +593 -0
- package/extensions/orbit/init-gate.ts +284 -0
- package/extensions/orbit/instructions-command.ts +136 -0
- package/extensions/orbit/invocation-failure-hint.ts +57 -0
- package/extensions/orbit/iwc-plan-check.ts +94 -0
- package/extensions/orbit/lesson-command.ts +303 -0
- package/extensions/orbit/lesson-hint.ts +245 -0
- package/extensions/orbit/lesson-nudge.ts +106 -0
- package/extensions/orbit/lessons/compose.ts +177 -0
- package/extensions/orbit/lessons/counters.ts +120 -0
- package/extensions/orbit/lessons/enabled.ts +116 -0
- package/extensions/orbit/lessons/matcher.ts +346 -0
- package/extensions/orbit/lessons/paths.ts +286 -0
- package/extensions/orbit/lessons/pi-event-contract.ts +105 -0
- package/extensions/orbit/lessons/propose-replay.ts +103 -0
- package/extensions/orbit/lessons/propose-tool.ts +222 -0
- package/extensions/orbit/lessons/propose.ts +502 -0
- package/extensions/orbit/lessons/replay.ts +89 -0
- package/extensions/orbit/lessons/reproduction-index.ts +83 -0
- package/extensions/orbit/lessons/search-tool.ts +99 -0
- package/extensions/orbit/lessons/search.ts +136 -0
- package/extensions/orbit/lessons/store.ts +415 -0
- package/extensions/orbit/lessons/text.ts +36 -0
- package/extensions/orbit/lessons/types.ts +69 -0
- package/extensions/orbit/lessons/user-dir.ts +24 -0
- package/extensions/orbit/lessons/user-lesson.ts +88 -0
- package/extensions/orbit/lessons/wrapper.ts +61 -0
- package/extensions/orbit/lessons-command.ts +147 -0
- package/extensions/orbit/local-exec.ts +39 -0
- package/extensions/orbit/mcp-output.ts +179 -0
- package/extensions/orbit/mcp-servers.test.ts +24 -0
- package/extensions/orbit/mcp-servers.ts +25 -0
- package/extensions/orbit/model-script.ts +351 -0
- package/extensions/orbit/notebook-anchors.ts +342 -0
- package/extensions/orbit/notebook-writer.ts +863 -0
- package/extensions/orbit/observation-allowlists.ts +1109 -0
- package/extensions/orbit/observation-replay.ts +148 -0
- package/extensions/orbit/observation-triggers.ts +563 -0
- package/extensions/orbit/observation-ui.ts +175 -0
- package/extensions/orbit/observations-command.ts +421 -0
- package/extensions/orbit/observations-config.ts +200 -0
- package/extensions/orbit/observations.ts +1381 -0
- package/extensions/orbit/profiles.ts +270 -0
- package/extensions/orbit/progress-updates.ts +95 -0
- package/extensions/orbit/proposal-commands.ts +882 -0
- package/extensions/orbit/provenance-fs-file.ts +59 -0
- package/extensions/orbit/provenance-fs.ts +32 -0
- package/extensions/orbit/provenance-memory-fs.ts +59 -0
- package/extensions/orbit/record-store-file.ts +177 -0
- package/extensions/orbit/record-store-page.ts +77 -0
- package/extensions/orbit/record-store-seam.ts +47 -0
- package/extensions/orbit/record-store.ts +149 -0
- package/extensions/orbit/registry-carrier.ts +107 -0
- package/extensions/orbit/registry-eligibility.ts +95 -0
- package/extensions/orbit/registry-evaluation.ts +403 -0
- package/extensions/orbit/registry-evaluator.ts +519 -0
- package/extensions/orbit/registry-import.ts +91 -0
- package/extensions/orbit/registry-lock.ts +221 -0
- package/extensions/orbit/registry-memory-fs.ts +42 -0
- package/extensions/orbit/registry-page-carrier.ts +103 -0
- package/extensions/orbit/registry-proposal.ts +1348 -0
- package/extensions/orbit/registry-runtime.ts +234 -0
- package/extensions/orbit/registry-schema.ts +735 -0
- package/extensions/orbit/registry-submitter.ts +59 -0
- package/extensions/orbit/registry-templates.ts +346 -0
- package/extensions/orbit/registry.ts +476 -0
- package/extensions/orbit/sandbox/index.ts +120 -0
- package/extensions/orbit/sandbox/sandbox-bash.ts +93 -0
- package/extensions/orbit/sandbox/sandbox-config.ts +87 -0
- package/extensions/orbit/sandbox/sandbox-init-message.ts +28 -0
- package/extensions/orbit/secret-redaction.ts +247 -0
- package/extensions/orbit/session-index/cwd.ts +18 -0
- package/extensions/orbit/session-index/db.ts +56 -0
- package/extensions/orbit/session-index/indexer.ts +154 -0
- package/extensions/orbit/session-index/is-enabled.ts +17 -0
- package/extensions/orbit/session-index/parse.ts +254 -0
- package/extensions/orbit/session-index/query.ts +209 -0
- package/extensions/orbit/session-index/schema.ts +72 -0
- package/extensions/orbit/session-index/tools.ts +152 -0
- package/extensions/orbit/session-lifecycle.ts +321 -0
- package/extensions/orbit/skill-triggers.ts +159 -0
- package/extensions/orbit/skills-command.ts +48 -0
- package/extensions/orbit/skills-discovery.ts +435 -0
- package/extensions/orbit/skills.ts +84 -0
- package/extensions/orbit/sra-import-gate.ts +77 -0
- package/extensions/orbit/state.ts +265 -0
- package/extensions/orbit/submission-replay.ts +147 -0
- package/extensions/orbit/sync-command.ts +157 -0
- package/extensions/orbit/teams/critic-parser.ts +93 -0
- package/extensions/orbit/teams/dispatcher.ts +210 -0
- package/extensions/orbit/teams/is-enabled.ts +22 -0
- package/extensions/orbit/teams/tool.ts +187 -0
- package/extensions/orbit/teams/types.ts +57 -0
- package/extensions/orbit/teams/validate.ts +42 -0
- package/extensions/orbit/tester-id-command.ts +133 -0
- package/extensions/orbit/tools-sync.ts +279 -0
- package/extensions/orbit/tools.ts +1300 -0
- package/extensions/orbit/types.ts +41 -0
- package/extensions/orbit/ui-bridge.ts +55 -0
- package/extensions/orbit/ulid.ts +60 -0
- package/extensions/orbit/user-instructions.ts +388 -0
- package/extensions/orbit/vendor/skills/_catalog.json +68 -0
- package/extensions/orbit/vendor/skills/_manifest.json +1106 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/SKILL.md +112 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/_provenance.json +218 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/_required_tools.json +33 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/_verify.json +4 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/add.json +50 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/draft-extract.json +51 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/draft-next-step.json +42 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/draft-validate.json +140 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/cli/list.json +32 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/notes/galaxy-tool-job-failure-reference.md +137 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/notes/open-requirements-ledger.md +173 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/schemas/galaxy-tool-summary.schema.json +175 -0
- package/extensions/orbit/vendor/skills/advance-galaxy-draft-step/references/schemas/galaxy-workflow-draft.schema.json +2727 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/SKILL.md +82 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/_provenance.json +133 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/_required_tools.json +16 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/_verify.json +4 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/cli/draft-validate.json +140 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/notes/galaxy-workflow-draft-format.md +135 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/notes/open-requirements-ledger.md +173 -0
- package/extensions/orbit/vendor/skills/apply-galaxy-workflow-changeset/references/schemas/galaxy-workflow-draft.schema.json +2727 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/SKILL.md +84 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/_provenance.json +166 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/_verify.json +29 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/galaxy-workflow-testability-design.md +136 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/iwc-test-data-conventions.md +308 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/planemo-asserts-idioms.md +246 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/notes/planemo-workflow-test-architecture.md +151 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/schemas/galaxy-workflow-test-plan.schema.json +552 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/schemas/summary-galaxy-workflow.schema.json +687 -0
- package/extensions/orbit/vendor/skills/changeset-to-galaxy-test-plan/references/schemas/tests-format.schema.json +7328 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/SKILL.md +127 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/_provenance.json +198 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/_required_tools.json +16 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/_verify.json +4 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/cli/convert.json +123 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/galaxy-data-flow-draft-contract.md +129 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/iwc-test-data-conventions.md +308 -0
- package/extensions/orbit/vendor/skills/compare-against-iwc-exemplar/references/notes/open-requirements-ledger.md +173 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/SKILL.md +73 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/_provenance.json +160 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/_verify.json +4 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-collection-semantics.md +43 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-collection-semantics.yml +1250 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-tool-job-failure-reference.md +137 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/galaxy-workflow-invocation-failure-reference.md +138 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/nextflow-operators-to-galaxy-collection-recipes.md +98 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/planemo-asserts-idioms.md +246 -0
- package/extensions/orbit/vendor/skills/debug-galaxy-workflow-output/references/notes/planemo-workflow-test-architecture.md +151 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/SKILL.md +174 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/_provenance.json +130 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/_required_tools.json +18 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/_verify.json +17 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/references/cli/tool-revisions.json +48 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/references/cli/tool-search.json +95 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/references/cli/tool-versions.json +39 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/references/notes/component-tool-shed-search.md +230 -0
- package/extensions/orbit/vendor/skills/discover-shed-tool/references/schemas/galaxy-tool-discovery.schema.json +231 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/SKILL.md +93 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/_provenance.json +201 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/_required_tools.json +28 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/_verify.json +17 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/cli/planemo.md +44 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/cli/validate-tests.json +40 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/galaxy-workflow-testability-design.md +136 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/iwc-shortcuts-anti-patterns.md +357 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/iwc-test-data-conventions.md +308 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/planemo-asserts-idioms.md +246 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/notes/planemo-workflow-test-architecture.md +151 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/schemas/galaxy-workflow-test-plan.schema.json +552 -0
- package/extensions/orbit/vendor/skills/implement-galaxy-workflow-test/references/schemas/tests-format.schema.json +7328 -0
- package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/SKILL.md +81 -0
- package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/_provenance.json +93 -0
- package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/_verify.json +17 -0
- package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/references/notes/open-requirements-ledger.md +173 -0
- package/extensions/orbit/vendor/skills/interview-to-galaxy-workflow-changeset/references/schemas/summary-galaxy-workflow.schema.json +687 -0
- package/extensions/orbit/vendor/skills/pipeline-update-interview-to-galaxy/SKILL.md +81 -0
- package/extensions/orbit/vendor/skills/pipeline-update-interview-to-galaxy/_assembly.json +23 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/SKILL.md +79 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/_provenance.json +125 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/_required_tools.json +28 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/_verify.json +4 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/references/cli/planemo.md +44 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/references/cli/validate-tests.json +40 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/references/notes/galaxy-workflow-invocation-failure-reference.md +138 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/references/notes/planemo-asserts-idioms.md +246 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/references/notes/planemo-workflow-test-architecture.md +151 -0
- package/extensions/orbit/vendor/skills/run-workflow-test/references/schemas/tests-format.schema.json +7328 -0
- package/extensions/orbit/vendor/skills/skills/LICENSE +21 -0
- package/extensions/orbit/vendor/skills/skills/collection-manipulation/README.md +39 -0
- package/extensions/orbit/vendor/skills/skills/collection-manipulation/SKILL.md +892 -0
- package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/api-patterns.md +927 -0
- package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/apply-rules.md +1482 -0
- package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/test-patterns.md +996 -0
- package/extensions/orbit/vendor/skills/skills/collection-manipulation/references/tools.md +609 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-data-libraries/SKILL.md +170 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/README.md +162 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/SKILL.md +99 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/examples/README.md +119 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/examples/tool-checking.md +419 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/examples/workflow-testing.md +617 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/galaxy-integration.md +614 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/SKILL.md +144 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/average_col3.ipynb +68 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/extract_sample_metadata.ipynb +190 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/variant_annotation.ipynb +816 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/jupyterlite/examples/vcp_variant_map.ipynb +443 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/scripts/README.md +165 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-integration/scripts/galaxy_tool_checker.py +521 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-mcp-reference/SKILL.md +128 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-mcp-reference/gotchas.md +135 -0
- package/extensions/orbit/vendor/skills/skills/galaxy-mcp-reference/history-access.md +132 -0
- package/extensions/orbit/vendor/skills/skills/reproduciblify/SKILL.md +146 -0
- package/extensions/orbit/vendor/skills/skills/reproduciblify/references/directives.yml +496 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/SKILL.md +245 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/01-minimal-echo.yml +27 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/02-single-data-in-out.yml +27 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/03-multiple-data-js.yml +28 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/04-select-integer-boolean.yml +41 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/05-resource-requirements.yml +25 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/06-biocontainer-tool.yml +38 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/07-inline-python-script.yml +56 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/examples/08-configfile-script.yml +74 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/references/common-mistakes.md +76 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/references/schema-reference.md +155 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/references/templating.md +196 -0
- package/extensions/orbit/vendor/skills/skills/udt-authoring/scripts/validate.py +109 -0
- package/extensions/orbit/vendor/skills/skills/workflow-reports/README.md +71 -0
- package/extensions/orbit/vendor/skills/skills/workflow-reports/SKILL.md +190 -0
- package/extensions/orbit/vendor/skills/skills/workflow-reports/examples/histology-staining.md +145 -0
- package/extensions/orbit/vendor/skills/skills/workflow-reports/examples/tissue-microarray-analysis.md +176 -0
- package/extensions/orbit/vendor/skills/skills/workflow-reports/references/directives.md +415 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/SKILL.md +98 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/_provenance.json +93 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/_required_tools.json +28 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/_verify.json +17 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/cli/convert.json +123 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/cli/foundry.md +25 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/cli/validate.json +142 -0
- package/extensions/orbit/vendor/skills/summarize-galaxy-workflow/references/schemas/summary-galaxy-workflow.schema.json +687 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/SKILL.md +74 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/_provenance.json +71 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/_required_tools.json +16 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/_verify.json +4 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/references/cli/validate.json +142 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/references/notes/galaxy-workflow-invocation-failure-reference.md +138 -0
- package/extensions/orbit/vendor/skills/validate-galaxy-workflow/references/notes/galaxy-workflow-testability-design.md +136 -0
- package/extensions/orbit/vendor-skills.ts +283 -0
- package/extensions/orbit/workspace-state-dir.ts +46 -0
- package/extensions/orbit-handoff/index.ts +73 -0
- package/extensions/orbit-handoff/orbit-launcher.ts +142 -0
- package/extensions/whats-new/index.ts +98 -0
- package/lessons/LICENSE +17 -0
- package/lessons/README.md +117 -0
- package/lessons/SCHEMA.md +187 -0
- package/lessons/build-snapshot.mjs +311 -0
- package/lessons/data/downloaded-file-is-not-what-its-extension-says.md +61 -0
- package/lessons/galaxy-api/403-history-is-a-hard-stop.md +57 -0
- package/lessons/galaxy-api/collection-into-single-dataset-input.md +61 -0
- package/lessons/galaxy-api/connectedvalue-in-command-line.md +62 -0
- package/lessons/galaxy-api/hid-is-not-an-id.md +59 -0
- package/lessons/galaxy-api/invoke-workflow-inputs-not-params.md +60 -0
- package/lessons/galaxy-api/repeat-param-pipe-keys.md +63 -0
- package/lessons/galaxy-api/run-tool-returns-on-submit.md +61 -0
- package/lessons/galaxy-tools/reference-index-not-on-server.md +62 -0
- package/lessons/log.md +42 -0
- package/lessons/reproduction/input-population-mismatch.md +59 -0
- package/lessons/reproduction/methods-text-vs-executed-parameters.md +62 -0
- package/lessons/snapshot.json +1004 -0
- package/lessons/stats/de-contrast-direction-and-sample-labels.md +63 -0
- package/lessons/stats/na-coerced-to-zero-in-filters.md +59 -0
- package/lessons/validate.mjs +1219 -0
- package/package.json +103 -5
- package/shared/agent-prompt.d.ts +8 -0
- package/shared/agent-prompt.js +15 -0
- package/shared/approval-prompt.d.ts +4 -0
- package/shared/approval-prompt.js +61 -0
- package/shared/brain-env.d.ts +14 -0
- package/shared/brain-env.js +108 -0
- package/shared/brain-exit.d.ts +20 -0
- package/shared/brain-exit.js +149 -0
- package/shared/capability-profile.d.ts +16 -0
- package/shared/capability-profile.js +75 -0
- package/shared/config-source.d.ts +13 -0
- package/shared/config-source.js +17 -0
- package/shared/confusables.d.ts +3 -0
- package/shared/confusables.js +93 -0
- package/shared/custom-provider.d.ts +45 -0
- package/shared/custom-provider.js +169 -0
- package/shared/dashboard-contract.d.ts +123 -0
- package/shared/dashboard-contract.js +560 -0
- package/shared/dashboard-layout-store.d.ts +44 -0
- package/shared/dashboard-layout-store.js +281 -0
- package/shared/feedback-contract.d.ts +61 -0
- package/shared/feedback-contract.js +146 -0
- package/shared/galaxy-artifact-links.d.ts +30 -0
- package/shared/galaxy-artifact-links.js +166 -0
- package/shared/galaxy-credentials.d.ts +26 -0
- package/shared/galaxy-credentials.js +71 -0
- package/shared/galaxy-destructive.d.ts +21 -0
- package/shared/galaxy-destructive.js +269 -0
- package/shared/galaxy-guidance.d.ts +2 -0
- package/shared/galaxy-guidance.js +53 -0
- package/shared/galaxy-live-contract.d.ts +92 -0
- package/shared/galaxy-live-contract.js +180 -0
- package/shared/galaxy-page-cells.d.ts +2 -0
- package/shared/galaxy-page-cells.js +22 -0
- package/shared/galaxy-tool-family.d.ts +5 -0
- package/shared/galaxy-tool-family.js +27 -0
- package/shared/galaxy-url.d.ts +1 -0
- package/shared/galaxy-url.js +48 -0
- package/shared/gtn.d.ts +31 -0
- package/shared/gtn.js +253 -0
- package/shared/handled-prompt.d.ts +3 -0
- package/shared/handled-prompt.js +26 -0
- package/shared/known-provider.d.ts +11 -0
- package/shared/known-provider.js +89 -0
- package/shared/lesson-hint-marker.d.ts +7 -0
- package/shared/lesson-hint-marker.js +32 -0
- package/shared/lesson-rules.d.ts +150 -0
- package/shared/lesson-rules.js +203 -0
- package/shared/malformed-object-ids.d.ts +1 -0
- package/shared/malformed-object-ids.js +37 -0
- package/shared/markdown-sections.d.ts +10 -0
- package/shared/markdown-sections.js +118 -0
- package/shared/notebook-fences.d.ts +12 -0
- package/shared/notebook-fences.js +53 -0
- package/shared/observation-contract.d.ts +91 -0
- package/shared/observation-contract.js +544 -0
- package/shared/orbit-config.d.ts +226 -0
- package/shared/orbit-config.js +189 -0
- package/shared/orbit-env.d.ts +13 -0
- package/shared/orbit-env.js +124 -0
- package/shared/orbit-shell-contract.d.ts +74 -0
- package/shared/orbit-shell-contract.js +30 -0
- package/shared/page-content-hash.d.ts +1 -0
- package/shared/page-content-hash.js +13 -0
- package/shared/pi-default-model.d.ts +7 -0
- package/shared/pi-default-model.js +41 -0
- package/shared/prompt-blocks.d.ts +87 -0
- package/shared/prompt-blocks.js +898 -0
- package/shared/provider-auth-caps.d.ts +22 -0
- package/shared/provider-auth-caps.js +57 -0
- package/shared/random.d.ts +2 -0
- package/shared/random.js +15 -0
- package/shared/record-excerpt.d.ts +4 -0
- package/shared/record-excerpt.js +16 -0
- package/shared/redirect-guard.d.ts +36 -0
- package/shared/redirect-guard.js +235 -0
- package/shared/skills-pin.d.ts +8 -0
- package/shared/skills-pin.js +9 -0
- package/shared/skills-router.d.ts +17 -0
- package/shared/skills-router.js +63 -0
- package/shared/sra-import.d.ts +34 -0
- package/shared/sra-import.js +206 -0
- package/shared/state-dir.d.ts +21 -0
- package/shared/state-dir.js +240 -0
- package/shared/team-dispatch-contract.d.ts +28 -0
- package/shared/team-dispatch-contract.js +1 -0
- package/shared/truncate-middle.d.ts +11 -0
- package/shared/truncate-middle.js +68 -0
- package/shared/version-compare.d.ts +10 -0
- package/shared/version-compare.js +74 -0
- package/shared/whats-new.d.ts +31 -0
- package/shared/whats-new.js +83 -0
- package/shared/wsl.d.ts +10 -0
- package/shared/wsl.js +24 -0
package/extensions/orbit/vendor/skills/skills/galaxy-integration/scripts/galaxy_tool_checker.py
ADDED
|
@@ -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
|