boost-skill-cli 1.0.78__tar.gz → 1.0.79__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.78 → boost_skill_cli-1.0.79}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/catalog.py +20 -3
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +3 -3
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap.html +1 -1
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_catalog.py +34 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/.gitattributes +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/.gitignore +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/LICENSE +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/Makefile +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/README.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/index.html +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/index.html +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/setup.cfg +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/style/README.md +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/style/boost.css +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/style/boost.js +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/style/demo.html +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/unit/test_version.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.79'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 79)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -67,10 +67,12 @@ def _description(meta: dict, body: str) -> str:
|
|
|
67
67
|
def _make_entry(root: Path, defining_file: Path, kind: str, default_name: str,
|
|
68
68
|
tap_name: str, curated: bool, meta: dict, body: str) -> dict:
|
|
69
69
|
name = str(meta.get("name") or "").strip() or default_name
|
|
70
|
+
slug = util.slugify(name) if " " in name else name
|
|
71
|
+
description = _description(meta, body)
|
|
70
72
|
item_dir = defining_file.parent
|
|
71
73
|
return {
|
|
72
|
-
"name":
|
|
73
|
-
"description":
|
|
74
|
+
"name": slug,
|
|
75
|
+
"description": description,
|
|
74
76
|
"version": str(meta.get("version") or "0.0.0"),
|
|
75
77
|
"tap": tap_name,
|
|
76
78
|
"curated": curated,
|
|
@@ -78,6 +80,9 @@ def _make_entry(root: Path, defining_file: Path, kind: str, default_name: str,
|
|
|
78
80
|
"rel_dir": str(item_dir.relative_to(root)) if item_dir != root else ".",
|
|
79
81
|
"skill_md": str(defining_file.relative_to(root)),
|
|
80
82
|
"meta": meta,
|
|
83
|
+
# Lowercased substring-search blob, flattened once at index time so
|
|
84
|
+
# search() never re-walks the frontmatter per query (see _search_blob).
|
|
85
|
+
"search_blob": _search_blob(slug, description, meta),
|
|
81
86
|
}
|
|
82
87
|
|
|
83
88
|
|
|
@@ -232,6 +237,13 @@ def _meta_text(meta) -> str:
|
|
|
232
237
|
return " ".join(parts).lower()
|
|
233
238
|
|
|
234
239
|
|
|
240
|
+
def _search_blob(name: str, description: str, meta) -> str:
|
|
241
|
+
"""The full lowercased substring-search text for an entry: its name,
|
|
242
|
+
description and flattened frontmatter. Built once at index time and cached
|
|
243
|
+
on the entry as ``search_blob`` so search() never rebuilds it per query."""
|
|
244
|
+
return " ".join([name.lower(), (description or "").lower(), _meta_text(meta)])
|
|
245
|
+
|
|
246
|
+
|
|
235
247
|
def search(query: str, entries: Optional[List[dict]] = None):
|
|
236
248
|
"""Rank entries against a query -> [(entry, score)] best-first."""
|
|
237
249
|
entries = all_entries() if entries is None else entries
|
|
@@ -241,7 +253,12 @@ def search(query: str, entries: Optional[List[dict]] = None):
|
|
|
241
253
|
for e in entries:
|
|
242
254
|
name = e["name"].lower()
|
|
243
255
|
desc = (e["description"] or "").lower()
|
|
244
|
-
|
|
256
|
+
# Precomputed at index time; fall back for older caches / entries
|
|
257
|
+
# constructed without a blob (e.g. tests passing raw dicts).
|
|
258
|
+
blob = e.get("search_blob")
|
|
259
|
+
if blob is None:
|
|
260
|
+
blob = _search_blob(e["name"], e.get("description", ""),
|
|
261
|
+
e.get("meta", {}))
|
|
245
262
|
score = 0
|
|
246
263
|
if q == name:
|
|
247
264
|
score += 100
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: stop-re-serializing-entry-meta-on-every-search
|
|
3
3
|
board: code
|
|
4
4
|
section: internals
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Performance
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 2
|
|
10
10
|
note:
|
|
11
11
|
order: 11
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/precompute-search-blob
|
|
13
|
+
pr: 93
|
|
14
14
|
title: Stop re-serializing entry meta on every search
|
|
15
15
|
---
|
|
16
16
|
<code>catalog.search</code> computes <code>json.dumps(meta).lower()</code> for <b>every entry on every query</b> just to substring-match (<code>catalog.py:222</code>). Precompute a lowercased search blob at index time, or match structured fields directly.
|
|
@@ -498,7 +498,7 @@
|
|
|
498
498
|
</article>
|
|
499
499
|
|
|
500
500
|
<article class="cap rcard">
|
|
501
|
-
<div class="head"><span class="pill
|
|
501
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Performance</span></div>
|
|
502
502
|
<h3>Stop re-serializing entry meta on every search</h3>
|
|
503
503
|
<p><code>catalog.search</code> computes <code>json.dumps(meta).lower()</code> for <b>every entry on every query</b> just to substring-match (<code>catalog.py:222</code>). Precompute a lowercased search blob at index time, or match structured fields directly.</p>
|
|
504
504
|
<div class="meta">
|
|
@@ -477,3 +477,37 @@ class TestMetaText:
|
|
|
477
477
|
def test_curated_entry_with_no_match_is_excluded(self):
|
|
478
478
|
res = catalog.search("xyzzy", entries=[_entry("unrelated", "t", curated=True)])
|
|
479
479
|
assert res == []
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
class TestSearchBlobPrecompute:
|
|
483
|
+
def test_search_blob_flattens_name_desc_meta_lowercased(self):
|
|
484
|
+
blob = catalog._search_blob(
|
|
485
|
+
"Foo-Bar", "Desc Here", {"tags": ["Alpha"], "x": "On"})
|
|
486
|
+
assert blob == "foo-bar desc here tags alpha x on"
|
|
487
|
+
|
|
488
|
+
def test_search_blob_tolerates_empty_description(self):
|
|
489
|
+
assert catalog._search_blob("name", "", {}) == "name "
|
|
490
|
+
assert catalog._search_blob("name", None, {}) == "name "
|
|
491
|
+
|
|
492
|
+
def test_make_entry_precomputes_blob(self, tmp_path):
|
|
493
|
+
f = tmp_path / "SKILL.md"
|
|
494
|
+
f.write_text("body")
|
|
495
|
+
e = catalog._make_entry(
|
|
496
|
+
tmp_path, f, "skill", "fallback-name", "tap", False,
|
|
497
|
+
{"tags": ["Kubernetes"]}, "Handles clusters")
|
|
498
|
+
assert e["search_blob"] == "fallback-name handles clusters tags kubernetes"
|
|
499
|
+
|
|
500
|
+
def test_search_reads_precomputed_blob_not_live_meta(self):
|
|
501
|
+
# Token lives only in search_blob, not in meta -> a match proves search
|
|
502
|
+
# consumed the precomputed blob rather than re-walking meta.
|
|
503
|
+
e = _entry("x", "t", meta={})
|
|
504
|
+
e["search_blob"] = "x zzsentinel"
|
|
505
|
+
res = catalog.search("zzsentinel", entries=[e])
|
|
506
|
+
assert [(m["name"], s) for m, s in res] == [("x", 2)]
|
|
507
|
+
|
|
508
|
+
def test_search_falls_back_when_blob_absent(self):
|
|
509
|
+
# Older caches / raw entries have no blob -> recompute from meta.
|
|
510
|
+
e = _entry("x", "t", meta={"tags": ["fallbackword"]})
|
|
511
|
+
assert "search_blob" not in e
|
|
512
|
+
res = catalog.search("fallbackword", entries=[e])
|
|
513
|
+
assert [(m["name"], s) for m, s in res] == [("x", 2)]
|
|
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.78 → boost_skill_cli-1.0.79}/boost_skill_cli.egg-info/dependency_links.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/command-reference-docs-site.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
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/layering-guard-import-linter.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
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/one-command-every-env-nox.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
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/reconcile-the-theme-drift.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/robust-tag-argument-parsing.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/second-type-checker-pyright.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/single-tech-stack-prober.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/typo-detection-codespell.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/update-diff-before-apply.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/windows-in-the-ci-matrix.md
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/workflow-linting-actionlint.md
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/docs/roadmap/items/workflow-sast-zizmor.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
|
{boost_skill_cli-1.0.78 → boost_skill_cli-1.0.79}/tests/functional/test_cli_configuration.py
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
|