boost-skill-cli 1.0.185__tar.gz → 1.0.187__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.185 → boost_skill_cli-1.0.187}/.gitignore +3 -0
- boost_skill_cli-1.0.187/.lycheeignore +11 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/Makefile +1 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/PKG-INFO +3 -2
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/README.md +2 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_skill_cli.egg-info/PKG-INFO +3 -2
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_skill_cli.egg-info/SOURCES.txt +6 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/adapters.html +2 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/eval.html +3 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/mcp-hub.html +5 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/boost-run-live-agents.md +1 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +10 -5
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/framework-adapter-langgraph.md +1 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/framework-adapter-multi-agent.md +1 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/framework-adapters-boost-adapt.md +1 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +2 -2
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +1 -1
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +3 -3
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap.html +16 -11
- boost_skill_cli-1.0.187/scripts/check_anchors.py +108 -0
- boost_skill_cli-1.0.187/tests/unit/test_check_anchors.py +79 -0
- boost_skill_cli-1.0.187/tests/visual/package.json +7 -0
- boost_skill_cli-1.0.187/tests/visual/visual_check.mjs +98 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.gitattributes +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/.vale.ini +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/LICENSE +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/index.html +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/examples/README.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/index.html +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/noxfile.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/setup.cfg +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/style/README.md +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/style/boost.css +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/style/boost.js +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/style/demo.html +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/tests/unit/test_workflows.py +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Links lychee should not fetch.
|
|
2
|
+
#
|
|
3
|
+
# The docs are the GitHub Pages site rooted at docs/, so every asset and
|
|
4
|
+
# cross-page link is checked as a real file path — nothing is excluded for
|
|
5
|
+
# convenience. These two entries are unavoidable:
|
|
6
|
+
|
|
7
|
+
# Local dev server referenced in `boost serve` documentation examples.
|
|
8
|
+
^https?://(localhost|127\.0\.0\.1)(:\d+)?
|
|
9
|
+
|
|
10
|
+
# Example/placeholder hosts in configuration snippets (not real endpoints).
|
|
11
|
+
^https?://(example\.(com|org)|your-org)
|
|
@@ -57,6 +57,7 @@ lint:
|
|
|
57
57
|
$(PY) scripts/build_command_reference.py --check
|
|
58
58
|
$(PY) scripts/import_budget.py
|
|
59
59
|
$(PY) scripts/perf_gate.py
|
|
60
|
+
$(PY) scripts/check_anchors.py
|
|
60
61
|
|
|
61
62
|
# Supply-chain CVE gate: fail on a known OSV/PyPI advisory in the project's
|
|
62
63
|
# dependency closure. Mirrors the pip-audit CI workflow; run before releasing.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.187
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -840,7 +840,8 @@ boost bundle dump > Boostfile # everyone else runs: boost bundle install
|
|
|
840
840
|
## 75 commands, organized into 8 groups
|
|
841
841
|
|
|
842
842
|
`boost --help` prints the full grouped command list; for a visual tour see
|
|
843
|
-
[`docs/
|
|
843
|
+
[`docs/index.html`](docs/index.html), and for every flag of every command see
|
|
844
|
+
[`docs/commands.html`](docs/commands.html).
|
|
844
845
|
|
|
845
846
|
| Group | Commands |
|
|
846
847
|
|---|---|
|
|
@@ -124,7 +124,8 @@ boost bundle dump > Boostfile # everyone else runs: boost bundle install
|
|
|
124
124
|
## 75 commands, organized into 8 groups
|
|
125
125
|
|
|
126
126
|
`boost --help` prints the full grouped command list; for a visual tour see
|
|
127
|
-
[`docs/
|
|
127
|
+
[`docs/index.html`](docs/index.html), and for every flag of every command see
|
|
128
|
+
[`docs/commands.html`](docs/commands.html).
|
|
128
129
|
|
|
129
130
|
| Group | Commands |
|
|
130
131
|
|---|---|
|
|
@@ -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.187'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 187)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.187
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -840,7 +840,8 @@ boost bundle dump > Boostfile # everyone else runs: boost bundle install
|
|
|
840
840
|
## 75 commands, organized into 8 groups
|
|
841
841
|
|
|
842
842
|
`boost --help` prints the full grouped command list; for a visual tour see
|
|
843
|
-
[`docs/
|
|
843
|
+
[`docs/index.html`](docs/index.html), and for every flag of every command see
|
|
844
|
+
[`docs/commands.html`](docs/commands.html).
|
|
844
845
|
|
|
845
846
|
| Group | Commands |
|
|
846
847
|
|---|---|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
.gitignore
|
|
3
3
|
.gitleaks.toml
|
|
4
4
|
.htmlvalidate.json
|
|
5
|
+
.lycheeignore
|
|
5
6
|
.markdownlint-cli2.jsonc
|
|
6
7
|
.pre-commit-config.yaml
|
|
7
8
|
.stylelintrc.json
|
|
@@ -232,6 +233,7 @@ scripts/bench_cli.sh
|
|
|
232
233
|
scripts/build_command_reference.py
|
|
233
234
|
scripts/build_registries.py
|
|
234
235
|
scripts/build_roadmap.py
|
|
236
|
+
scripts/check_anchors.py
|
|
235
237
|
scripts/ensure_eval_corpus.sh
|
|
236
238
|
scripts/eval_explain.py
|
|
237
239
|
scripts/eval_recommend.py
|
|
@@ -286,6 +288,7 @@ tests/unit/test_adapters.py
|
|
|
286
288
|
tests/unit/test_agents.py
|
|
287
289
|
tests/unit/test_ai.py
|
|
288
290
|
tests/unit/test_catalog.py
|
|
291
|
+
tests/unit/test_check_anchors.py
|
|
289
292
|
tests/unit/test_claude_settings.py
|
|
290
293
|
tests/unit/test_cliparse.py
|
|
291
294
|
tests/unit/test_command_reference_fresh.py
|
|
@@ -331,4 +334,6 @@ tests/unit/test_typosquat.py
|
|
|
331
334
|
tests/unit/test_updatediff.py
|
|
332
335
|
tests/unit/test_util.py
|
|
333
336
|
tests/unit/test_version.py
|
|
334
|
-
tests/unit/test_workflows.py
|
|
337
|
+
tests/unit/test_workflows.py
|
|
338
|
+
tests/visual/package.json
|
|
339
|
+
tests/visual/visual_check.mjs
|
|
@@ -38,6 +38,8 @@
|
|
|
38
38
|
table.map td.sdk code { color: var(--green); }
|
|
39
39
|
.two { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; margin-top: 30px; }
|
|
40
40
|
@media (max-width: 760px) { .two { grid-template-columns: 1fr; } }
|
|
41
|
+
/* narrow screens: the mapping table scrolls inside itself (visual_check) */
|
|
42
|
+
@media (max-width: 760px) { table.map { display: block; overflow-x: auto; } }
|
|
41
43
|
.panel { border: 1px solid var(--line); border-radius: 14px; padding: 22px 22px 8px;
|
|
42
44
|
background: var(--panel); }
|
|
43
45
|
.panel h3 { font-size: 16px; margin: 0 0 4px; }
|
|
@@ -98,6 +98,9 @@
|
|
|
98
98
|
footer p { color: var(--text-3); font-size: 13px; }
|
|
99
99
|
footer a { color: var(--sky); text-decoration: none; }
|
|
100
100
|
|
|
101
|
+
/* narrow screens: the contract table scrolls inside itself instead of
|
|
102
|
+
widening the document (caught by tests/visual/visual_check.mjs) */
|
|
103
|
+
@media (max-width: 760px) { table.contract { display: block; overflow-x: auto; } }
|
|
101
104
|
@media (max-width: 820px) {
|
|
102
105
|
.cheat { grid-template-columns: 1fr; }
|
|
103
106
|
.cheat .col-head.tech { margin-top: 8px; }
|
|
@@ -86,6 +86,11 @@
|
|
|
86
86
|
footer p { color: var(--text-3); font-size: 13px; }
|
|
87
87
|
footer a { color: var(--sky); text-decoration: none; }
|
|
88
88
|
|
|
89
|
+
/* grid items default to min-width:auto, so one unbreakable code string
|
|
90
|
+
can push the single-column cheat grid past the viewport (visual_check) */
|
|
91
|
+
.cheat > * { min-width: 0; }
|
|
92
|
+
.sec-title code { overflow-wrap: anywhere; } /* boost_discover_github in an h2 */
|
|
93
|
+
details.card .body code { overflow-wrap: anywhere; }
|
|
89
94
|
@media (max-width: 820px) {
|
|
90
95
|
.cheat, .split { grid-template-columns: 1fr; }
|
|
91
96
|
.cheat .col-head.tech { margin-top: 8px; }
|
{boost_skill_cli-1.0.185 → boost_skill_cli-1.0.187}/docs/roadmap/items/boost-run-live-agents.md
RENAMED
|
@@ -13,4 +13,4 @@ owner:
|
|
|
13
13
|
pr:
|
|
14
14
|
title: <code>boost run</code> — search → adapt → a live agent doing the task, in one command
|
|
15
15
|
---
|
|
16
|
-
The allure ceiling on <code>boost adapt</code> (#146, #163): it stops at <b>source you assemble</b>, and the adapted agent has a brain (prompt) but no <b>hands</b> (tools). Close both. <code>boost run <skill> [target]</code> = adapt → wire a default toolset (file read, ripgrep/shell, web) → execute on boost's model and stream the result. Opt-in like the conformance path (installs the framework + needs a key, so the zero-dep default holds). Two prerequisites ship with it: (1) <b>tool-wiring</b> — emit/attach the tools a skill needs (or declares) so the agent can act, not roleplay; (2) reuse the <a href="
|
|
16
|
+
The allure ceiling on <code>boost adapt</code> (#146, #163): it stops at <b>source you assemble</b>, and the adapted agent has a brain (prompt) but no <b>hands</b> (tools). Close both. <code>boost run <skill> [target]</code> = adapt → wire a default toolset (file read, ripgrep/shell, web) → execute on boost's model and stream the result. Opt-in like the conformance path (installs the framework + needs a key, so the zero-dep default holds). Two prerequisites ship with it: (1) <b>tool-wiring</b> — emit/attach the tools a skill needs (or declares) so the agent can act, not roleplay; (2) reuse the <a href="adapters.html">adapt</a> renderer for the agent def. Pairs with <code>[[framework-adapter-multi-agent]]</code> so a skill like <code>rust-review</code> runs as a real crew. This is the screenshot: "one command → an expert agent audits your repo, on Claude, that you never wrote." <b>Working preview:</b> <code>examples/boost-run-prototype.sh</code> already does this by hand (adapt → wire a read_file tool → <code>Runner.run</code> on a file with planted bugs).
|
|
@@ -2,19 +2,24 @@
|
|
|
2
2
|
id: broken-link-and-anchor-checking-lychee
|
|
3
3
|
board: code
|
|
4
4
|
section: docsite
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Quality · Docs
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 3
|
|
10
|
-
note:
|
|
10
|
+
note: 8 dead links found
|
|
11
11
|
order: 5
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/lychee
|
|
13
|
+
pr: 210
|
|
14
14
|
title: Broken-link & anchor checking — <code>lychee</code>
|
|
15
15
|
---
|
|
16
16
|
Fast, free link checker over the README and <code>docs/*.html</code>:
|
|
17
17
|
verifies external URLs (GitHub, PyPI), asset paths
|
|
18
18
|
(<code>../style/boost.css</code>) and in-page anchors
|
|
19
19
|
(<code>#next</code>, <code>#health</code>) still resolve. A dead link in
|
|
20
|
-
the landing page is the first broken promise a visitor sees.
|
|
20
|
+
the landing page is the first broken promise a visitor sees. Red on
|
|
21
|
+
its first run: eight were already broken — four <code>../adapters.html</code>
|
|
22
|
+
at the wrong depth, two dangling anchors, one link to an item file as
|
|
23
|
+
though it were a page, and a README pointing at
|
|
24
|
+
<code>docs/overview.html</code>, renamed to <code>index.html</code>
|
|
25
|
+
and never updated.
|
|
@@ -13,4 +13,4 @@ owner:
|
|
|
13
13
|
pr:
|
|
14
14
|
title: <code>boost adapt --to langgraph</code> — third framework renderer
|
|
15
15
|
---
|
|
16
|
-
Extend <code>boost adapt</code> (shipped in #146) with a LangGraph target. Unlike CrewAI / Agents-SDK, a LangGraph agent isn't one <code>Agent(...)</code> constructor — the skill body is the system prompt of a node bound into a <code>StateGraph</code>. Add a <code>render_langgraph</code> to <code>core/adapters.py</code> emitting a node factory (prebuilt <code>create_react_agent</code>, or a prompt-carrying node) + its <code>FORMATS</code> row, with byte-exact golden + <code>compile()</code> tests. Then add a <code>langgraph</code> leg to <code>.github/workflows/adapter-conformance.yml</code> (pip install langgraph, import the emitted file). Follows the pattern in <a href="
|
|
16
|
+
Extend <code>boost adapt</code> (shipped in #146) with a LangGraph target. Unlike CrewAI / Agents-SDK, a LangGraph agent isn't one <code>Agent(...)</code> constructor — the skill body is the system prompt of a node bound into a <code>StateGraph</code>. Add a <code>render_langgraph</code> to <code>core/adapters.py</code> emitting a node factory (prebuilt <code>create_react_agent</code>, or a prompt-carrying node) + its <code>FORMATS</code> row, with byte-exact golden + <code>compile()</code> tests. Then add a <code>langgraph</code> leg to <code>.github/workflows/adapter-conformance.yml</code> (pip install langgraph, import the emitted file). Follows the pattern in <a href="adapters.html">adapters.html</a>: one <code>render_*</code> fn + registry row + golden test + one matrix line.
|
|
@@ -13,4 +13,4 @@ owner:
|
|
|
13
13
|
pr:
|
|
14
14
|
title: <code>boost adapt</code> — multi-agent skills → crews/graphs, not one Agent
|
|
15
15
|
---
|
|
16
|
-
Today <code>boost adapt</code> (#146, #163) projects a skill into a <b>single</b> framework Agent carrying its instructions/role/model — but a skill can declare tools and a whole subagent graph (e.g. <code>rust-review</code> = worker + dedup-judge + fp-judge). Adapt the richer structure: emit a CrewAI <code>Crew</code> (agents + tasks) or a LangGraph <code>StateGraph</code> when a skill's frontmatter/plugin dir declares subagents, and surface declared tools as stubs. Scope: detect subagent/tool declarations in <code>SKILL.md</code>/<code>plugins/*/agents/*.md</code>; add a crew/graph renderer path in <code>core/adapters.py</code> (single-Agent stays the default for flat skills); golden + <code>compile()</code> tests + a conformance leg. Turns "one skill → one agent" into "one skill → a runnable multi-agent workflow." See <a href="
|
|
16
|
+
Today <code>boost adapt</code> (#146, #163) projects a skill into a <b>single</b> framework Agent carrying its instructions/role/model — but a skill can declare tools and a whole subagent graph (e.g. <code>rust-review</code> = worker + dedup-judge + fp-judge). Adapt the richer structure: emit a CrewAI <code>Crew</code> (agents + tasks) or a LangGraph <code>StateGraph</code> when a skill's frontmatter/plugin dir declares subagents, and surface declared tools as stubs. Scope: detect subagent/tool declarations in <code>SKILL.md</code>/<code>plugins/*/agents/*.md</code>; add a crew/graph renderer path in <code>core/adapters.py</code> (single-Agent stays the default for flat skills); golden + <code>compile()</code> tests + a conformance leg. Turns "one skill → one agent" into "one skill → a runnable multi-agent workflow." See <a href="adapters.html">adapters.html</a>.
|
|
@@ -13,4 +13,4 @@ owner: loop/framework-adapters
|
|
|
13
13
|
pr: 146
|
|
14
14
|
title: <code>boost adapt</code> — render a skill as another framework's agent source
|
|
15
15
|
---
|
|
16
|
-
boost only installs skills as files for editor agents (Claude Code, Cursor, Windsurf); CrewAI / OpenAI-Agents-SDK apps can't consume them — an agent there is a value built in source. <code>boost adapt <skill> --to crewai|agents-sdk</code> renders one <code>SKILL.md</code> into each framework's native <code>Agent(...)</code> as a deterministic, zero-dependency string transform (<code>core/adapters.py</code>). Strings emit via <code>json.dumps</code> so any body (quotes, <code>"""</code>, unicode) stays valid Python; 97.6% mutation kill. Docs: <a href="
|
|
16
|
+
boost only installs skills as files for editor agents (Claude Code, Cursor, Windsurf); CrewAI / OpenAI-Agents-SDK apps can't consume them — an agent there is a value built in source. <code>boost adapt <skill> --to crewai|agents-sdk</code> renders one <code>SKILL.md</code> into each framework's native <code>Agent(...)</code> as a deterministic, zero-dependency string transform (<code>core/adapters.py</code>). Strings emit via <code>json.dumps</code> so any body (quotes, <code>"""</code>, unicode) stays valid Python; 97.6% mutation kill. Docs: <a href="adapters.html">adapters.html</a>.
|
|
@@ -13,7 +13,7 @@ owner: loop/mcp-startup-fork-safety
|
|
|
13
13
|
pr: 162
|
|
14
14
|
title: Self-harden every boost process against the macOS fork-safety abort
|
|
15
15
|
---
|
|
16
|
-
The launch-env fix (<a href="
|
|
16
|
+
The launch-env fix (<a href="https://github.com/jonnyeclectic/boost/pull/119">#119</a>) only
|
|
17
17
|
protects hosts that register boost <em>through boost</em>, which
|
|
18
18
|
injects <code>no_proxy=*</code>. A host that <code>fork()</code>s into
|
|
19
19
|
<code>boost mcp --stdio</code> from a stale or hand-written config —
|
|
@@ -26,4 +26,4 @@ The launch-env fix (<a href="#mcp-launch-objc-fork-safety">#119</a>) only
|
|
|
26
26
|
<code>getproxies()</code> short-circuits on
|
|
27
27
|
<code>getproxies_environment()</code> and never consults
|
|
28
28
|
SystemConfiguration. Belt-and-suspenders atop the
|
|
29
|
-
<code>nethttp</code> opener (<a href="
|
|
29
|
+
<code>nethttp</code> opener (<a href="https://github.com/jonnyeclectic/boost/pull/115">#115</a>).
|
|
@@ -13,7 +13,7 @@ owner: loop/docs-discoverable
|
|
|
13
13
|
pr: 128
|
|
14
14
|
title: Surface every <code>docs/*.html</code> page from the main page
|
|
15
15
|
---
|
|
16
|
-
<a href="
|
|
16
|
+
<a href="roadmap.html">Making the roadmaps discoverable</a>
|
|
17
17
|
put both boards in the Visual Guide nav, but the same gap remains for
|
|
18
18
|
the rest of <code>docs/*.html</code>: <code>mcp-hub.html</code> is
|
|
19
19
|
reachable only if you already know the URL — nothing on
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: visual-regression-pass-on-the-guide
|
|
3
3
|
board: code
|
|
4
4
|
section: planned
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Design · QA
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 3
|
|
10
10
|
note:
|
|
11
11
|
order: 3
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/visual
|
|
13
|
+
pr: 209
|
|
14
14
|
title: Visual regression pass on the guide
|
|
15
15
|
---
|
|
16
16
|
Drive <code>docs/index.html</code> in a real browser across breakpoints
|
|
@@ -487,7 +487,7 @@ message, so routing it through the helper would change user-facing errors.</p>
|
|
|
487
487
|
</article>
|
|
488
488
|
|
|
489
489
|
<article class="cap rcard">
|
|
490
|
-
<div class="head"><span class="pill
|
|
490
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Design · QA</span></div>
|
|
491
491
|
<h3>Visual regression pass on the guide</h3>
|
|
492
492
|
<p>Drive <code>docs/index.html</code> in a real browser across breakpoints
|
|
493
493
|
to confirm the glass cards, aurora, and terminal windows render
|
|
@@ -1451,7 +1451,7 @@ improvement is real (or isn't)."</p>
|
|
|
1451
1451
|
<article class="cap rcard">
|
|
1452
1452
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Interop</span></div>
|
|
1453
1453
|
<h3><code>boost adapt</code> — render a skill as another framework's agent source</h3>
|
|
1454
|
-
<p>boost only installs skills as files for editor agents (Claude Code, Cursor, Windsurf); CrewAI / OpenAI-Agents-SDK apps can't consume them — an agent there is a value built in source. <code>boost adapt <skill> --to crewai|agents-sdk</code> renders one <code>SKILL.md</code> into each framework's native <code>Agent(...)</code> as a deterministic, zero-dependency string transform (<code>core/adapters.py</code>). Strings emit via <code>json.dumps</code> so any body (quotes, <code>"""</code>, unicode) stays valid Python; 97.6% mutation kill. Docs: <a href="
|
|
1454
|
+
<p>boost only installs skills as files for editor agents (Claude Code, Cursor, Windsurf); CrewAI / OpenAI-Agents-SDK apps can't consume them — an agent there is a value built in source. <code>boost adapt <skill> --to crewai|agents-sdk</code> renders one <code>SKILL.md</code> into each framework's native <code>Agent(...)</code> as a deterministic, zero-dependency string transform (<code>core/adapters.py</code>). Strings emit via <code>json.dumps</code> so any body (quotes, <code>"""</code>, unicode) stays valid Python; 97.6% mutation kill. Docs: <a href="adapters.html">adapters.html</a>.</p>
|
|
1455
1455
|
<div class="meta">
|
|
1456
1456
|
<span class="m">Complexity <b>M</b></span>
|
|
1457
1457
|
<span class="m">Impact <b>Med-High</b></span>
|
|
@@ -1462,7 +1462,7 @@ improvement is real (or isn't)."</p>
|
|
|
1462
1462
|
<article class="cap rcard">
|
|
1463
1463
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Interop</span></div>
|
|
1464
1464
|
<h3><code>boost adapt --to langgraph</code> — third framework renderer</h3>
|
|
1465
|
-
<p>Extend <code>boost adapt</code> (shipped in #146) with a LangGraph target. Unlike CrewAI / Agents-SDK, a LangGraph agent isn't one <code>Agent(...)</code> constructor — the skill body is the system prompt of a node bound into a <code>StateGraph</code>. Add a <code>render_langgraph</code> to <code>core/adapters.py</code> emitting a node factory (prebuilt <code>create_react_agent</code>, or a prompt-carrying node) + its <code>FORMATS</code> row, with byte-exact golden + <code>compile()</code> tests. Then add a <code>langgraph</code> leg to <code>.github/workflows/adapter-conformance.yml</code> (pip install langgraph, import the emitted file). Follows the pattern in <a href="
|
|
1465
|
+
<p>Extend <code>boost adapt</code> (shipped in #146) with a LangGraph target. Unlike CrewAI / Agents-SDK, a LangGraph agent isn't one <code>Agent(...)</code> constructor — the skill body is the system prompt of a node bound into a <code>StateGraph</code>. Add a <code>render_langgraph</code> to <code>core/adapters.py</code> emitting a node factory (prebuilt <code>create_react_agent</code>, or a prompt-carrying node) + its <code>FORMATS</code> row, with byte-exact golden + <code>compile()</code> tests. Then add a <code>langgraph</code> leg to <code>.github/workflows/adapter-conformance.yml</code> (pip install langgraph, import the emitted file). Follows the pattern in <a href="adapters.html">adapters.html</a>: one <code>render_*</code> fn + registry row + golden test + one matrix line.</p>
|
|
1466
1466
|
<div class="meta">
|
|
1467
1467
|
<span class="m">Complexity <b>M</b></span>
|
|
1468
1468
|
<span class="m">Impact <b>Med</b></span>
|
|
@@ -1473,7 +1473,7 @@ improvement is real (or isn't)."</p>
|
|
|
1473
1473
|
<article class="cap rcard">
|
|
1474
1474
|
<div class="head"><span class="pill planned">Planned</span><span class="cat">Interop</span></div>
|
|
1475
1475
|
<h3><code>boost adapt</code> — multi-agent skills → crews/graphs, not one Agent</h3>
|
|
1476
|
-
<p>Today <code>boost adapt</code> (#146, #163) projects a skill into a <b>single</b> framework Agent carrying its instructions/role/model — but a skill can declare tools and a whole subagent graph (e.g. <code>rust-review</code> = worker + dedup-judge + fp-judge). Adapt the richer structure: emit a CrewAI <code>Crew</code> (agents + tasks) or a LangGraph <code>StateGraph</code> when a skill's frontmatter/plugin dir declares subagents, and surface declared tools as stubs. Scope: detect subagent/tool declarations in <code>SKILL.md</code>/<code>plugins/*/agents/*.md</code>; add a crew/graph renderer path in <code>core/adapters.py</code> (single-Agent stays the default for flat skills); golden + <code>compile()</code> tests + a conformance leg. Turns "one skill → one agent" into "one skill → a runnable multi-agent workflow." See <a href="
|
|
1476
|
+
<p>Today <code>boost adapt</code> (#146, #163) projects a skill into a <b>single</b> framework Agent carrying its instructions/role/model — but a skill can declare tools and a whole subagent graph (e.g. <code>rust-review</code> = worker + dedup-judge + fp-judge). Adapt the richer structure: emit a CrewAI <code>Crew</code> (agents + tasks) or a LangGraph <code>StateGraph</code> when a skill's frontmatter/plugin dir declares subagents, and surface declared tools as stubs. Scope: detect subagent/tool declarations in <code>SKILL.md</code>/<code>plugins/*/agents/*.md</code>; add a crew/graph renderer path in <code>core/adapters.py</code> (single-Agent stays the default for flat skills); golden + <code>compile()</code> tests + a conformance leg. Turns "one skill → one agent" into "one skill → a runnable multi-agent workflow." See <a href="adapters.html">adapters.html</a>.</p>
|
|
1477
1477
|
<div class="meta">
|
|
1478
1478
|
<span class="m">Complexity <b>L</b></span>
|
|
1479
1479
|
<span class="m">Impact <b>Med</b></span>
|
|
@@ -1484,7 +1484,7 @@ improvement is real (or isn't)."</p>
|
|
|
1484
1484
|
<article class="cap rcard">
|
|
1485
1485
|
<div class="head"><span class="pill planned">Planned</span><span class="cat">Interop</span></div>
|
|
1486
1486
|
<h3><code>boost run</code> — search → adapt → a live agent doing the task, in one command</h3>
|
|
1487
|
-
<p>The allure ceiling on <code>boost adapt</code> (#146, #163): it stops at <b>source you assemble</b>, and the adapted agent has a brain (prompt) but no <b>hands</b> (tools). Close both. <code>boost run <skill> [target]</code> = adapt → wire a default toolset (file read, ripgrep/shell, web) → execute on boost's model and stream the result. Opt-in like the conformance path (installs the framework + needs a key, so the zero-dep default holds). Two prerequisites ship with it: (1) <b>tool-wiring</b> — emit/attach the tools a skill needs (or declares) so the agent can act, not roleplay; (2) reuse the <a href="
|
|
1487
|
+
<p>The allure ceiling on <code>boost adapt</code> (#146, #163): it stops at <b>source you assemble</b>, and the adapted agent has a brain (prompt) but no <b>hands</b> (tools). Close both. <code>boost run <skill> [target]</code> = adapt → wire a default toolset (file read, ripgrep/shell, web) → execute on boost's model and stream the result. Opt-in like the conformance path (installs the framework + needs a key, so the zero-dep default holds). Two prerequisites ship with it: (1) <b>tool-wiring</b> — emit/attach the tools a skill needs (or declares) so the agent can act, not roleplay; (2) reuse the <a href="adapters.html">adapt</a> renderer for the agent def. Pairs with <code>[[framework-adapter-multi-agent]]</code> so a skill like <code>rust-review</code> runs as a real crew. This is the screenshot: "one command → an expert agent audits your repo, on Claude, that you never wrote." <b>Working preview:</b> <code>examples/boost-run-prototype.sh</code> already does this by hand (adapt → wire a read_file tool → <code>Runner.run</code> on a file with planted bugs).</p>
|
|
1488
1488
|
<div class="meta">
|
|
1489
1489
|
<span class="m">Complexity <b>L</b></span>
|
|
1490
1490
|
<span class="m hi">Impact <b>High</b></span>
|
|
@@ -1573,18 +1573,23 @@ and the work stays visible.</p>
|
|
|
1573
1573
|
</article>
|
|
1574
1574
|
|
|
1575
1575
|
<article class="cap rcard">
|
|
1576
|
-
<div class="head"><span class="pill
|
|
1576
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Docs</span></div>
|
|
1577
1577
|
<h3>Broken-link & anchor checking — <code>lychee</code></h3>
|
|
1578
1578
|
<p>Fast, free link checker over the README and <code>docs/*.html</code>:
|
|
1579
1579
|
verifies external URLs (GitHub, PyPI), asset paths
|
|
1580
1580
|
(<code>../style/boost.css</code>) and in-page anchors
|
|
1581
1581
|
(<code>#next</code>, <code>#health</code>) still resolve. A dead link in
|
|
1582
|
-
the landing page is the first broken promise a visitor sees
|
|
1582
|
+
the landing page is the first broken promise a visitor sees. Red on
|
|
1583
|
+
its first run: eight were already broken — four <code>../adapters.html</code>
|
|
1584
|
+
at the wrong depth, two dangling anchors, one link to an item file as
|
|
1585
|
+
though it were a page, and a README pointing at
|
|
1586
|
+
<code>docs/overview.html</code>, renamed to <code>index.html</code>
|
|
1587
|
+
and never updated.</p>
|
|
1583
1588
|
<div class="meta">
|
|
1584
1589
|
<span class="m">Complexity <b>S</b></span>
|
|
1585
1590
|
<span class="m">Impact <b>Med</b></span>
|
|
1586
1591
|
<span class="m">Wow <b class="wow">★★★</b></span>
|
|
1587
|
-
<span class="m">
|
|
1592
|
+
<span class="m">8 dead links found</span>
|
|
1588
1593
|
</div>
|
|
1589
1594
|
</article>
|
|
1590
1595
|
|
|
@@ -1675,7 +1680,7 @@ and the work stays visible.</p>
|
|
|
1675
1680
|
<article class="cap rcard">
|
|
1676
1681
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Docs · Discoverability</span></div>
|
|
1677
1682
|
<h3>Surface every <code>docs/*.html</code> page from the main page</h3>
|
|
1678
|
-
<p><a href="
|
|
1683
|
+
<p><a href="roadmap.html">Making the roadmaps discoverable</a>
|
|
1679
1684
|
put both boards in the Visual Guide nav, but the same gap remains for
|
|
1680
1685
|
the rest of <code>docs/*.html</code>: <code>mcp-hub.html</code> is
|
|
1681
1686
|
reachable only if you already know the URL — nothing on
|
|
@@ -1874,7 +1879,7 @@ and the work stays visible.</p>
|
|
|
1874
1879
|
<article class="cap rcard">
|
|
1875
1880
|
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Compatibility · macOS</span></div>
|
|
1876
1881
|
<h3>Self-harden every boost process against the macOS fork-safety abort</h3>
|
|
1877
|
-
<p>The launch-env fix (<a href="
|
|
1882
|
+
<p>The launch-env fix (<a href="https://github.com/jonnyeclectic/boost/pull/119">#119</a>) only
|
|
1878
1883
|
protects hosts that register boost <em>through boost</em>, which
|
|
1879
1884
|
injects <code>no_proxy=*</code>. A host that <code>fork()</code>s into
|
|
1880
1885
|
<code>boost mcp --stdio</code> from a stale or hand-written config —
|
|
@@ -1887,7 +1892,7 @@ and the work stays visible.</p>
|
|
|
1887
1892
|
<code>getproxies()</code> short-circuits on
|
|
1888
1893
|
<code>getproxies_environment()</code> and never consults
|
|
1889
1894
|
SystemConfiguration. Belt-and-suspenders atop the
|
|
1890
|
-
<code>nethttp</code> opener (<a href="
|
|
1895
|
+
<code>nethttp</code> opener (<a href="https://github.com/jonnyeclectic/boost/pull/115">#115</a>).</p>
|
|
1891
1896
|
<div class="meta">
|
|
1892
1897
|
<span class="m">Complexity <b>S</b></span>
|
|
1893
1898
|
<span class="m">Impact <b>Med</b></span>
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Verify every local link and #fragment in the docs site resolves.
|
|
3
|
+
|
|
4
|
+
lychee (the links workflow) checks external URLs and that local files exist,
|
|
5
|
+
but it does not resolve fragments into local HTML — and that is exactly where
|
|
6
|
+
a dangling anchor hides, because the roadmap boards are GENERATED from card
|
|
7
|
+
copy in docs/roadmap/items/*.md. A bad href there is invisible until the page
|
|
8
|
+
renders.
|
|
9
|
+
|
|
10
|
+
Checks, treating docs/ as the Pages root (docs/index.html is the site root, so
|
|
11
|
+
`../style/boost.css` correctly resolves to the repo-root stylesheet):
|
|
12
|
+
* in-page `#frag` -> an element with that id/name exists on the page
|
|
13
|
+
* `other.html#frag` -> the target file exists AND carries that anchor
|
|
14
|
+
* `path/to/asset.css` -> the file exists on disk
|
|
15
|
+
|
|
16
|
+
Usage: python3 scripts/check_anchors.py [--docs docs]
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import argparse
|
|
21
|
+
import sys
|
|
22
|
+
from html.parser import HTMLParser
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
ROOT = Path(__file__).resolve().parent.parent
|
|
26
|
+
SKIP_PREFIXES = ("http://", "https://", "mailto:", "data:", "javascript:", "tel:")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class _Page(HTMLParser):
|
|
30
|
+
"""Collect anchor ids and every href/src on one page."""
|
|
31
|
+
|
|
32
|
+
def __init__(self) -> None:
|
|
33
|
+
super().__init__()
|
|
34
|
+
self.ids: set = set()
|
|
35
|
+
self.refs: list = []
|
|
36
|
+
|
|
37
|
+
def handle_starttag(self, tag, attrs) -> None:
|
|
38
|
+
d = dict(attrs)
|
|
39
|
+
for key in ("id", "name"):
|
|
40
|
+
if d.get(key):
|
|
41
|
+
self.ids.add(d[key])
|
|
42
|
+
for key in ("href", "src"):
|
|
43
|
+
if d.get(key):
|
|
44
|
+
self.refs.append(d[key])
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _parse(path: Path) -> _Page:
|
|
48
|
+
page = _Page()
|
|
49
|
+
page.feed(path.read_text(encoding="utf-8"))
|
|
50
|
+
return page
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def check(docs_dir: Path) -> list:
|
|
54
|
+
"""Return a list of human-readable problems (empty when everything resolves)."""
|
|
55
|
+
problems: list = []
|
|
56
|
+
cache: dict = {}
|
|
57
|
+
for page_path in sorted(docs_dir.glob("*.html")):
|
|
58
|
+
page = _parse(page_path)
|
|
59
|
+
for raw in page.refs:
|
|
60
|
+
ref = raw.strip()
|
|
61
|
+
if not ref or ref.startswith(SKIP_PREFIXES):
|
|
62
|
+
continue
|
|
63
|
+
if ref.startswith("#"):
|
|
64
|
+
frag = ref[1:]
|
|
65
|
+
if frag and frag not in page.ids:
|
|
66
|
+
problems.append("%s: dangling in-page anchor %s"
|
|
67
|
+
% (page_path.name, ref))
|
|
68
|
+
continue
|
|
69
|
+
rel, _, frag = ref.partition("#")
|
|
70
|
+
if not rel:
|
|
71
|
+
continue
|
|
72
|
+
target = (page_path.parent / rel).resolve()
|
|
73
|
+
if not target.exists():
|
|
74
|
+
problems.append("%s: missing local target %s" % (page_path.name, ref))
|
|
75
|
+
continue
|
|
76
|
+
if frag and target.suffix == ".html":
|
|
77
|
+
if target not in cache:
|
|
78
|
+
cache[target] = _parse(target)
|
|
79
|
+
if frag not in cache[target].ids:
|
|
80
|
+
problems.append("%s: %s -> no anchor #%s in %s"
|
|
81
|
+
% (page_path.name, ref, frag, target.name))
|
|
82
|
+
return problems
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def main(argv=None) -> int:
|
|
86
|
+
ap = argparse.ArgumentParser(description=__doc__.splitlines()[0])
|
|
87
|
+
ap.add_argument("--docs", default=str(ROOT / "docs"))
|
|
88
|
+
args = ap.parse_args(argv)
|
|
89
|
+
|
|
90
|
+
docs_dir = Path(args.docs)
|
|
91
|
+
problems = check(docs_dir)
|
|
92
|
+
pages = len(list(docs_dir.glob("*.html")))
|
|
93
|
+
if problems:
|
|
94
|
+
for p in problems:
|
|
95
|
+
print(" " + p, file=sys.stderr)
|
|
96
|
+
print("check-anchors: FAILED — %d broken reference(s) across %d pages"
|
|
97
|
+
% (len(problems), pages), file=sys.stderr)
|
|
98
|
+
print("hint: the roadmap boards are GENERATED — fix the link in the "
|
|
99
|
+
"matching docs/roadmap/items/*.md, then rerun "
|
|
100
|
+
"scripts/build_roadmap.py", file=sys.stderr)
|
|
101
|
+
return 1
|
|
102
|
+
print("check-anchors: OK — every local link and anchor resolves across "
|
|
103
|
+
"%d pages" % pages)
|
|
104
|
+
return 0
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
if __name__ == "__main__":
|
|
108
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Unit tests for scripts/check_anchors.py — the local link/anchor checker."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import importlib.util
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
_SCRIPT = Path(__file__).resolve().parents[2] / "scripts" / "check_anchors.py"
|
|
10
|
+
_DOCS = Path(__file__).resolve().parents[2] / "docs"
|
|
11
|
+
|
|
12
|
+
_skip = pytest.mark.skipif(not _SCRIPT.exists(), reason="script not reachable")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _mod():
|
|
16
|
+
spec = importlib.util.spec_from_file_location("check_anchors", _SCRIPT)
|
|
17
|
+
assert spec and spec.loader
|
|
18
|
+
module = importlib.util.module_from_spec(spec)
|
|
19
|
+
spec.loader.exec_module(module)
|
|
20
|
+
return module
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@_skip
|
|
24
|
+
def test_real_docs_have_no_broken_links():
|
|
25
|
+
"""The in-suite twin of the CI anchor pass."""
|
|
26
|
+
problems = _mod().check(_DOCS)
|
|
27
|
+
assert problems == [], "broken links in docs/: %s" % problems
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@_skip
|
|
31
|
+
def test_dangling_in_page_anchor_is_caught(tmp_path):
|
|
32
|
+
(tmp_path / "a.html").write_text(
|
|
33
|
+
'<a href="#nope">x</a><h2 id="yes">y</h2>', encoding="utf-8")
|
|
34
|
+
problems = _mod().check(tmp_path)
|
|
35
|
+
assert len(problems) == 1 and "#nope" in problems[0]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@_skip
|
|
39
|
+
def test_valid_in_page_anchor_passes(tmp_path):
|
|
40
|
+
(tmp_path / "a.html").write_text(
|
|
41
|
+
'<a href="#yes">x</a><h2 id="yes">y</h2>', encoding="utf-8")
|
|
42
|
+
assert _mod().check(tmp_path) == []
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@_skip
|
|
46
|
+
def test_missing_local_target_is_caught(tmp_path):
|
|
47
|
+
(tmp_path / "a.html").write_text('<link href="../style/gone.css">', encoding="utf-8")
|
|
48
|
+
problems = _mod().check(tmp_path)
|
|
49
|
+
assert len(problems) == 1 and "missing local target" in problems[0]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@_skip
|
|
53
|
+
def test_cross_page_anchor_checked_against_the_target(tmp_path):
|
|
54
|
+
(tmp_path / "a.html").write_text('<a href="b.html#deep">x</a>', encoding="utf-8")
|
|
55
|
+
(tmp_path / "b.html").write_text('<h2 id="other">y</h2>', encoding="utf-8")
|
|
56
|
+
problems = _mod().check(tmp_path)
|
|
57
|
+
assert len(problems) == 1 and "no anchor #deep" in problems[0]
|
|
58
|
+
|
|
59
|
+
(tmp_path / "b.html").write_text('<h2 id="deep">y</h2>', encoding="utf-8")
|
|
60
|
+
assert _mod().check(tmp_path) == []
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@_skip
|
|
64
|
+
def test_external_and_scheme_links_are_skipped(tmp_path):
|
|
65
|
+
(tmp_path / "a.html").write_text(
|
|
66
|
+
'<a href="https://example.com/nope#frag">x</a>'
|
|
67
|
+
'<a href="mailto:a@b.c">y</a><img src="data:image/svg+xml,x">',
|
|
68
|
+
encoding="utf-8")
|
|
69
|
+
assert _mod().check(tmp_path) == []
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@_skip
|
|
73
|
+
def test_main_reports_and_exits_nonzero_on_break(tmp_path, capsys):
|
|
74
|
+
(tmp_path / "a.html").write_text('<a href="#nope">x</a>', encoding="utf-8")
|
|
75
|
+
rc = _mod().main(["--docs", str(tmp_path)])
|
|
76
|
+
assert rc == 1
|
|
77
|
+
err = capsys.readouterr().err
|
|
78
|
+
assert "check-anchors: FAILED" in err
|
|
79
|
+
assert "build_roadmap.py" in err # the actionable hint
|