@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,363 @@
|
|
|
1
|
+
// Loom used to write its MCP servers into mcp.json for pi-mcp-adapter. The brain
|
|
2
|
+
// now registers them with pi's built-in MCP, where a file entry of the same name
|
|
3
|
+
// wins over a registration -- a leftover galaxy entry would pin an old profile
|
|
4
|
+
// (and the plaintext key earlier versions wrote) indefinitely.
|
|
5
|
+
//
|
|
6
|
+
// The same file can hold the user's own servers, written for the adapter. pi
|
|
7
|
+
// ignores the adapter's fields rather than rejecting them, so a tool the user
|
|
8
|
+
// excluded would quietly become callable. Translate what pi can express and
|
|
9
|
+
// disable what it can't.
|
|
10
|
+
|
|
11
|
+
import { existsSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
12
|
+
|
|
13
|
+
const LEGACY_SERVER_NAMES = ["galaxy", "brc-analytics"];
|
|
14
|
+
|
|
15
|
+
/** Sits beside mcp.json and holds the bytes the migration last rewrote or removed. */
|
|
16
|
+
export const BACKUP_SUFFIX = ".loom-backup";
|
|
17
|
+
|
|
18
|
+
// Present on an entry written for pi's built-in MCP, which Loom never did: a
|
|
19
|
+
// galaxy or brc-analytics entry carrying one and no adapter field is the user's
|
|
20
|
+
// own override.
|
|
21
|
+
const PI_NATIVE_FIELDS = ["exposure", "toolExposure", "enabled", "timeout", "auth"];
|
|
22
|
+
|
|
23
|
+
// Adapter features with no pi equivalent. Keeping such a server on would drop a
|
|
24
|
+
// safeguard (approval prompts) or connect without the configured credentials.
|
|
25
|
+
const UNSUPPORTED_FIELDS = [
|
|
26
|
+
"approveTools",
|
|
27
|
+
"bearerTokenStore",
|
|
28
|
+
"requestHeadersCommand",
|
|
29
|
+
"caFile",
|
|
30
|
+
"socket",
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const ADAPTER_ONLY_FIELDS = [
|
|
34
|
+
...UNSUPPORTED_FIELDS,
|
|
35
|
+
"directTools",
|
|
36
|
+
"includeTools",
|
|
37
|
+
"excludeTools",
|
|
38
|
+
"bearerToken",
|
|
39
|
+
"bearerTokenEnv",
|
|
40
|
+
"lifecycle",
|
|
41
|
+
"idleTimeout",
|
|
42
|
+
"requestTimeoutMs",
|
|
43
|
+
"exposeResources",
|
|
44
|
+
"toolPrefix",
|
|
45
|
+
"searchKeywords",
|
|
46
|
+
"debug",
|
|
47
|
+
"trace",
|
|
48
|
+
"httpTransport",
|
|
49
|
+
"inheritEnv",
|
|
50
|
+
"literalEnv",
|
|
51
|
+
"literalArgs",
|
|
52
|
+
"pluginDataDir",
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
/** @param {unknown} v */
|
|
56
|
+
const isObject = (v) => !!v && typeof v === "object" && !Array.isArray(v);
|
|
57
|
+
/** @param {unknown} v @returns {string[]} */
|
|
58
|
+
const stringList = (v) => (Array.isArray(v) ? v.filter((s) => typeof s === "string") : []);
|
|
59
|
+
|
|
60
|
+
/** @param {string} name @param {Record<string, any>} entry */
|
|
61
|
+
function pointsAtOrbitServer(name, entry) {
|
|
62
|
+
if (name === "galaxy") {
|
|
63
|
+
return (
|
|
64
|
+
entry.command === "uvx" && stringList(entry.args).some((a) => a.startsWith("galaxy-mcp"))
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return typeof entry.url === "string" && entry.url.includes("brc-analytics.org");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Loom wrote its entries for the adapter, pointing at its own galaxy-mcp or BRC
|
|
72
|
+
* server. One that also has a pi field had it added by hand afterwards -- still
|
|
73
|
+
* Orbit's entry, holding the plaintext key and an exclude list pi ignores -- but
|
|
74
|
+
* an entry that turns the server off is a choice the brain's registration would
|
|
75
|
+
* undo if the entry went away, so it stays.
|
|
76
|
+
* @param {string} name @param {unknown} entry
|
|
77
|
+
*/
|
|
78
|
+
function isOrbitWritten(name, entry) {
|
|
79
|
+
if (!isObject(entry)) return false;
|
|
80
|
+
if (entry.enabled === false || entry.exposure === "hidden") return false;
|
|
81
|
+
const adapterShaped = ADAPTER_ONLY_FIELDS.some((f) => f in entry);
|
|
82
|
+
if (!PI_NATIVE_FIELDS.some((f) => f in entry)) {
|
|
83
|
+
return adapterShaped || pointsAtOrbitServer(name, entry);
|
|
84
|
+
}
|
|
85
|
+
return adapterShaped && pointsAtOrbitServer(name, entry);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// pi only expands a name that starts with a letter or underscore; the adapter
|
|
89
|
+
// took any word characters.
|
|
90
|
+
const PI_ENV_NAME = /^[A-Za-z_]\w*$/;
|
|
91
|
+
|
|
92
|
+
// The adapter expanded ${NAME}, $env:NAME and {env:NAME}, ran a value with one
|
|
93
|
+
// leading "!" as a command, and read "!!" as a literal "!". pi also expands a
|
|
94
|
+
// bare $NAME and runs "!!..." as a command, so each value is respelled to come
|
|
95
|
+
// out the same: "$$" is pi's literal "$", and "$!" its literal "!".
|
|
96
|
+
const ADAPTER_REF_ONLY = /\$\{\w+\}|\$env:\w+|\{env:\w+\}/;
|
|
97
|
+
const ADAPTER_REF = /\$\{(\w+)\}|\$env:(\w+)|\{env:(\w+)\}|\$/g;
|
|
98
|
+
|
|
99
|
+
/** @param {string} value */
|
|
100
|
+
function piLiteral(value) {
|
|
101
|
+
const escaped = value.replace(/\$/g, () => "$$");
|
|
102
|
+
return escaped.startsWith("!") ? `$${escaped}` : escaped;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param {string} value @param {boolean} literal
|
|
107
|
+
* @param {string[]} unspellable collects env names pi can't reference
|
|
108
|
+
*/
|
|
109
|
+
function adapterValueToPi(value, literal, unspellable) {
|
|
110
|
+
if (literal) return piLiteral(value);
|
|
111
|
+
if (value.startsWith("!") && !value.startsWith("!!")) return value;
|
|
112
|
+
const bang = value.startsWith("!!");
|
|
113
|
+
const body = (bang ? value.slice(2) : value).replace(ADAPTER_REF, (ref, a, b, c) => {
|
|
114
|
+
const name = a ?? b ?? c;
|
|
115
|
+
if (!name) return "$$";
|
|
116
|
+
if (!PI_ENV_NAME.test(name)) unspellable.push(name);
|
|
117
|
+
return `\${${name}}`;
|
|
118
|
+
});
|
|
119
|
+
return bang ? `$!${body}` : body;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @param {unknown} record @param {boolean} literal
|
|
124
|
+
* @param {string[]} unspellable
|
|
125
|
+
*/
|
|
126
|
+
function translateValues(record, literal, unspellable) {
|
|
127
|
+
if (!isObject(record)) return record;
|
|
128
|
+
return Object.fromEntries(
|
|
129
|
+
Object.entries(record).map(([k, v]) => [
|
|
130
|
+
k,
|
|
131
|
+
typeof v === "string" ? adapterValueToPi(v, literal, unspellable) : v,
|
|
132
|
+
]),
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Rewrite one user server's adapter fields into pi's. Returns a notice when the
|
|
138
|
+
* server had to be disabled.
|
|
139
|
+
* @param {string} name
|
|
140
|
+
* @param {Record<string, any>} entry
|
|
141
|
+
* @returns {string | null}
|
|
142
|
+
*/
|
|
143
|
+
function translateAdapterEntry(name, entry) {
|
|
144
|
+
const unsupported = UNSUPPORTED_FIELDS.filter((f) => {
|
|
145
|
+
const v = entry[f];
|
|
146
|
+
return v !== undefined && v !== false && !(Array.isArray(v) && v.length === 0);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
/** @type {Record<string, string>} */
|
|
150
|
+
const toolExposure = {};
|
|
151
|
+
let exposure;
|
|
152
|
+
const direct = entry.directTools;
|
|
153
|
+
if (direct === true) exposure = "direct";
|
|
154
|
+
else if (direct === "search") exposure = "deferred";
|
|
155
|
+
for (const tool of stringList(direct)) toolExposure[tool] = "direct";
|
|
156
|
+
|
|
157
|
+
const include = stringList(entry.includeTools);
|
|
158
|
+
if (include.length > 0) {
|
|
159
|
+
for (const tool of include) toolExposure[tool] ??= exposure ?? "codemode";
|
|
160
|
+
exposure = "hidden";
|
|
161
|
+
}
|
|
162
|
+
for (const tool of stringList(entry.excludeTools)) toolExposure[tool] = "hidden";
|
|
163
|
+
|
|
164
|
+
if (exposure) entry.exposure = exposure;
|
|
165
|
+
if (Object.keys(toolExposure).length > 0) entry.toolExposure = toolExposure;
|
|
166
|
+
if (typeof entry.requestTimeoutMs === "number" && entry.requestTimeoutMs > 0) {
|
|
167
|
+
entry.timeout = Math.ceil(entry.requestTimeoutMs / 1000);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// pi has no per-server switch for resources; its resource tools only skip a
|
|
171
|
+
// server whose exposure is hidden.
|
|
172
|
+
if (entry.exposeResources === false && entry.exposure !== "hidden") {
|
|
173
|
+
unsupported.push("exposeResources: false");
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** @type {string[]} */
|
|
177
|
+
const unspellable = [];
|
|
178
|
+
if ("env" in entry)
|
|
179
|
+
entry.env = translateValues(entry.env, entry.literalEnv === true, unspellable);
|
|
180
|
+
const headers = isObject(entry.headers) ? translateValues(entry.headers, false, unspellable) : {};
|
|
181
|
+
if ("headers" in entry) entry.headers = headers;
|
|
182
|
+
const hasAuthHeader = Object.keys(headers).some((h) => h.toLowerCase() === "authorization");
|
|
183
|
+
let token = null;
|
|
184
|
+
// The adapter sent a bearer token only when auth was "bearer".
|
|
185
|
+
// An explicit bearerToken won over bearerTokenEnv.
|
|
186
|
+
if (entry.auth === "bearer") {
|
|
187
|
+
if (typeof entry.bearerToken === "string") {
|
|
188
|
+
// A pi header runs a command only when the whole value is one, so
|
|
189
|
+
// "Bearer <command output>" has no spelling there.
|
|
190
|
+
if (entry.bearerToken.startsWith("!") && !entry.bearerToken.startsWith("!!")) {
|
|
191
|
+
unsupported.push("a bearerToken command");
|
|
192
|
+
} else token = adapterValueToPi(entry.bearerToken, false, unspellable);
|
|
193
|
+
} else if (typeof entry.bearerTokenEnv === "string") {
|
|
194
|
+
if (!PI_ENV_NAME.test(entry.bearerTokenEnv)) unspellable.push(entry.bearerTokenEnv);
|
|
195
|
+
token = `\${${entry.bearerTokenEnv}}`;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (token && !hasAuthHeader) entry.headers = { ...headers, Authorization: `Bearer ${token}` };
|
|
199
|
+
// The adapter also expanded references in the url and (unless literalArgs) the
|
|
200
|
+
// args; pi expands neither, so such a value would silently become literal.
|
|
201
|
+
if (typeof entry.url === "string" && ADAPTER_REF_ONLY.test(entry.url)) {
|
|
202
|
+
unsupported.push("env references in its url");
|
|
203
|
+
}
|
|
204
|
+
if (entry.literalArgs !== true && stringList(entry.args).some((a) => ADAPTER_REF_ONLY.test(a))) {
|
|
205
|
+
unsupported.push("env references in its args");
|
|
206
|
+
}
|
|
207
|
+
if (unspellable.length > 0) {
|
|
208
|
+
unsupported.push(`env references pi can't spell (${[...new Set(unspellable)].join(", ")})`);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
for (const f of ADAPTER_ONLY_FIELDS) delete entry[f];
|
|
212
|
+
// The adapter's auth was a mode string; pi's is an object naming a provider.
|
|
213
|
+
if (typeof entry.auth === "string" || entry.auth === false) delete entry.auth;
|
|
214
|
+
|
|
215
|
+
if (unsupported.length === 0) return null;
|
|
216
|
+
entry.enabled = false;
|
|
217
|
+
return (
|
|
218
|
+
`MCP server "${name}" used ${unsupported.join(", ")}, which pi's built-in MCP ` +
|
|
219
|
+
`does not support, so Orbit disabled it in mcp.json. Review it and re-enable with /mcp.`
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Remove Orbit's own servers and the adapter's settings from a parsed mcp.json,
|
|
225
|
+
* and translate the user's remaining servers to pi's built-in MCP fields.
|
|
226
|
+
* @param {Record<string, any>} config
|
|
227
|
+
* @returns {{ changed: boolean, empty: boolean, removedGalaxy: boolean, notices: string[], shadowing: string[] }}
|
|
228
|
+
* `empty` when nothing is left worth keeping. `shadowing` names the galaxy /
|
|
229
|
+
* brc-analytics entries that stay because they carry pi's own fields: a file
|
|
230
|
+
* entry beats the brain's registration, so each one pins whatever it says.
|
|
231
|
+
*/
|
|
232
|
+
export function stripLegacyMcpEntries(config) {
|
|
233
|
+
let changed = false;
|
|
234
|
+
let removedGalaxy = false;
|
|
235
|
+
/** @type {string[]} */
|
|
236
|
+
const notices = [];
|
|
237
|
+
/** @type {string[]} */
|
|
238
|
+
const shadowing = [];
|
|
239
|
+
const servers = isObject(config.mcpServers) ? config.mcpServers : null;
|
|
240
|
+
if (servers) {
|
|
241
|
+
for (const [name, entry] of Object.entries(servers)) {
|
|
242
|
+
if (LEGACY_SERVER_NAMES.includes(name)) {
|
|
243
|
+
if (!isOrbitWritten(name, entry)) {
|
|
244
|
+
if (isObject(entry) && entry.enabled !== false) shadowing.push(name);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
delete servers[name];
|
|
248
|
+
changed = true;
|
|
249
|
+
if (name === "galaxy") removedGalaxy = true;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
if (!isObject(entry) || !ADAPTER_ONLY_FIELDS.some((f) => f in entry)) continue;
|
|
253
|
+
const notice = translateAdapterEntry(name, entry);
|
|
254
|
+
if (notice) notices.push(notice);
|
|
255
|
+
changed = true;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (isObject(config.settings) && "scriptMode" in config.settings) {
|
|
259
|
+
delete config.settings.scriptMode;
|
|
260
|
+
if (Object.keys(config.settings).length === 0) delete config.settings;
|
|
261
|
+
changed = true;
|
|
262
|
+
}
|
|
263
|
+
const otherKeys = Object.keys(config).filter((k) => k !== "mcpServers");
|
|
264
|
+
const empty = otherKeys.length === 0 && Object.keys(servers ?? {}).length === 0;
|
|
265
|
+
return { changed, empty, removedGalaxy, notices, shadowing };
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/** @param {string} name @param {string} mcpConfigPath */
|
|
269
|
+
function shadowingNotice(name, mcpConfigPath) {
|
|
270
|
+
const what =
|
|
271
|
+
name === "galaxy"
|
|
272
|
+
? "the Galaxy server and key saved there, not the profile from /connect"
|
|
273
|
+
: "that BRC Analytics server, not the one Orbit ships";
|
|
274
|
+
return (
|
|
275
|
+
`${mcpConfigPath} still has a "${name}" entry written for pi's built-in MCP. ` +
|
|
276
|
+
`A file entry wins over the brain's registration, so Orbit will use ${what}. ` +
|
|
277
|
+
`Remove the entry if that is not what you want.`
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Replace `dest` with `tmpPath`. Windows can refuse the rename for a moment
|
|
283
|
+
* while an indexer or antivirus has the file open, so try a few times before
|
|
284
|
+
* giving up.
|
|
285
|
+
* @param {string} tmpPath @param {string} dest
|
|
286
|
+
*/
|
|
287
|
+
function renameWithRetry(tmpPath, dest) {
|
|
288
|
+
const pause = new Int32Array(new SharedArrayBuffer(4));
|
|
289
|
+
for (let attempt = 1; ; attempt++) {
|
|
290
|
+
try {
|
|
291
|
+
renameSync(tmpPath, dest);
|
|
292
|
+
return;
|
|
293
|
+
} catch (err) {
|
|
294
|
+
if (attempt >= 3) throw err;
|
|
295
|
+
Atomics.wait(pause, 0, 0, 100 * attempt);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Migrate the mcp.json at `mcpConfigPath` in place. Before the file changes,
|
|
302
|
+
* its current bytes go to `<path>.loom-backup` (mode 0600; it may carry a key).
|
|
303
|
+
* Nothing here throws: a file that cannot be updated is left as it was and
|
|
304
|
+
* described in the returned notices, because refusing to start would leave the
|
|
305
|
+
* user with no way to fix it from inside Orbit, and there is no restriction to
|
|
306
|
+
* lose when the file cannot be written at all.
|
|
307
|
+
* @param {string} mcpConfigPath
|
|
308
|
+
* @returns {{ notices: string[] }} messages for the launcher to print
|
|
309
|
+
*/
|
|
310
|
+
export function migrateLegacyMcpConfig(mcpConfigPath) {
|
|
311
|
+
/** @type {string[]} */
|
|
312
|
+
const notices = [];
|
|
313
|
+
if (!existsSync(mcpConfigPath)) return { notices };
|
|
314
|
+
|
|
315
|
+
let raw;
|
|
316
|
+
let mcpConfig;
|
|
317
|
+
try {
|
|
318
|
+
raw = readFileSync(mcpConfigPath, "utf-8");
|
|
319
|
+
mcpConfig = JSON.parse(raw);
|
|
320
|
+
} catch {
|
|
321
|
+
// An unparseable mcp.json is pi's to report, and pi loads none of it -- so
|
|
322
|
+
// no stale galaxy entry in it can shadow the brain's registration either.
|
|
323
|
+
return { notices };
|
|
324
|
+
}
|
|
325
|
+
if (!mcpConfig || typeof mcpConfig !== "object") return { notices };
|
|
326
|
+
|
|
327
|
+
const {
|
|
328
|
+
changed,
|
|
329
|
+
empty,
|
|
330
|
+
removedGalaxy,
|
|
331
|
+
notices: translated,
|
|
332
|
+
shadowing,
|
|
333
|
+
} = stripLegacyMcpEntries(mcpConfig);
|
|
334
|
+
for (const name of shadowing) notices.push(shadowingNotice(name, mcpConfigPath));
|
|
335
|
+
if (!changed) return { notices };
|
|
336
|
+
|
|
337
|
+
const backupPath = `${mcpConfigPath}${BACKUP_SUFFIX}`;
|
|
338
|
+
const tmpPath = `${mcpConfigPath}.${process.pid}.tmp`;
|
|
339
|
+
try {
|
|
340
|
+
writeFileSync(backupPath, raw, { mode: 0o600 });
|
|
341
|
+
if (empty) {
|
|
342
|
+
rmSync(mcpConfigPath);
|
|
343
|
+
} else {
|
|
344
|
+
writeFileSync(tmpPath, JSON.stringify(mcpConfig, null, 2) + "\n", { mode: 0o600 });
|
|
345
|
+
renameWithRetry(tmpPath, mcpConfigPath);
|
|
346
|
+
}
|
|
347
|
+
notices.push(...translated);
|
|
348
|
+
notices.push(`The previous ${mcpConfigPath} is saved as ${backupPath}.`);
|
|
349
|
+
} catch (err) {
|
|
350
|
+
rmSync(tmpPath, { force: true });
|
|
351
|
+
// Left as it is, the file is read the old way: an old galaxy entry wins
|
|
352
|
+
// over the brain's registration (pinning every session to that account and
|
|
353
|
+
// key), and the user's own servers lose the tool restrictions pi ignores.
|
|
354
|
+
const why = removedGalaxy
|
|
355
|
+
? `Orbit will keep using the Galaxy account saved there`
|
|
356
|
+
: `the servers Orbit meant to migrate keep settings pi ignores, such as tool restrictions`;
|
|
357
|
+
notices.push(
|
|
358
|
+
`Could not update ${mcpConfigPath} (${err instanceof Error ? err.message : err}), ` +
|
|
359
|
+
`so ${why}. Fix the file's permissions, or remove those entries, and restart Orbit.`,
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
return { notices };
|
|
363
|
+
}
|