boost-skill-cli 1.0.370__tar.gz → 1.0.372__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {boost_skill_cli-1.0.370/boost_skill_cli.egg-info → boost_skill_cli-1.0.372}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/configuration.py +26 -4
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/pkg.py +6 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/quality.py +4 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/taps.py +5 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/team.py +11 -1
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/complete.py +123 -10
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372/boost_skill_cli.egg-info}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/commands.html +9 -3
- boost_skill_cli-1.0.372/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_configuration.py +54 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_pkg.py +25 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_quality.py +15 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_taps.py +25 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_team.py +14 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_complete.py +111 -0
- boost_skill_cli-1.0.370/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.gitattributes +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.gitignore +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.vale.ini +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/LICENSE +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/Makefile +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/README.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/codecov.yml +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/index.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/README.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/examples/README.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/index.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/noxfile.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/setup.cfg +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/README.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/boost.css +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/boost.js +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/demo.html +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/visual_check.mjs +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.372'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 372)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -531,20 +531,42 @@ def _sq(s: str) -> str:
|
|
|
531
531
|
|
|
532
532
|
|
|
533
533
|
def cmd_completions(argv) -> int:
|
|
534
|
-
"""boost completions [bash|zsh|fish]"""
|
|
534
|
+
"""boost completions [bash|zsh|fish] [--install|--uninstall] [--eval]"""
|
|
535
535
|
p = cliparse.parser(
|
|
536
536
|
prog="boost completions",
|
|
537
537
|
description="Generate shell tab-completion scripts")
|
|
538
538
|
p.add_argument("shell", nargs="?", choices=("bash", "zsh", "fish"),
|
|
539
539
|
default=None, help="target shell (default: from $SHELL)")
|
|
540
|
+
p.add_argument("--eval", action="store_true",
|
|
541
|
+
help="print the variant safe to `eval` directly "
|
|
542
|
+
"(what --install wires up)")
|
|
543
|
+
group = p.add_mutually_exclusive_group()
|
|
544
|
+
group.add_argument("--install", action="store_true",
|
|
545
|
+
help="wire completions into the shell's rc file "
|
|
546
|
+
"(bash/zsh — one-shot, no manual editing)")
|
|
547
|
+
group.add_argument("--uninstall", action="store_true",
|
|
548
|
+
help="remove what --install wired up")
|
|
540
549
|
args = p.parse_args(argv)
|
|
541
550
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
551
|
+
detected = args.shell or Path(os.environ.get("SHELL", "")).name
|
|
552
|
+
|
|
553
|
+
if args.install or args.uninstall:
|
|
554
|
+
rc = (complete.install if args.install else complete.uninstall)(detected)
|
|
555
|
+
out.ok("%s boost completions %s %s"
|
|
556
|
+
% ("wired" if args.install else "removed",
|
|
557
|
+
"into" if args.install else "from", _tilde(rc)))
|
|
558
|
+
if args.install:
|
|
559
|
+
out.dim(" restart your shell (or run `exec %s`) to pick it up"
|
|
560
|
+
% detected)
|
|
561
|
+
return 0
|
|
562
|
+
|
|
563
|
+
shell = detected if detected in ("bash", "zsh", "fish") else "bash"
|
|
545
564
|
# The script is a thin shim that calls `boost __complete`; the candidate
|
|
546
565
|
# rules live in core/complete.py so all three shells share one tested
|
|
547
566
|
# implementation instead of three hand-maintained static lists.
|
|
567
|
+
if args.eval:
|
|
568
|
+
print(complete.eval_script(shell).rstrip())
|
|
569
|
+
return 0
|
|
548
570
|
print(complete.script(shell).rstrip())
|
|
549
571
|
out.dim("# install: " + complete.INSTALL_HINT[shell])
|
|
550
572
|
return 0
|
|
@@ -19,6 +19,7 @@ from ..core import (
|
|
|
19
19
|
adapters,
|
|
20
20
|
agents,
|
|
21
21
|
catalog,
|
|
22
|
+
complete,
|
|
22
23
|
config,
|
|
23
24
|
frontmatter,
|
|
24
25
|
gitutil,
|
|
@@ -698,6 +699,9 @@ def cmd_update(argv: List[str]) -> int:
|
|
|
698
699
|
for tname, summary in results.items():
|
|
699
700
|
catalog.rebuild_tap(registry.get(tname))
|
|
700
701
|
out.ok("%s: %s" % (tname, summary))
|
|
702
|
+
# A pulled tap can add, drop, or rename catalogue entries, so the
|
|
703
|
+
# completion name cache must not survive an update unrefreshed.
|
|
704
|
+
complete.refresh_names()
|
|
701
705
|
journal.log("update", args.tap or "all")
|
|
702
706
|
if args.taps_only:
|
|
703
707
|
return 0
|
|
@@ -919,6 +923,8 @@ def _bundle_install(file: Optional[str]) -> int:
|
|
|
919
923
|
else:
|
|
920
924
|
out.warn("line %d: unrecognised: %s" % (lineno, line))
|
|
921
925
|
failed += 1
|
|
926
|
+
if taps_added:
|
|
927
|
+
complete.refresh_names()
|
|
922
928
|
journal.log("bundle-install", label, taps=taps_added, skills=installed_n)
|
|
923
929
|
summary = "Installed %s" % _plural(installed_n, "skill")
|
|
924
930
|
if taps_added:
|
|
@@ -22,6 +22,7 @@ from ..core import (
|
|
|
22
22
|
agents,
|
|
23
23
|
ai,
|
|
24
24
|
catalog,
|
|
25
|
+
complete,
|
|
25
26
|
frontmatter,
|
|
26
27
|
gitutil,
|
|
27
28
|
imperative,
|
|
@@ -717,6 +718,9 @@ def cmd_heal(argv):
|
|
|
717
718
|
out.ok("rebuilt catalog cache for %s" % tap.name)
|
|
718
719
|
actions.append("cache %s" % tap.name)
|
|
719
720
|
|
|
721
|
+
if not dry:
|
|
722
|
+
complete.refresh_names()
|
|
723
|
+
|
|
720
724
|
if not journal.rotation_healthy():
|
|
721
725
|
if dry:
|
|
722
726
|
out.info("would rotate the journal")
|
|
@@ -8,6 +8,7 @@ from contextlib import suppress
|
|
|
8
8
|
from .. import cliparse, spin
|
|
9
9
|
from ..core import (
|
|
10
10
|
catalog,
|
|
11
|
+
complete,
|
|
11
12
|
config,
|
|
12
13
|
gitutil,
|
|
13
14
|
journal,
|
|
@@ -125,6 +126,9 @@ def cmd_tap(argv) -> int:
|
|
|
125
126
|
entries = catalog.rebuild_tap(tap)
|
|
126
127
|
journal.log("tap", tap.name)
|
|
127
128
|
out.ok("Tapped %s (%d skills)" % (tap.name, len(entries)))
|
|
129
|
+
# Refresh the TAB-completion name cache so `boost install <TAB>` sees
|
|
130
|
+
# whatever this call just tapped instead of the pre-tap snapshot.
|
|
131
|
+
complete.refresh_names()
|
|
128
132
|
return rc
|
|
129
133
|
|
|
130
134
|
|
|
@@ -151,6 +155,7 @@ def cmd_untap(argv) -> int:
|
|
|
151
155
|
out.info("cancelled")
|
|
152
156
|
return 1
|
|
153
157
|
registry.remove(tap.name)
|
|
158
|
+
complete.refresh_names()
|
|
154
159
|
journal.log("untap", tap.name)
|
|
155
160
|
out.ok("untapped %s" % tap.name)
|
|
156
161
|
return 0
|
|
@@ -9,7 +9,16 @@ import stat
|
|
|
9
9
|
import urllib.parse
|
|
10
10
|
|
|
11
11
|
from .. import cliparse
|
|
12
|
-
from ..core import
|
|
12
|
+
from ..core import (
|
|
13
|
+
catalog,
|
|
14
|
+
complete,
|
|
15
|
+
journal,
|
|
16
|
+
lockfile,
|
|
17
|
+
paths,
|
|
18
|
+
registry,
|
|
19
|
+
store,
|
|
20
|
+
util,
|
|
21
|
+
)
|
|
13
22
|
from ..core import output as out
|
|
14
23
|
from ..errors import BoostError
|
|
15
24
|
|
|
@@ -379,6 +388,7 @@ def cmd_protocol(argv) -> int:
|
|
|
379
388
|
return 1
|
|
380
389
|
tap = registry.add(arg)
|
|
381
390
|
entries = catalog.rebuild_tap(tap)
|
|
391
|
+
complete.refresh_names()
|
|
382
392
|
journal.log("tap", tap.name, via="protocol")
|
|
383
393
|
out.ok("tapped %s (%d skills)" % (tap.name, len(entries)))
|
|
384
394
|
return 0
|
|
@@ -26,10 +26,12 @@ nothing. Silence degrades; a stack trace corrupts the line the user is typing.
|
|
|
26
26
|
"""
|
|
27
27
|
from __future__ import annotations
|
|
28
28
|
|
|
29
|
+
import os
|
|
29
30
|
import re
|
|
30
31
|
from pathlib import Path
|
|
31
32
|
from typing import Callable, Dict, List, Optional, Sequence, Tuple
|
|
32
33
|
|
|
34
|
+
from ..errors import BoostError
|
|
33
35
|
from . import catalog, paths, registry, store
|
|
34
36
|
|
|
35
37
|
# cli.COMMANDS rows: (name, group, module, summary). Typed here rather than
|
|
@@ -159,20 +161,29 @@ _boost_complete() {
|
|
|
159
161
|
complete -F _boost_complete boost
|
|
160
162
|
"""
|
|
161
163
|
|
|
162
|
-
|
|
163
|
-
#
|
|
164
|
-
#
|
|
165
|
-
|
|
166
|
-
_boost() {
|
|
164
|
+
# The function body is shared between two different trailers (see
|
|
165
|
+
# `eval_script` for why): one that self-invokes for zsh's fpath/autoload
|
|
166
|
+
# machinery, one that self-registers for a direct `eval` into a running shell.
|
|
167
|
+
_ZSH_FUNC = """_boost() {
|
|
167
168
|
local -a reply
|
|
168
169
|
# "${(@)...}" preserves the EMPTY current word. Unquoted, zsh drops it,
|
|
169
170
|
# so `boost install <TAB>` arrives as two words and completes command
|
|
170
171
|
# names instead of skills — the exact bug this rewrite is fixing.
|
|
171
172
|
reply=( ${(f)"$(boost __complete "${(@)words[1,$CURRENT]}" 2>/dev/null)"} )
|
|
172
173
|
compadd -- $reply
|
|
173
|
-
}
|
|
174
|
+
}"""
|
|
175
|
+
|
|
176
|
+
_ZSH = """#compdef boost
|
|
177
|
+
# Delegates to `boost __complete` rather than embedding a static list, so
|
|
178
|
+
# arguments complete too — the previous version fell through to _files, which
|
|
179
|
+
# offered local filenames where a skill name belongs.
|
|
180
|
+
%s
|
|
174
181
|
_boost "$@"
|
|
175
|
-
"""
|
|
182
|
+
""" % _ZSH_FUNC
|
|
183
|
+
|
|
184
|
+
_ZSH_EVAL = """%s
|
|
185
|
+
compdef _boost boost
|
|
186
|
+
""" % _ZSH_FUNC
|
|
176
187
|
|
|
177
188
|
_FISH = """# boost fish completion — delegates to `boost __complete`.
|
|
178
189
|
# `-f` disables fish's filename fallback, which is what it offered previously
|
|
@@ -191,9 +202,111 @@ def script(shell: str) -> str:
|
|
|
191
202
|
return _SCRIPTS.get(shell, _BASH)
|
|
192
203
|
|
|
193
204
|
|
|
205
|
+
def eval_script(shell: str) -> str:
|
|
206
|
+
"""The variant safe to ``eval`` directly into a *running* shell, e.g. from
|
|
207
|
+
an rc file — what ``boost completions --install`` wires up.
|
|
208
|
+
|
|
209
|
+
Bash's script is unconditional registration (``complete -F ... boost``),
|
|
210
|
+
so it behaves identically whether sourced from a file or eval'd inline —
|
|
211
|
+
the same script serves both, so this just returns :func:`script`.
|
|
212
|
+
|
|
213
|
+
zsh's shipped script instead *self-invokes* (``_boost "$@"``), which is
|
|
214
|
+
correct only when zsh's own fpath/autoload machinery is what calls it:
|
|
215
|
+
the first real TAB press is what swaps the autoload stub for this body,
|
|
216
|
+
so that trailing call answers *that* press. Eval'd inline at shell
|
|
217
|
+
startup there is no press to answer yet — it would fire once, uselessly,
|
|
218
|
+
against the shell's own startup arguments, and register nothing for
|
|
219
|
+
later. ``compdef _boost boost`` instead registers the function for zsh's
|
|
220
|
+
completion system to call on every subsequent TAB press.
|
|
221
|
+
"""
|
|
222
|
+
return _ZSH_EVAL if shell == "zsh" else script(shell)
|
|
223
|
+
|
|
224
|
+
|
|
194
225
|
INSTALL_HINT = {
|
|
195
|
-
"bash": "boost completions bash >> ~/.bashrc",
|
|
196
|
-
"zsh": "boost completions zsh > ~/.zfunc/_boost
|
|
197
|
-
"
|
|
226
|
+
"bash": "boost completions --install (or by hand: boost completions bash >> ~/.bashrc)",
|
|
227
|
+
"zsh": "boost completions --install (or by hand: boost completions zsh > ~/.zfunc/_boost, "
|
|
228
|
+
"with fpath+=~/.zfunc before compinit)",
|
|
198
229
|
"fish": "boost completions fish > ~/.config/fish/completions/boost.fish",
|
|
199
230
|
}
|
|
231
|
+
|
|
232
|
+
# Shells `--install`/`--uninstall` know how to wire up, and the rc file each
|
|
233
|
+
# writes to. Fish needs neither: `~/.config/fish/completions/*.fish` is
|
|
234
|
+
# auto-discovered, so `boost completions fish > that path` is already one
|
|
235
|
+
# shell command with nothing left to automate.
|
|
236
|
+
RC_FILE = {"bash": ".bashrc", "zsh": ".zshrc"}
|
|
237
|
+
|
|
238
|
+
# Shell-comment markers, not core.rules's HTML-comment ones: an rc file
|
|
239
|
+
# executes as shell code, so `<!-- ... -->` there is a syntax error, not a
|
|
240
|
+
# comment.
|
|
241
|
+
_RC_START = "# >>> boost completions >>>"
|
|
242
|
+
_RC_END = "# <<< boost completions <<<"
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _rc_block(shell: str) -> str:
|
|
246
|
+
# Calls back into `boost completions <shell> --eval` at every shell
|
|
247
|
+
# startup, rather than embedding a frozen copy of the script, so an
|
|
248
|
+
# installed hook never drifts from whatever boost version is on PATH.
|
|
249
|
+
return ("%s\ncommand -v boost >/dev/null 2>&1 && "
|
|
250
|
+
"eval \"$(boost completions %s --eval)\"\n%s"
|
|
251
|
+
% (_RC_START, shell, _RC_END))
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def _merge_rc(text: str, block: str) -> str:
|
|
255
|
+
"""Idempotently set ``block`` in ``text``: replace a prior boost block in
|
|
256
|
+
place, or append one after a single blank line. Mirrors
|
|
257
|
+
:func:`core.rules.merge_block`'s shape with rc-file-safe markers."""
|
|
258
|
+
i = text.find(_RC_START)
|
|
259
|
+
if i != -1:
|
|
260
|
+
j = text.find(_RC_END, i)
|
|
261
|
+
if j != -1:
|
|
262
|
+
j += len(_RC_END)
|
|
263
|
+
return (text[:i] + block + text[j:]).rstrip("\n") + "\n"
|
|
264
|
+
base = text.rstrip("\n")
|
|
265
|
+
return (base + "\n\n" + block + "\n") if base else block + "\n"
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def _strip_rc(text: str) -> str:
|
|
269
|
+
"""Inverse of :func:`_merge_rc`: remove the managed block, if present."""
|
|
270
|
+
i = text.find(_RC_START)
|
|
271
|
+
if i == -1:
|
|
272
|
+
return text
|
|
273
|
+
j = text.find(_RC_END, i)
|
|
274
|
+
if j == -1:
|
|
275
|
+
return text # no end marker: malformed, leave the file untouched
|
|
276
|
+
j += len(_RC_END)
|
|
277
|
+
before, after = text[:i].rstrip("\n"), text[j:].strip("\n")
|
|
278
|
+
parts = [p for p in (before, after) if p]
|
|
279
|
+
return "\n\n".join(parts) + "\n" if parts else ""
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def _rc_path(shell: str) -> Path:
|
|
283
|
+
if shell not in RC_FILE:
|
|
284
|
+
raise BoostError(
|
|
285
|
+
"no one-shot install for %s yet" % shell,
|
|
286
|
+
hint="fish needs none: boost completions fish > "
|
|
287
|
+
"~/.config/fish/completions/boost.fish"
|
|
288
|
+
if shell == "fish" else "supported: %s" % ", ".join(RC_FILE))
|
|
289
|
+
return paths.expand("~/" + RC_FILE[shell])
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def install(shell: str) -> Path:
|
|
293
|
+
"""Idempotently wire ``shell``'s rc file to eval boost's completions on
|
|
294
|
+
every startup. Returns the rc file path. Raises :class:`BoostError` for
|
|
295
|
+
a shell with no rc-file install path (currently anything but bash/zsh)."""
|
|
296
|
+
rc = _rc_path(shell)
|
|
297
|
+
text = rc.read_text(encoding="utf-8") if rc.exists() else ""
|
|
298
|
+
rc.write_text(_merge_rc(text, _rc_block(shell)), encoding="utf-8")
|
|
299
|
+
return rc
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def uninstall(shell: str) -> Path:
|
|
303
|
+
"""Remove what :func:`install` wired up. A no-op if never installed."""
|
|
304
|
+
rc = _rc_path(shell)
|
|
305
|
+
if rc.exists():
|
|
306
|
+
rc.write_text(_strip_rc(rc.read_text(encoding="utf-8")), encoding="utf-8")
|
|
307
|
+
return rc
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def detect_shell() -> str:
|
|
311
|
+
"""The caller's shell from ``$SHELL``, basename only (e.g. "zsh")."""
|
|
312
|
+
return Path(os.environ.get("SHELL", "")).name
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
<a class="cmd-link" href="#cmd-create" data-search="create scaffold a new skill from a template --description description --dir dir --install name">create</a>
|
|
175
175
|
<a class="cmd-link" href="#cmd-policy" data-search="policy manage & enforce skill governance policies --json {list,set,unset,check} key value">policy</a>
|
|
176
176
|
<a class="cmd-link" href="#cmd-onboard" data-search="onboard add skill-tracker telemetry to a repo & open a pr --repo repo --pr --dry-run -f, --force">onboard</a>
|
|
177
|
-
<a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts {bash,zsh,fish}">completions</a>
|
|
177
|
+
<a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">completions</a>
|
|
178
178
|
<a class="cmd-link" href="#cmd-schedule" data-search="schedule manage automatic skill-sync scheduling --interval {6h,12h,daily} --json {status,enable,disable}">schedule</a>
|
|
179
179
|
<a class="cmd-link" href="#cmd-serve" data-search="serve serve the skill catalog over http (port 8787) --port port --host host">serve</a>
|
|
180
180
|
<a class="cmd-link" href="#cmd-mcp" data-search="mcp register boost as an mcp server (claude code, gemini cli) register boost as an mcp server for your agent clis --host h --stdio {register,unregister}">mcp</a>
|
|
@@ -1013,14 +1013,20 @@
|
|
|
1013
1013
|
<div class="arg"><code>-f, --force</code><span>overwrite existing files without confirming</span></div>
|
|
1014
1014
|
</div>
|
|
1015
1015
|
</section>
|
|
1016
|
-
<section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts {bash,zsh,fish}">
|
|
1016
|
+
<section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">
|
|
1017
1017
|
<h3><span class="cname">completions</span><span class="gtag">cfg</span></h3>
|
|
1018
1018
|
<p class="summary">Generate shell tab-completion scripts</p>
|
|
1019
|
-
<pre class="syn">boost completions [{bash,zsh,fish}]</pre>
|
|
1019
|
+
<pre class="syn">boost completions [--eval] [--install] [--uninstall] [{bash,zsh,fish}]</pre>
|
|
1020
1020
|
<div class="args-h">Arguments</div>
|
|
1021
1021
|
<div class="args">
|
|
1022
1022
|
<div class="arg"><code>{bash,zsh,fish}</code><span>target shell (default: from $SHELL)</span></div>
|
|
1023
1023
|
</div>
|
|
1024
|
+
<div class="args-h">Options</div>
|
|
1025
|
+
<div class="args">
|
|
1026
|
+
<div class="arg"><code>--eval</code><span>print the variant safe to `eval` directly (what --install wires up)</span></div>
|
|
1027
|
+
<div class="arg"><code>--install</code><span>wire completions into the shell's rc file (bash/zsh — one-shot, no manual editing)</span></div>
|
|
1028
|
+
<div class="arg"><code>--uninstall</code><span>remove what --install wired up</span></div>
|
|
1029
|
+
</div>
|
|
1024
1030
|
</section>
|
|
1025
1031
|
<section class="cmd" id="cmd-schedule" data-search="schedule manage automatic skill-sync scheduling --interval {6h,12h,daily} --json {status,enable,disable}">
|
|
1026
1032
|
<h3><span class="cname">schedule</span><span class="gtag">cfg</span></h3>
|
|
Binary file
|
{boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_configuration.py
RENAMED
|
@@ -547,6 +547,60 @@ class TestCompletions:
|
|
|
547
547
|
monkeypatch.setenv("SHELL", "/bin/weirdsh")
|
|
548
548
|
assert "_boost_complete" in boost("completions").out
|
|
549
549
|
|
|
550
|
+
def test_eval_flag_prints_the_eval_safe_variant(self, boost, sandbox):
|
|
551
|
+
r = boost("completions", "zsh", "--eval")
|
|
552
|
+
assert r.out.rstrip().endswith("compdef _boost boost")
|
|
553
|
+
assert '_boost "$@"' not in r.out
|
|
554
|
+
assert "boost __complete" in r.out
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
class TestCompletionsInstall:
|
|
558
|
+
"""`boost completions --install` — the one-shot alternative to the
|
|
559
|
+
copy-paste-into-your-rc-file instructions `INSTALL_HINT` used to be.
|
|
560
|
+
"""
|
|
561
|
+
|
|
562
|
+
def test_explicit_shell_wires_the_matching_rc_file(self, boost, sandbox):
|
|
563
|
+
r = boost("completions", "bash", "--install")
|
|
564
|
+
assert "wired boost completions into ~/.bashrc" in r.out
|
|
565
|
+
assert "restart your shell" in r.out
|
|
566
|
+
text = (sandbox / ".bashrc").read_text(encoding="utf-8")
|
|
567
|
+
assert 'eval "$(boost completions bash --eval)"' in text
|
|
568
|
+
|
|
569
|
+
def test_auto_detects_shell_from_env(self, boost, sandbox, monkeypatch):
|
|
570
|
+
monkeypatch.setenv("SHELL", "/usr/local/bin/zsh")
|
|
571
|
+
boost("completions", "--install")
|
|
572
|
+
assert (sandbox / ".zshrc").exists()
|
|
573
|
+
assert not (sandbox / ".bashrc").exists()
|
|
574
|
+
|
|
575
|
+
def test_running_install_twice_does_not_duplicate_the_block(self, boost,
|
|
576
|
+
sandbox):
|
|
577
|
+
boost("completions", "bash", "--install")
|
|
578
|
+
boost("completions", "bash", "--install")
|
|
579
|
+
text = (sandbox / ".bashrc").read_text(encoding="utf-8")
|
|
580
|
+
assert text.count("# >>> boost completions >>>") == 1
|
|
581
|
+
|
|
582
|
+
def test_preserves_the_users_existing_rc_content(self, boost, sandbox):
|
|
583
|
+
(sandbox / ".bashrc").write_text("export EDITOR=vim\n", encoding="utf-8")
|
|
584
|
+
boost("completions", "bash", "--install")
|
|
585
|
+
text = (sandbox / ".bashrc").read_text(encoding="utf-8")
|
|
586
|
+
assert text.startswith("export EDITOR=vim\n")
|
|
587
|
+
|
|
588
|
+
def test_uninstall_removes_exactly_what_install_added(self, boost, sandbox):
|
|
589
|
+
(sandbox / ".bashrc").write_text("export EDITOR=vim\n", encoding="utf-8")
|
|
590
|
+
boost("completions", "bash", "--install")
|
|
591
|
+
r = boost("completions", "bash", "--uninstall")
|
|
592
|
+
assert "removed boost completions from ~/.bashrc" in r.out
|
|
593
|
+
assert (sandbox / ".bashrc").read_text(encoding="utf-8") == "export EDITOR=vim\n"
|
|
594
|
+
|
|
595
|
+
def test_fish_has_no_one_shot_install_yet(self, boost, sandbox):
|
|
596
|
+
r = boost("completions", "fish", "--install", expect=1)
|
|
597
|
+
assert "no one-shot install for fish yet" in r.err
|
|
598
|
+
assert "boost completions fish" in r.err
|
|
599
|
+
|
|
600
|
+
def test_install_and_uninstall_are_mutually_exclusive(self, boost, sandbox):
|
|
601
|
+
r = boost("completions", "bash", "--install", "--uninstall", expect=2)
|
|
602
|
+
assert "not allowed with argument" in r.err
|
|
603
|
+
|
|
550
604
|
|
|
551
605
|
class TestHiddenCompleter:
|
|
552
606
|
def test_it_prints_one_candidate_per_line(self, boost, sandbox):
|
|
@@ -345,6 +345,19 @@ class TestUpdate:
|
|
|
345
345
|
assert "upgraded" not in r.out
|
|
346
346
|
assert _lock()["brainstorming"]["version"] == "1.4.0"
|
|
347
347
|
|
|
348
|
+
def test_refreshes_the_completion_cache(self, boost, fixture_tap_src,
|
|
349
|
+
tmp_path):
|
|
350
|
+
from boost_cli.core import complete
|
|
351
|
+
tap_dir = _copy_tap(fixture_tap_src, tmp_path / "growing-tap")
|
|
352
|
+
boost("tap", tap_dir)
|
|
353
|
+
complete.refresh_names()
|
|
354
|
+
assert "brand-new-skill" not in complete._cached_names()
|
|
355
|
+
_add_and_commit(tap_dir, "skills/brand-new-skill/SKILL.md",
|
|
356
|
+
"---\nname: brand-new-skill\ndescription: added upstream\n"
|
|
357
|
+
"version: 1.0.0\n---\n\n# New\n", "add brand-new-skill")
|
|
358
|
+
boost("update")
|
|
359
|
+
assert "brand-new-skill" in complete._cached_names()
|
|
360
|
+
|
|
348
361
|
def test_refreshes_rule_when_source_changes(self, boost, fixture_tap_src,
|
|
349
362
|
tmp_path):
|
|
350
363
|
tap_dir = _copy_tap(fixture_tap_src, tmp_path / "rule-tap")
|
|
@@ -825,6 +838,18 @@ class TestBundleEdges:
|
|
|
825
838
|
assert "installed brainstorming v1.4.0 (fixture-tap)" in r.out
|
|
826
839
|
assert "Installed 1 skill, added 1 tap" in r.out
|
|
827
840
|
|
|
841
|
+
def test_readding_a_tap_refreshes_the_completion_cache(self, boost, installed,
|
|
842
|
+
tmp_path):
|
|
843
|
+
from boost_cli.core import complete
|
|
844
|
+
bf = tmp_path / "Boostfile"
|
|
845
|
+
boost("bundle", "dump", bf)
|
|
846
|
+
boost("uninstall", "brainstorming")
|
|
847
|
+
boost("untap", "fixture-tap", "--force")
|
|
848
|
+
complete.refresh_names()
|
|
849
|
+
assert "brainstorming" not in complete._cached_names()
|
|
850
|
+
boost("bundle", "install", bf)
|
|
851
|
+
assert "brainstorming" in complete._cached_names()
|
|
852
|
+
|
|
828
853
|
def test_dump_local_comment_and_lost_tap_url(self, boost, installed,
|
|
829
854
|
tmp_path):
|
|
830
855
|
boost("import", _skill_dir(tmp_path, "local-thing"))
|
|
@@ -534,6 +534,21 @@ class TestHeal:
|
|
|
534
534
|
assert (paths.store_dir() / "brainstorming" / "SKILL.md").is_file()
|
|
535
535
|
assert _lock()["brainstorming"]["version"] == "1.4.0"
|
|
536
536
|
|
|
537
|
+
def test_refreshes_the_completion_cache(self, boost, tapped):
|
|
538
|
+
from boost_cli.core import complete
|
|
539
|
+
complete.refresh_names()
|
|
540
|
+
complete.names_file().write_text("", encoding="utf-8") # gone stale
|
|
541
|
+
assert "brainstorming" not in complete._cached_names()
|
|
542
|
+
boost("heal")
|
|
543
|
+
assert "brainstorming" in complete._cached_names()
|
|
544
|
+
|
|
545
|
+
def test_dry_run_does_not_touch_the_completion_cache(self, boost, tapped):
|
|
546
|
+
from boost_cli.core import complete
|
|
547
|
+
complete.refresh_names()
|
|
548
|
+
complete.names_file().write_text("", encoding="utf-8")
|
|
549
|
+
boost("heal", "--dry-run")
|
|
550
|
+
assert "brainstorming" not in complete._cached_names()
|
|
551
|
+
|
|
537
552
|
|
|
538
553
|
# ── conflict ─────────────────────────────────────────────────────────────
|
|
539
554
|
|
|
@@ -286,3 +286,28 @@ class TestOutdated:
|
|
|
286
286
|
r = boost("outdated")
|
|
287
287
|
assert "source missing" in r.out
|
|
288
288
|
assert "1 outdated" in r.out
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
# ── completion cache invalidation ───────────────────────────────────────
|
|
292
|
+
|
|
293
|
+
class TestCompletionCacheStaysFresh:
|
|
294
|
+
"""core/complete.py's module docstring promises the TAB-completion name
|
|
295
|
+
cache is refreshed "after anything that changes the catalogue (tap,
|
|
296
|
+
untap, update)" — these pin that promise against the commands that make
|
|
297
|
+
it. Without the refresh call, `boost install <TAB>` silently drifts from
|
|
298
|
+
whatever `boost taps` actually reports.
|
|
299
|
+
"""
|
|
300
|
+
|
|
301
|
+
def test_tap_refreshes_the_completion_cache(self, boost, fixture_tap_src):
|
|
302
|
+
from boost_cli.core import complete
|
|
303
|
+
complete.refresh_names() # snapshot before any tap: empty
|
|
304
|
+
assert "brainstorming" not in complete._cached_names()
|
|
305
|
+
boost("tap", fixture_tap_src)
|
|
306
|
+
assert "brainstorming" in complete._cached_names()
|
|
307
|
+
|
|
308
|
+
def test_untap_refreshes_the_completion_cache(self, boost, tapped):
|
|
309
|
+
from boost_cli.core import complete
|
|
310
|
+
complete.refresh_names()
|
|
311
|
+
assert "brainstorming" in complete._cached_names()
|
|
312
|
+
boost("untap", "fixture-tap", "--force")
|
|
313
|
+
assert "brainstorming" not in complete._cached_names()
|
|
@@ -9,6 +9,7 @@ from __future__ import annotations
|
|
|
9
9
|
import getpass
|
|
10
10
|
import hashlib
|
|
11
11
|
import json
|
|
12
|
+
import shutil
|
|
12
13
|
import stat
|
|
13
14
|
import sys
|
|
14
15
|
|
|
@@ -252,6 +253,19 @@ class TestProtocol:
|
|
|
252
253
|
r = boost("protocol", "open", "boost://tap/owner/repo", expect=1)
|
|
253
254
|
assert "cancelled" in r.out
|
|
254
255
|
|
|
256
|
+
def test_open_tap_refreshes_the_completion_cache(self, boost, sandbox,
|
|
257
|
+
fixture_tap_src,
|
|
258
|
+
monkeypatch):
|
|
259
|
+
from boost_cli.core import complete
|
|
260
|
+
monkeypatch.setattr(
|
|
261
|
+
"boost_cli.core.gitutil.clone_shallow",
|
|
262
|
+
lambda url, dest: shutil.copytree(fixture_tap_src, dest))
|
|
263
|
+
complete.refresh_names()
|
|
264
|
+
assert "brainstorming" not in complete._cached_names()
|
|
265
|
+
r = boost("protocol", "open", "boost://tap/owner/repo")
|
|
266
|
+
assert "tapped owner/repo" in r.out
|
|
267
|
+
assert "brainstorming" in complete._cached_names()
|
|
268
|
+
|
|
255
269
|
def test_register_unregister_darwin(self, boost, sandbox, monkeypatch):
|
|
256
270
|
monkeypatch.setattr("boost_cli.commands.team.platform.system",
|
|
257
271
|
lambda: "Darwin")
|