boost-skill-cli 1.2.45__tar.gz → 1.2.47__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.2.45 → boost_skill_cli-1.2.47}/CLAUDE.md +16 -0
- {boost_skill_cli-1.2.45/boost_skill_cli.egg-info → boost_skill_cli-1.2.47}/PKG-INFO +6 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/README.md +5 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/quickstart.py +27 -15
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/taps.py +41 -26
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/registry.py +146 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47/boost_skill_cli.egg-info}/PKG-INFO +6 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/adapters.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/chat.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/commands.html +5 -4
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/design-roadmap.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/eval.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/index.html +6 -6
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/langchain.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/mcp-hub.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap.html +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_command_reference.py +1 -1
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_quickstart.py +70 -0
- boost_skill_cli-1.2.47/tests/unit/test_registry_parallel.py +230 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.gitattributes +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.gitignore +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.lycheeignore +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale/styles/boost/AIWriting.yml +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale.ini +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/DCO +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/GOVERNANCE.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/LICENSE +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/MAINTAINERS.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/MANIFEST.in +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/Makefile +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/SECURITY.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/SUPPORT.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/aihost.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/bmad.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/browse.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/builtin.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/catalogbundle.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/hookhost.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/data/rules/boost-first.mdc +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/codecov.yml +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/bmad.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/code-review.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/commit-audit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo.gif +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo.tape +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/dependencies.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/openssf-badge.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D27.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ai-backend-fanout.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-first-rule.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/branch-current-gate.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cli-command-audit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-path-disambiguation.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-playbook.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-silver.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/osps-baseline-levels.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/relicence-apache-2.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/vex-openvex-feed.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/security-design.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/semantic-search.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/verifying-releases.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/meta.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/openvex.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/README.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/__init__.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/baseline.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/metrics.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/examples/README.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/index.html +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/noxfile.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/pyproject.toml +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/add_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_vex.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_branch_current.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_dco.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_reproducible.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/measure_registry.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/publish_shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/setup.cfg +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/sonar-project.properties +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/README.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/boost.css +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/boost.js +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/demo.html +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/conftest.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_bmad_all_hosts.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_catalog.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_hooks_gemini.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_pane_width.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_action_pin_lockstep.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_aihost.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_bmad_core.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_boost_first_offer.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_branch_current.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_browse.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_builtin.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_catalogbundle.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_dco.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_reproducible.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_clean_internal_cache.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_compact.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_complete_rc_block.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_content_identity.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_crash_redaction.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_embed_dedupe.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_quantized.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_ready_order.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_shard_real_schema.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_status_cheap.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_embed_truncated_response.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gemini_agent_sanitize.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitutil_lfs.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitutil_sparse.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_hook_settings_hosts.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_hookhost.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_install_permission_error.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_measure_registry.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_normalize_sdist.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rag_fastpath.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registry_control_chars.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rerank_cache.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_shards.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_shards_matrix.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_smoke_covers_every_command.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_spdx_headers.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_store_materialize.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_sync_blocked_links.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_vex.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_visual_harness_flags.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_concurrency_groups.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_push_has_credentials.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/visual_check.mjs +0 -0
|
@@ -158,6 +158,22 @@ line coverage. Target `boost_cli/core` behavior with assertions, not just import
|
|
|
158
158
|
93 MB), and must `update-index --refresh` first, because git silently declines
|
|
159
159
|
to remove a path whose stat data looks dirty and otherwise reports success
|
|
160
160
|
having changed nothing.
|
|
161
|
+
- **Tapping many registries goes through `registry.add_many`, and the reason is
|
|
162
|
+
the config file.** `add` ends in `config.load()` -> append -> `config.save()`,
|
|
163
|
+
which is read-modify-write on one JSON file: run it from N threads and taps
|
|
164
|
+
vanish at random. `add_many` clones in a `ThreadPoolExecutor` and writes the
|
|
165
|
+
config **once**, on one thread, after every clone has finished
|
|
166
|
+
(`tests/unit/test_registry_parallel.py` asserts the single write and the
|
|
167
|
+
concurrency separately). It is worth it because a clone is *latency*, not
|
|
168
|
+
bandwidth or CPU: ~1.6 s whether one runs or twelve, so `boost tap --catalog`
|
|
169
|
+
was 463 x 1.6 s = 13 minutes of waiting and is now **2 min 10 s** for the same
|
|
170
|
+
463 registries. Scanning stays serial on the caller's thread — it is 3 ms per
|
|
171
|
+
registry and writes a per-tap cache file, so parallelising it buys nothing and
|
|
172
|
+
scrambles output order. Cleanup after a failed clone must tolerate a
|
|
173
|
+
directory that was never created: `util.rmtree`'s read-only retry hook calls
|
|
174
|
+
`chmod` on the missing path and raises `FileNotFoundError`, which out of a worker thread
|
|
175
|
+
turns one 404 into a crashed catalog tap.
|
|
176
|
+
|
|
161
177
|
- **`~/.boost/cache/` holds boost's own indexes, not just tap catalogs.**
|
|
162
178
|
`paths.INTERNAL_CACHE_FILES` names them. `boost clean` sweeps `cache/*.json`
|
|
163
179
|
whose stem is not a configured tap, which described `rag_index.json` and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.47
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -210,6 +210,11 @@ boost tap --catalog --category java # Spring Boot / Kotlin / JVM packs
|
|
|
210
210
|
boost tap --catalog --category security # filter by category
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
+
Taps clone in parallel — eight at once by default, `--jobs N` (or
|
|
214
|
+
`BOOST_TAP_JOBS`) to change it, capped at 16 because it is someone else's
|
|
215
|
+
server. A clone is network latency rather than bandwidth, so the whole catalog
|
|
216
|
+
measures **2 min 10 s for 463 registries** where one-at-a-time took 13 minutes.
|
|
217
|
+
|
|
213
218
|
Every `est_items` is measured from the repository's file tree rather than
|
|
214
219
|
estimated, so `--limit` ranks by real size. Items are counted once however many
|
|
215
220
|
agents a repository renders them for, so a pack shipping a copy in `.claude/`,
|
|
@@ -168,6 +168,11 @@ boost tap --catalog --category java # Spring Boot / Kotlin / JVM packs
|
|
|
168
168
|
boost tap --catalog --category security # filter by category
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
Taps clone in parallel — eight at once by default, `--jobs N` (or
|
|
172
|
+
`BOOST_TAP_JOBS`) to change it, capped at 16 because it is someone else's
|
|
173
|
+
server. A clone is network latency rather than bandwidth, so the whole catalog
|
|
174
|
+
measures **2 min 10 s for 463 registries** where one-at-a-time took 13 minutes.
|
|
175
|
+
|
|
171
176
|
Every `est_items` is measured from the repository's file tree rather than
|
|
172
177
|
estimated, so `--limit` ranks by real size. Items are counted once however many
|
|
173
178
|
agents a repository renders them for, so a pack shipping a copy in `.claude/`,
|
|
@@ -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.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 2,
|
|
21
|
+
__version__ = version = '1.2.47'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 47)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -40,27 +40,39 @@ def _tap_defaults(pins: dict[str, dict], dry_run: bool) -> list[str]:
|
|
|
40
40
|
ordering that produces a commit mismatch on every registry that moved since
|
|
41
41
|
the last shard run.
|
|
42
42
|
"""
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
names = [str(d["name"]) for d in config.DEFAULT_TAPS]
|
|
44
|
+
commits = {name: str(pins[name].get("commit")) for name in names
|
|
45
|
+
if name in pins}
|
|
46
|
+
if dry_run:
|
|
47
|
+
existing = {t.name for t in registry.list_taps()}
|
|
48
|
+
for name in names:
|
|
49
|
+
if name in existing:
|
|
50
|
+
out.info(out.role("%s already tapped" % name, "muted"))
|
|
51
|
+
continue
|
|
52
|
+
at = commits.get(name)
|
|
53
|
+
out.info("would tap %s%s" % (name, " @ %s" % at[:7] if at else ""))
|
|
54
|
+
return names
|
|
55
|
+
# One pool, one config write: seven sequential clones is ~11 s of waiting
|
|
56
|
+
# for work that takes ~2 s done together, and the first thing a new user
|
|
57
|
+
# sees should not be a progress bar.
|
|
58
|
+
with spin.Spinner("tapping %d registries" % len(names)):
|
|
59
|
+
results = registry.add_many([str(d["url"]) for d in config.DEFAULT_TAPS],
|
|
60
|
+
curated=True, pins=commits)
|
|
61
|
+
for res in results:
|
|
62
|
+
name = res["name"]
|
|
63
|
+
if res.get("skipped"):
|
|
49
64
|
out.info(out.role("%s already tapped" % name, "muted"))
|
|
50
65
|
continue
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if dry_run:
|
|
54
|
-
out.info("would tap %s%s" % (name, " @ %s" % at[:7] if at else ""))
|
|
66
|
+
if not res.get("ok"):
|
|
67
|
+
out.warn("could not tap %s: %s" % (name, res.get("error", "")))
|
|
55
68
|
continue
|
|
56
69
|
try:
|
|
57
|
-
|
|
58
|
-
tap = registry.add(str(default["url"]), curated=True, at=at)
|
|
59
|
-
entries = catalog.rebuild_tap(tap)
|
|
70
|
+
entries = catalog.rebuild_tap(res["tap"])
|
|
60
71
|
except BoostError as exc:
|
|
61
|
-
out.warn("could not
|
|
72
|
+
out.warn("could not index %s: %s" % (name, exc.message))
|
|
62
73
|
continue
|
|
63
|
-
journal.log("tap",
|
|
74
|
+
journal.log("tap", name)
|
|
75
|
+
at = commits.get(name)
|
|
64
76
|
out.ok("tapped %s (%d items)%s"
|
|
65
77
|
% (name, len(entries), " @ %s" % at[:7] if at else ""))
|
|
66
78
|
return names
|
|
@@ -44,22 +44,44 @@ def _tap_catalog(args) -> int:
|
|
|
44
44
|
out.dim("%d registries · ~%d items (dry run — nothing tapped)"
|
|
45
45
|
% (len(selection), sum(e.get("est_items") or 0 for e in selection)))
|
|
46
46
|
return 0
|
|
47
|
-
|
|
47
|
+
focus = {str(e["name"]): e.get("focus", "") for e in selection}
|
|
48
|
+
return _tap_all([str(e["url"]) for e in selection], jobs=args.jobs,
|
|
49
|
+
focus=focus)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _tap_all(urls: list[str], jobs: int | None,
|
|
53
|
+
focus: dict[str, str] | None = None,
|
|
54
|
+
pins: dict[str, str] | None = None) -> int:
|
|
55
|
+
"""Clone many registries at once, then scan each one that arrived.
|
|
56
|
+
|
|
57
|
+
The split is the whole optimisation. Cloning is network latency — 1.6 s per
|
|
58
|
+
registry whether one runs or twelve — so it goes wide; scanning is 3 ms per
|
|
59
|
+
registry and writes a per-tap cache file, so it stays on this thread where
|
|
60
|
+
its output can be printed in order and its errors belong to one tap.
|
|
61
|
+
"""
|
|
62
|
+
focus = focus or {}
|
|
63
|
+
results = registry.add_many(urls, curated=True, pins=pins, jobs=jobs)
|
|
48
64
|
rc = 0
|
|
49
|
-
for
|
|
50
|
-
|
|
51
|
-
|
|
65
|
+
for res in results:
|
|
66
|
+
name = res["name"]
|
|
67
|
+
if res.get("skipped"):
|
|
68
|
+
out.info(out.role("%s already tapped" % name, "muted"))
|
|
69
|
+
continue
|
|
70
|
+
if not res.get("ok"):
|
|
71
|
+
out.warn("could not tap %s: %s" % (name, res.get("error", "")))
|
|
72
|
+
rc = 1
|
|
52
73
|
continue
|
|
74
|
+
tap = res["tap"]
|
|
53
75
|
try:
|
|
54
|
-
tap = registry.add(str(e["url"]), curated=True)
|
|
55
76
|
entries = catalog.rebuild_tap(tap)
|
|
56
77
|
except BoostError as err:
|
|
57
|
-
out.warn("could not
|
|
78
|
+
out.warn("could not index %s: %s" % (name, err.message))
|
|
58
79
|
rc = 1
|
|
59
80
|
continue
|
|
60
81
|
journal.log("tap", tap.name)
|
|
61
|
-
|
|
62
|
-
|
|
82
|
+
note = focus.get(name) or ""
|
|
83
|
+
out.ok("tapped %s (%d items)%s"
|
|
84
|
+
% (tap.name, len(entries), " — %s" % note if note else ""))
|
|
63
85
|
return rc
|
|
64
86
|
|
|
65
87
|
|
|
@@ -104,6 +126,10 @@ def cmd_tap(argv) -> int:
|
|
|
104
126
|
p.add_argument("--at", metavar="SHA",
|
|
105
127
|
help="pin the clone to one 40-character commit, as a "
|
|
106
128
|
"published vector shard requires")
|
|
129
|
+
p.add_argument("--jobs", type=int, metavar="N",
|
|
130
|
+
help="clone this many registries at once (default %d, max "
|
|
131
|
+
"%d)" % (registry.DEFAULT_TAP_JOBS,
|
|
132
|
+
registry.MAX_TAP_JOBS))
|
|
107
133
|
args = p.parse_args(argv)
|
|
108
134
|
if args.at and not args.spec:
|
|
109
135
|
p.error("--at pins one registry, so it needs a SPEC")
|
|
@@ -114,24 +140,13 @@ def cmd_tap(argv) -> int:
|
|
|
114
140
|
if args.catalog:
|
|
115
141
|
rc |= _tap_catalog(args)
|
|
116
142
|
if args.defaults:
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
entries = catalog.rebuild_tap(tap)
|
|
125
|
-
except BoostError as e:
|
|
126
|
-
out.warn("could not tap %s: %s" % (default["name"], e.message))
|
|
127
|
-
rc = 1
|
|
128
|
-
continue
|
|
129
|
-
journal.log("tap", tap.name)
|
|
130
|
-
# "items", not "skills": the defaults now carry rules and
|
|
131
|
-
# workflows, so a pure rules registry reported "257 skills"
|
|
132
|
-
# immediately after the README promised three kinds.
|
|
133
|
-
out.ok("tapped %s (%d items) — %s"
|
|
134
|
-
% (tap.name, len(entries), default.get("focus", "")))
|
|
143
|
+
# "items", not "skills": the defaults now carry rules and workflows, so
|
|
144
|
+
# a pure rules registry reported "257 skills" immediately after the
|
|
145
|
+
# README promised three kinds. `_tap_all` says items.
|
|
146
|
+
rc |= _tap_all([str(d["url"]) for d in config.DEFAULT_TAPS],
|
|
147
|
+
jobs=args.jobs,
|
|
148
|
+
focus={str(d["name"]): str(d.get("focus", ""))
|
|
149
|
+
for d in config.DEFAULT_TAPS})
|
|
135
150
|
if args.spec:
|
|
136
151
|
with spin.Spinner("cloning %s" % args.spec):
|
|
137
152
|
tap = registry.add(args.spec, curated=args.curated, at=args.at)
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
import difflib
|
|
7
|
+
import os
|
|
8
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
9
|
+
from contextlib import suppress
|
|
7
10
|
from dataclasses import dataclass
|
|
8
11
|
from pathlib import Path
|
|
9
12
|
|
|
@@ -206,6 +209,149 @@ def add(spec: str, curated: bool = False, at: str | None = None) -> Tap:
|
|
|
206
209
|
return tap
|
|
207
210
|
|
|
208
211
|
|
|
212
|
+
#: Default concurrency for :func:`add_many`. Tapping is network-latency bound,
|
|
213
|
+
#: not bandwidth or CPU bound: a clone of a catalog registry measures ~1.6 s
|
|
214
|
+
#: whether one runs or twelve do, so the wall time of `boost tap --catalog` was
|
|
215
|
+
#: 463 x 1.6 s ~= 13 minutes of mostly waiting. Measured on the real catalog,
|
|
216
|
+
#: 40 registries went from 58 s serial to 6.4 s at 12 workers with the per-repo
|
|
217
|
+
#: median unchanged (1.55 s -> 1.46 s), which is what says the concurrency is
|
|
218
|
+
#: not being paid for somewhere else.
|
|
219
|
+
DEFAULT_TAP_JOBS = 8
|
|
220
|
+
|
|
221
|
+
#: Politeness ceiling. Nothing in the measurements argues for more, and this is
|
|
222
|
+
#: someone else's server: past this the risk of being throttled outweighs a
|
|
223
|
+
#: wall-time gain that is already asymptotic.
|
|
224
|
+
MAX_TAP_JOBS = 16
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def tap_jobs(requested: int | None = None) -> int:
|
|
228
|
+
"""How many clones to run at once, clamped to something defensible."""
|
|
229
|
+
if requested is None:
|
|
230
|
+
env = os.environ.get("BOOST_TAP_JOBS")
|
|
231
|
+
requested = int(env) if env and env.isdigit() else DEFAULT_TAP_JOBS
|
|
232
|
+
return max(1, min(int(requested), MAX_TAP_JOBS))
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def _discard(tap: Tap) -> None:
|
|
236
|
+
"""Remove a rejected clone, tolerating one that was never created.
|
|
237
|
+
|
|
238
|
+
`add` only ever deleted a directory it had just cloned successfully, so it
|
|
239
|
+
could call `rmtree` unguarded. Here the failure may be the clone itself —
|
|
240
|
+
at which point the path does not exist, and `util.rmtree`'s read-only retry
|
|
241
|
+
hook chmods a missing file and raises `FileNotFoundError` out of the worker
|
|
242
|
+
thread, turning "this one registry 404'd" into a crashed catalog tap.
|
|
243
|
+
"""
|
|
244
|
+
# Cleanup is best-effort: the caller's real error is the one worth
|
|
245
|
+
# reporting, and a leftover directory is a smaller problem than losing it
|
|
246
|
+
# behind a cleanup failure.
|
|
247
|
+
with suppress(OSError):
|
|
248
|
+
if tap.path.exists():
|
|
249
|
+
util.rmtree(tap.path)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def _clone_one(spec: str, curated: bool, at: str | None) -> dict:
|
|
253
|
+
"""Clone one tap without touching config. Never raises.
|
|
254
|
+
|
|
255
|
+
Config is deliberately left alone: `config.load()` -> mutate -> `save()` is
|
|
256
|
+
read-modify-write on a single JSON file, so running it from N threads loses
|
|
257
|
+
taps at random. :func:`add_many` writes once, on one thread, after every
|
|
258
|
+
clone has finished.
|
|
259
|
+
"""
|
|
260
|
+
try:
|
|
261
|
+
name, url = parse_spec(spec)
|
|
262
|
+
except BoostError as exc:
|
|
263
|
+
return {"spec": spec, "name": spec, "ok": False, "error": exc.message}
|
|
264
|
+
tap = Tap(name=name, url=url, curated=curated)
|
|
265
|
+
try:
|
|
266
|
+
if tap.path.exists():
|
|
267
|
+
util.rmtree(tap.path)
|
|
268
|
+
gitutil.clone_shallow(url, tap.path)
|
|
269
|
+
if at:
|
|
270
|
+
gitutil.checkout_commit(tap.path, at)
|
|
271
|
+
problems = policy.check_tap_signing(tap.path)
|
|
272
|
+
if problems:
|
|
273
|
+
_discard(tap)
|
|
274
|
+
return {"spec": spec, "name": name, "ok": False,
|
|
275
|
+
"error": "failed provenance policy: %s" % "; ".join(problems)}
|
|
276
|
+
except BoostError as exc:
|
|
277
|
+
# Leave no half-added tap behind, exactly as `add` does: a clone that
|
|
278
|
+
# failed its pin or its policy check is not a tap, and a directory that
|
|
279
|
+
# looks like one would be indexed on the next scan.
|
|
280
|
+
_discard(tap)
|
|
281
|
+
return {"spec": spec, "name": name, "ok": False, "error": exc.message}
|
|
282
|
+
return {"spec": spec, "name": name, "url": url, "ok": True, "tap": tap}
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def add_many(specs: list[str], curated: bool = False,
|
|
286
|
+
pins: dict[str, str] | None = None, jobs: int | None = None,
|
|
287
|
+
on_done=None) -> list[dict]:
|
|
288
|
+
"""Clone many taps at once and register them in a single config write.
|
|
289
|
+
|
|
290
|
+
Returns one result dict per spec, in the order given, each with ``ok`` and
|
|
291
|
+
either ``tap`` or ``error``. One registry's failure never costs another its
|
|
292
|
+
clone — a catalog tap of 463 repos that aborted on the first 404 would be
|
|
293
|
+
worse than useless.
|
|
294
|
+
|
|
295
|
+
`pins` maps a tap name to the commit to check out, for published vector
|
|
296
|
+
shards (see ``core.shards``).
|
|
297
|
+
"""
|
|
298
|
+
if not specs:
|
|
299
|
+
return []
|
|
300
|
+
paths.ensure_dirs()
|
|
301
|
+
pins = pins or {}
|
|
302
|
+
existing = {t.name for t in list_taps()}
|
|
303
|
+
results: list[dict] = []
|
|
304
|
+
todo: list[str] = []
|
|
305
|
+
for spec in specs:
|
|
306
|
+
try:
|
|
307
|
+
name, _url = parse_spec(spec)
|
|
308
|
+
except BoostError as exc:
|
|
309
|
+
results.append({"spec": spec, "name": spec, "ok": False,
|
|
310
|
+
"error": exc.message})
|
|
311
|
+
continue
|
|
312
|
+
if name in existing:
|
|
313
|
+
results.append({"spec": spec, "name": name, "ok": False,
|
|
314
|
+
"skipped": True, "error": "already tapped"})
|
|
315
|
+
continue
|
|
316
|
+
# Guard against the same registry appearing twice in one selection:
|
|
317
|
+
# two threads cloning into one directory is a corrupt clone, not a race
|
|
318
|
+
# anyone would enjoy debugging.
|
|
319
|
+
existing.add(name)
|
|
320
|
+
todo.append(spec)
|
|
321
|
+
|
|
322
|
+
def work(spec: str) -> dict:
|
|
323
|
+
name, _url = parse_spec(spec)
|
|
324
|
+
return _clone_one(spec, curated, pins.get(name))
|
|
325
|
+
|
|
326
|
+
with ThreadPoolExecutor(max_workers=tap_jobs(jobs)) as pool:
|
|
327
|
+
for res in pool.map(work, todo):
|
|
328
|
+
results.append(res)
|
|
329
|
+
if on_done is not None:
|
|
330
|
+
on_done(res)
|
|
331
|
+
|
|
332
|
+
# One read-modify-write, after every clone: N threads doing this each would
|
|
333
|
+
# lose taps, and 463 sequential rewrites of the same file is its own cost.
|
|
334
|
+
fresh = [r for r in results if r.get("ok")]
|
|
335
|
+
if fresh:
|
|
336
|
+
cfg = config.load()
|
|
337
|
+
rows = cfg.setdefault("taps", [])
|
|
338
|
+
for r in fresh:
|
|
339
|
+
rows.append({"name": r["name"], "url": r["url"],
|
|
340
|
+
"curated": curated})
|
|
341
|
+
config.save(cfg)
|
|
342
|
+
# First occurrence, not last: a dict comprehension over `specs` keeps the
|
|
343
|
+
# LAST index for a repeated spec, which pushed the duplicate — and so its
|
|
344
|
+
# whole position — to the end and reordered everything in between.
|
|
345
|
+
order: dict[str, int] = {}
|
|
346
|
+
for i, spec in enumerate(specs):
|
|
347
|
+
order.setdefault(spec, i)
|
|
348
|
+
# Ties are the repeats themselves; report the clone before the "already
|
|
349
|
+
# tapped" note about it.
|
|
350
|
+
results.sort(key=lambda r: (order.get(r["spec"], len(order)),
|
|
351
|
+
bool(r.get("skipped"))))
|
|
352
|
+
return results
|
|
353
|
+
|
|
354
|
+
|
|
209
355
|
def remove(name: str) -> Tap:
|
|
210
356
|
"""Deregister a tap and delete its clone and cache file.
|
|
211
357
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.47
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -210,6 +210,11 @@ boost tap --catalog --category java # Spring Boot / Kotlin / JVM packs
|
|
|
210
210
|
boost tap --catalog --category security # filter by category
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
+
Taps clone in parallel — eight at once by default, `--jobs N` (or
|
|
214
|
+
`BOOST_TAP_JOBS`) to change it, capped at 16 because it is someone else's
|
|
215
|
+
server. A clone is network latency rather than bandwidth, so the whole catalog
|
|
216
|
+
measures **2 min 10 s for 463 registries** where one-at-a-time took 13 minutes.
|
|
217
|
+
|
|
213
218
|
Every `est_items` is measured from the repository's file tree rather than
|
|
214
219
|
estimated, so `--limit` ranks by real size. Items are counted once however many
|
|
215
220
|
agents a repository renders them for, so a pack shipping a copy in `.claude/`,
|
|
@@ -761,6 +761,7 @@ tests/unit/test_registries_fresh.py
|
|
|
761
761
|
tests/unit/test_registry.py
|
|
762
762
|
tests/unit/test_registry_categories.py
|
|
763
763
|
tests/unit/test_registry_control_chars.py
|
|
764
|
+
tests/unit/test_registry_parallel.py
|
|
764
765
|
tests/unit/test_release_guard.py
|
|
765
766
|
tests/unit/test_release_preflight.py
|
|
766
767
|
tests/unit/test_required_checks.py
|
|
@@ -353,7 +353,7 @@ python3 -m venv /tmp/crew && /tmp/crew/bin/pip install <span class="s">"
|
|
|
353
353
|
|
|
354
354
|
<footer>
|
|
355
355
|
<div class="wrap">
|
|
356
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
356
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
357
357
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
358
358
|
<nav class="foot-links" aria-label="Documentation">
|
|
359
359
|
<a href="index.html">Guide</a>
|
|
@@ -387,7 +387,7 @@
|
|
|
387
387
|
|
|
388
388
|
<footer>
|
|
389
389
|
<div class="wrap">
|
|
390
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
390
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
391
391
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
392
392
|
<nav class="foot-links" aria-label="Documentation">
|
|
393
393
|
<a href="index.html">Guide</a>
|
|
@@ -198,7 +198,7 @@ boost chat -k 3 --no-sources "review my diff"</pre>
|
|
|
198
198
|
|
|
199
199
|
<footer>
|
|
200
200
|
<div class="wrap">
|
|
201
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
201
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
202
202
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
203
203
|
<nav class="foot-links" aria-label="Documentation">
|
|
204
204
|
<a href="index.html">Guide</a>
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
</div>
|
|
143
143
|
<div class="group" data-group="tap">
|
|
144
144
|
<div class="group-h">Taps & registries</div>
|
|
145
|
-
<a class="cmd-link" href="#cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha spec">tap</a>
|
|
145
|
+
<a class="cmd-link" href="#cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha --jobs n spec">tap</a>
|
|
146
146
|
<a class="cmd-link" href="#cmd-untap" data-search="untap remove a registry tap -f, --force name">untap</a>
|
|
147
147
|
<a class="cmd-link" href="#cmd-taps" data-search="taps list all configured registry taps --json">taps</a>
|
|
148
148
|
<a class="cmd-link" href="#cmd-outdated" data-search="outdated show skills with available updates --json">outdated</a>
|
|
@@ -624,10 +624,10 @@
|
|
|
624
624
|
</div>
|
|
625
625
|
</section>
|
|
626
626
|
<h2 class="group-h" id="grp-tap">Taps & registries</h2>
|
|
627
|
-
<section class="cmd" id="cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha spec">
|
|
627
|
+
<section class="cmd" id="cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha --jobs n spec">
|
|
628
628
|
<h3><span class="cname">tap</span><span class="gtag">tap</span></h3>
|
|
629
629
|
<p class="summary">Add a GitHub repo as a skill registry</p>
|
|
630
|
-
<pre class="syn">boost tap [--defaults] [--catalog] [--type {skill,rule,workflow}] [--category CATEGORY] [--limit N] [--include-lists] [--dry-run] [--curated] [--at SHA] [spec]</pre>
|
|
630
|
+
<pre class="syn">boost tap [--defaults] [--catalog] [--type {skill,rule,workflow}] [--category CATEGORY] [--limit N] [--include-lists] [--dry-run] [--curated] [--at SHA] [--jobs N] [spec]</pre>
|
|
631
631
|
<div class="args-h">Arguments</div>
|
|
632
632
|
<div class="args">
|
|
633
633
|
<div class="arg"><code>spec</code><span>owner/repo, a git URL, or a local directory</span></div>
|
|
@@ -643,6 +643,7 @@
|
|
|
643
643
|
<div class="arg"><code>--dry-run</code><span>with --catalog: print what would be tapped, tap nothing</span></div>
|
|
644
644
|
<div class="arg"><code>--curated</code><span>mark the tap as curated (★ in listings)</span></div>
|
|
645
645
|
<div class="arg"><code>--at SHA</code><span>pin the clone to one 40-character commit, as a published vector shard requires</span></div>
|
|
646
|
+
<div class="arg"><code>--jobs N</code><span>clone this many registries at once (default 8, max 16)</span></div>
|
|
646
647
|
</div>
|
|
647
648
|
</section>
|
|
648
649
|
<section class="cmd" id="cmd-untap" data-search="untap remove a registry tap -f, --force name">
|
|
@@ -1253,7 +1254,7 @@
|
|
|
1253
1254
|
</div>
|
|
1254
1255
|
|
|
1255
1256
|
<footer>
|
|
1256
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
1257
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
1257
1258
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
1258
1259
|
<nav class="foot-links" aria-label="Documentation">
|
|
1259
1260
|
<a href="index.html">Guide</a>
|
|
@@ -266,7 +266,7 @@
|
|
|
266
266
|
|
|
267
267
|
<footer>
|
|
268
268
|
<div class="wrap">
|
|
269
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
269
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
270
270
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
271
271
|
<nav class="foot-links" aria-label="Documentation">
|
|
272
272
|
<a href="index.html">Guide</a>
|
|
@@ -578,7 +578,7 @@ hidden hot-path cost hiding behind the one this card measured.</p>
|
|
|
578
578
|
|
|
579
579
|
<footer>
|
|
580
580
|
<div class="wrap">
|
|
581
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
581
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
582
582
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.9+ and <code>git</code></p>
|
|
583
583
|
<nav class="foot-links" aria-label="Documentation">
|
|
584
584
|
<a href="index.html">Guide</a>
|
|
@@ -578,7 +578,7 @@
|
|
|
578
578
|
|
|
579
579
|
<footer>
|
|
580
580
|
<div class="wrap">
|
|
581
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
581
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
582
582
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
583
583
|
<nav class="foot-links" aria-label="Documentation">
|
|
584
584
|
<a href="index.html">Guide</a>
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect width='100' height='100' rx='20' fill='%2307080f'/%3E%3Ctext x='50' y='70' font-size='58' font-family='monospace' font-weight='bold' fill='%2340cbe3' text-anchor='middle'%3E%E2%9C%A6%3C/text%3E%3C/svg%3E">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
|
-
<meta name="description" content="boost is a package manager for AI
|
|
8
|
-
<title>boost — Homebrew for AI
|
|
7
|
+
<meta name="description" content="boost is a package manager for AI skills — find, install, and govern the SKILL.md, rule, and workflow files that Claude Code, Cursor, and Windsurf run on, wired into every agent in one pass.">
|
|
8
|
+
<title>boost — Homebrew for AI skills</title>
|
|
9
9
|
<!-- Canonical Aurora tokens + primitives (single source of truth). The
|
|
10
10
|
inline block below carries ONLY page-specific layout, and wins ties
|
|
11
11
|
by coming later in the cascade. -->
|
|
@@ -561,10 +561,10 @@
|
|
|
561
561
|
<!-- ================= HERO ================= -->
|
|
562
562
|
<div class="wrap hero">
|
|
563
563
|
<span class="badge">AI Skill Package Manager · on PyPI</span>
|
|
564
|
-
<h1><span class="grad">Homebrew</span> for AI
|
|
564
|
+
<h1><span class="grad">Homebrew</span> for AI skills.</h1>
|
|
565
565
|
<p class="lede">
|
|
566
566
|
Boost is a command-line package manager that <b>searches, installs, and
|
|
567
|
-
manages AI
|
|
567
|
+
manages AI skills</b> from GitHub-hosted registries — then wires
|
|
568
568
|
them into <b>Claude Code, Windsurf, Cursor and Gemini CLI</b> at once. One command
|
|
569
569
|
replaces the copy-paste-and-pray dance of setting up AI agent skills by hand.
|
|
570
570
|
</p>
|
|
@@ -600,7 +600,7 @@
|
|
|
600
600
|
<div class="wrap">
|
|
601
601
|
<span class="eyebrow">The Concept</span>
|
|
602
602
|
<h2 class="sec-title">What is a “skill” — and why manage them?</h2>
|
|
603
|
-
<p class="sec-sub">AI
|
|
603
|
+
<p class="sec-sub">AI agents get better when you give them reusable knowledge.
|
|
604
604
|
Boost makes that knowledge installable.</p>
|
|
605
605
|
|
|
606
606
|
<div class="concept-grid">
|
|
@@ -1019,7 +1019,7 @@ pipx inject boost-skill-cli <span class="yv">"boost-skill-cli[rag]"</span>
|
|
|
1019
1019
|
offer it as "footer" in the landmark list. -->
|
|
1020
1020
|
<footer>
|
|
1021
1021
|
<div class="wrap">
|
|
1022
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
1022
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
1023
1023
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
1024
1024
|
<nav class="foot-links" aria-label="Documentation">
|
|
1025
1025
|
<a aria-current="page" href="#top">Guide</a>
|
|
@@ -566,7 +566,7 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
|
|
|
566
566
|
|
|
567
567
|
<footer>
|
|
568
568
|
<div class="wrap">
|
|
569
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
569
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
570
570
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
571
571
|
<nav class="foot-links" aria-label="Documentation">
|
|
572
572
|
<a href="index.html">Guide</a>
|
|
@@ -757,7 +757,7 @@ REGISTRY.register(
|
|
|
757
757
|
|
|
758
758
|
<footer>
|
|
759
759
|
<div class="wrap">
|
|
760
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
760
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
761
761
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
762
762
|
<nav class="foot-links" aria-label="Documentation">
|
|
763
763
|
<a href="index.html">Guide</a>
|
|
@@ -12339,7 +12339,7 @@ bytes a structurally-correct JSON response never emits.</p>
|
|
|
12339
12339
|
|
|
12340
12340
|
<footer>
|
|
12341
12341
|
<div class="wrap">
|
|
12342
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
12342
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
12343
12343
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.9+ and <code>git</code></p>
|
|
12344
12344
|
<nav class="foot-links" aria-label="Documentation">
|
|
12345
12345
|
<a href="index.html">Guide</a>
|
|
@@ -328,7 +328,7 @@ _PAGE = """<!DOCTYPE html>
|
|
|
328
328
|
</div>
|
|
329
329
|
|
|
330
330
|
<footer>
|
|
331
|
-
<p class="foot-brand"><b>boost</b> — a package manager for AI
|
|
331
|
+
<p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
|
|
332
332
|
<p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
|
|
333
333
|
<nav class="foot-links" aria-label="Documentation">
|
|
334
334
|
<a href="index.html">Guide</a>
|