boost-skill-cli 1.0.168__tar.gz → 1.0.170__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.168 → boost_skill_cli-1.0.170}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/adapters.py +54 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/commands.html +1 -1
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/framework-adapter-langgraph.md +1 -1
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +3 -3
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap.html +2 -2
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_adapters.py +104 -5
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.gitattributes +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.gitignore +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/LICENSE +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/Makefile +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/README.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/index.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/examples/README.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/index.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/noxfile.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/setup.cfg +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/README.md +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/boost.css +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/boost.js +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/demo.html +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_workflows.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.170'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 170)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -84,6 +84,23 @@ def _litellm_model(model: str) -> str:
|
|
|
84
84
|
return m if "/" in m else "anthropic/" + m
|
|
85
85
|
|
|
86
86
|
|
|
87
|
+
def _langchain_model(model: str) -> str:
|
|
88
|
+
"""Normalize a boost model id to a LangChain ``init_chat_model`` string.
|
|
89
|
+
|
|
90
|
+
LangGraph's ``create_react_agent`` builds its model via LangChain's
|
|
91
|
+
``init_chat_model``, which wants ``provider:model`` (colon) — not LiteLLM's
|
|
92
|
+
``provider/model`` (slash). A bare Claude id gets ``anthropic:``; a
|
|
93
|
+
litellm-style ``anthropic/x`` becomes ``anthropic:x``; a value that already
|
|
94
|
+
uses the colon form passes through.
|
|
95
|
+
"""
|
|
96
|
+
m = model.strip()
|
|
97
|
+
if ":" in m:
|
|
98
|
+
return m
|
|
99
|
+
if "/" in m:
|
|
100
|
+
return m.replace("/", ":", 1)
|
|
101
|
+
return "anthropic:" + m
|
|
102
|
+
|
|
103
|
+
|
|
87
104
|
# --- renderers ------------------------------------------------------------
|
|
88
105
|
|
|
89
106
|
def render_crewai(name: str, description: str, body: str,
|
|
@@ -156,7 +173,44 @@ def render_agents_sdk(name: str, description: str, body: str,
|
|
|
156
173
|
)
|
|
157
174
|
|
|
158
175
|
|
|
176
|
+
def render_langgraph(name: str, description: str, body: str,
|
|
177
|
+
model: Optional[str] = None) -> str:
|
|
178
|
+
"""A LangGraph node factory: prebuilt ``create_react_agent`` bound to the
|
|
179
|
+
skill body as its system prompt.
|
|
180
|
+
|
|
181
|
+
Unlike CrewAI / the Agents SDK, a LangGraph agent isn't one constructor —
|
|
182
|
+
it's a node compiled with a model and dropped into a ``StateGraph``. So we
|
|
183
|
+
emit a *factory* (``make_<name>``) the caller invokes with a model and any
|
|
184
|
+
tools, rather than a module-level value. With `model`, the factory's
|
|
185
|
+
``model`` argument defaults to the normalized LiteLLM id; without it, the
|
|
186
|
+
caller must supply one (LangGraph has no default provider to inherit).
|
|
187
|
+
"""
|
|
188
|
+
var = _ident(name)
|
|
189
|
+
if model:
|
|
190
|
+
sig = "model=%s, tools=None" % _py_str(_langchain_model(model))
|
|
191
|
+
else:
|
|
192
|
+
sig = "model, tools=None"
|
|
193
|
+
return (
|
|
194
|
+
"# Generated by `boost adapt %s --to langgraph`. Do not edit by hand.\n"
|
|
195
|
+
"from langgraph.prebuilt import create_react_agent\n"
|
|
196
|
+
"\n"
|
|
197
|
+
"SYSTEM_PROMPT = %s\n"
|
|
198
|
+
"\n"
|
|
199
|
+
"\n"
|
|
200
|
+
"def make_%s(%s):\n"
|
|
201
|
+
" %s\n"
|
|
202
|
+
" return create_react_agent(model, tools=tools or [], prompt=SYSTEM_PROMPT)\n"
|
|
203
|
+
) % (
|
|
204
|
+
name,
|
|
205
|
+
_py_str(_clean(body)),
|
|
206
|
+
var,
|
|
207
|
+
sig,
|
|
208
|
+
_py_str(_clean(description)),
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
|
|
159
212
|
FORMATS.update({
|
|
160
213
|
"crewai": render_crewai,
|
|
161
214
|
"agents-sdk": render_agents_sdk,
|
|
215
|
+
"langgraph": render_langgraph,
|
|
162
216
|
})
|
|
@@ -341,7 +341,7 @@
|
|
|
341
341
|
</div>
|
|
342
342
|
<div class="args-h">Options</div>
|
|
343
343
|
<div class="args">
|
|
344
|
-
<div class="arg"><code>--to FRAMEWORK</code><span>target framework: agents-sdk, crewai</span></div>
|
|
344
|
+
<div class="arg"><code>--to FRAMEWORK</code><span>target framework: agents-sdk, crewai, langgraph</span></div>
|
|
345
345
|
<div class="arg"><code>--model M</code><span>LLM the exported agent runs on (default: boost's ai.model; pass 'none' for the framework's own default)</span></div>
|
|
346
346
|
<div class="arg"><code>-o, --out FILE</code><span>write to FILE instead of stdout</span></div>
|
|
347
347
|
</div>
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
id: supply-chain-posture-openssf-scorecard
|
|
3
3
|
board: code
|
|
4
4
|
section: health
|
|
5
|
-
status:
|
|
5
|
+
status: shipped
|
|
6
6
|
category: Security · Posture
|
|
7
7
|
complexity: S
|
|
8
8
|
impact: Med
|
|
9
9
|
wow: 4
|
|
10
10
|
note: badge-worthy
|
|
11
11
|
order: 3
|
|
12
|
-
owner:
|
|
13
|
-
pr:
|
|
12
|
+
owner: loop/scorecard
|
|
13
|
+
pr: 193
|
|
14
14
|
title: Supply-chain posture — OpenSSF Scorecard
|
|
15
15
|
---
|
|
16
16
|
The Scorecard GitHub Action audits ~18 supply-chain signals weekly —
|
|
@@ -949,7 +949,7 @@ explanations and safety, not better ranking.</p>
|
|
|
949
949
|
</article>
|
|
950
950
|
|
|
951
951
|
<article class="cap rcard">
|
|
952
|
-
<div class="head"><span class="pill
|
|
952
|
+
<div class="head"><span class="pill shipped">Shipped</span><span class="cat">Security · Posture</span></div>
|
|
953
953
|
<h3>Supply-chain posture — OpenSSF Scorecard</h3>
|
|
954
954
|
<p>The Scorecard GitHub Action audits ~18 supply-chain signals weekly —
|
|
955
955
|
branch protection, token permissions, SHA-pinned actions, dangerous
|
|
@@ -1460,7 +1460,7 @@ improvement is real (or isn't)."</p>
|
|
|
1460
1460
|
</article>
|
|
1461
1461
|
|
|
1462
1462
|
<article class="cap rcard">
|
|
1463
|
-
<div class="head"><span class="pill
|
|
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
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">
|
|
@@ -13,8 +13,8 @@ from boost_cli.core import adapters
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class TestFormats:
|
|
16
|
-
def
|
|
17
|
-
assert adapters.formats() == ["agents-sdk", "crewai"]
|
|
16
|
+
def test_registry_lists_all_frameworks(self):
|
|
17
|
+
assert adapters.formats() == ["agents-sdk", "crewai", "langgraph"]
|
|
18
18
|
|
|
19
19
|
def test_formats_is_sorted(self):
|
|
20
20
|
assert adapters.formats() == sorted(adapters.formats())
|
|
@@ -160,6 +160,82 @@ class TestRenderAgentsSdk:
|
|
|
160
160
|
)
|
|
161
161
|
|
|
162
162
|
|
|
163
|
+
class TestRenderLanggraph:
|
|
164
|
+
def setup_method(self):
|
|
165
|
+
self.src = adapters.render_langgraph(
|
|
166
|
+
"code-reviewer",
|
|
167
|
+
"Reviews a diff for correctness",
|
|
168
|
+
"Review the diff.\nRank by severity.",
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
def test_is_valid_python(self):
|
|
172
|
+
compile(self.src, "<langgraph>", "exec")
|
|
173
|
+
|
|
174
|
+
def test_imports_create_react_agent(self):
|
|
175
|
+
assert "from langgraph.prebuilt import create_react_agent" in self.src
|
|
176
|
+
|
|
177
|
+
def test_emits_a_node_factory_named_from_skill(self):
|
|
178
|
+
assert "def make_code_reviewer(model, tools=None):" in self.src
|
|
179
|
+
|
|
180
|
+
def test_body_is_the_system_prompt(self):
|
|
181
|
+
assert 'SYSTEM_PROMPT = "Review the diff.\\nRank by severity."' in self.src
|
|
182
|
+
|
|
183
|
+
def test_factory_binds_prompt_and_tools(self):
|
|
184
|
+
assert ("return create_react_agent(model, tools=tools or [], "
|
|
185
|
+
"prompt=SYSTEM_PROMPT)") in self.src
|
|
186
|
+
|
|
187
|
+
def test_has_provenance_header(self):
|
|
188
|
+
assert self.src.startswith(
|
|
189
|
+
"# Generated by `boost adapt code-reviewer --to langgraph`.")
|
|
190
|
+
|
|
191
|
+
def test_exact_output(self):
|
|
192
|
+
assert self.src == (
|
|
193
|
+
"# Generated by `boost adapt code-reviewer --to langgraph`."
|
|
194
|
+
" Do not edit by hand.\n"
|
|
195
|
+
"from langgraph.prebuilt import create_react_agent\n"
|
|
196
|
+
"\n"
|
|
197
|
+
'SYSTEM_PROMPT = "Review the diff.\\nRank by severity."\n'
|
|
198
|
+
"\n"
|
|
199
|
+
"\n"
|
|
200
|
+
"def make_code_reviewer(model, tools=None):\n"
|
|
201
|
+
' "Reviews a diff for correctness"\n'
|
|
202
|
+
" return create_react_agent(model, tools=tools or [],"
|
|
203
|
+
" prompt=SYSTEM_PROMPT)\n"
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class TestLanggraphWithModel:
|
|
208
|
+
def setup_method(self):
|
|
209
|
+
self.src = adapters.render_langgraph(
|
|
210
|
+
"code-reviewer", "Reviews a diff", "Review it.",
|
|
211
|
+
"claude-haiku-4-5-20251001")
|
|
212
|
+
|
|
213
|
+
def test_is_valid_python(self):
|
|
214
|
+
compile(self.src, "<lg>", "exec")
|
|
215
|
+
|
|
216
|
+
def test_model_defaults_the_factory_arg(self):
|
|
217
|
+
# LangChain init_chat_model wants provider:model (colon), not litellm's slash.
|
|
218
|
+
assert ('def make_code_reviewer('
|
|
219
|
+
'model="anthropic:claude-haiku-4-5-20251001", tools=None):'
|
|
220
|
+
in self.src)
|
|
221
|
+
|
|
222
|
+
def test_exact_output(self):
|
|
223
|
+
assert self.src == (
|
|
224
|
+
"# Generated by `boost adapt code-reviewer --to langgraph`."
|
|
225
|
+
" Do not edit by hand.\n"
|
|
226
|
+
"from langgraph.prebuilt import create_react_agent\n"
|
|
227
|
+
"\n"
|
|
228
|
+
'SYSTEM_PROMPT = "Review it."\n'
|
|
229
|
+
"\n"
|
|
230
|
+
"\n"
|
|
231
|
+
'def make_code_reviewer('
|
|
232
|
+
'model="anthropic:claude-haiku-4-5-20251001", tools=None):\n'
|
|
233
|
+
' "Reviews a diff"\n'
|
|
234
|
+
" return create_react_agent(model, tools=tools or [],"
|
|
235
|
+
" prompt=SYSTEM_PROMPT)\n"
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
|
|
163
239
|
class TestAdversarialBodiesStayValid:
|
|
164
240
|
"""A skill body full of quote/escape hazards must still emit valid Python."""
|
|
165
241
|
|
|
@@ -180,6 +256,10 @@ class TestAdversarialBodiesStayValid:
|
|
|
180
256
|
def test_agents_sdk_compiles(self, body):
|
|
181
257
|
compile(adapters.render_agents_sdk("s", "d", body), "<c>", "exec")
|
|
182
258
|
|
|
259
|
+
@pytest.mark.parametrize("body", HAZARDS)
|
|
260
|
+
def test_langgraph_compiles(self, body):
|
|
261
|
+
compile(adapters.render_langgraph("s", "d", body), "<c>", "exec")
|
|
262
|
+
|
|
183
263
|
def test_body_round_trips_through_the_literal(self):
|
|
184
264
|
# Extract the backstory literal and confirm it decodes to the original.
|
|
185
265
|
body = 'weird """ body with "quotes" and \\ slashes\nand lines'
|
|
@@ -204,6 +284,23 @@ class TestLitellmModel:
|
|
|
204
284
|
assert adapters._litellm_model(" claude-x ") == "anthropic/claude-x"
|
|
205
285
|
|
|
206
286
|
|
|
287
|
+
class TestLangchainModel:
|
|
288
|
+
def test_bare_id_gets_anthropic_colon(self):
|
|
289
|
+
assert adapters._langchain_model("claude-haiku-4-5-20251001") == \
|
|
290
|
+
"anthropic:claude-haiku-4-5-20251001"
|
|
291
|
+
|
|
292
|
+
def test_litellm_slash_becomes_colon(self):
|
|
293
|
+
assert adapters._langchain_model("anthropic/claude-sonnet-5") == \
|
|
294
|
+
"anthropic:claude-sonnet-5"
|
|
295
|
+
assert adapters._langchain_model("openai/gpt-4o") == "openai:gpt-4o"
|
|
296
|
+
|
|
297
|
+
def test_colon_form_passes_through(self):
|
|
298
|
+
assert adapters._langchain_model("anthropic:claude-x") == "anthropic:claude-x"
|
|
299
|
+
|
|
300
|
+
def test_strips_whitespace(self):
|
|
301
|
+
assert adapters._langchain_model(" claude-x ") == "anthropic:claude-x"
|
|
302
|
+
|
|
303
|
+
|
|
207
304
|
class TestCrewaiWithModel:
|
|
208
305
|
def setup_method(self):
|
|
209
306
|
self.src = adapters.render_crewai(
|
|
@@ -286,13 +383,15 @@ class TestModelOmittedIsUnchanged:
|
|
|
286
383
|
# falsy model ("") must not emit an LLM line
|
|
287
384
|
assert "LLM" not in adapters.render_crewai("x", "d", "b", "")
|
|
288
385
|
|
|
289
|
-
@pytest.mark.parametrize("fmt", ["crewai", "agents-sdk"])
|
|
386
|
+
@pytest.mark.parametrize("fmt", ["crewai", "agents-sdk", "langgraph"])
|
|
290
387
|
def test_render_dispatch_passes_model_through(self, fmt):
|
|
291
388
|
src = adapters.render(fmt, "x", "d", "b", "claude-x")
|
|
292
|
-
|
|
389
|
+
# crewai/agents-sdk emit litellm anthropic/claude-x; langgraph emits the
|
|
390
|
+
# LangChain anthropic:claude-x — either way the model is wired through.
|
|
391
|
+
assert "claude-x" in src and "anthropic" in src
|
|
293
392
|
compile(src, "<c>", "exec")
|
|
294
393
|
|
|
295
|
-
@pytest.mark.parametrize("fmt", ["crewai", "agents-sdk"])
|
|
394
|
+
@pytest.mark.parametrize("fmt", ["crewai", "agents-sdk", "langgraph"])
|
|
296
395
|
def test_model_output_still_compiles(self, fmt):
|
|
297
396
|
compile(adapters.render(fmt, "s", "d", 'body """ x', "claude-y"),
|
|
298
397
|
"<c>", "exec")
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/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
|
{boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/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
|