boost-skill-cli 1.0.418__tar.gz → 1.0.419__tar.gz
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.
- {boost_skill_cli-1.0.418/boost_skill_cli.egg-info → boost_skill_cli-1.0.419}/PKG-INFO +13 -4
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/README.md +12 -3
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/configuration.py +131 -33
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/taps.py +5 -2
- boost_skill_cli-1.0.419/boost_cli/core/bootstrap.py +135 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/config.py +22 -1
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/mcp.py +96 -8
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419/boost_skill_cli.egg-info}/PKG-INFO +13 -4
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/commands.html +5 -3
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/index.html +28 -12
- boost_skill_cli-1.0.419/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +46 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap.html +44 -1
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/environment.py +6 -1
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/conftest.py +5 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_configuration.py +184 -3
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_taps.py +3 -3
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_everyday_loop.py +1 -1
- boost_skill_cli-1.0.419/tests/unit/test_bootstrap.py +282 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_config.py +16 -2
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mcp.py +184 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.gitattributes +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.gitignore +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/.vale.ini +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/LICENSE +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/Makefile +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/codecov.yml +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/langchain.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/README.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/examples/README.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/index.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/noxfile.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/setup.cfg +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/style/README.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/style/boost.css +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/style/boost.js +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/style/demo.html +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.418 → boost_skill_cli-1.0.419}/tests/visual/visual_check.mjs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.419
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -732,7 +732,7 @@ Windsurf, Cursor, and Gemini CLI** in a single pass.
|
|
|
732
732
|
|
|
733
733
|
```bash
|
|
734
734
|
pipx install boost-skill-cli
|
|
735
|
-
boost tap --defaults #
|
|
735
|
+
boost tap --defaults # 7 curated registries: skills, rules, workflows
|
|
736
736
|
boost search tdd # full-content BM25 over every skill
|
|
737
737
|
boost install tdd-workflow # → every agent, version-pinned, one lock file
|
|
738
738
|
```
|
|
@@ -776,7 +776,7 @@ Needs Python 3.12+ and `git`.
|
|
|
776
776
|
```bash
|
|
777
777
|
pipx install boost-skill-cli # or: pip install boost-skill-cli
|
|
778
778
|
boost --version
|
|
779
|
-
boost tap --defaults # pull in the
|
|
779
|
+
boost tap --defaults # pull in the 7 starter registries
|
|
780
780
|
|
|
781
781
|
# upgrading later is `upgrade`, not `install --upgrade` — with a bare package
|
|
782
782
|
# name the latter matches the spec you already satisfy and silently does nothing
|
|
@@ -958,14 +958,23 @@ just less cleverly.
|
|
|
958
958
|
|
|
959
959
|
boost is itself an MCP server, so an agent can search and install skills mid-task
|
|
960
960
|
instead of waiting for you to shell out. `boost mcp register` wires it into every
|
|
961
|
-
agent CLI it finds on your PATH
|
|
961
|
+
agent CLI it finds on your PATH — and on a machine with no taps yet it also pulls
|
|
962
|
+
in the starter registries first, so **installing boost and running `boost mcp` is
|
|
963
|
+
the whole setup**:
|
|
962
964
|
|
|
963
965
|
```bash
|
|
964
966
|
boost mcp register # every installed host (default: --host auto)
|
|
965
967
|
boost mcp register --host gemini # just one
|
|
968
|
+
boost mcp register --no-seed # register only; tap nothing
|
|
969
|
+
boost mcp register --seed # re-tap the defaults even if taps exist
|
|
966
970
|
boost mcp unregister # same host selection, in reverse
|
|
967
971
|
```
|
|
968
972
|
|
|
973
|
+
The seed only fires when the catalog is empty — re-running `boost mcp` on a
|
|
974
|
+
configured machine leaves your taps alone — and a failed clone is reported
|
|
975
|
+
without taking the registration down with it. Export `BOOST_NO_SEED=1` to keep
|
|
976
|
+
`boost mcp` a purely local operation (CI images, air-gapped machines).
|
|
977
|
+
|
|
969
978
|
| Host | CLI | Registered in |
|
|
970
979
|
|------|-----|---------------|
|
|
971
980
|
| Claude Code | `claude` | `claude mcp add` → its user-scope MCP config |
|
|
@@ -14,7 +14,7 @@ Windsurf, Cursor, and Gemini CLI** in a single pass.
|
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
pipx install boost-skill-cli
|
|
17
|
-
boost tap --defaults #
|
|
17
|
+
boost tap --defaults # 7 curated registries: skills, rules, workflows
|
|
18
18
|
boost search tdd # full-content BM25 over every skill
|
|
19
19
|
boost install tdd-workflow # → every agent, version-pinned, one lock file
|
|
20
20
|
```
|
|
@@ -58,7 +58,7 @@ Needs Python 3.12+ and `git`.
|
|
|
58
58
|
```bash
|
|
59
59
|
pipx install boost-skill-cli # or: pip install boost-skill-cli
|
|
60
60
|
boost --version
|
|
61
|
-
boost tap --defaults # pull in the
|
|
61
|
+
boost tap --defaults # pull in the 7 starter registries
|
|
62
62
|
|
|
63
63
|
# upgrading later is `upgrade`, not `install --upgrade` — with a bare package
|
|
64
64
|
# name the latter matches the spec you already satisfy and silently does nothing
|
|
@@ -240,14 +240,23 @@ just less cleverly.
|
|
|
240
240
|
|
|
241
241
|
boost is itself an MCP server, so an agent can search and install skills mid-task
|
|
242
242
|
instead of waiting for you to shell out. `boost mcp register` wires it into every
|
|
243
|
-
agent CLI it finds on your PATH
|
|
243
|
+
agent CLI it finds on your PATH — and on a machine with no taps yet it also pulls
|
|
244
|
+
in the starter registries first, so **installing boost and running `boost mcp` is
|
|
245
|
+
the whole setup**:
|
|
244
246
|
|
|
245
247
|
```bash
|
|
246
248
|
boost mcp register # every installed host (default: --host auto)
|
|
247
249
|
boost mcp register --host gemini # just one
|
|
250
|
+
boost mcp register --no-seed # register only; tap nothing
|
|
251
|
+
boost mcp register --seed # re-tap the defaults even if taps exist
|
|
248
252
|
boost mcp unregister # same host selection, in reverse
|
|
249
253
|
```
|
|
250
254
|
|
|
255
|
+
The seed only fires when the catalog is empty — re-running `boost mcp` on a
|
|
256
|
+
configured machine leaves your taps alone — and a failed clone is reported
|
|
257
|
+
without taking the registration down with it. Export `BOOST_NO_SEED=1` to keep
|
|
258
|
+
`boost mcp` a purely local operation (CI images, air-gapped machines).
|
|
259
|
+
|
|
251
260
|
| Host | CLI | Registered in |
|
|
252
261
|
|------|-----|---------------|
|
|
253
262
|
| Claude Code | `claude` | `claude mcp add` → its user-scope MCP config |
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.419'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 419)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -16,6 +16,7 @@ from pathlib import Path
|
|
|
16
16
|
from .. import __version__, cliparse
|
|
17
17
|
from ..core import (
|
|
18
18
|
agents,
|
|
19
|
+
bootstrap,
|
|
19
20
|
catalog,
|
|
20
21
|
complete,
|
|
21
22
|
config,
|
|
@@ -877,23 +878,23 @@ def _tool_search(args: dict):
|
|
|
877
878
|
# the asymmetry with the CLI is a decision someone can revisit, not a
|
|
878
879
|
# default nobody chose. It degrades on its own when no AI is configured.
|
|
879
880
|
rag_result = rag.search(query, limit=10, smart=True)
|
|
881
|
+
# Both empty branches route through mcp.no_results, which tells a real
|
|
882
|
+
# miss apart from a machine that has never been tapped — the two used to
|
|
883
|
+
# share one sentence, and the fresh-install case is the one an agent reads
|
|
884
|
+
# first and learns the most from.
|
|
885
|
+
tapped = len(registry.list_taps())
|
|
880
886
|
if rag_result is not None: # full-content index is built
|
|
881
887
|
hits, ranker = rag_result
|
|
882
888
|
if not hits:
|
|
883
|
-
return
|
|
884
|
-
lines = [
|
|
885
|
-
"%s — %s (%s)" % (h["entry"]["name"],
|
|
886
|
-
h["entry"].get("description", ""),
|
|
887
|
-
h["entry"]["tap"])
|
|
888
|
-
for h in hits]
|
|
889
|
+
return mcp.no_results(query, tapped=tapped), False
|
|
890
|
+
lines = [mcp.hit_line(h["entry"]) for h in hits]
|
|
889
891
|
lines.append(_ranking_note(ranker))
|
|
890
892
|
return "\n".join(lines), False
|
|
891
893
|
# no index yet -> keep today's frontmatter search so nothing regresses
|
|
892
894
|
scored = catalog.search(query)[:10]
|
|
893
895
|
if not scored:
|
|
894
|
-
return
|
|
895
|
-
return "\n".join(
|
|
896
|
-
for e, _score in scored), False
|
|
896
|
+
return mcp.no_results(query, tapped=tapped), False
|
|
897
|
+
return "\n".join(mcp.hit_line(e) for e, _score in scored), False
|
|
897
898
|
|
|
898
899
|
|
|
899
900
|
def _tool_list(args: dict):
|
|
@@ -987,7 +988,10 @@ def _tool_doctor(args: dict):
|
|
|
987
988
|
lines = ["installed skills: %d" % len(everything["skill"]),
|
|
988
989
|
"installed rules: %d · workflows: %d"
|
|
989
990
|
% (len(everything["rule"]), len(everything["workflow"])),
|
|
990
|
-
"
|
|
991
|
+
# "items", not "skills": the default taps now carry rules and
|
|
992
|
+
# workflows too, so counting all of them as skills overstates one
|
|
993
|
+
# kind and hides the other two in the same breath.
|
|
994
|
+
"taps: %d (%d items available)" % (len(taps), len(catalog.all_entries()))]
|
|
991
995
|
for key, vals in plan.items():
|
|
992
996
|
if vals:
|
|
993
997
|
lines.append("%s: %s" % (key, ", ".join(str(v) for v in vals)))
|
|
@@ -1000,8 +1004,26 @@ def _tool_doctor(args: dict):
|
|
|
1000
1004
|
== integrity.STATUS_MODIFIED)]
|
|
1001
1005
|
lines.extend(mat_issues)
|
|
1002
1006
|
total = issues + len(mat_issues)
|
|
1007
|
+
# A machine with no taps has nothing to disagree about, so every check
|
|
1008
|
+
# above passes and the old reply called it "healthy" — directly under the
|
|
1009
|
+
# line saying `taps: 0 (0 items available)`. That is the one state where
|
|
1010
|
+
# a clean bill of health is actively misleading: the surface cannot answer
|
|
1011
|
+
# anything yet, which is a setup step, not health. Reported, never fatal.
|
|
1012
|
+
# Additive, deliberately: an untapped machine can ALSO have a broken
|
|
1013
|
+
# materialization, and folding the two into one branch would hide the
|
|
1014
|
+
# issue count behind the setup note.
|
|
1015
|
+
if not taps:
|
|
1016
|
+
# Same command, same order, as mcp.no_results: an agent that calls
|
|
1017
|
+
# both tools in one session must not see the recommendation flipped
|
|
1018
|
+
# and read it as two different fixes. `boost tap --defaults` leads
|
|
1019
|
+
# because it is the precise one — `boost mcp --seed` also
|
|
1020
|
+
# re-registers the server with every agent CLI on PATH.
|
|
1021
|
+
lines.append("no registries tapped — nothing is searchable yet; ask "
|
|
1022
|
+
"the user to run `boost tap --defaults` to add the "
|
|
1023
|
+
"recommended ones")
|
|
1003
1024
|
if total == 0:
|
|
1004
|
-
|
|
1025
|
+
if taps:
|
|
1026
|
+
lines.append("healthy — no issues found")
|
|
1005
1027
|
elif mat_issues:
|
|
1006
1028
|
lines.append("%d issue(s) — run `boost doctor` for details" % total)
|
|
1007
1029
|
else:
|
|
@@ -1045,12 +1067,19 @@ def _tool_discover_github(args: dict):
|
|
|
1045
1067
|
REGISTRY.register(
|
|
1046
1068
|
"boost_search",
|
|
1047
1069
|
"Someone has probably solved this already — one call tells you. Searches "
|
|
1048
|
-
"every
|
|
1049
|
-
"
|
|
1050
|
-
"
|
|
1051
|
-
"
|
|
1070
|
+
"every skill, rule and workflow in every registry you have tapped and "
|
|
1071
|
+
"returns ranked matches, one per line: name, a [rule] or [workflow] kind "
|
|
1072
|
+
"marker where it is not a skill, the one-line description, and the tap it "
|
|
1073
|
+
"came from. The kinds differ in what they do for you — a SKILL is a "
|
|
1074
|
+
"procedure a practitioner already worked out and debugged, edge cases "
|
|
1075
|
+
"included; a RULE is a guardrail that steers toward a better path and "
|
|
1076
|
+
"rules out an anti-pattern; a WORKFLOW is a slash-command or subagent. "
|
|
1077
|
+
"Reach for it the moment the task in front of you has a name you "
|
|
1052
1078
|
"could say out loud — \"set up code review\", \"add commit conventions\", "
|
|
1053
|
-
"\"debug flaky tests\" — and
|
|
1079
|
+
"\"debug flaky tests\" — and especially where a choice is about to get "
|
|
1080
|
+
"locked in for everything after it: a new project or subsystem, an "
|
|
1081
|
+
"architecture decision, environment and tooling config, a linter or "
|
|
1082
|
+
"formatter, tests, CI. Also before writing a skill, subagent, "
|
|
1054
1083
|
"slash-command or rule from scratch. Read-only where it counts: it "
|
|
1055
1084
|
"installs nothing and touches nothing you are working on, though the first "
|
|
1056
1085
|
"search builds a local index under ~/.boost. A hit commits you to nothing "
|
|
@@ -1059,32 +1088,41 @@ REGISTRY.register(
|
|
|
1059
1088
|
"result worth acting on rather than skimming. Worth budgeting for, not a "
|
|
1060
1089
|
"surprise. Coming back empty is a real answer too, not a "
|
|
1061
1090
|
"wasted turn: it means build it yourself, now knowing nothing already "
|
|
1062
|
-
"covers it
|
|
1091
|
+
"covers it — and on a machine with nothing tapped yet it says so and names "
|
|
1092
|
+
"the one command that fixes it, rather than reporting a miss.",
|
|
1063
1093
|
{"type": "object",
|
|
1064
1094
|
"properties": {"query": {"type": "string",
|
|
1065
|
-
"description": "what
|
|
1066
|
-
"
|
|
1095
|
+
"description": "what you are trying to do, in "
|
|
1096
|
+
"your own words — a task, capability or problem "
|
|
1097
|
+
"(\"set up pre-commit hooks for a python repo\") "
|
|
1098
|
+
"rather than a bare keyword"}},
|
|
1067
1099
|
"required": ["query"]},
|
|
1068
1100
|
_tool_search)
|
|
1069
1101
|
REGISTRY.register(
|
|
1070
1102
|
"boost_list",
|
|
1071
|
-
"The skills already installed on this machine and
|
|
1072
|
-
"capability you own and may not know you own.
|
|
1073
|
-
"
|
|
1074
|
-
"
|
|
1103
|
+
"The skills, rules and workflows already installed on this machine and "
|
|
1104
|
+
"usable this second — capability you own and may not know you own. "
|
|
1105
|
+
"Returns one line each: name, version, tap, a [rule] or [workflow] marker "
|
|
1106
|
+
"where it is not a skill, and [pinned] where the version is held. "
|
|
1107
|
+
"Read-only, instant, installs nothing — so unlike boost_search there is "
|
|
1108
|
+
"no threshold worth applying: call it whenever you are about to plan "
|
|
1109
|
+
"something. Planning from memory while "
|
|
1075
1110
|
"the answer already sits on disk is the one avoidable mistake here.",
|
|
1076
1111
|
{"type": "object", "properties": {}},
|
|
1077
1112
|
_tool_list)
|
|
1078
1113
|
REGISTRY.register(
|
|
1079
1114
|
"boost_info",
|
|
1080
|
-
"The whole picture of one skill by name — what it does,
|
|
1115
|
+
"The whole picture of one skill, rule or workflow by name — what it does, "
|
|
1116
|
+
"its kind, the tap it came "
|
|
1081
1117
|
"from, its version, and whether it is already installed — so you can "
|
|
1082
1118
|
"commit or move on without guessing. Reach for it when a name arrives from "
|
|
1083
1119
|
"somewhere else: a teammate, a README, a repo you are reading. You do not "
|
|
1084
1120
|
"need this between a search and an install — boost_search already returns "
|
|
1085
|
-
"each match's description.",
|
|
1121
|
+
"each match's kind and description.",
|
|
1086
1122
|
{"type": "object",
|
|
1087
|
-
"properties": {"name": {"type": "string",
|
|
1123
|
+
"properties": {"name": {"type": "string",
|
|
1124
|
+
"description": "the item's name, as boost_search "
|
|
1125
|
+
"or boost_list returned it"}},
|
|
1088
1126
|
"required": ["name"]},
|
|
1089
1127
|
_tool_info)
|
|
1090
1128
|
REGISTRY.register(
|
|
@@ -1096,18 +1134,29 @@ REGISTRY.register(
|
|
|
1096
1134
|
"a prompt, which lasts one "
|
|
1097
1135
|
"session and helps nobody else: an installed skill is version-tracked, "
|
|
1098
1136
|
"survives restarts, updates cleanly, and your team can install the "
|
|
1099
|
-
"identical thing by name. Worth knowing before you call it:
|
|
1100
|
-
"
|
|
1101
|
-
"
|
|
1102
|
-
"
|
|
1137
|
+
"identical thing by name. Worth knowing before you call it: what happens "
|
|
1138
|
+
"on disk depends on the kind, which boost_search marks on every hit. A "
|
|
1139
|
+
"skill is copied into the store and linked out. A WORKFLOW is rendered "
|
|
1140
|
+
"into each agent's commands or agents directory, in that agent's own "
|
|
1141
|
+
"format. A RULE copies nothing into the store — it becomes part of your "
|
|
1142
|
+
"agent's standing instructions (a managed block in its context file, or a "
|
|
1143
|
+
"file in its rules directory), which is the more invasive change because "
|
|
1144
|
+
"it applies to every session afterwards, not just when you reach for it. "
|
|
1145
|
+
"Check the marker on the hit you are installing.",
|
|
1103
1146
|
{"type": "object",
|
|
1104
|
-
"properties": {"name": {"type": "string",
|
|
1147
|
+
"properties": {"name": {"type": "string",
|
|
1148
|
+
"description": "the name exactly as boost_search "
|
|
1149
|
+
"or boost_list returned it; qualify with the tap "
|
|
1150
|
+
"(\"owner/repo:name\") when the same name exists "
|
|
1151
|
+
"in more than one"}},
|
|
1105
1152
|
"required": ["name"]},
|
|
1106
1153
|
_tool_install)
|
|
1107
1154
|
REGISTRY.register(
|
|
1108
1155
|
"boost_doctor",
|
|
1109
1156
|
"Prove the skills you think are installed are actually usable. Reports how "
|
|
1110
|
-
"many skills are installed, how many taps and
|
|
1157
|
+
"many skills, rules and workflows are installed, how many taps and items "
|
|
1158
|
+
"are reachable (including the case where nothing is tapped at all, which "
|
|
1159
|
+
"is a setup step rather than a fault), and "
|
|
1111
1160
|
"anything the store and the lock file disagree about — and when they do "
|
|
1112
1161
|
"disagree it points at the next action, `boost sync` — though some classes "
|
|
1113
1162
|
"need `boost sync --prune` — rather than leaving you a "
|
|
@@ -1170,8 +1219,39 @@ def _run_mcp_host(host: str, action: str, cmd) -> bool:
|
|
|
1170
1219
|
return True
|
|
1171
1220
|
|
|
1172
1221
|
|
|
1222
|
+
def _seed_catalog_for_mcp(force: bool) -> None:
|
|
1223
|
+
"""Tap the recommended registries so the surface just registered can answer.
|
|
1224
|
+
|
|
1225
|
+
`boost mcp` is the only command a new user is told to run after installing,
|
|
1226
|
+
and it used to leave them with a registered server over an empty catalog —
|
|
1227
|
+
where the first thing any agent asks comes back as a miss. Seeding here is
|
|
1228
|
+
what makes "install boost, run boost mcp" the whole setup.
|
|
1229
|
+
|
|
1230
|
+
Deliberately quiet on an already-tapped machine (see bootstrap.seed_catalog:
|
|
1231
|
+
it returns skipped), and deliberately non-fatal — the user asked to register
|
|
1232
|
+
an MCP server, so a dead network costs them a reported line rather than the
|
|
1233
|
+
registration itself.
|
|
1234
|
+
"""
|
|
1235
|
+
# Announced before the clones start, because the loop that follows is
|
|
1236
|
+
# 14-45s of network with nothing to show for it until it finishes — on
|
|
1237
|
+
# the one command a first-time user was told to run, silence that long
|
|
1238
|
+
# reads as a hang.
|
|
1239
|
+
if bootstrap.will_seed(force=force):
|
|
1240
|
+
out.info("no registries tapped yet — adding the %d recommended ones "
|
|
1241
|
+
"(one-time, needs the network)" % len(config.DEFAULT_TAPS))
|
|
1242
|
+
res = bootstrap.seed_catalog(force=force)
|
|
1243
|
+
if res.skipped:
|
|
1244
|
+
return
|
|
1245
|
+
for line in res.failed:
|
|
1246
|
+
out.warn("could not tap %s" % line)
|
|
1247
|
+
if res.tapped:
|
|
1248
|
+
out.ok(res.summary())
|
|
1249
|
+
else:
|
|
1250
|
+
out.warn(res.summary())
|
|
1251
|
+
|
|
1252
|
+
|
|
1173
1253
|
def cmd_mcp(argv) -> int:
|
|
1174
|
-
"""boost mcp [register|unregister] [--host H] [--stdio]"""
|
|
1254
|
+
"""boost mcp [register|unregister] [--host H] [--stdio] [--seed|--no-seed]"""
|
|
1175
1255
|
p = cliparse.parser(
|
|
1176
1256
|
prog="boost mcp",
|
|
1177
1257
|
description="Register boost as an MCP server for your agent CLIs")
|
|
@@ -1184,6 +1264,16 @@ def cmd_mcp(argv) -> int:
|
|
|
1184
1264
|
% ", ".join(mcphost.hosts()))
|
|
1185
1265
|
p.add_argument("--stdio", action="store_true",
|
|
1186
1266
|
help="run the MCP server on stdin/stdout (used by the agent)")
|
|
1267
|
+
# Mutually exclusive: `--seed --no-seed` used to resolve silently to the
|
|
1268
|
+
# network-touching side, which is the wrong way for an ambiguous pair of
|
|
1269
|
+
# explicitly typed flags to break.
|
|
1270
|
+
seeding = p.add_mutually_exclusive_group()
|
|
1271
|
+
seeding.add_argument("--seed", action="store_true",
|
|
1272
|
+
help="top up any missing recommended registries even "
|
|
1273
|
+
"if others are already tapped (the repair path)")
|
|
1274
|
+
seeding.add_argument("--no-seed", dest="seed_ok", action="store_false",
|
|
1275
|
+
default=True,
|
|
1276
|
+
help="register only; do not tap anything")
|
|
1187
1277
|
args = p.parse_args(argv)
|
|
1188
1278
|
|
|
1189
1279
|
if args.stdio:
|
|
@@ -1195,6 +1285,14 @@ def cmd_mcp(argv) -> int:
|
|
|
1195
1285
|
raise BoostError("unknown MCP host %r" % args.host,
|
|
1196
1286
|
hint="known hosts: %s" % ", ".join(mcphost.hosts())) from e
|
|
1197
1287
|
|
|
1288
|
+
# After the host name is validated and before anything is registered. The
|
|
1289
|
+
# ordering is not cosmetic in either direction: seeding first meant a
|
|
1290
|
+
# typo'd `--host` spent 14-45s and half a gigabyte before argparse's own
|
|
1291
|
+
# error, and seeding last would have registered a server the user then
|
|
1292
|
+
# watches answer nothing while the clones run.
|
|
1293
|
+
if args.action == "register" and (args.seed_ok or args.seed):
|
|
1294
|
+
_seed_catalog_for_mcp(args.seed)
|
|
1295
|
+
|
|
1198
1296
|
shim = str(paths.launcher())
|
|
1199
1297
|
# `auto` skips hosts that are not installed; naming a host explicitly (or
|
|
1200
1298
|
# `all`) always reports it, so a user setting up a machine can see the argv
|
|
@@ -119,14 +119,17 @@ def cmd_tap(argv) -> int:
|
|
|
119
119
|
rc = 1
|
|
120
120
|
continue
|
|
121
121
|
journal.log("tap", tap.name)
|
|
122
|
-
|
|
122
|
+
# "items", not "skills": the defaults now carry rules and
|
|
123
|
+
# workflows, so a pure rules registry reported "257 skills"
|
|
124
|
+
# immediately after the README promised three kinds.
|
|
125
|
+
out.ok("tapped %s (%d items) — %s"
|
|
123
126
|
% (tap.name, len(entries), default.get("focus", "")))
|
|
124
127
|
if args.spec:
|
|
125
128
|
with spin.Spinner("cloning %s" % args.spec):
|
|
126
129
|
tap = registry.add(args.spec, curated=args.curated)
|
|
127
130
|
entries = catalog.rebuild_tap(tap)
|
|
128
131
|
journal.log("tap", tap.name)
|
|
129
|
-
out.ok("Tapped %s (%d
|
|
132
|
+
out.ok("Tapped %s (%d items)" % (tap.name, len(entries)))
|
|
130
133
|
# Refresh the TAB-completion name cache so `boost install <TAB>` sees
|
|
131
134
|
# whatever this call just tapped instead of the pre-tap snapshot.
|
|
132
135
|
complete.refresh_names()
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""Seed an empty machine's catalog, so one command is the whole setup.
|
|
2
|
+
|
|
3
|
+
`boost mcp` is the only command a new user is told to run after installing.
|
|
4
|
+
It registered the server and stopped there — against a catalog with nothing in
|
|
5
|
+
it — so the first question any agent asked came back as a miss, which is the
|
|
6
|
+
fastest possible way to teach an agent that boost is not worth asking again.
|
|
7
|
+
|
|
8
|
+
Seeding belongs here rather than in the command layer for the usual reason:
|
|
9
|
+
it is behavior with rules worth pinning (idempotent, never fatal, reports what
|
|
10
|
+
it did), and `boost_cli/core` is what the mutation gate targets.
|
|
11
|
+
"""
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
from dataclasses import dataclass, field
|
|
16
|
+
|
|
17
|
+
from ..errors import BoostError
|
|
18
|
+
from . import catalog, config, journal, registry
|
|
19
|
+
|
|
20
|
+
#: Escape hatch, same shape as ``BOOST_NO_MCP_OFFER``: suppress the implicit
|
|
21
|
+
#: seed for anyone who wants `boost mcp` to stay a local, offline operation —
|
|
22
|
+
#: CI images, air-gapped machines, and the test suite, which must never clone
|
|
23
|
+
#: seven repositories to check that registration prints the right line. An
|
|
24
|
+
#: explicit ``--seed`` still wins over it: a flag the user typed outranks an
|
|
25
|
+
#: environment default they may not know is set.
|
|
26
|
+
NO_SEED_ENV = "BOOST_NO_SEED"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class SeedResult:
|
|
31
|
+
"""What a seed attempt did, in terms a caller can print."""
|
|
32
|
+
|
|
33
|
+
#: (tap name, item count) for each registry that landed.
|
|
34
|
+
tapped: list[tuple[str, int]] = field(default_factory=list)
|
|
35
|
+
#: One human-readable line per registry that could not be fetched.
|
|
36
|
+
failed: list[str] = field(default_factory=list)
|
|
37
|
+
#: Defaults that were already configured, so nothing was done for them.
|
|
38
|
+
already: list[str] = field(default_factory=list)
|
|
39
|
+
#: True when nothing was attempted at all (opted out, or already complete).
|
|
40
|
+
skipped: bool = False
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def item_count(self) -> int:
|
|
44
|
+
"""Total catalog items across every registry this call added."""
|
|
45
|
+
return sum(count for _name, count in self.tapped)
|
|
46
|
+
|
|
47
|
+
def summary(self) -> str:
|
|
48
|
+
"""One line for the user: what is now searchable, or why nothing is."""
|
|
49
|
+
if self.skipped:
|
|
50
|
+
return "catalog already tapped — leaving it alone"
|
|
51
|
+
if not self.tapped:
|
|
52
|
+
# Only claim the network is the problem when the network was
|
|
53
|
+
# actually the problem. A run where every default was already
|
|
54
|
+
# configured reaches here too, and telling that user to retry
|
|
55
|
+
# "once you have a network" is advice about a machine they do
|
|
56
|
+
# not have — see the `--seed` repair path, which hits it head-on.
|
|
57
|
+
if self.failed:
|
|
58
|
+
return ("could not reach any default registry — run "
|
|
59
|
+
"`boost tap --defaults` once you have a network")
|
|
60
|
+
return "catalog already tapped — leaving it alone"
|
|
61
|
+
line = ("tapped %d registries (%d items searchable)"
|
|
62
|
+
% (len(self.tapped), self.item_count))
|
|
63
|
+
if self.already:
|
|
64
|
+
line += " — %d already tapped" % len(self.already)
|
|
65
|
+
if self.failed:
|
|
66
|
+
line += " — %d could not be fetched" % len(self.failed)
|
|
67
|
+
return line
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def will_seed(*, force: bool = False) -> bool:
|
|
71
|
+
"""True when :func:`seed_catalog` would actually clone something.
|
|
72
|
+
|
|
73
|
+
Exists so a caller can announce the wait BEFORE it starts. The seed is
|
|
74
|
+
14-45s of network with nothing to print until it returns, and on the one
|
|
75
|
+
command a first-time user was told to run, silence that long reads as a
|
|
76
|
+
hang. Deliberately mirrors seed_catalog's own gates rather than guessing.
|
|
77
|
+
"""
|
|
78
|
+
if not force and os.environ.get(NO_SEED_ENV):
|
|
79
|
+
return False
|
|
80
|
+
existing = {t.name for t in registry.list_taps()}
|
|
81
|
+
if not force and existing:
|
|
82
|
+
return False
|
|
83
|
+
return any(str(d["name"]) not in existing for d in config.DEFAULT_TAPS)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def seed_catalog(*, force: bool = False) -> SeedResult:
|
|
87
|
+
"""Tap whichever recommended registries this machine is missing.
|
|
88
|
+
|
|
89
|
+
The decision is per registry, not per machine, and that distinction is
|
|
90
|
+
load-bearing twice over. A seed interrupted after two clones used to leave
|
|
91
|
+
a machine that read as "configured" forever, because the check was "does
|
|
92
|
+
ANY tap exist" — so the remaining five never arrived and nothing ever said
|
|
93
|
+
so. And `--seed`, documented as the repair path, called ``registry.add``
|
|
94
|
+
on registries that were already there; ``add`` rejects those before it
|
|
95
|
+
touches the network, so the repair reported seven failures and blamed the
|
|
96
|
+
connection on a machine whose connection was fine.
|
|
97
|
+
|
|
98
|
+
Skips silently when the user opted out (``BOOST_NO_SEED``) or when every
|
|
99
|
+
default is already present. Never raises: this runs on the registration
|
|
100
|
+
path, where the user's actual request was "register the MCP server" — a
|
|
101
|
+
dead network or one bad remote must cost them a reported line, not the
|
|
102
|
+
server they asked for.
|
|
103
|
+
"""
|
|
104
|
+
if not force and os.environ.get(NO_SEED_ENV):
|
|
105
|
+
return SeedResult(skipped=True)
|
|
106
|
+
existing = {t.name for t in registry.list_taps()}
|
|
107
|
+
# `force` re-checks the DEFAULTS rather than re-adding them: a machine
|
|
108
|
+
# missing two of seven is topped up, and one missing none is left alone.
|
|
109
|
+
missing = [d for d in config.DEFAULT_TAPS if str(d["name"]) not in existing]
|
|
110
|
+
if not missing:
|
|
111
|
+
return SeedResult(skipped=True)
|
|
112
|
+
# Without --seed the implicit path stays conservative: a machine with taps
|
|
113
|
+
# of its own is somebody's configured setup, and quietly adding seven
|
|
114
|
+
# registries to it because they re-ran `boost mcp` is boost editing state
|
|
115
|
+
# it was not asked to touch.
|
|
116
|
+
if not force and existing:
|
|
117
|
+
return SeedResult(skipped=True)
|
|
118
|
+
res = SeedResult(already=[str(d["name"]) for d in config.DEFAULT_TAPS
|
|
119
|
+
if str(d["name"]) in existing])
|
|
120
|
+
for default in missing:
|
|
121
|
+
name = str(default["name"])
|
|
122
|
+
try:
|
|
123
|
+
tap = registry.add(str(default["url"]), curated=True)
|
|
124
|
+
entries = catalog.rebuild_tap(tap)
|
|
125
|
+
except BoostError as e:
|
|
126
|
+
res.failed.append("%s: %s" % (name, e.message))
|
|
127
|
+
continue
|
|
128
|
+
except OSError as e:
|
|
129
|
+
# A clone can fail below BoostError (disk full, permissions).
|
|
130
|
+
# Same contract: report it, keep going, never take the caller down.
|
|
131
|
+
res.failed.append("%s: %s" % (name, e))
|
|
132
|
+
continue
|
|
133
|
+
journal.log("tap", tap.name)
|
|
134
|
+
res.tapped.append((tap.name, len(entries)))
|
|
135
|
+
return res
|
|
@@ -51,7 +51,18 @@ DEFAULTS = {
|
|
|
51
51
|
},
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
# Recommended public registries, added via `boost tap --defaults
|
|
54
|
+
# Recommended public registries, added via `boost tap --defaults` and by the
|
|
55
|
+
# seed that runs on `boost mcp` (core/bootstrap.py) so one command is the
|
|
56
|
+
# whole setup.
|
|
57
|
+
#
|
|
58
|
+
# The list covers all THREE item kinds on purpose. The five skills-first repos
|
|
59
|
+
# measured 302 skills and 41 workflows between them and — the gap this closes
|
|
60
|
+
# — zero rules, so the kind whose entire job is steering toward a better path
|
|
61
|
+
# and away from an anti-pattern could not be found by a default install at
|
|
62
|
+
# all. Adding one canonical rules repo and one commands/agents repo takes the
|
|
63
|
+
# default corpus to 946 items (302 skills, 387 workflows, 257 rules) for about
|
|
64
|
+
# 14 MB more on disk than the five, measured end-to-end at 14-45s across runs
|
|
65
|
+
# (network-bound, hence the range).
|
|
55
66
|
DEFAULT_TAPS = [
|
|
56
67
|
{"name": "anthropics/skills", "url": "https://github.com/anthropics/skills",
|
|
57
68
|
"curated": True,
|
|
@@ -69,6 +80,16 @@ DEFAULT_TAPS = [
|
|
|
69
80
|
"url": "https://github.com/K-Dense-AI/scientific-agent-skills",
|
|
70
81
|
"curated": True,
|
|
71
82
|
"focus": "Scientific computing — research libraries, databases, analysis"},
|
|
83
|
+
{"name": "PatrickJS/awesome-cursorrules",
|
|
84
|
+
"url": "https://github.com/PatrickJS/awesome-cursorrules",
|
|
85
|
+
"curated": True,
|
|
86
|
+
"focus": "Rules — the canonical .cursorrules/.mdc collection: per-stack "
|
|
87
|
+
"conventions and anti-patterns to avoid"},
|
|
88
|
+
{"name": "qdhenry/Claude-Command-Suite",
|
|
89
|
+
"url": "https://github.com/qdhenry/Claude-Command-Suite",
|
|
90
|
+
"curated": True,
|
|
91
|
+
"focus": "Workflows — slash commands and subagents for review, testing, "
|
|
92
|
+
"refactoring and release"},
|
|
72
93
|
]
|
|
73
94
|
|
|
74
95
|
|