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.
Files changed (324) hide show
  1. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/adapters.py +54 -0
  4. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/commands.html +1 -1
  6. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/framework-adapter-langgraph.md +1 -1
  7. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +3 -3
  8. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap.html +2 -2
  9. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_adapters.py +104 -5
  10. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.gitattributes +0 -0
  11. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.gitignore +0 -0
  12. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.gitleaks.toml +0 -0
  13. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/.pre-commit-config.yaml +0 -0
  14. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/CLAUDE.md +0 -0
  15. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/CONTRIBUTING.md +0 -0
  16. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/LICENSE +0 -0
  17. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/MANIFEST.in +0 -0
  18. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/Makefile +0 -0
  19. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/README.md +0 -0
  20. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/SECURITY.md +0 -0
  21. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost +0 -0
  22. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/__init__.py +0 -0
  23. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/__main__.py +0 -0
  24. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/cli.py +0 -0
  25. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/cliparse.py +0 -0
  26. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/__init__.py +0 -0
  27. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/bmad.py +0 -0
  28. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/configuration.py +0 -0
  29. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/discovery.py +0 -0
  30. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/hooks.py +0 -0
  31. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/info.py +0 -0
  32. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/intelligence.py +0 -0
  33. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/pkg.py +0 -0
  34. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/quality.py +0 -0
  35. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/taps.py +0 -0
  36. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/commands/team.py +0 -0
  37. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/__init__.py +0 -0
  38. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/agents.py +0 -0
  39. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/ai.py +0 -0
  40. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/catalog.py +0 -0
  41. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/claude_settings.py +0 -0
  42. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/config.py +0 -0
  43. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/dense.py +0 -0
  44. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/embed.py +0 -0
  45. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/frontmatter.py +0 -0
  46. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/gitutil.py +0 -0
  47. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/imperative.py +0 -0
  48. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/injectscan.py +0 -0
  49. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/journal.py +0 -0
  50. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/lockfile.py +0 -0
  51. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/logs.py +0 -0
  52. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/mcp.py +0 -0
  53. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/nethttp.py +0 -0
  54. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/output.py +0 -0
  55. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/paths.py +0 -0
  56. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/policy.py +0 -0
  57. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/rag.py +0 -0
  58. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/registry.py +0 -0
  59. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/rules.py +0 -0
  60. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/secretscan.py +0 -0
  61. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/serve.py +0 -0
  62. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/stackprobe.py +0 -0
  63. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/staleness.py +0 -0
  64. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/store.py +0 -0
  65. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/typosquat.py +0 -0
  66. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/updatediff.py +0 -0
  67. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/util.py +0 -0
  68. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/core/workflows.py +0 -0
  69. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/data/registries.json +0 -0
  70. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/errors.py +0 -0
  71. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_cli/spin.py +0 -0
  72. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  73. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  74. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  75. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/requires.txt +0 -0
  76. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/boost_skill_cli.egg-info/top_level.txt +0 -0
  77. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/.claude/settings.local.json +0 -0
  78. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/DEBUGGING.md +0 -0
  79. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/adapters.html +0 -0
  80. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/demo.gif +0 -0
  81. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/demo.tape +0 -0
  82. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/design-roadmap.html +0 -0
  83. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/eval.html +0 -0
  84. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/index.html +0 -0
  85. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/mcp-hub.html +0 -0
  86. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/rag-architecture.md +0 -0
  87. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D01.md +0 -0
  88. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D02.md +0 -0
  89. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D03.md +0 -0
  90. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D04.md +0 -0
  91. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D05.md +0 -0
  92. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D06.md +0 -0
  93. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D07.md +0 -0
  94. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D08.md +0 -0
  95. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D09.md +0 -0
  96. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D10.md +0 -0
  97. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D11.md +0 -0
  98. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D12.md +0 -0
  99. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D13.md +0 -0
  100. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D14.md +0 -0
  101. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D15.md +0 -0
  102. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D16.md +0 -0
  103. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D17.md +0 -0
  104. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D18.md +0 -0
  105. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D19.md +0 -0
  106. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D20.md +0 -0
  107. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D21.md +0 -0
  108. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D22.md +0 -0
  109. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D23.md +0 -0
  110. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D24.md +0 -0
  111. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D25.md +0 -0
  112. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/BOOST-D26.md +0 -0
  113. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  114. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  115. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  116. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  117. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  118. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  119. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  120. {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
  121. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  122. {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
  123. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  124. {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
  125. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  126. {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
  127. {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
  128. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  129. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  130. {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
  131. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  132. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  133. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  134. {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
  135. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  136. {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
  137. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  138. {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
  139. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  140. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  141. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  142. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  143. {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
  144. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  145. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  146. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  147. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  148. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  149. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  150. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  151. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  152. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  153. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  154. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  155. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  156. {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
  157. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  158. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  159. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  160. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  161. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  162. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  163. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  164. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  165. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  166. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  167. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  168. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  169. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  170. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  171. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  172. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  173. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  174. {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
  175. {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
  176. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  177. {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
  178. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  179. {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
  180. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  181. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  182. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  183. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  184. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  185. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  186. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  187. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  188. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  189. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  190. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  191. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  192. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  193. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  194. {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
  195. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  196. {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
  197. {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
  198. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  199. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  200. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  201. {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
  202. {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
  203. {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
  204. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  205. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  206. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  207. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  208. {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
  209. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  210. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  211. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  212. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  213. {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
  214. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  215. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  216. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  217. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  218. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/docs/roadmap/items/workspace-scope-install.md +0 -0
  219. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/examples/README.md +0 -0
  220. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/examples/adapt-demo.sh +0 -0
  221. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/examples/boost-run-prototype.sh +0 -0
  222. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/index.html +0 -0
  223. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/noxfile.py +0 -0
  224. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/pyproject.toml +0 -0
  225. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/bench_cli.sh +0 -0
  226. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/build_command_reference.py +0 -0
  227. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/build_registries.py +0 -0
  228. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/build_roadmap.py +0 -0
  229. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/ensure_eval_corpus.sh +0 -0
  230. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/eval_explain.py +0 -0
  231. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/eval_recommend.py +0 -0
  232. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/eval_retrieval.py +0 -0
  233. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/import_budget.py +0 -0
  234. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/scripts/mutation_gate.py +0 -0
  235. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/setup.cfg +0 -0
  236. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/README.md +0 -0
  237. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/boost.css +0 -0
  238. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/boost.js +0 -0
  239. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/style/demo.html +0 -0
  240. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/adapt.feature +0 -0
  241. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/browse.feature +0 -0
  242. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/count.feature +0 -0
  243. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/discover.feature +0 -0
  244. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/doctor.feature +0 -0
  245. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/environment.py +0 -0
  246. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/explain.feature +0 -0
  247. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/index.feature +0 -0
  248. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/install.feature +0 -0
  249. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/list.feature +0 -0
  250. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/mcp.feature +0 -0
  251. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/search.feature +0 -0
  252. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/cli_steps.py +0 -0
  253. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/discovery_steps.py +0 -0
  254. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/mcp_steps.py +0 -0
  255. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/bdd/features/steps/quality_steps.py +0 -0
  256. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/conftest.py +0 -0
  257. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/baseline.json +0 -0
  258. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/explain.jsonl +0 -0
  259. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/golden.jsonl +0 -0
  260. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/recommend.jsonl +0 -0
  261. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/eval/taps.txt +0 -0
  262. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_adapt.py +0 -0
  263. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_bmad.py +0 -0
  264. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_configuration.py +0 -0
  265. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_discovery.py +0 -0
  266. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_hooks.py +0 -0
  267. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_info.py +0 -0
  268. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_intelligence.py +0 -0
  269. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_pkg.py +0 -0
  270. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_quality.py +0 -0
  271. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_taps.py +0 -0
  272. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_cli_team.py +0 -0
  273. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_everyday_loop.py +0 -0
  274. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/functional/test_property_parsers.py +0 -0
  275. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/make_fixture.py +0 -0
  276. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/perf/test_benchmarks.py +0 -0
  277. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/smoke.sh +0 -0
  278. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_agents.py +0 -0
  279. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_ai.py +0 -0
  280. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_catalog.py +0 -0
  281. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_claude_settings.py +0 -0
  282. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_cliparse.py +0 -0
  283. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_command_reference_fresh.py +0 -0
  284. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_config.py +0 -0
  285. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_dense.py +0 -0
  286. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_dense_fallback.py +0 -0
  287. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_docs_pages_linked.py +0 -0
  288. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_embed.py +0 -0
  289. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_errors_and_cli_table.py +0 -0
  290. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_frontmatter.py +0 -0
  291. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_gitleaks_config.py +0 -0
  292. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_gitutil.py +0 -0
  293. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_imperative.py +0 -0
  294. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_import_budget.py +0 -0
  295. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_injectscan.py +0 -0
  296. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_journal.py +0 -0
  297. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_lockfile.py +0 -0
  298. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_logs.py +0 -0
  299. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_mcp.py +0 -0
  300. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_mutation_hardening.py +0 -0
  301. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_nethttp.py +0 -0
  302. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_output.py +0 -0
  303. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_paths.py +0 -0
  304. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_pkg_confusions.py +0 -0
  305. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_pkg_injection.py +0 -0
  306. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_pkg_secrets.py +0 -0
  307. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_policy.py +0 -0
  308. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_rag.py +0 -0
  309. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_registries_fresh.py +0 -0
  310. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_registry.py +0 -0
  311. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_roadmap_fresh.py +0 -0
  312. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_rules.py +0 -0
  313. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_secretscan.py +0 -0
  314. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_serve.py +0 -0
  315. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_spin.py +0 -0
  316. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_stackprobe.py +0 -0
  317. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_staleness.py +0 -0
  318. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_store.py +0 -0
  319. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_token_parity.py +0 -0
  320. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_typosquat.py +0 -0
  321. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_updatediff.py +0 -0
  322. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_util.py +0 -0
  323. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_version.py +0 -0
  324. {boost_skill_cli-1.0.168 → boost_skill_cli-1.0.170}/tests/unit/test_workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.168
3
+ Version: 1.0.170
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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.168'
22
- __version_tuple__ = version_tuple = (1, 0, 168)
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
  })
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.168
3
+ Version: 1.0.170
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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&#x27;s ai.model; pass &#x27;none&#x27; for the framework&#x27;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,7 +2,7 @@
2
2
  id: framework-adapter-langgraph
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: Interop
7
7
  complexity: M
8
8
  impact: Med
@@ -2,15 +2,15 @@
2
2
  id: supply-chain-posture-openssf-scorecard
3
3
  board: code
4
4
  section: health
5
- status: planned
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 planned">Planned</span><span class="cat">Security · Posture</span></div>
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 planned">Planned</span><span class="cat">Interop</span></div>
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 test_registry_lists_both_frameworks(self):
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
- assert "anthropic/claude-x" in src
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")