boost-skill-cli 1.0.415__tar.gz → 1.0.417__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.415 → boost_skill_cli-1.0.417}/MANIFEST.in +7 -5
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/Makefile +2 -2
- {boost_skill_cli-1.0.415/boost_skill_cli.egg-info → boost_skill_cli-1.0.417}/PKG-INFO +4 -1
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/_version.py +2 -2
- boost_skill_cli-1.0.417/boost_langchain/__init__.py +51 -0
- boost_skill_cli-1.0.417/boost_langchain/_compat.py +24 -0
- boost_skill_cli-1.0.417/boost_langchain/graph.py +94 -0
- boost_skill_cli-1.0.417/boost_langchain/loader.py +59 -0
- boost_skill_cli-1.0.417/boost_langchain/retriever.py +76 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417/boost_skill_cli.egg-info}/PKG-INFO +4 -1
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/SOURCES.txt +13 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/requires.txt +4 -0
- boost_skill_cli-1.0.417/boost_skill_cli.egg-info/top_level.txt +2 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/langchain.html +29 -23
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/boost-langchain-publishing.md +11 -2
- boost_skill_cli-1.0.417/docs/roadmap/items/langchain-in-the-wheel.md +46 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +8 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scripts-under-the-lint-gate.md +4 -2
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap.html +97 -36
- boost_skill_cli-1.0.417/evals/publish_golden_dataset.py +91 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/pyproject.toml +54 -3
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_command_reference.py +5 -6
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_scale_corpus.py +11 -11
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/check_licenses.py +5 -5
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/check_required_checks.py +20 -21
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_corpus.py +19 -19
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_explain.py +11 -12
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_gate.py +6 -7
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_recommend.py +14 -14
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_retrieval.py +51 -49
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_stats_summary.py +3 -4
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/import_budget.py +9 -10
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/lock_toolchain.py +6 -6
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/mutation_shards.py +27 -27
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/page_budget.py +5 -5
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/release_guard.py +7 -7
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/serve_docs.py +1 -2
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/setup.cfg +2 -0
- boost_skill_cli-1.0.417/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- boost_skill_cli-1.0.417/tests/langchain/conftest.py +73 -0
- boost_skill_cli-1.0.417/tests/langchain/test_graph.py +125 -0
- boost_skill_cli-1.0.417/tests/langchain/test_loader.py +74 -0
- boost_skill_cli-1.0.417/tests/langchain/test_retriever.py +104 -0
- boost_skill_cli-1.0.417/tests/unit/test_langchain_packaging.py +110 -0
- boost_skill_cli-1.0.415/boost_skill_cli.egg-info/top_level.txt +0 -1
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.gitattributes +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.gitignore +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.vale.ini +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/LICENSE +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/README.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/spin.py +0 -0
- /boost_skill_cli-1.0.415/tests/fuzz/corpus/registry/05-empty.txt → /boost_skill_cli-1.0.417/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/codecov.yml +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/index.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/README.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/examples/README.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/index.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/noxfile.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/README.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/boost.css +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/boost.js +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/demo.html +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/visual_check.mjs +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Keep source releases lean: the runtime is boost_cli/ (with its bundled
|
|
2
|
-
# data)
|
|
3
|
-
#
|
|
2
|
+
# data) plus boost_langchain/ (the LangChain bindings — in the wheel, inert
|
|
3
|
+
# without the [langchain] extra), plus the usual metadata. Everything below
|
|
4
|
+
# is dev-only or generated and should never ship in the sdist.
|
|
4
5
|
include README.md LICENSE pyproject.toml setup.cfg
|
|
5
6
|
recursive-include boost_cli *.py *.json
|
|
7
|
+
recursive-include boost_langchain *.py py.typed
|
|
6
8
|
prune mutants
|
|
7
9
|
prune dist
|
|
8
10
|
prune .idea
|
|
@@ -13,6 +15,6 @@ exclude .coverage
|
|
|
13
15
|
# only; nothing in the shipped runtime touches node.
|
|
14
16
|
exclude package.json package-lock.json
|
|
15
17
|
global-exclude __pycache__ *.pyc *.pyo .DS_Store
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
|
|
18
|
+
# The package README is repo documentation, not wheel payload — the wheel's
|
|
19
|
+
# long_description is the root README.
|
|
20
|
+
exclude boost_langchain/README.md
|
|
@@ -52,7 +52,7 @@ mutation:
|
|
|
52
52
|
$(PY) scripts/mutation_gate.py --run --min 80
|
|
53
53
|
|
|
54
54
|
lint:
|
|
55
|
-
$(VENV)/bin/ruff check boost_cli tests evals
|
|
55
|
+
$(VENV)/bin/ruff check boost_cli boost_langchain tests evals scripts
|
|
56
56
|
$(VENV)/bin/mypy
|
|
57
57
|
$(VENV)/bin/pyright
|
|
58
58
|
$(VENV)/bin/lint-imports
|
|
@@ -60,7 +60,7 @@ lint:
|
|
|
60
60
|
$(VENV)/bin/xenon --max-absolute F --max-modules E --max-average B boost_cli
|
|
61
61
|
$(VENV)/bin/interrogate boost_cli/core
|
|
62
62
|
$(VENV)/bin/refurb boost_cli
|
|
63
|
-
$(VENV)/bin/codespell boost_cli docs README.md
|
|
63
|
+
$(VENV)/bin/codespell boost_cli boost_langchain docs README.md
|
|
64
64
|
@# actionlint does not lint `run:` blocks itself — it shells out to
|
|
65
65
|
@# shellcheck, and if shellcheck is not on PATH it skips them silently and
|
|
66
66
|
@# still exits 0. So `make lint` could report a clean workflow lint having
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.417
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -707,6 +707,9 @@ Requires-Dist: ragas<0.3,>=0.2; extra == "eval"
|
|
|
707
707
|
Requires-Dist: langchain-core<0.4; extra == "eval"
|
|
708
708
|
Requires-Dist: langchain-community<0.4; extra == "eval"
|
|
709
709
|
Requires-Dist: langchain-openai<1; extra == "eval"
|
|
710
|
+
Provides-Extra: langchain
|
|
711
|
+
Requires-Dist: langchain-core<2,>=1; extra == "langchain"
|
|
712
|
+
Requires-Dist: pydantic>=2; extra == "langchain"
|
|
710
713
|
Provides-Extra: bdd
|
|
711
714
|
Requires-Dist: behave>=1.2.6; extra == "bdd"
|
|
712
715
|
Provides-Extra: perf
|
|
@@ -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.417'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 417)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""LangChain bindings for boost's skill catalog.
|
|
2
|
+
|
|
3
|
+
Three seams, all thin on purpose: :class:`BoostRetriever` puts the tapped
|
|
4
|
+
catalog behind LangChain's retriever contract, :class:`SkillMarkdownLoader`
|
|
5
|
+
turns one SKILL.md into a Document, and :func:`skill_context_node` wraps the
|
|
6
|
+
retriever as a LangGraph-shaped node (built on ``langchain_core`` types only,
|
|
7
|
+
so langgraph stays a separate install). Everything that decides *what comes
|
|
8
|
+
back* — ranking, fusion, dedupe, the degrade ladder — stays in
|
|
9
|
+
``boost_cli.core``, where it is measured by the repo's eval gate; this
|
|
10
|
+
package only translates the result into LangChain's types.
|
|
11
|
+
|
|
12
|
+
This package ships inside the ``boost-skill-cli`` wheel, but its
|
|
13
|
+
dependencies ride the opt-in ``[langchain]`` extra — the default install
|
|
14
|
+
stays zero-dependency, so the module files are always present while
|
|
15
|
+
``langchain_core`` may not be. The guard below turns that mismatch into the
|
|
16
|
+
one actionable message instead of a bare import error pointing at an
|
|
17
|
+
internal module.
|
|
18
|
+
"""
|
|
19
|
+
from ._compat import supported_langchain_core
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
from .graph import skill_context_node
|
|
23
|
+
from .loader import SkillMarkdownLoader
|
|
24
|
+
from .retriever import BoostRetriever
|
|
25
|
+
except ModuleNotFoundError as exc:
|
|
26
|
+
_root = (exc.name or "").partition(".")[0]
|
|
27
|
+
if _root in ("langchain_core", "pydantic"):
|
|
28
|
+
raise ModuleNotFoundError(
|
|
29
|
+
"boost_langchain ships with boost-skill-cli, but its LangChain "
|
|
30
|
+
"dependencies are opt-in — install the extra: "
|
|
31
|
+
"pip install 'boost-skill-cli[langchain]'",
|
|
32
|
+
name=_root,
|
|
33
|
+
) from exc
|
|
34
|
+
raise
|
|
35
|
+
|
|
36
|
+
# The imports above SUCCEED on langchain-core 0.3 — the [eval] extra's pin —
|
|
37
|
+
# and then fail subtly at runtime (see _compat). Enforce the declared major
|
|
38
|
+
# here, where the failure can name the fix, instead of surfacing later as an
|
|
39
|
+
# AttributeError mid-graph.
|
|
40
|
+
import langchain_core as _langchain_core
|
|
41
|
+
|
|
42
|
+
if not supported_langchain_core(getattr(_langchain_core, "__version__", "")):
|
|
43
|
+
raise ImportError(
|
|
44
|
+
"boost_langchain requires langchain-core>=1,<2 but %s is installed. "
|
|
45
|
+
"The [eval] extra pins the langchain 0.3 stack, so [eval] and "
|
|
46
|
+
"[langchain] cannot share an environment until ragas ships its "
|
|
47
|
+
"langchain-1.x fix — reinstall with: "
|
|
48
|
+
"pip install 'boost-skill-cli[langchain]'"
|
|
49
|
+
% getattr(_langchain_core, "__version__", "unknown"))
|
|
50
|
+
|
|
51
|
+
__all__ = ["BoostRetriever", "SkillMarkdownLoader", "skill_context_node"]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Import-time compatibility checks, importable without langchain installed.
|
|
2
|
+
|
|
3
|
+
Deliberately dependency-free: the package __init__ needs this BEFORE it can
|
|
4
|
+
trust the langchain imports, and the unit suite needs to test the rule from
|
|
5
|
+
the base venv, where importing boost_langchain itself raises the extra hint.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def supported_langchain_core(version: str) -> bool:
|
|
11
|
+
"""True when ``version`` satisfies the [langchain] extra's pin (>=1,<2).
|
|
12
|
+
|
|
13
|
+
The floor is not pedantry: langchain-core 0.3 — exactly what the [eval]
|
|
14
|
+
extra pins — satisfies every import this package makes (BaseRetriever,
|
|
15
|
+
BaseLoader and the message types all exist there) and then fails subtly
|
|
16
|
+
at runtime, because ``BaseMessage.text`` is a method in 0.3 and a
|
|
17
|
+
property from 1.0. The cap matters for the same reason in reverse: the
|
|
18
|
+
BaseRetriever contract moves on majors.
|
|
19
|
+
"""
|
|
20
|
+
try:
|
|
21
|
+
major = int(version.partition(".")[0])
|
|
22
|
+
except ValueError:
|
|
23
|
+
return False
|
|
24
|
+
return 1 <= major < 2
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""A LangGraph node that pulls the right skill into a run, mid-run.
|
|
2
|
+
|
|
3
|
+
The alternative this exists to avoid is stuffing every procedure into the
|
|
4
|
+
system prompt up front: that spends context on procedures the run never
|
|
5
|
+
needs and stops scaling the moment the catalog does. Retrieving against the
|
|
6
|
+
current state instead means each turn carries only the procedures that turn
|
|
7
|
+
asked for.
|
|
8
|
+
|
|
9
|
+
Nothing in this module imports langgraph. A graph node is just a callable
|
|
10
|
+
from state to a partial state update, so building the callable against
|
|
11
|
+
``langchain_core`` types alone keeps langgraph out of the ``[langchain]``
|
|
12
|
+
extra entirely — install it only if your app actually runs graphs — while
|
|
13
|
+
the node still drops straight into ``builder.add_node``.
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from collections.abc import Callable
|
|
18
|
+
|
|
19
|
+
from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage
|
|
20
|
+
|
|
21
|
+
from .retriever import BoostRetriever
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _last_human_text(messages: list[BaseMessage]) -> str:
|
|
25
|
+
"""The most recent human turn — the query the *current* state poses.
|
|
26
|
+
|
|
27
|
+
Earlier human turns are already answered context; retrieving on them
|
|
28
|
+
would re-inject procedures for questions the graph has moved past.
|
|
29
|
+
``.text`` rather than ``.content`` because content may be a block list.
|
|
30
|
+
"""
|
|
31
|
+
for msg in reversed(messages):
|
|
32
|
+
if isinstance(msg, HumanMessage):
|
|
33
|
+
return msg.text
|
|
34
|
+
return ""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def skill_context_node(
|
|
38
|
+
retriever: BoostRetriever | None = None,
|
|
39
|
+
k: int = 3,
|
|
40
|
+
kind: str | None = None,
|
|
41
|
+
) -> Callable[[dict], dict]:
|
|
42
|
+
"""Build a graph node that injects relevant boost procedures as context.
|
|
43
|
+
|
|
44
|
+
The returned callable reads the last human message from
|
|
45
|
+
``state["messages"]``, retrieves up to ``k`` matching catalog items, and
|
|
46
|
+
returns ``{"messages": [SystemMessage(...)]}`` carrying their full
|
|
47
|
+
bodies. Three choices worth knowing about:
|
|
48
|
+
|
|
49
|
+
- **It degrades to a no-op.** No human turn, nothing tapped, or no match
|
|
50
|
+
all return ``{}`` — in langgraph, "no state update". A graph wired
|
|
51
|
+
through this node must keep working on a machine with an empty
|
|
52
|
+
catalog, because retrieval here is an enhancement, not a dependency.
|
|
53
|
+
- **Provenance rides along.** Every injected procedure is prefixed with
|
|
54
|
+
its name, tap, in-repo path and version. Injected text steers the
|
|
55
|
+
model, so when a run goes wrong the first question is *which* skill
|
|
56
|
+
said that and *where it came from* — a poisoned or stale skill is
|
|
57
|
+
traceable from the transcript alone, without re-running retrieval.
|
|
58
|
+
- **``k`` defaults lower than the retriever's own.** These are full
|
|
59
|
+
procedure bodies landing in a live conversation; three is a context
|
|
60
|
+
budget, eight is a search page.
|
|
61
|
+
|
|
62
|
+
Pass a configured ``retriever`` to control retrieval wholesale (it wins
|
|
63
|
+
over ``k``/``kind``, which only shape the default ``BoostRetriever``).
|
|
64
|
+
"""
|
|
65
|
+
if retriever is None:
|
|
66
|
+
retriever = BoostRetriever(k=k, kind=kind, full_content=True)
|
|
67
|
+
|
|
68
|
+
def boost_skill_context(state: dict) -> dict:
|
|
69
|
+
query = _last_human_text(state.get("messages") or [])
|
|
70
|
+
if not query.strip():
|
|
71
|
+
return {}
|
|
72
|
+
docs = retriever.invoke(query)
|
|
73
|
+
if not docs:
|
|
74
|
+
return {}
|
|
75
|
+
blocks = []
|
|
76
|
+
for doc in docs:
|
|
77
|
+
meta = doc.metadata
|
|
78
|
+
prov = "%s:%s" % (meta.get("tap") or "?", meta.get("source") or "?")
|
|
79
|
+
if meta.get("version"):
|
|
80
|
+
prov = "%s @ %s" % (prov, meta["version"])
|
|
81
|
+
blocks.append("### %s (%s — %s)\n\n%s" % (
|
|
82
|
+
meta.get("name") or "unnamed",
|
|
83
|
+
meta.get("kind") or "skill",
|
|
84
|
+
prov,
|
|
85
|
+
doc.page_content,
|
|
86
|
+
))
|
|
87
|
+
content = (
|
|
88
|
+
"Procedures from the boost catalog relevant to the current "
|
|
89
|
+
"request. Apply the ones that fit; each is labeled with its "
|
|
90
|
+
"source so it can be audited.\n\n%s" % "\n\n".join(blocks)
|
|
91
|
+
)
|
|
92
|
+
return {"messages": [SystemMessage(content=content)]}
|
|
93
|
+
|
|
94
|
+
return boost_skill_context
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Load one skill's SKILL.md as a LangChain ``Document``."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from collections.abc import Iterator
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from langchain_core.document_loaders import BaseLoader
|
|
8
|
+
from langchain_core.documents import Document
|
|
9
|
+
|
|
10
|
+
from boost_cli.core import frontmatter
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SkillMarkdownLoader(BaseLoader):
|
|
14
|
+
"""Yield a SKILL.md as one Document: body as content, frontmatter as metadata.
|
|
15
|
+
|
|
16
|
+
One Document per skill, not one per chunk: a skill file is already the
|
|
17
|
+
author's chosen unit of instruction, and boost's own indexer moved off
|
|
18
|
+
chunking for the same reason (see rag._make_docs). Callers that want
|
|
19
|
+
chunks can run any LangChain splitter over the result.
|
|
20
|
+
|
|
21
|
+
Parsing reuses ``boost_cli.core.frontmatter`` rather than a YAML library
|
|
22
|
+
so this loader reads a skill file *exactly* the way boost's catalog does —
|
|
23
|
+
including the lossless-number rule that keeps ``version: 1.10`` from
|
|
24
|
+
silently becoming ``1.1``.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, path: str | Path):
|
|
28
|
+
"""``path`` is a SKILL.md file, or a directory holding one."""
|
|
29
|
+
self.path = Path(path)
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def from_installed(cls, name: str) -> SkillMarkdownLoader:
|
|
33
|
+
"""Loader for a skill installed in boost's canonical store.
|
|
34
|
+
|
|
35
|
+
Resolves through ``store.skill_store_dir`` so the path is the single
|
|
36
|
+
source of truth every agent's symlink points at — not one particular
|
|
37
|
+
agent's view of it — and so unsafe names are rejected exactly the way
|
|
38
|
+
``boost install`` rejects them (raises BoostError). A name installed
|
|
39
|
+
as a rule or workflow is declined by kind rather than with a bare
|
|
40
|
+
missing-file error: those kinds materialize into agent context files
|
|
41
|
+
and keep no store copy to load.
|
|
42
|
+
"""
|
|
43
|
+
from boost_cli.core import lockfile, store
|
|
44
|
+
found = lockfile.find_any(name)
|
|
45
|
+
if found is not None and found[0] != "skill":
|
|
46
|
+
raise ValueError(
|
|
47
|
+
"%s is a %s — it materializes into agent context files and "
|
|
48
|
+
"has no store copy to load; retrieve it with "
|
|
49
|
+
"BoostRetriever(kind=%r) instead" % (name, found[0], found[0]))
|
|
50
|
+
return cls(store.skill_store_dir(name))
|
|
51
|
+
|
|
52
|
+
def lazy_load(self) -> Iterator[Document]:
|
|
53
|
+
path = self.path / "SKILL.md" if self.path.is_dir() else self.path
|
|
54
|
+
text = path.read_text(encoding="utf-8", errors="replace")
|
|
55
|
+
meta, body = frontmatter.parse(text)
|
|
56
|
+
# The real file path wins over any frontmatter key that happens to be
|
|
57
|
+
# named "source": metadata provenance must state where the bytes came
|
|
58
|
+
# from, and a self-reported value is the one thing that cannot.
|
|
59
|
+
yield Document(page_content=body, metadata={**meta, "source": str(path)})
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""A LangChain retriever over boost's tapped skill/rule/workflow catalog."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import Literal
|
|
5
|
+
|
|
6
|
+
from langchain_core.callbacks import CallbackManagerForRetrieverRun
|
|
7
|
+
from langchain_core.documents import Document
|
|
8
|
+
from langchain_core.retrievers import BaseRetriever
|
|
9
|
+
from pydantic import Field
|
|
10
|
+
|
|
11
|
+
from boost_cli.core import rag
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BoostRetriever(BaseRetriever):
|
|
15
|
+
"""Retrieve tapped boost items as LangChain ``Document`` objects.
|
|
16
|
+
|
|
17
|
+
This deliberately reuses boost's own engine (``rag.retrieve_any``) rather
|
|
18
|
+
than re-embedding the catalog into a vector store. Retrieval quality is
|
|
19
|
+
the reason: boost's Tier-1 eval gate floors recall@k, hit@1, MRR and
|
|
20
|
+
nDCG@k over a golden set on every merge, so wrapping that engine means the
|
|
21
|
+
retriever ships with numbers rather than claims — a fresh embedding
|
|
22
|
+
pipeline here would start from zero evidence. Reuse also inherits the
|
|
23
|
+
degrade ladder for free: hybrid RRF when the user has built a dense store,
|
|
24
|
+
BM25 full-content otherwise, and never an API key as the entry fee.
|
|
25
|
+
|
|
26
|
+
``kind`` narrows results to one of boost's three item kinds ("skill",
|
|
27
|
+
"rule", "workflow"); ``None`` searches all of them. ``full_content``
|
|
28
|
+
controls whether a Document carries the item's whole body (what a chain
|
|
29
|
+
stuffing context wants) or just its one-line description (what a router
|
|
30
|
+
choosing among items wants).
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
# Validated at construction: a typo'd kind would otherwise return [] for
|
|
34
|
+
# every query, indistinguishable from an empty catalog; a negative k
|
|
35
|
+
# would silently drop the last hit via slice semantics.
|
|
36
|
+
k: int = Field(default=8, ge=0)
|
|
37
|
+
kind: Literal["skill", "rule", "workflow"] | None = None
|
|
38
|
+
full_content: bool = True
|
|
39
|
+
|
|
40
|
+
def _get_relevant_documents(
|
|
41
|
+
self, query: str, *, run_manager: CallbackManagerForRetrieverRun
|
|
42
|
+
) -> list[Document]:
|
|
43
|
+
# ensure() is what makes first use behave like `boost search`: it
|
|
44
|
+
# builds the BM25 index from the tapped catalog on demand and is
|
|
45
|
+
# incremental after that. Without it, a freshly tapped HOME would
|
|
46
|
+
# answer [] until the user happened to run a CLI search first.
|
|
47
|
+
rag.ensure()
|
|
48
|
+
hits, engine = rag.retrieve_any(query, k=self.k, kind=self.kind)
|
|
49
|
+
if hits is None:
|
|
50
|
+
# No index of any kind could be built — nothing is tapped. Mirror
|
|
51
|
+
# the CLI's degrade-cleanly rule: an empty shelf is an answer, not
|
|
52
|
+
# an error, and a chain should keep running without boost context.
|
|
53
|
+
return []
|
|
54
|
+
docs: list[Document] = []
|
|
55
|
+
for hit in hits:
|
|
56
|
+
entry = hit["entry"]
|
|
57
|
+
if self.full_content:
|
|
58
|
+
content = rag.read_body(entry)
|
|
59
|
+
else:
|
|
60
|
+
content = entry.get("description") or rag.surface(entry)
|
|
61
|
+
docs.append(Document(
|
|
62
|
+
page_content=content,
|
|
63
|
+
metadata={
|
|
64
|
+
"name": entry.get("name", ""),
|
|
65
|
+
"kind": entry.get("kind", "skill"),
|
|
66
|
+
"tap": entry.get("tap", ""),
|
|
67
|
+
"version": entry.get("version", ""),
|
|
68
|
+
"source": entry.get("skill_md", ""),
|
|
69
|
+
# Which engine actually answered (BM25 / dense / hybrid
|
|
70
|
+
# RRF). Carried per-document because it is the first thing
|
|
71
|
+
# to check when result quality surprises — see rag.rerank
|
|
72
|
+
# for why a guessed label is worse than none.
|
|
73
|
+
"engine": engine,
|
|
74
|
+
},
|
|
75
|
+
))
|
|
76
|
+
return docs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.417
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -707,6 +707,9 @@ Requires-Dist: ragas<0.3,>=0.2; extra == "eval"
|
|
|
707
707
|
Requires-Dist: langchain-core<0.4; extra == "eval"
|
|
708
708
|
Requires-Dist: langchain-community<0.4; extra == "eval"
|
|
709
709
|
Requires-Dist: langchain-openai<1; extra == "eval"
|
|
710
|
+
Provides-Extra: langchain
|
|
711
|
+
Requires-Dist: langchain-core<2,>=1; extra == "langchain"
|
|
712
|
+
Requires-Dist: pydantic>=2; extra == "langchain"
|
|
710
713
|
Provides-Extra: bdd
|
|
711
714
|
Requires-Dist: behave>=1.2.6; extra == "bdd"
|
|
712
715
|
Provides-Extra: perf
|
|
@@ -98,6 +98,12 @@ boost_cli/core/updatediff.py
|
|
|
98
98
|
boost_cli/core/util.py
|
|
99
99
|
boost_cli/core/workflows.py
|
|
100
100
|
boost_cli/data/registries.json
|
|
101
|
+
boost_langchain/__init__.py
|
|
102
|
+
boost_langchain/_compat.py
|
|
103
|
+
boost_langchain/graph.py
|
|
104
|
+
boost_langchain/loader.py
|
|
105
|
+
boost_langchain/py.typed
|
|
106
|
+
boost_langchain/retriever.py
|
|
101
107
|
boost_skill_cli.egg-info/PKG-INFO
|
|
102
108
|
boost_skill_cli.egg-info/SOURCES.txt
|
|
103
109
|
boost_skill_cli.egg-info/dependency_links.txt
|
|
@@ -252,6 +258,7 @@ docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md
|
|
|
252
258
|
docs/roadmap/items/journal-rotation-race-and-handle-leak.md
|
|
253
259
|
docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md
|
|
254
260
|
docs/roadmap/items/keyless-semantic-search-for-everyone.md
|
|
261
|
+
docs/roadmap/items/langchain-in-the-wheel.md
|
|
255
262
|
docs/roadmap/items/langchain-integration-explainer-page.md
|
|
256
263
|
docs/roadmap/items/langchain-langgraph-langsmith-integration.md
|
|
257
264
|
docs/roadmap/items/layering-guard-import-linter.md
|
|
@@ -398,6 +405,7 @@ evals/golden_set.json
|
|
|
398
405
|
evals/make_corpus.py
|
|
399
406
|
evals/make_golden.py
|
|
400
407
|
evals/metrics.py
|
|
408
|
+
evals/publish_golden_dataset.py
|
|
401
409
|
evals/run_evals.py
|
|
402
410
|
examples/README.md
|
|
403
411
|
examples/adapt-demo.sh
|
|
@@ -515,6 +523,10 @@ tests/fuzz/corpus/registry/05-empty.txt
|
|
|
515
523
|
tests/fuzz/corpus/registry/06-space.txt
|
|
516
524
|
tests/fuzz/corpus/registry/07-slash.txt
|
|
517
525
|
tests/fuzz/corpus/registry/08-bare-host.txt
|
|
526
|
+
tests/langchain/conftest.py
|
|
527
|
+
tests/langchain/test_graph.py
|
|
528
|
+
tests/langchain/test_loader.py
|
|
529
|
+
tests/langchain/test_retriever.py
|
|
518
530
|
tests/perf/test_benchmarks.py
|
|
519
531
|
tests/unit/test_a11y_check.py
|
|
520
532
|
tests/unit/test_adapters.py
|
|
@@ -568,6 +580,7 @@ tests/unit/test_injectscan.py
|
|
|
568
580
|
tests/unit/test_installscan.py
|
|
569
581
|
tests/unit/test_integrity.py
|
|
570
582
|
tests/unit/test_journal.py
|
|
583
|
+
tests/unit/test_langchain_packaging.py
|
|
571
584
|
tests/unit/test_link_ownership.py
|
|
572
585
|
tests/unit/test_localembed.py
|
|
573
586
|
tests/unit/test_localembed_e2e.py
|
|
@@ -129,10 +129,12 @@
|
|
|
129
129
|
<!-- ===== hero ===== -->
|
|
130
130
|
<div class="wrap hero">
|
|
131
131
|
<p class="crumbs"><a href="index.html">boost</a> / docs / langchain integration</p>
|
|
132
|
-
<span class="badge">Interop · shipped in PR #466</span>
|
|
132
|
+
<span class="badge">Interop · shipped in PR #466 · folded into the wheel in PR #472</span>
|
|
133
133
|
<h1>The skill catalog, <span class="grad-text">behind LangChain's</span> retriever contract.</h1>
|
|
134
134
|
<p class="lede">boost's tapped catalog is 10,000+ retrievable procedures with frontmatter,
|
|
135
|
-
provenance and a lock file. <code>
|
|
135
|
+
provenance and a lock file. The <code>boost_langchain</code> package — shipped inside the
|
|
136
|
+
<code>boost-skill-cli</code> wheel, switched on by the <code>[langchain]</code> extra —
|
|
137
|
+
makes it addressable from a Python
|
|
136
138
|
agent runtime: a <b>retriever</b> over the same measured engine <code>boost search</code>
|
|
137
139
|
runs on, a <b>document loader</b> for one SKILL.md, and a <b>LangGraph node</b> that pulls
|
|
138
140
|
the right procedure into a run mid-flight. No API key, ever — and nothing tapped means
|
|
@@ -182,7 +184,7 @@
|
|
|
182
184
|
the engine is why wrapping it beats re-embedding the catalog.</p>
|
|
183
185
|
|
|
184
186
|
<div class="diagram">
|
|
185
|
-
<svg viewBox="0 0 900 400" role="img" aria-label="boost
|
|
187
|
+
<svg viewBox="0 0 900 400" role="img" aria-label="boost langchain integration architecture: a LangChain app calls the boost_langchain seams, which call boost's retrieval engine over the tapped catalog; the Tier-1 eval gate floors the engine's quality">
|
|
186
188
|
<defs>
|
|
187
189
|
<marker id="ah" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
|
|
188
190
|
<path d="M0,0 L7,3 L0,6 Z" fill="#7dd3fc"></path>
|
|
@@ -482,7 +484,7 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
|
|
|
482
484
|
story). To run <b>online</b> evals against the <em>same</em> ground truth, publish the
|
|
483
485
|
golden set as a LangSmith dataset with the
|
|
484
486
|
<code>publish_golden_dataset.py</code> script (under
|
|
485
|
-
<code>
|
|
487
|
+
<code>evals/</code>) — key-gated,
|
|
486
488
|
opt-in, run from a boost checkout. Re-running replaces examples wholesale, so the
|
|
487
489
|
dataset always mirrors <code>tests/eval/golden.jsonl</code> rather than accreting. The
|
|
488
490
|
point is one set of judgments in both places: an online regression and an offline
|
|
@@ -493,13 +495,14 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
|
|
|
493
495
|
<p><b>The honest dependency paragraph.</b> boost's own <code>[eval]</code> extra pins the
|
|
494
496
|
langchain 0.3 stack, because ragas — through 0.4.3 — still imports a
|
|
495
497
|
<code>ChatVertexAI</code> path that langchain-community 0.4 removed, so
|
|
496
|
-
<code>import ragas</code> crashes beside langchain 1.x. What
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
the stack it really runs on
|
|
502
|
-
|
|
498
|
+
<code>import ragas</code> crashes beside langchain 1.x. What keeps the conflict honest
|
|
499
|
+
is <b>extra isolation</b>: the integration ships in the same wheel, but its langchain
|
|
500
|
+
1.x dependencies live in the <code>[langchain]</code> extra while <code>[eval]</code>
|
|
501
|
+
keeps its 0.3-stack pins. The two majors never co-install — asking pip for both extras
|
|
502
|
+
at once fails resolution loudly rather than silently breaking one of them — and each
|
|
503
|
+
surface tests against the stack it really runs on (the conformance leg installs the
|
|
504
|
+
extra; the eval tooling installs its own). The unpin becomes a small follow-up the day
|
|
505
|
+
ragas ships a release after 0.4.3, which already carries the fix on its main branch.</p>
|
|
503
506
|
</div>
|
|
504
507
|
</div>
|
|
505
508
|
</section>
|
|
@@ -508,34 +511,37 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
|
|
|
508
511
|
<section>
|
|
509
512
|
<div class="wrap">
|
|
510
513
|
<span class="eyebrow">Install</span>
|
|
511
|
-
<h2 class="sec-title">One
|
|
514
|
+
<h2 class="sec-title">One extra on the wheel you already have</h2>
|
|
512
515
|
<div class="term-wrap">
|
|
513
516
|
<div class="window">
|
|
514
517
|
<div class="bar"><div class="dots"><i></i><i></i><i></i></div>
|
|
515
|
-
<div class="bar-title">pip · boost-langchain</div></div>
|
|
516
|
-
<pre><span class="cm"># the
|
|
517
|
-
<span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> boost-langchain
|
|
518
|
+
<div class="bar-title">pip · boost-skill-cli[langchain]</div></div>
|
|
519
|
+
<pre><span class="cm"># the CLI plus the LangChain bindings — one wheel, one extra</span>
|
|
520
|
+
<span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> 'boost-skill-cli[langchain]'
|
|
518
521
|
|
|
519
522
|
<span class="cm"># give boost something to search (once)</span>
|
|
520
523
|
<span class="tp">$</span> <span class="tv">boost</span> <span class="tc">tap</span> anthropics/skills
|
|
521
524
|
|
|
522
525
|
<span class="cm"># optional: the LangGraph runtime for skill_context_node graphs</span>
|
|
523
|
-
<span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span>
|
|
526
|
+
<span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> langgraph
|
|
524
527
|
|
|
525
528
|
<span class="cm"># optional: publish the golden set as a LangSmith dataset</span>
|
|
526
|
-
<span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span>
|
|
527
|
-
<span class="tp">$</span> <span class="tv">python</span>
|
|
529
|
+
<span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> langsmith
|
|
530
|
+
<span class="tp">$</span> <span class="tv">python</span> evals/publish_golden_dataset.py
|
|
528
531
|
<span class="tdim">published 91 examples to LangSmith dataset 'boost-golden-retrieval'</span></pre>
|
|
529
532
|
</div>
|
|
530
533
|
</div>
|
|
531
|
-
<p class="caption">
|
|
534
|
+
<p class="caption">Without the extra the modules still ship but decline to import — naming
|
|
535
|
+
this exact fix. The dataset publish is illustrative output; it exits with a one-line hint
|
|
532
536
|
rather than a traceback when the key or package is missing.</p>
|
|
533
537
|
<div class="prose">
|
|
534
538
|
<p>More depth: the
|
|
535
|
-
<a href="https://github.com/jonnyeclectic/boost/tree/main/
|
|
536
|
-
README</a> covers the same ground as a reference, and the
|
|
537
|
-
<a href="roadmap.html#langchain-langgraph-langsmith-integration">
|
|
538
|
-
|
|
539
|
+
<a href="https://github.com/jonnyeclectic/boost/tree/main/boost_langchain">package
|
|
540
|
+
README</a> covers the same ground as a reference, and two roadmap cards hold the
|
|
541
|
+
reasoning: <a href="roadmap.html#langchain-langgraph-langsmith-integration">the
|
|
542
|
+
integration itself</a> and
|
|
543
|
+
<a href="roadmap.html#langchain-in-the-wheel">why it rides the wheel</a> instead of a
|
|
544
|
+
second PyPI project.</p>
|
|
539
545
|
</div>
|
|
540
546
|
</div>
|
|
541
547
|
</section>
|
{boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/boost-langchain-publishing.md
RENAMED
|
@@ -2,15 +2,24 @@
|
|
|
2
2
|
id: boost-langchain-publishing
|
|
3
3
|
board: code
|
|
4
4
|
section: planned
|
|
5
|
-
status:
|
|
5
|
+
status: declined
|
|
6
6
|
category: Release
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 2
|
|
10
|
-
note:
|
|
10
|
+
note: declined — superseded by shipping the integration inside the boost-skill-cli wheel (see langchain-in-the-wheel)
|
|
11
11
|
order: 98
|
|
12
12
|
title: give <code>boost-langchain</code> a release path to PyPI
|
|
13
13
|
---
|
|
14
|
+
<b>Declined, deliberately.</b> Both missing pieces below were owner-only or upstream-blocked, and
|
|
15
|
+
the research they prompted dissolved the premise: a second PyPI project bought a separate release
|
|
16
|
+
cadence nobody needed (boost releases more often than langchain), while the ecosystem evidence —
|
|
17
|
+
langchain-community sunset, non-<code>langchain-*</code> names in LangChain's own integrations
|
|
18
|
+
listing, in-host precedents from <code>ragatouille</code> to <code>mlflow</code> — showed the
|
|
19
|
+
standalone distribution was never required. The integration now ships inside the
|
|
20
|
+
<code>boost-skill-cli</code> wheel behind a <code>[langchain]</code> extra instead; see
|
|
21
|
+
<code>langchain-in-the-wheel</code>. The original card follows for the record.
|
|
22
|
+
|
|
14
23
|
The <code>boost-langchain</code> distribution shipped under <code>integrations/langchain/</code>
|
|
15
24
|
with its whole point being a <b>separate release cadence</b> from <code>boost-skill-cli</code> —
|
|
16
25
|
langchain majors move faster than boost does, and the conformance workflow already builds the
|