boost-skill-cli 1.0.171__tar.gz → 1.0.173__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.171 → boost_skill_cli-1.0.173}/CONTRIBUTING.md +1 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/Makefile +2 -1
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/dense.py +3 -1
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/mcp.py +5 -2
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/output.py +5 -2
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/registry.py +9 -1
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/serve.py +6 -2
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/second-type-checker-pyright.md +3 -3
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap.html +1 -1
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/pyproject.toml +15 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_registry.py +26 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/.gitattributes +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/.gitignore +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/LICENSE +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/README.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/commands.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/index.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/examples/README.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/index.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/noxfile.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/setup.cfg +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/style/README.md +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/style/boost.css +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/style/boost.js +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/style/demo.html +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/tests/unit/test_workflows.py +0 -0
|
@@ -54,6 +54,7 @@ auto-fixes straight back onto the branch.
|
|
|
54
54
|
| `make mutation` | mutmut over `boost_cli/core`, **≥80% mutants killed** |
|
|
55
55
|
| `ruff check boost_cli tests` | lint, zero findings |
|
|
56
56
|
| `mypy` | type check, zero errors |
|
|
57
|
+
| `pyright` | second type checker over `core/` — None-flow & narrowing, zero errors |
|
|
57
58
|
| `lint-imports` | layering: `core/` imports no `commands/`/`cli`; CLI depends inward |
|
|
58
59
|
| `vulture` | dead-code radar: no unused imports / unreachable code (confidence ≥80) |
|
|
59
60
|
| `xenon` | complexity ratchet: aggregate cyclomatic complexity can't regress (avg ≤B) |
|
|
@@ -14,7 +14,7 @@ EVAL_HOME := $(CURDIR)/.eval-home
|
|
|
14
14
|
|
|
15
15
|
venv:
|
|
16
16
|
python3 -m venv $(VENV)
|
|
17
|
-
$(VENV)/bin/pip -q install pytest pytest-cov coverage mutmut ruff mypy codespell hypothesis import-linter diff-cover vulture xenon
|
|
17
|
+
$(VENV)/bin/pip -q install pytest pytest-cov coverage mutmut ruff mypy codespell hypothesis import-linter diff-cover vulture xenon pyright
|
|
18
18
|
|
|
19
19
|
unit:
|
|
20
20
|
$(PYTEST) tests/unit -q
|
|
@@ -45,6 +45,7 @@ mutation:
|
|
|
45
45
|
lint:
|
|
46
46
|
$(VENV)/bin/ruff check boost_cli tests
|
|
47
47
|
$(VENV)/bin/mypy
|
|
48
|
+
$(VENV)/bin/pyright
|
|
48
49
|
$(VENV)/bin/lint-imports
|
|
49
50
|
$(VENV)/bin/vulture boost_cli --min-confidence 80
|
|
50
51
|
$(VENV)/bin/xenon --max-absolute F --max-modules E --max-average B boost_cli
|
|
@@ -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.173'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 173)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -194,6 +194,8 @@ def _delete_taps(con: sqlite3.Connection, taps: List[str]) -> None:
|
|
|
194
194
|
def _embed_and_store(con: sqlite3.Connection, entries: List[dict],
|
|
195
195
|
tap_paths: Optional[Dict[str, Path]]) -> int:
|
|
196
196
|
mod = _load()
|
|
197
|
+
if mod is None: # [rag] extra absent — nothing to serialize into
|
|
198
|
+
return 0 # (callers fall back to BM25; see module docstring)
|
|
197
199
|
rows: List[Tuple[dict, int, str]] = [] # (entry, chunk_ix, text)
|
|
198
200
|
for e in entries:
|
|
199
201
|
for ci, text in enumerate(_chunk_texts(e, tap_paths)):
|
|
@@ -226,7 +228,7 @@ def retrieve(query: str, k: int = 60, kind: Optional[str] = None,
|
|
|
226
228
|
return None
|
|
227
229
|
mod = _load()
|
|
228
230
|
con = _connect()
|
|
229
|
-
if con is None:
|
|
231
|
+
if con is None or mod is None:
|
|
230
232
|
return None
|
|
231
233
|
try:
|
|
232
234
|
pool = max(k * _POOL, 200)
|
|
@@ -115,9 +115,12 @@ def handle_request(req: dict, *, version: str,
|
|
|
115
115
|
if text is None:
|
|
116
116
|
resp["error"] = {"code": -32602, "message": "unknown tool %r" % tool}
|
|
117
117
|
else:
|
|
118
|
-
|
|
118
|
+
# Annotated: the literal alone infers a list-only value type, so
|
|
119
|
+
# adding the `isError` bool below would be a type error.
|
|
120
|
+
result: dict = {"content": [{"type": "text", "text": text}]}
|
|
119
121
|
if is_err:
|
|
120
|
-
|
|
122
|
+
result["isError"] = True
|
|
123
|
+
resp["result"] = result
|
|
121
124
|
else:
|
|
122
125
|
resp["error"] = {"code": -32601, "message": "method not found: %s" % method}
|
|
123
126
|
return resp
|
|
@@ -36,9 +36,12 @@ def harden_console_encoding() -> None:
|
|
|
36
36
|
so skip a stream that doesn't have it rather than fail startup over it.
|
|
37
37
|
"""
|
|
38
38
|
for stream in (sys.stdout, sys.stderr):
|
|
39
|
-
|
|
39
|
+
# getattr, not hasattr+call: same guard, but it also gives the type
|
|
40
|
+
# checkers a concrete optional to narrow (TextIO has no `reconfigure`).
|
|
41
|
+
reconfigure = getattr(stream, "reconfigure", None)
|
|
42
|
+
if callable(reconfigure):
|
|
40
43
|
with contextlib.suppress(OSError, ValueError):
|
|
41
|
-
|
|
44
|
+
reconfigure(encoding="utf-8", errors="replace")
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
def use_color(stream=None) -> bool:
|
|
@@ -56,8 +56,16 @@ def parse_spec(spec: str):
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
def list_taps() -> List[Tap]:
|
|
59
|
+
# `or []`, not just the get() default: config.get returns the default only
|
|
60
|
+
# when the key is ABSENT, so a config.json carrying `"taps": null` (or any
|
|
61
|
+
# non-list scalar) would otherwise reach the comprehension and raise
|
|
62
|
+
# TypeError. A malformed config should read as "no taps", never crash every
|
|
63
|
+
# command that lists them.
|
|
64
|
+
taps = config.get("taps", []) or []
|
|
65
|
+
if not isinstance(taps, list):
|
|
66
|
+
return []
|
|
59
67
|
return [Tap(name=t["name"], url=t.get("url", ""), curated=bool(t.get("curated")))
|
|
60
|
-
for t in
|
|
68
|
+
for t in taps if isinstance(t, dict) and t.get("name")]
|
|
61
69
|
|
|
62
70
|
|
|
63
71
|
def get(name: str) -> Tap:
|
|
@@ -151,8 +151,12 @@ def route(path: str) -> Tuple[int, str, bytes]:
|
|
|
151
151
|
class _CatalogHandler(BaseHTTPRequestHandler):
|
|
152
152
|
server_version = "boost/" + __version__
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
# `fmt`, not the base class's `format`: the stdlib only ever calls this
|
|
155
|
+
# positionally, and `format` would shadow the builtin (and read as an
|
|
156
|
+
# unused variable to vulture). The name-mismatch override warning is
|
|
157
|
+
# cosmetic here, so it's suppressed at the line rather than repo-wide.
|
|
158
|
+
def log_message(self, fmt, *args): # pyright: ignore[reportIncompatibleMethodOverride]
|
|
159
|
+
pass # request logging happens in _send instead
|
|
156
160
|
|
|
157
161
|
def _send(self, status: int, ctype: str, body: bytes) -> None:
|
|
158
162
|
self.send_response(status)
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: second-type-checker-pyright
|
|
3
3
|
board: code
|
|
4
4
|
section: pipeline
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Testing · Type
|
|
7
7
|
complexity: M
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 3
|
|
10
10
|
note: editor-parity
|
|
11
11
|
order: 6
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/pyright
|
|
13
|
+
pr: 196
|
|
14
14
|
title: Second type checker — <code>pyright</code>
|
|
15
15
|
---
|
|
16
16
|
Run Microsoft's <code>pyright</code> alongside mypy. Its independent
|
|
@@ -1246,7 +1246,7 @@ improvement is real (or isn't)."</p>
|
|
|
1246
1246
|
</article>
|
|
1247
1247
|
|
|
1248
1248
|
<article class="cap rcard">
|
|
1249
|
-
<div class="head"><span class="pill
|
|
1249
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Testing · Type</span></div>
|
|
1250
1250
|
<h3>Second type checker — <code>pyright</code></h3>
|
|
1251
1251
|
<p>Run Microsoft's <code>pyright</code> alongside mypy. Its independent
|
|
1252
1252
|
inference catches <code>None</code>-flow and narrowing bugs the current
|
|
@@ -156,6 +156,21 @@ exclude_lines = [
|
|
|
156
156
|
"raise NotImplementedError",
|
|
157
157
|
]
|
|
158
158
|
|
|
159
|
+
# pyright: a SECOND type checker alongside mypy. Its independent inference
|
|
160
|
+
# catches None-flow and narrowing bugs mypy's config lets slide — it found the
|
|
161
|
+
# `"taps": null` crash in registry.list_taps() that mypy passed clean.
|
|
162
|
+
# Scoped to boost_cli/core (the mutation-tested engine) so the gate is green and
|
|
163
|
+
# meaningful today; widening to commands/ is tracked on the roadmap.
|
|
164
|
+
# Dev/CI-only — never imported at runtime.
|
|
165
|
+
[tool.pyright]
|
|
166
|
+
include = ["boost_cli/core"]
|
|
167
|
+
pythonVersion = "3.9"
|
|
168
|
+
typeCheckingMode = "standard"
|
|
169
|
+
# _version.py is generated by setuptools-scm at build time and absent from a
|
|
170
|
+
# plain checkout (same carve-out as [tool.mypy]).
|
|
171
|
+
ignore = ["boost_cli/_version.py"]
|
|
172
|
+
reportMissingImports = false # optional extras ([rag] sqlite_vec) resolve at runtime
|
|
173
|
+
|
|
159
174
|
# import-linter: turn boost's assumed layering into an enforced contract, so a
|
|
160
175
|
# cross-layer import can't silently erode the engine. Run by `make lint`
|
|
161
176
|
# (lint-imports) and the CI lint job. Dev/CI-only — never imported at runtime.
|
|
@@ -115,6 +115,32 @@ class TestListAndGet:
|
|
|
115
115
|
def test_list_taps_empty_by_default(self, sandbox):
|
|
116
116
|
assert registry.list_taps() == []
|
|
117
117
|
|
|
118
|
+
def test_list_taps_survives_null_taps_key(self, sandbox):
|
|
119
|
+
"""`"taps": null` must read as "no taps", not crash every command.
|
|
120
|
+
|
|
121
|
+
config.get returns its default only when the key is ABSENT, so an
|
|
122
|
+
explicit null reached the comprehension and raised TypeError
|
|
123
|
+
('NoneType' object is not iterable) — found by pyright, not mypy.
|
|
124
|
+
"""
|
|
125
|
+
cfg = config.load()
|
|
126
|
+
cfg["taps"] = None
|
|
127
|
+
config.save(cfg)
|
|
128
|
+
assert registry.list_taps() == []
|
|
129
|
+
|
|
130
|
+
@pytest.mark.parametrize("bogus", ["not-a-list", 42, {"name": "x"}])
|
|
131
|
+
def test_list_taps_ignores_non_list_taps(self, sandbox, bogus):
|
|
132
|
+
cfg = config.load()
|
|
133
|
+
cfg["taps"] = bogus
|
|
134
|
+
config.save(cfg)
|
|
135
|
+
assert registry.list_taps() == []
|
|
136
|
+
|
|
137
|
+
def test_list_taps_skips_malformed_entries(self, sandbox):
|
|
138
|
+
"""A junk element must not take down the whole listing."""
|
|
139
|
+
cfg = config.load()
|
|
140
|
+
cfg["taps"] = [{"name": "good", "url": "https://x"}, "junk", {}, None]
|
|
141
|
+
config.save(cfg)
|
|
142
|
+
assert [t.name for t in registry.list_taps()] == ["good"]
|
|
143
|
+
|
|
118
144
|
def test_get_exact_name(self, sandbox):
|
|
119
145
|
self._seed()
|
|
120
146
|
assert registry.get("owner/repo").name == "owner/repo"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/boost_skill_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/boost-run-live-agents.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.171 → boost_skill_cli-1.0.173}/docs/roadmap/items/list-rules-and-workflows.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|