@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
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Galaxy server profile management
|
|
3
|
+
*
|
|
4
|
+
* Stores named profiles in the `galaxy` section of ~/.orbit/config.json.
|
|
5
|
+
* Each profile holds a URL + API key. The active profile reaches the Galaxy
|
|
6
|
+
* MCP server through GALAXY_URL/GALAXY_API_KEY in the process env, which
|
|
7
|
+
* mcp-servers.ts references when it registers the server.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { loadConfig, saveConfig } from "./config";
|
|
11
|
+
import { galaxyCredentials } from "./galaxy-api";
|
|
12
|
+
import { normalizeGalaxyUrl } from "../../shared/galaxy-url.js";
|
|
13
|
+
|
|
14
|
+
export { normalizeGalaxyUrl };
|
|
15
|
+
|
|
16
|
+
export interface GalaxyProfile {
|
|
17
|
+
url: string;
|
|
18
|
+
/** Plaintext API key. Orbit migrates this to apiKeyEncrypted on next startup. */
|
|
19
|
+
apiKey?: string;
|
|
20
|
+
/** Base64 ciphertext produced by Electron safeStorage (Orbit-only). */
|
|
21
|
+
apiKeyEncrypted?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Thrown when the brain process is asked to use a profile that only has
|
|
26
|
+
* `apiKeyEncrypted` set. The brain runs without Electron's safeStorage,
|
|
27
|
+
* so it cannot decrypt the key itself -- the shell must inject the
|
|
28
|
+
* decrypted value as `GALAXY_API_KEY` in the brain's env (Orbit does
|
|
29
|
+
* this in `app/src/main/agent.ts:buildSecretEnv`). When the env
|
|
30
|
+
* injection is also missing, callers see this error instead of a
|
|
31
|
+
* silent fallback that would 401 against Galaxy.
|
|
32
|
+
*/
|
|
33
|
+
export class EncryptedProfileUnavailableError extends Error {
|
|
34
|
+
constructor(public profileName: string) {
|
|
35
|
+
super(
|
|
36
|
+
`Profile "${profileName}" has only an encrypted API key; this process can't decrypt it. ` +
|
|
37
|
+
`Run from Orbit (auto-injects the key) or export GALAXY_URL and GALAXY_API_KEY explicitly.`,
|
|
38
|
+
);
|
|
39
|
+
this.name = "EncryptedProfileUnavailableError";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface GalaxyProfiles {
|
|
44
|
+
active: string | null;
|
|
45
|
+
profiles: Record<string, GalaxyProfile>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function loadProfiles(): GalaxyProfiles {
|
|
49
|
+
const config = loadConfig();
|
|
50
|
+
if (config.galaxy) {
|
|
51
|
+
return {
|
|
52
|
+
active: config.galaxy.active ?? null,
|
|
53
|
+
profiles: config.galaxy.profiles ?? {},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { active: null, profiles: {} };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function writeProfiles(profiles: GalaxyProfiles): void {
|
|
60
|
+
const config = loadConfig();
|
|
61
|
+
config.galaxy = {
|
|
62
|
+
active: profiles.active,
|
|
63
|
+
profiles: profiles.profiles,
|
|
64
|
+
};
|
|
65
|
+
saveConfig(config);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Derive a short profile name from a Galaxy server URL.
|
|
70
|
+
* https://test.galaxyproject.org/ → "test-galaxyproject"
|
|
71
|
+
* https://usegalaxy.org/ → "usegalaxy-org"
|
|
72
|
+
* http://localhost:8080/ → "localhost-8080"
|
|
73
|
+
*/
|
|
74
|
+
export function profileNameFromUrl(url: string): string {
|
|
75
|
+
try {
|
|
76
|
+
const parsed = new URL(url);
|
|
77
|
+
let host = parsed.hostname;
|
|
78
|
+
// Include port for non-standard ports
|
|
79
|
+
if (parsed.port) {
|
|
80
|
+
host += `-${parsed.port}`;
|
|
81
|
+
}
|
|
82
|
+
// Replace dots with hyphens, drop trailing TLD-only segments for cleaner names
|
|
83
|
+
return host.replace(/\./g, "-").replace(/-+$/, "");
|
|
84
|
+
} catch {
|
|
85
|
+
// Fallback: slugify the whole string
|
|
86
|
+
return url
|
|
87
|
+
.replace(/[^a-zA-Z0-9]+/g, "-")
|
|
88
|
+
.replace(/^-|-$/g, "")
|
|
89
|
+
.toLowerCase();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Validate a candidate Galaxy server URL. The API key is sent as
|
|
95
|
+
* `x-api-key` on every request; if the URL is `http://` (or otherwise
|
|
96
|
+
* malformed), the key would be exposed in cleartext or land at the
|
|
97
|
+
* wrong host. Reject bad URLs at save time so the user sees the
|
|
98
|
+
* mistake instead of silently exfiltrating credentials.
|
|
99
|
+
*
|
|
100
|
+
* Hosts outside `*.galaxyproject.org` and `localhost`/`127.*` are
|
|
101
|
+
* accepted but with a warning to the console — institutions run
|
|
102
|
+
* private Galaxy mirrors, so an allowlist would be too narrow.
|
|
103
|
+
*/
|
|
104
|
+
/**
|
|
105
|
+
* True for an IPv4 loopback (127.0.0.0/8), localhost, or IPv6 ::1. A bare
|
|
106
|
+
* `startsWith("127.")` would wrongly accept a resolvable hostname like
|
|
107
|
+
* `127.evil.example`, which over http would leak the API key in cleartext.
|
|
108
|
+
*/
|
|
109
|
+
function isLoopbackHost(host: string): boolean {
|
|
110
|
+
return host === "localhost" || /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(host) || host === "::1";
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function validateGalaxyUrl(url: string): { ok: true } | { ok: false; reason: string } {
|
|
114
|
+
let parsed: URL;
|
|
115
|
+
try {
|
|
116
|
+
parsed = new URL(url.trim());
|
|
117
|
+
} catch {
|
|
118
|
+
return { ok: false, reason: "Not a valid URL." };
|
|
119
|
+
}
|
|
120
|
+
if (parsed.protocol === "http:") {
|
|
121
|
+
const host = parsed.hostname.toLowerCase();
|
|
122
|
+
if (isLoopbackHost(host)) {
|
|
123
|
+
// Loopback HTTP is fine for local Galaxy installs.
|
|
124
|
+
return { ok: true };
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
ok: false,
|
|
128
|
+
reason: "Galaxy URL must use https:// (the API key is sent on every request).",
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (parsed.protocol !== "https:") {
|
|
132
|
+
return { ok: false, reason: `Unsupported URL scheme: ${parsed.protocol}` };
|
|
133
|
+
}
|
|
134
|
+
return { ok: true };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Save a profile (insert or update) and mark it active.
|
|
139
|
+
*
|
|
140
|
+
* The brain process can't encrypt (no Electron safeStorage), so the
|
|
141
|
+
* plaintext key lands on disk briefly. Orbit's main process watches
|
|
142
|
+
* `~/.orbit/config.json` and re-encrypts on change, closing the plaintext
|
|
143
|
+
* window to milliseconds. CLI users without safeStorage get plaintext
|
|
144
|
+
* persistence -- there's no other option, but they're warned at load time.
|
|
145
|
+
*/
|
|
146
|
+
export function saveProfile(name: string, url: string, apiKey: string): void {
|
|
147
|
+
const v = validateGalaxyUrl(url);
|
|
148
|
+
if (!v.ok) throw new Error(v.reason);
|
|
149
|
+
const host = new URL(url).hostname.toLowerCase();
|
|
150
|
+
const trusted =
|
|
151
|
+
isLoopbackHost(host) || host === "galaxyproject.org" || host.endsWith(".galaxyproject.org");
|
|
152
|
+
if (!trusted) {
|
|
153
|
+
console.warn(
|
|
154
|
+
`[galaxy] Profile "${name}" points at ${host} (not a galaxyproject.org subdomain).`,
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
const profiles = loadProfiles();
|
|
158
|
+
profiles.profiles[name] = { url, apiKey };
|
|
159
|
+
profiles.active = name;
|
|
160
|
+
writeProfiles(profiles);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Resolve a profile's plaintext API key for in-process use (Galaxy HTTP
|
|
165
|
+
* calls inside the brain). Returns the plaintext value when available,
|
|
166
|
+
* or throws `EncryptedProfileUnavailableError` for encrypted-only
|
|
167
|
+
* profiles -- callers must surface that to the user rather than firing
|
|
168
|
+
* the wrong key at the server.
|
|
169
|
+
*/
|
|
170
|
+
export function resolveProfileApiKey(name: string, profile: GalaxyProfile): string {
|
|
171
|
+
if (profile.apiKey) return profile.apiKey;
|
|
172
|
+
if (profile.apiKeyEncrypted) {
|
|
173
|
+
throw new EncryptedProfileUnavailableError(name);
|
|
174
|
+
}
|
|
175
|
+
throw new Error(`Profile "${name}" has no API key configured.`);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export type ActiveGalaxyStatus = "usable" | "configured-unusable" | "none";
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Usability of the active Galaxy profile for THIS process. The startup greeting
|
|
182
|
+
* reads this so its message can't contradict the actual credential state.
|
|
183
|
+
*
|
|
184
|
+
* - `usable`: GALAXY_URL + GALAXY_API_KEY are both in env (however they got
|
|
185
|
+
* there -- plaintext profile, explicit export, or Orbit's decrypt-inject).
|
|
186
|
+
* - `configured-unusable`: no usable env key, but the active profile carries an
|
|
187
|
+
* encrypted key this process can't decrypt (Orbit-only safeStorage). Galaxy
|
|
188
|
+
* calls would 401; the fix is to run from Orbit or export GALAXY_URL and
|
|
189
|
+
* GALAXY_API_KEY together.
|
|
190
|
+
* - `none`: no usable active profile to speak of.
|
|
191
|
+
*
|
|
192
|
+
* Pure given (profiles, env); without `env` it reads the live credentials, which
|
|
193
|
+
* is what `activeGalaxyStatus()`, the thin live wrapper, does.
|
|
194
|
+
*/
|
|
195
|
+
export function getActiveGalaxyStatus(
|
|
196
|
+
profiles: GalaxyProfiles,
|
|
197
|
+
env?: NodeJS.ProcessEnv,
|
|
198
|
+
): ActiveGalaxyStatus {
|
|
199
|
+
const { url, apiKey } = galaxyCredentials(env);
|
|
200
|
+
if (url && apiKey) return "usable";
|
|
201
|
+
const active = profiles.active;
|
|
202
|
+
if (!active) return "none";
|
|
203
|
+
const profile = profiles.profiles[active];
|
|
204
|
+
if (profile && !profile.apiKey && !apiKey && profile.apiKeyEncrypted) {
|
|
205
|
+
return "configured-unusable";
|
|
206
|
+
}
|
|
207
|
+
return "none";
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export function activeGalaxyStatus(): ActiveGalaxyStatus {
|
|
211
|
+
return getActiveGalaxyStatus(loadProfiles());
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Switch to an existing profile. Updates the active marker and sets process.env so the current session picks it up immediately.
|
|
216
|
+
*
|
|
217
|
+
* Two paths for the API key:
|
|
218
|
+
* 1) plaintext `apiKey` -> set env to it.
|
|
219
|
+
* 2) encrypted-only -> CLEAR `process.env.GALAXY_API_KEY`. The brain
|
|
220
|
+
* can't decrypt to verify whether any value already in env matches
|
|
221
|
+
* *this* profile's ciphertext (the env was injected for whatever
|
|
222
|
+
* profile was active at brain spawn). Better to fail loud than to
|
|
223
|
+
* silently send the previous profile's key to the new URL. The
|
|
224
|
+
* shell will re-inject on the next brain restart from the now-active
|
|
225
|
+
* encrypted profile.
|
|
226
|
+
*/
|
|
227
|
+
export function switchProfile(name: string): boolean {
|
|
228
|
+
const profiles = loadProfiles();
|
|
229
|
+
const profile = profiles.profiles[name];
|
|
230
|
+
if (!profile) return false;
|
|
231
|
+
|
|
232
|
+
profiles.active = name;
|
|
233
|
+
writeProfiles(profiles);
|
|
234
|
+
|
|
235
|
+
// Saved before /api was stripped, or hand-edited -- either way the env is what
|
|
236
|
+
// every Galaxy client reads.
|
|
237
|
+
process.env.GALAXY_URL = normalizeGalaxyUrl(profile.url);
|
|
238
|
+
if (profile.apiKey) {
|
|
239
|
+
process.env.GALAXY_API_KEY = profile.apiKey;
|
|
240
|
+
} else if (profile.apiKeyEncrypted) {
|
|
241
|
+
// Always invalidate; let the shell restart re-inject the right value.
|
|
242
|
+
delete process.env.GALAXY_API_KEY;
|
|
243
|
+
console.warn(
|
|
244
|
+
`[galaxy] Profile "${name}" has only an encrypted API key. Cleared ` +
|
|
245
|
+
`GALAXY_API_KEY in this session; restart the shell so Orbit can ` +
|
|
246
|
+
`re-inject the decrypted key for this profile.`,
|
|
247
|
+
);
|
|
248
|
+
} else {
|
|
249
|
+
// A keyless profile (hand-edited config) must not inherit the previous
|
|
250
|
+
// profile's key against its own URL.
|
|
251
|
+
delete process.env.GALAXY_API_KEY;
|
|
252
|
+
}
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Remove a profile. If it was active, clears the active marker.
|
|
258
|
+
*/
|
|
259
|
+
export function deleteProfile(name: string): boolean {
|
|
260
|
+
const profiles = loadProfiles();
|
|
261
|
+
if (!profiles.profiles[name]) return false;
|
|
262
|
+
|
|
263
|
+
delete profiles.profiles[name];
|
|
264
|
+
if (profiles.active === name) {
|
|
265
|
+
const remaining = Object.keys(profiles.profiles);
|
|
266
|
+
profiles.active = remaining.length > 0 ? remaining[0] : null;
|
|
267
|
+
}
|
|
268
|
+
writeProfiles(profiles);
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** User-visible heartbeats from observed events; never invoke the model. */
|
|
2
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
import { galaxyCall } from "./galaxy-recovery";
|
|
4
|
+
import type { GalaxyToolFamily } from "../../shared/galaxy-tool-family.js";
|
|
5
|
+
|
|
6
|
+
export const PROGRESS_INTERVAL_MS = 60_000;
|
|
7
|
+
|
|
8
|
+
function describeTool(
|
|
9
|
+
name: string,
|
|
10
|
+
input: Record<string, unknown>,
|
|
11
|
+
family: GalaxyToolFamily,
|
|
12
|
+
): string {
|
|
13
|
+
// Orbit's own galaxy_* tools (upload, job/invocation records) count as Galaxy work too.
|
|
14
|
+
const galaxy =
|
|
15
|
+
galaxyCall(name, input, family)?.name ?? (name.startsWith("galaxy_") ? name : undefined);
|
|
16
|
+
if (galaxy) {
|
|
17
|
+
if (/get_(dataset|job|history|invocation)/.test(galaxy))
|
|
18
|
+
return "checking Galaxy data and job status";
|
|
19
|
+
if (/search_|get_tool/.test(galaxy)) return "inspecting available Galaxy tools";
|
|
20
|
+
if (/run_|invoke_/.test(galaxy)) return "submitting work to Galaxy";
|
|
21
|
+
if (/upload_/.test(galaxy)) return "uploading analysis inputs to Galaxy";
|
|
22
|
+
return "working with Galaxy";
|
|
23
|
+
}
|
|
24
|
+
if (name === "bash") return "executing a local command";
|
|
25
|
+
if (/^(read|grep|glob|ls|find)$/.test(name)) return "examining project files";
|
|
26
|
+
if (/^(write|edit)$/.test(name)) return "updating project files";
|
|
27
|
+
if (name === "mcp_read_output") return "inspecting saved tool output";
|
|
28
|
+
return "executing an analysis tool";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function registerProgressUpdates(pi: ExtensionAPI, family: GalaxyToolFamily): void {
|
|
32
|
+
let ctx: ExtensionContext | undefined;
|
|
33
|
+
let timer: ReturnType<typeof setInterval> | undefined;
|
|
34
|
+
let startedAt = 0;
|
|
35
|
+
let lastVisibleAt = 0;
|
|
36
|
+
let completed = 0;
|
|
37
|
+
let errors = 0;
|
|
38
|
+
const active = new Map<string, string>();
|
|
39
|
+
|
|
40
|
+
const stop = () => {
|
|
41
|
+
if (timer) clearInterval(timer);
|
|
42
|
+
timer = undefined;
|
|
43
|
+
ctx = undefined;
|
|
44
|
+
active.clear();
|
|
45
|
+
};
|
|
46
|
+
const notify = (text: string) => {
|
|
47
|
+
try {
|
|
48
|
+
if (ctx?.hasUI) ctx.ui.notify(text, "info");
|
|
49
|
+
} catch {
|
|
50
|
+
stop(); // A stale session must not emit into a replacement conversation.
|
|
51
|
+
}
|
|
52
|
+
lastVisibleAt = Date.now();
|
|
53
|
+
};
|
|
54
|
+
pi.on("agent_start", (_event, context) => {
|
|
55
|
+
stop();
|
|
56
|
+
ctx = context;
|
|
57
|
+
startedAt = lastVisibleAt = Date.now();
|
|
58
|
+
completed = errors = 0;
|
|
59
|
+
timer = setInterval(() => {
|
|
60
|
+
if (Date.now() - lastVisibleAt < PROGRESS_INTERVAL_MS) return;
|
|
61
|
+
const minutes = Math.max(1, Math.floor((Date.now() - startedAt) / 60_000));
|
|
62
|
+
const current = active.values().next().value;
|
|
63
|
+
const state = current
|
|
64
|
+
? `Currently ${current}.`
|
|
65
|
+
: "Waiting for the assistant's next response.";
|
|
66
|
+
notify(
|
|
67
|
+
`Progress (${minutes} min): ${state} ${completed} tool call${completed === 1 ? " has" : "s have"} returned${errors ? `, including ${errors} error${errors === 1 ? "" : "s"}` : ""}. Analysis results still require verification.`,
|
|
68
|
+
);
|
|
69
|
+
}, PROGRESS_INTERVAL_MS);
|
|
70
|
+
timer.unref?.();
|
|
71
|
+
});
|
|
72
|
+
pi.on("tool_execution_start", (event) => {
|
|
73
|
+
if (!timer) return;
|
|
74
|
+
const description = describeTool(event.toolName, event.args, family);
|
|
75
|
+
if (!active.size && completed === 0) notify(`Progress: ${description}.`);
|
|
76
|
+
active.set(event.toolCallId, description);
|
|
77
|
+
});
|
|
78
|
+
pi.on("tool_execution_end", (event) => {
|
|
79
|
+
if (!timer) return;
|
|
80
|
+
active.delete(event.toolCallId);
|
|
81
|
+
completed++;
|
|
82
|
+
if (event.isError) errors++;
|
|
83
|
+
});
|
|
84
|
+
pi.on("message_end", (event) => {
|
|
85
|
+
const message = event.message;
|
|
86
|
+
if (
|
|
87
|
+
message.role === "assistant" &&
|
|
88
|
+
message.content.some((c) => c.type === "text" && c.text.trim())
|
|
89
|
+
)
|
|
90
|
+
lastVisibleAt = Date.now();
|
|
91
|
+
});
|
|
92
|
+
pi.on("agent_end", stop);
|
|
93
|
+
pi.on("session_start", stop);
|
|
94
|
+
pi.on("session_shutdown", stop);
|
|
95
|
+
}
|