agentbundle 0.29.8__tar.gz → 0.31.1__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 (541) hide show
  1. agentbundle-0.31.1/MANIFEST.in +16 -0
  2. {agentbundle-0.29.8 → agentbundle-0.31.1}/PKG-INFO +25 -7
  3. {agentbundle-0.29.8 → agentbundle-0.31.1}/README-pypi.md +23 -3
  4. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +24 -5
  5. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/manifest.json +7 -4
  6. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +27 -0
  7. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +42 -0
  8. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +14 -0
  9. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +20 -0
  10. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +67 -0
  11. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +116 -0
  12. agentbundle-0.31.1/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +40 -0
  13. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/install-marker.py +7 -3
  14. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/__init__.py +17 -15
  15. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapter_root_bins.py +146 -30
  16. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/__init__.py +12 -3
  17. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/claude_code.py +5 -6
  18. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/codex.py +8 -7
  19. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/copilot.py +5 -3
  20. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/kiro.py +18 -18
  21. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/kiro_ide.py +5 -13
  22. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/lint_packs.py +25 -16
  23. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/main.py +281 -23
  24. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/phase_order.py +0 -1
  25. agentbundle-0.31.1/agentbundle/build/projection_io.py +226 -0
  26. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/codex_agent_toml.py +1 -2
  27. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/copilot_agent_md.py +0 -1
  28. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/copilot_hooks_json.py +0 -1
  29. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/kiro_ide_hook.py +2 -2
  30. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/recipes/composite-marketplace.toml +1 -1
  31. agentbundle-0.31.1/agentbundle/build/recipes/marketplace.toml +9 -0
  32. agentbundle-0.31.1/agentbundle/build/recipes/per-pack-claude-plugin.toml +9 -0
  33. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/recipes/self-host.toml +1 -1
  34. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/scope_rails.py +1 -2
  35. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/self_host.py +283 -117
  36. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/target_resolver.py +0 -1
  37. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/user_libs.py +209 -26
  38. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/validate.py +36 -29
  39. agentbundle-0.31.1/agentbundle/catalogue_tooling/file_safety.py +63 -0
  40. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/initialise_self_hosted.py +140 -12
  41. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/package.py +51 -20
  42. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/self_host.py +31 -2
  43. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/self_host_windows.py +4 -4
  44. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/skill_spec_lint.py +7 -4
  45. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/cli.py +4 -3
  46. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/install.py +11 -4
  47. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/upgrade.py +9 -6
  48. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/render.py +6 -2
  49. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/version.py +1 -1
  50. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle.egg-info/PKG-INFO +25 -7
  51. agentbundle-0.31.1/agentbundle.egg-info/SOURCES.txt +526 -0
  52. agentbundle-0.31.1/conftest.py +25 -0
  53. {agentbundle-0.29.8 → agentbundle-0.31.1}/pyproject.toml +11 -7
  54. agentbundle-0.31.1/templates/install-marker.py +1166 -0
  55. agentbundle-0.31.1/tests/__init__.py +1 -0
  56. agentbundle-0.31.1/tests/_support.py +192 -0
  57. agentbundle-0.31.1/tests/build_pipeline/fixtures/README.md +40 -0
  58. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +6 -0
  59. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +3 -0
  60. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +2 -0
  61. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +2 -0
  62. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +3 -0
  63. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +7 -0
  64. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +5 -0
  65. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/core/pack.toml +13 -0
  66. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +7 -0
  67. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +5 -0
  68. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +16 -0
  69. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +7 -0
  70. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +5 -0
  71. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +11 -0
  72. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +7 -0
  73. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +5 -0
  74. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +11 -0
  75. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +7 -0
  76. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +5 -0
  77. agentbundle-0.31.1/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +4 -0
  78. agentbundle-0.31.1/tests/build_pipeline/fixtures/recipes/bogus-target.toml +9 -0
  79. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_claude_code.py +2 -2
  80. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_codex.py +26 -50
  81. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_copilot.py +2 -2
  82. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_cursor.py +13 -10
  83. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_gemini.py +11 -87
  84. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_kiro.py +2 -2
  85. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_kiro_alias.py +2 -3
  86. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_kiro_cli.py +2 -2
  87. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_kiro_ide.py +2 -2
  88. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_adapter_root_bins_projection.py +247 -38
  89. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_build_ships_seeds.py +4 -3
  90. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_contract.py +11 -30
  91. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_contract_scope.py +4 -4
  92. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_contract_v07.py +5 -25
  93. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_contract_v08.py +5 -22
  94. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_end_to_end_build.py +23 -10
  95. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_lint_packs.py +7 -9
  96. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_load_pack_hook_wiring_safely.py +2 -3
  97. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_pack_schema.py +6 -6
  98. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_pack_schema_allowed_adapters.py +2 -5
  99. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_pack_schema_install.py +2 -2
  100. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_pipeline.py +34 -11
  101. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_plugin_manifest_schema.py +9 -75
  102. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_projectable_subset.py +2 -2
  103. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_scope_rails.py +6 -8
  104. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_security.py +3 -4
  105. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_self_host_check.py +352 -73
  106. agentbundle-0.31.1/tests/build_pipeline/test_self_host_fixture_guard.py +149 -0
  107. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_shared_libs_projection.py +8 -87
  108. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_shared_prefix_contract.py +3 -20
  109. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_user_libs_projection.py +242 -35
  110. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_validate.py +6 -6
  111. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_writers_emit_lf.py +3 -2
  112. agentbundle-0.31.1/tests/conftest.py +44 -0
  113. agentbundle-0.31.1/tests/fixtures/adapt/.adapt-discovery.toml +5 -0
  114. agentbundle-0.31.1/tests/fixtures/adapt/values.toml +3 -0
  115. agentbundle-0.31.1/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +8 -0
  116. agentbundle-0.31.1/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
  117. agentbundle-0.31.1/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +27 -0
  118. agentbundle-0.31.1/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +9 -0
  119. agentbundle-0.31.1/tests/fixtures/blank_catalogue/packs/_example/README.md +70 -0
  120. agentbundle-0.31.1/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +42 -0
  121. agentbundle-0.31.1/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
  122. agentbundle-0.31.1/tests/fixtures/blank_catalogue/profiles/_example/README.md +24 -0
  123. agentbundle-0.31.1/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +5 -0
  124. agentbundle-0.31.1/tests/fixtures/brownfield/values.toml +3 -0
  125. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/AGENTS.md +5 -0
  126. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +5 -0
  127. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/DESIGN.md +6 -0
  128. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +53 -0
  129. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/docs/CHARTER.md +5 -0
  130. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +5 -0
  131. agentbundle-0.31.1/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +8 -0
  132. agentbundle-0.31.1/tests/fixtures/brownfield-adapt-expected/AGENTS.md +5 -0
  133. agentbundle-0.31.1/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +5 -0
  134. agentbundle-0.31.1/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +12 -0
  135. agentbundle-0.31.1/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +1 -0
  136. agentbundle-0.31.1/tests/fixtures/creds/skills/argv-flag/SKILL.md +23 -0
  137. agentbundle-0.31.1/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +15 -0
  138. agentbundle-0.31.1/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +22 -0
  139. agentbundle-0.31.1/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +28 -0
  140. agentbundle-0.31.1/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +22 -0
  141. agentbundle-0.31.1/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +23 -0
  142. agentbundle-0.31.1/tests/fixtures/creds/skills/conforming/SKILL.md +23 -0
  143. agentbundle-0.31.1/tests/fixtures/creds/skills/conforming/scripts/cli.py +15 -0
  144. agentbundle-0.31.1/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +22 -0
  145. agentbundle-0.31.1/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +12 -0
  146. agentbundle-0.31.1/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +25 -0
  147. agentbundle-0.31.1/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +13 -0
  148. agentbundle-0.31.1/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +26 -0
  149. agentbundle-0.31.1/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +17 -0
  150. agentbundle-0.31.1/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +10 -0
  151. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +6 -0
  152. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +3 -0
  153. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +2 -0
  154. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +3 -0
  155. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +7 -0
  156. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +5 -0
  157. agentbundle-0.31.1/tests/fixtures/install/catalogue/packs/alpha/pack.toml +13 -0
  158. agentbundle-0.31.1/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +13 -0
  159. agentbundle-0.31.1/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +13 -0
  160. agentbundle-0.31.1/tests/fixtures/lint_packs/clean/pack.toml +11 -0
  161. agentbundle-0.31.1/tests/fixtures/lint_packs/clean/seeds/README.md +3 -0
  162. agentbundle-0.31.1/tests/fixtures/list-installed/golden_120col.txt +5 -0
  163. agentbundle-0.31.1/tests/fixtures/list-installed/golden_80col.txt +5 -0
  164. agentbundle-0.31.1/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +5 -0
  165. agentbundle-0.31.1/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +10 -0
  166. agentbundle-0.31.1/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +3 -0
  167. agentbundle-0.31.1/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +5 -0
  168. agentbundle-0.31.1/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +8 -0
  169. agentbundle-0.31.1/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +2 -0
  170. agentbundle-0.31.1/tests/fixtures/packs/cc-user-hooks/pack.toml +18 -0
  171. agentbundle-0.31.1/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +8 -0
  172. agentbundle-0.31.1/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +5 -0
  173. agentbundle-0.31.1/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +2 -0
  174. agentbundle-0.31.1/tests/fixtures/packs/kiro-repo-hooks/pack.toml +20 -0
  175. agentbundle-0.31.1/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +8 -0
  176. agentbundle-0.31.1/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +5 -0
  177. agentbundle-0.31.1/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +2 -0
  178. agentbundle-0.31.1/tests/fixtures/packs/kiro-user-hooks/pack.toml +21 -0
  179. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +5 -0
  180. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +5 -0
  181. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +2 -0
  182. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +14 -0
  183. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +5 -0
  184. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +7 -0
  185. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +2 -0
  186. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +16 -0
  187. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +5 -0
  188. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +7 -0
  189. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +2 -0
  190. agentbundle-0.31.1/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +13 -0
  191. agentbundle-0.31.1/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +1 -0
  192. agentbundle-0.31.1/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +1 -0
  193. agentbundle-0.31.1/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +1 -0
  194. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +6 -0
  195. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +3 -0
  196. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +10 -0
  197. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +3 -0
  198. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +3 -0
  199. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +3 -0
  200. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +5 -0
  201. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +13 -0
  202. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +6 -0
  203. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +3 -0
  204. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +10 -0
  205. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +3 -0
  206. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +3 -0
  207. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +3 -0
  208. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +5 -0
  209. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +13 -0
  210. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +6 -0
  211. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +3 -0
  212. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +10 -0
  213. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +3 -0
  214. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +3 -0
  215. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +3 -0
  216. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +5 -0
  217. agentbundle-0.31.1/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +13 -0
  218. agentbundle-0.31.1/tests/fixtures/validate/bad_recipe_pack/pack.toml +5 -0
  219. agentbundle-0.31.1/tests/fixtures/validate/malformed_pack/pack.toml +1 -0
  220. agentbundle-0.31.1/tests/fixtures/validate/valid_pack/pack.toml +4 -0
  221. agentbundle-0.31.1/tests/fixtures/validate/version_mismatch_pack/pack.toml +7 -0
  222. agentbundle-0.31.1/tests/integration/__init__.py +0 -0
  223. agentbundle-0.31.1/tests/integration/test_adapt_cmd.py +317 -0
  224. agentbundle-0.31.1/tests/integration/test_adapt_dual_scope.py +247 -0
  225. agentbundle-0.31.1/tests/integration/test_adapt_preflight_detection.py +217 -0
  226. agentbundle-0.31.1/tests/integration/test_adapt_schema_migration.py +125 -0
  227. agentbundle-0.31.1/tests/integration/test_apm_install_route.py +788 -0
  228. agentbundle-0.31.1/tests/integration/test_blank_catalogue.py +58 -0
  229. agentbundle-0.31.1/tests/integration/test_brownfield_adapt_end_to_end.py +205 -0
  230. agentbundle-0.31.1/tests/integration/test_brownfield_round_trip.py +133 -0
  231. agentbundle-0.31.1/tests/integration/test_brownfield_user_home_fixture.py +44 -0
  232. agentbundle-0.31.1/tests/integration/test_build_check_drift_gates.py +523 -0
  233. agentbundle-0.31.1/tests/integration/test_build_derivation_apm.py +181 -0
  234. agentbundle-0.31.1/tests/integration/test_build_derivation_claude_plugins.py +576 -0
  235. agentbundle-0.31.1/tests/integration/test_catalogue_init.py +465 -0
  236. agentbundle-0.31.1/tests/integration/test_cc_user_hooks_fixture.py +107 -0
  237. agentbundle-0.31.1/tests/integration/test_claude_plugins_install_route.py +1791 -0
  238. agentbundle-0.31.1/tests/integration/test_config_cascade.py +174 -0
  239. agentbundle-0.31.1/tests/integration/test_credential_brokers_pack_install.py +205 -0
  240. agentbundle-0.31.1/tests/integration/test_credentials_wheel.py +75 -0
  241. agentbundle-0.31.1/tests/integration/test_discovery_schema_cross_consumer.py +116 -0
  242. agentbundle-0.31.1/tests/integration/test_editable_source_detection.py +113 -0
  243. agentbundle-0.31.1/tests/integration/test_fixtures_validate.py +226 -0
  244. agentbundle-0.31.1/tests/integration/test_install_adapt_chain.py +442 -0
  245. agentbundle-0.31.1/tests/integration/test_install_cmd.py +691 -0
  246. agentbundle-0.31.1/tests/integration/test_install_converters_user_scope.py +190 -0
  247. agentbundle-0.31.1/tests/integration/test_install_copilot_full_parity.py +278 -0
  248. agentbundle-0.31.1/tests/integration/test_install_core_smoke.py +89 -0
  249. agentbundle-0.31.1/tests/integration/test_install_default_source.py +187 -0
  250. agentbundle-0.31.1/tests/integration/test_install_dependencies_gate.py +321 -0
  251. agentbundle-0.31.1/tests/integration/test_install_dropped_primitives_warning.py +550 -0
  252. agentbundle-0.31.1/tests/integration/test_install_dual_scope.py +440 -0
  253. agentbundle-0.31.1/tests/integration/test_install_orphan_reshape.py +135 -0
  254. agentbundle-0.31.1/tests/integration/test_install_pack_metadata_shape.py +278 -0
  255. agentbundle-0.31.1/tests/integration/test_install_profile.py +408 -0
  256. agentbundle-0.31.1/tests/integration/test_install_profile_live.py +103 -0
  257. agentbundle-0.31.1/tests/integration/test_install_repo_scope_per_adapter.py +730 -0
  258. agentbundle-0.31.1/tests/integration/test_install_research_user_scope.py +200 -0
  259. agentbundle-0.31.1/tests/integration/test_install_seed_delivery.py +222 -0
  260. agentbundle-0.31.1/tests/integration/test_install_session_start_wiring.py +139 -0
  261. agentbundle-0.31.1/tests/integration/test_install_upgrade_offer.py +243 -0
  262. agentbundle-0.31.1/tests/integration/test_install_user_hooks.py +411 -0
  263. agentbundle-0.31.1/tests/integration/test_install_user_scope_allowed_adapters.py +225 -0
  264. agentbundle-0.31.1/tests/integration/test_kiro_ide_hook_e2e.py +204 -0
  265. agentbundle-0.31.1/tests/integration/test_kiro_repo_hooks_fixture.py +93 -0
  266. agentbundle-0.31.1/tests/integration/test_kiro_user_hooks_fixture.py +155 -0
  267. agentbundle-0.31.1/tests/integration/test_list_packs_cmd.py +148 -0
  268. agentbundle-0.31.1/tests/integration/test_local_scope_install.py +377 -0
  269. agentbundle-0.31.1/tests/integration/test_marketplace_entry_validation.py +390 -0
  270. agentbundle-0.31.1/tests/integration/test_marketplace_manifest_regression.py +303 -0
  271. agentbundle-0.31.1/tests/integration/test_multi_pack_install.py +805 -0
  272. agentbundle-0.31.1/tests/integration/test_orphan_cleanup_respects_foreign_state.py +273 -0
  273. agentbundle-0.31.1/tests/integration/test_plugin_route_membership.py +613 -0
  274. agentbundle-0.31.1/tests/integration/test_recommends_cross_scope.py +228 -0
  275. agentbundle-0.31.1/tests/integration/test_reconcile.py +230 -0
  276. agentbundle-0.31.1/tests/integration/test_reserved_path_filter.py +236 -0
  277. agentbundle-0.31.1/tests/integration/test_scaffold_projection.py +147 -0
  278. agentbundle-0.31.1/tests/integration/test_self_host_schema_migration.py +138 -0
  279. agentbundle-0.31.1/tests/integration/test_self_host_sweep_respects_state.py +312 -0
  280. agentbundle-0.31.1/tests/integration/test_shared_prefix_coexistence.py +235 -0
  281. agentbundle-0.31.1/tests/integration/test_show_cmd.py +515 -0
  282. agentbundle-0.31.1/tests/integration/test_tier_invariants.py +335 -0
  283. agentbundle-0.31.1/tests/integration/test_uninstall_cmd.py +381 -0
  284. agentbundle-0.31.1/tests/integration/test_uninstall_user_hooks.py +327 -0
  285. agentbundle-0.31.1/tests/integration/test_upgrade_attach_to_agent.py +140 -0
  286. agentbundle-0.31.1/tests/integration/test_upgrade_cmd.py +1087 -0
  287. agentbundle-0.31.1/tests/integration/test_upgrade_user_hooks.py +307 -0
  288. agentbundle-0.31.1/tests/integration/test_version_gate_matrix.py +163 -0
  289. agentbundle-0.31.1/tests/integration/test_workspace_mcp_git_fsm.py +156 -0
  290. agentbundle-0.31.1/tests/integration/test_zipapp.py +92 -0
  291. agentbundle-0.31.1/tests/unit/__init__.py +0 -0
  292. agentbundle-0.31.1/tests/unit/test_adapt_discovery_schema.py +292 -0
  293. agentbundle-0.31.1/tests/unit/test_append_layout_section.py +238 -0
  294. agentbundle-0.31.1/tests/unit/test_architect_readme_install_command.py +26 -0
  295. agentbundle-0.31.1/tests/unit/test_catalogue_ci_contract.py +244 -0
  296. agentbundle-0.31.1/tests/unit/test_catalogue_curation_deps.py +62 -0
  297. agentbundle-0.31.1/tests/unit/test_catalogue_init_cli_self_hosted.py +206 -0
  298. agentbundle-0.31.1/tests/unit/test_catalogue_pack_defaults.py +596 -0
  299. agentbundle-0.31.1/tests/unit/test_catalogue_self_hosted_export_removal.py +27 -0
  300. agentbundle-0.31.1/tests/unit/test_catalogue_skill_spec_lint.py +913 -0
  301. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_archive.py +296 -0
  302. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_build.py +98 -0
  303. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_defaults.py +267 -0
  304. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_foundation.py +584 -0
  305. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_identity.py +151 -0
  306. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_init.py +783 -0
  307. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_lint.py +1146 -0
  308. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_package.py +958 -0
  309. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_self_host.py +314 -0
  310. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_self_hosted_init.py +1069 -0
  311. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_source_package.py +386 -0
  312. agentbundle-0.31.1/tests/unit/test_catalogue_tooling_verify.py +461 -0
  313. agentbundle-0.31.1/tests/unit/test_catalogue_wave2_schema.py +171 -0
  314. agentbundle-0.31.1/tests/unit/test_catalogue_wave2_validation.py +272 -0
  315. agentbundle-0.31.1/tests/unit/test_cli_catalogue_optional.py +38 -0
  316. agentbundle-0.31.1/tests/unit/test_cli_help_lists_config.py +45 -0
  317. agentbundle-0.31.1/tests/unit/test_cli_path_normalisation.py +161 -0
  318. agentbundle-0.31.1/tests/unit/test_cli_profile_surface.py +87 -0
  319. agentbundle-0.31.1/tests/unit/test_cli_scope_flags.py +193 -0
  320. agentbundle-0.31.1/tests/unit/test_codex_agent_toml.py +350 -0
  321. agentbundle-0.31.1/tests/unit/test_codex_projection_modes.py +193 -0
  322. agentbundle-0.31.1/tests/unit/test_common_classify_seeds.py +164 -0
  323. agentbundle-0.31.1/tests/unit/test_config.py +187 -0
  324. agentbundle-0.31.1/tests/unit/test_config_cmd.py +136 -0
  325. agentbundle-0.31.1/tests/unit/test_configured_adapter.py +35 -0
  326. agentbundle-0.31.1/tests/unit/test_confirm_helper.py +67 -0
  327. agentbundle-0.31.1/tests/unit/test_contract_parity.py +30 -0
  328. agentbundle-0.31.1/tests/unit/test_contract_v0_3_schema.py +598 -0
  329. agentbundle-0.31.1/tests/unit/test_copilot_agent_md.py +182 -0
  330. agentbundle-0.31.1/tests/unit/test_copilot_hooks_json.py +147 -0
  331. agentbundle-0.31.1/tests/unit/test_copilot_user_scope_wiring.py +151 -0
  332. agentbundle-0.31.1/tests/unit/test_credbroker_lint_hardening.py +167 -0
  333. agentbundle-0.31.1/tests/unit/test_dependencies_batch.py +117 -0
  334. agentbundle-0.31.1/tests/unit/test_diff_cmd.py +115 -0
  335. agentbundle-0.31.1/tests/unit/test_footprint_ownership.py +114 -0
  336. agentbundle-0.31.1/tests/unit/test_https_catalogue.py +1080 -0
  337. agentbundle-0.31.1/tests/unit/test_init_state_cmd.py +176 -0
  338. agentbundle-0.31.1/tests/unit/test_install_argparse_adapter_flag.py +82 -0
  339. agentbundle-0.31.1/tests/unit/test_install_argparse_emit_install_routes.py +263 -0
  340. agentbundle-0.31.1/tests/unit/test_install_defaults_preferred_adapter.py +343 -0
  341. agentbundle-0.31.1/tests/unit/test_install_dropped_primitives_warning.py +782 -0
  342. agentbundle-0.31.1/tests/unit/test_install_event_dropped_wirings.py +467 -0
  343. agentbundle-0.31.1/tests/unit/test_install_first_value_handoff.py +387 -0
  344. agentbundle-0.31.1/tests/unit/test_install_force_help.py +33 -0
  345. agentbundle-0.31.1/tests/unit/test_install_inband_detection.py +580 -0
  346. agentbundle-0.31.1/tests/unit/test_install_messages.py +136 -0
  347. agentbundle-0.31.1/tests/unit/test_install_messages_repo_scope.py +289 -0
  348. agentbundle-0.31.1/tests/unit/test_install_refusal_ordering.py +211 -0
  349. agentbundle-0.31.1/tests/unit/test_install_state_provenance.py +215 -0
  350. agentbundle-0.31.1/tests/unit/test_kiro_ide_hook_projection.py +389 -0
  351. agentbundle-0.31.1/tests/unit/test_kiro_ide_hook_rail.py +335 -0
  352. agentbundle-0.31.1/tests/unit/test_kiro_ide_hook_schema.py +125 -0
  353. agentbundle-0.31.1/tests/unit/test_lint_agent_artifacts_metadata_auth.py +166 -0
  354. agentbundle-0.31.1/tests/unit/test_list_installed_cmd.py +349 -0
  355. agentbundle-0.31.1/tests/unit/test_list_installed_status.py +1197 -0
  356. agentbundle-0.31.1/tests/unit/test_list_targets_cmd.py +120 -0
  357. agentbundle-0.31.1/tests/unit/test_local_scope_schema.py +83 -0
  358. agentbundle-0.31.1/tests/unit/test_local_scope_t10_uninstall.py +353 -0
  359. agentbundle-0.31.1/tests/unit/test_local_scope_t12_show.py +71 -0
  360. agentbundle-0.31.1/tests/unit/test_local_scope_t2_resolve.py +64 -0
  361. agentbundle-0.31.1/tests/unit/test_local_scope_t3_config.py +37 -0
  362. agentbundle-0.31.1/tests/unit/test_local_scope_t4_state_path.py +28 -0
  363. agentbundle-0.31.1/tests/unit/test_local_scope_t5_list_installed.py +131 -0
  364. agentbundle-0.31.1/tests/unit/test_local_scope_t7_install_gates.py +229 -0
  365. agentbundle-0.31.1/tests/unit/test_local_scope_t8_install.py +401 -0
  366. agentbundle-0.31.1/tests/unit/test_local_scope_t9_exclude.py +253 -0
  367. agentbundle-0.31.1/tests/unit/test_marker_schema_version_parity.py +51 -0
  368. agentbundle-0.31.1/tests/unit/test_merge_into_agent_json.py +347 -0
  369. agentbundle-0.31.1/tests/unit/test_multi_adapter_disambiguator.py +83 -0
  370. agentbundle-0.31.1/tests/unit/test_nested_symlink_hardening.py +154 -0
  371. agentbundle-0.31.1/tests/unit/test_org_bootstrap.py +746 -0
  372. agentbundle-0.31.1/tests/unit/test_pack_config_api.py +469 -0
  373. agentbundle-0.31.1/tests/unit/test_pack_inventory.py +122 -0
  374. agentbundle-0.31.1/tests/unit/test_package_catalogue.py +1190 -0
  375. agentbundle-0.31.1/tests/unit/test_packstate_source_provenance.py +245 -0
  376. agentbundle-0.31.1/tests/unit/test_pipeline_phase_order.py +264 -0
  377. agentbundle-0.31.1/tests/unit/test_plugin_scope_filter.py +179 -0
  378. agentbundle-0.31.1/tests/unit/test_profile_reader.py +172 -0
  379. agentbundle-0.31.1/tests/unit/test_render.py +49 -0
  380. agentbundle-0.31.1/tests/unit/test_render_cmd.py +238 -0
  381. agentbundle-0.31.1/tests/unit/test_render_table.py +162 -0
  382. agentbundle-0.31.1/tests/unit/test_resolve_state_path.py +19 -0
  383. agentbundle-0.31.1/tests/unit/test_resolve_target_adapter_user_config.py +279 -0
  384. agentbundle-0.31.1/tests/unit/test_resolve_user_scope_target_adapter.py +690 -0
  385. agentbundle-0.31.1/tests/unit/test_safety.py +287 -0
  386. agentbundle-0.31.1/tests/unit/test_safety_repo_scope_prefixes.py +211 -0
  387. agentbundle-0.31.1/tests/unit/test_safety_scan_per_pack_scoping.py +473 -0
  388. agentbundle-0.31.1/tests/unit/test_scaffold_cmd.py +300 -0
  389. agentbundle-0.31.1/tests/unit/test_scope.py +186 -0
  390. agentbundle-0.31.1/tests/unit/test_self_host_windows.py +189 -0
  391. agentbundle-0.31.1/tests/unit/test_shared_prefix_disclosure.py +62 -0
  392. agentbundle-0.31.1/tests/unit/test_source_conflict_guard.py +585 -0
  393. agentbundle-0.31.1/tests/unit/test_source_defaults.py +572 -0
  394. agentbundle-0.31.1/tests/unit/test_state_v01_refuse_write.py +177 -0
  395. agentbundle-0.31.1/tests/unit/test_state_v02.py +158 -0
  396. agentbundle-0.31.1/tests/unit/test_state_v0_4_schema.py +227 -0
  397. agentbundle-0.31.1/tests/unit/test_statelock.py +111 -0
  398. agentbundle-0.31.1/tests/unit/test_target_resolver.py +181 -0
  399. agentbundle-0.31.1/tests/unit/test_toml_emitters.py +417 -0
  400. agentbundle-0.31.1/tests/unit/test_unresolved_markers.py +40 -0
  401. agentbundle-0.31.1/tests/unit/test_upgrade_bulk_all.py +1137 -0
  402. agentbundle-0.31.1/tests/unit/test_upgrade_recap.py +52 -0
  403. agentbundle-0.31.1/tests/unit/test_upgrade_source_inference.py +165 -0
  404. agentbundle-0.31.1/tests/unit/test_user_config_io.py +202 -0
  405. agentbundle-0.31.1/tests/unit/test_user_config_isolation.py +29 -0
  406. agentbundle-0.31.1/tests/unit/test_user_config_path.py +47 -0
  407. agentbundle-0.31.1/tests/unit/test_user_config_source.py +84 -0
  408. agentbundle-0.31.1/tests/unit/test_user_merge_json.py +420 -0
  409. agentbundle-0.31.1/tests/unit/test_validate_attach_to_agent.py +302 -0
  410. agentbundle-0.31.1/tests/unit/test_validate_categories.py +92 -0
  411. agentbundle-0.31.1/tests/unit/test_validate_cmd.py +329 -0
  412. agentbundle-0.31.1/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +422 -0
  413. agentbundle-0.31.1/tests/unit/test_values_from_shapes.py +68 -0
  414. agentbundle-0.31.1/tests/unit/test_version.py +129 -0
  415. agentbundle-0.29.8/agentbundle/build/recipes/marketplace.toml +0 -8
  416. agentbundle-0.29.8/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -7
  417. agentbundle-0.29.8/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -88
  418. agentbundle-0.29.8/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -74
  419. agentbundle-0.29.8/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -95
  420. agentbundle-0.29.8/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -136
  421. agentbundle-0.29.8/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -119
  422. agentbundle-0.29.8/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -88
  423. agentbundle-0.29.8/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -109
  424. agentbundle-0.29.8/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -92
  425. agentbundle-0.29.8/agentbundle/build/tests/test_workspace_status_projection.py +0 -273
  426. agentbundle-0.29.8/agentbundle.egg-info/SOURCES.txt +0 -196
  427. agentbundle-0.29.8/tests/test_linear_primitive.py +0 -133
  428. {agentbundle-0.29.8 → agentbundle-0.31.1}/README.md +0 -0
  429. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/__init__.py +0 -0
  430. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/__main__.py +0 -0
  431. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/adapter.schema.json +0 -0
  432. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/adapter.toml +0 -0
  433. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  434. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
  435. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
  436. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  437. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  438. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  439. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  440. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  441. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/catalogue.schema.json +0 -0
  442. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/guide.schema.json +0 -0
  443. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/install-defaults.toml +0 -0
  444. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/marketplace-entry.schema.json +0 -0
  445. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/pack.schema.json +0 -0
  446. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  447. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  448. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/profile.schema.json +0 -0
  449. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/skill-manifest.schema.json +0 -0
  450. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/skill.schema.json +0 -0
  451. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/_data/target-vocab.toml +0 -0
  452. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/__main__.py +0 -0
  453. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/cursor.py +0 -0
  454. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/gemini.py +0 -0
  455. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/adapters/kiro_cli.py +0 -0
  456. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/contract.py +0 -0
  457. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/__init__.py +0 -0
  458. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/direct_directory.py +0 -0
  459. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  460. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/hook_id.py +0 -0
  461. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  462. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/merge_json.py +0 -0
  463. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/projections/user_merge_json.py +0 -0
  464. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  465. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  466. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  467. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/build/shared_libs.py +0 -0
  468. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue.py +0 -0
  469. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/__init__.py +0 -0
  470. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/archive.py +0 -0
  471. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/build.py +0 -0
  472. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/config.py +0 -0
  473. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/defaults.py +0 -0
  474. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  475. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/identity.py +0 -0
  476. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/initialise.py +0 -0
  477. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/lint.py +0 -0
  478. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/results.py +0 -0
  479. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  480. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/catalogue_tooling/verify.py +0 -0
  481. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/categories.py +0 -0
  482. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/__init__.py +0 -0
  483. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/_common.py +0 -0
  484. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/_drop_warning.py +0 -0
  485. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/adapt.py +0 -0
  486. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_build.py +0 -0
  487. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_init.py +0 -0
  488. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_lint.py +0 -0
  489. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_package.py +0 -0
  490. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_self_host.py +0 -0
  491. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  492. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  493. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/catalogue_verify.py +0 -0
  494. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/config.py +0 -0
  495. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/diff.py +0 -0
  496. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/docs.py +0 -0
  497. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/init_state.py +0 -0
  498. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/list_installed.py +0 -0
  499. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/list_packs.py +0 -0
  500. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/list_profiles.py +0 -0
  501. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/list_targets.py +0 -0
  502. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/oplog_cmd.py +0 -0
  503. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/pack_config_cmd.py +0 -0
  504. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/pack_evals.py +0 -0
  505. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/package_catalogue.py +0 -0
  506. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/profile.py +0 -0
  507. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/reconcile.py +0 -0
  508. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/render.py +0 -0
  509. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/scaffold.py +0 -0
  510. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/show.py +0 -0
  511. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/uninstall.py +0 -0
  512. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/commands/validate.py +0 -0
  513. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/config.py +0 -0
  514. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/https_catalogue.py +0 -0
  515. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/local_exclude.py +0 -0
  516. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/oplog.py +0 -0
  517. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/pack_inventory.py +0 -0
  518. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/safety.py +0 -0
  519. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/scaffold.py +0 -0
  520. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/scope.py +0 -0
  521. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/source_defaults.py +0 -0
  522. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/statelock.py +0 -0
  523. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/user_config.py +0 -0
  524. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle/workspace_mcp.py +0 -0
  525. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle.egg-info/dependency_links.txt +0 -0
  526. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle.egg-info/entry_points.txt +0 -0
  527. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle.egg-info/requires.txt +0 -0
  528. {agentbundle-0.29.8 → agentbundle-0.31.1}/agentbundle.egg-info/top_level.txt +0 -0
  529. {agentbundle-0.29.8 → agentbundle-0.31.1}/setup.cfg +0 -0
  530. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/__init__.py +0 -0
  531. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_direct_directory_cleanup.py +0 -0
  532. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_projections_merge_json.py +0 -0
  533. {agentbundle-0.29.8/agentbundle/build/tests → agentbundle-0.31.1/tests/build_pipeline}/test_self_host_recipe_config.py +2 -2
  534. {agentbundle-0.29.8/agentbundle/_data/catalogue-scaffold → agentbundle-0.31.1/tests/fixtures/blank_catalogue}/packs/_example/pack.toml +0 -0
  535. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_adapter_permissions_projection.py +0 -0
  536. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_workspace_mcp_elicit.py +0 -0
  537. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_workspace_mcp_event_bridge.py +0 -0
  538. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_workspace_mcp_git.py +0 -0
  539. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_workspace_mcp_lifecycle.py +0 -0
  540. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_workspace_mcp_stdin.py +0 -0
  541. {agentbundle-0.29.8 → agentbundle-0.31.1}/tests/test_workspace_mcp_tools.py +0 -0
@@ -0,0 +1,16 @@
1
+ graft tests
2
+ include conftest.py
3
+ graft templates
4
+ recursive-include agentbundle/_data/catalogue-scaffold/packs/_example/.apm *
5
+ recursive-include agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin *
6
+ prune tests/live-catalogue
7
+ prune tests/.pytest_cache
8
+ prune tests/.mypy_cache
9
+ prune tests/.ruff_cache
10
+ prune tests/.hypothesis
11
+ prune tests/htmlcov
12
+ global-exclude *.py[cod]
13
+ global-exclude .DS_Store
14
+ global-exclude .coverage
15
+ global-exclude .coverage.*
16
+ global-exclude coverage.xml
@@ -1,17 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.29.8
3
+ Version: 0.31.1
4
4
  Summary: npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent.
5
5
  Author-email: eugenelim <eugenelim@users.noreply.github.com>
6
- License: Apache-2.0 OR MIT
6
+ License-Expression: Apache-2.0 OR MIT
7
7
  Project-URL: Homepage, https://github.com/eugenelim/agent-ready-repo
8
8
  Project-URL: Source, https://github.com/eugenelim/agent-ready-repo
9
9
  Project-URL: Documentation, https://eugenelim.github.io/agent-ready-repo/docs/
10
10
  Project-URL: Catalogue Format, https://eugenelim.github.io/agent-ready-repo/docs/reference/catalogue-format
11
11
  Project-URL: Changelog, https://eugenelim.github.io/agent-ready-repo/docs/changelog
12
12
  Classifier: Development Status :: 4 - Beta
13
- Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: License :: OSI Approved :: MIT License
15
13
  Classifier: Operating System :: OS Independent
16
14
  Classifier: Programming Language :: Python :: 3.11
17
15
  Classifier: Programming Language :: Python :: 3.12
@@ -269,7 +267,10 @@ ignore them there; the separation is structural, not incidental.
269
267
  `keywords` once; the build projects the cleanly-mappable subset — plus the
270
268
  pack's `README.md` — into each distribution route's manifest (the `plugin.json`
271
269
  / `marketplace.json` entry), so the catalogue describes each pack richly rather
272
- than with a single sentence. A marketplace entry's `source` is a `git-subdir`
270
+ than with a single sentence. The Claude-plugin route carries only packs whose
271
+ `[pack.install] allowed-scopes` admits `user`: a plugin's code lands in the
272
+ adopter's global cache, so a repo-only pack gets no `marketplace.json` entry
273
+ and is reached with `agentbundle install` instead. A marketplace entry's `source` is a `git-subdir`
273
274
  object (`url`, `path`, and one of `ref`/`sha`) pointing at the pack's directory
274
275
  on the published distribution branch, and every entry is schema-validated at
275
276
  build time against `marketplace-entry.schema.json`. Extra fields stay in `pack.toml`; the projection
@@ -305,13 +306,30 @@ pip install 'agentbundle[lint]'
305
306
  agentbundle catalogue lint --root . --deep
306
307
  ```
307
308
 
308
- **Check self-host projection drift** — verifies that adapter-projected files (skills, agents, hooks) match their `.apm/` sources without writing anything:
309
+ **Verify a catalogue before you ship it** — runs the full read-only contract and
310
+ self-host checks in one command:
311
+
312
+ ```bash
313
+ agentbundle catalogue verify --root .
314
+ ```
315
+
316
+ For a self-host-enabled catalogue with `.adapt-discovery.toml`, that includes the
317
+ self-host classifier. It treats generated targets as projected and known
318
+ repository-owned paths as excluded from projection. A genuinely unknown Git-visible
319
+ path remains an informational `unclassified` notice; it does not fail an otherwise
320
+ clean catalogue. Missing, modified, or orphaned projections do fail verification,
321
+ including generated executables under `.agentbundle/bin/` and vendored user libraries
322
+ under `.agentbundle/lib/`. Git filenames are read losslessly, and a failed Git listing
323
+ is reported as a warning rather than mistaken for a fully classified inventory.
324
+
325
+ To check only self-host projection drift, or to regenerate projected files locally:
309
326
 
310
327
  ```bash
311
328
  agentbundle catalogue self-host --check --root .
329
+ agentbundle catalogue self-host --write --root .
312
330
  ```
313
331
 
314
- Exits non-zero if any projected file is out of date. Safe to run in CI as a required check; use `--write` locally to regenerate.
332
+ Both check commands are safe to run in CI. The write command changes projected files.
315
333
 
316
334
  By default projects for `claude-code` and `codex`. Downstream repos that use a single adapter (e.g. `kiro-ide`) can declare it in `catalogue.toml` — only that adapter is then projected, and its output files participate in the drift check:
317
335
 
@@ -247,7 +247,10 @@ ignore them there; the separation is structural, not incidental.
247
247
  `keywords` once; the build projects the cleanly-mappable subset — plus the
248
248
  pack's `README.md` — into each distribution route's manifest (the `plugin.json`
249
249
  / `marketplace.json` entry), so the catalogue describes each pack richly rather
250
- than with a single sentence. A marketplace entry's `source` is a `git-subdir`
250
+ than with a single sentence. The Claude-plugin route carries only packs whose
251
+ `[pack.install] allowed-scopes` admits `user`: a plugin's code lands in the
252
+ adopter's global cache, so a repo-only pack gets no `marketplace.json` entry
253
+ and is reached with `agentbundle install` instead. A marketplace entry's `source` is a `git-subdir`
251
254
  object (`url`, `path`, and one of `ref`/`sha`) pointing at the pack's directory
252
255
  on the published distribution branch, and every entry is schema-validated at
253
256
  build time against `marketplace-entry.schema.json`. Extra fields stay in `pack.toml`; the projection
@@ -283,13 +286,30 @@ pip install 'agentbundle[lint]'
283
286
  agentbundle catalogue lint --root . --deep
284
287
  ```
285
288
 
286
- **Check self-host projection drift** — verifies that adapter-projected files (skills, agents, hooks) match their `.apm/` sources without writing anything:
289
+ **Verify a catalogue before you ship it** — runs the full read-only contract and
290
+ self-host checks in one command:
291
+
292
+ ```bash
293
+ agentbundle catalogue verify --root .
294
+ ```
295
+
296
+ For a self-host-enabled catalogue with `.adapt-discovery.toml`, that includes the
297
+ self-host classifier. It treats generated targets as projected and known
298
+ repository-owned paths as excluded from projection. A genuinely unknown Git-visible
299
+ path remains an informational `unclassified` notice; it does not fail an otherwise
300
+ clean catalogue. Missing, modified, or orphaned projections do fail verification,
301
+ including generated executables under `.agentbundle/bin/` and vendored user libraries
302
+ under `.agentbundle/lib/`. Git filenames are read losslessly, and a failed Git listing
303
+ is reported as a warning rather than mistaken for a fully classified inventory.
304
+
305
+ To check only self-host projection drift, or to regenerate projected files locally:
287
306
 
288
307
  ```bash
289
308
  agentbundle catalogue self-host --check --root .
309
+ agentbundle catalogue self-host --write --root .
290
310
  ```
291
311
 
292
- Exits non-zero if any projected file is out of date. Safe to run in CI as a required check; use `--write` locally to regenerate.
312
+ Both check commands are safe to run in CI. The write command changes projected files.
293
313
 
294
314
  By default projects for `claude-code` and `codex`. Downstream repos that use a single adapter (e.g. `kiro-ide`) can declare it in `catalogue.toml` — only that adapter is then projected, and its output files participate in the drift check:
295
315
 
@@ -46,12 +46,31 @@ model reads to decide whether to **activate** the primitive. Length is load-bear
46
46
  there and shortening it degrades activation; per-target caps in
47
47
  `contracts/target-vocab.toml` govern it. Do not carry habits from one to the other.
48
48
 
49
- **Shape.** First sentence names the job the adopter accomplishes — verb-first, and
50
- readable on its own. An optional second sentence carries a compressed capability list
51
- or the one thing that distinguishes this pack. Then stop.
49
+ **Shape.** Open on the job the adopter accomplishes, in their words. Say what they
50
+ get. Then stop.
52
51
 
53
- > Supervised coding from brief to merged PR. A plan, execute, verify, review loop with
54
- > spec-driven development, adversarial and security reviewers, and pre-commit gates.
52
+ Beyond that, let the pack decide the shape. Some need one sentence:
53
+
54
+ > Write the OpenAPI or AsyncAPI contract before anyone writes a handler.
55
+
56
+ Others earn three:
57
+
58
+ > Ship it the way production will see it. Deploy to a throwaway environment, run
59
+ > the tests, read the telemetry, and go round again until it holds. Then it stops
60
+ > and asks, because the next step is the one you cannot undo.
61
+
62
+ **Do not run every description through one mould.** An earlier pass here applied a
63
+ single shape — verb-first sentence, then a comma-list of capabilities — to all
64
+ 22 packs. The result measured as 20 of 22 at exactly two sentences, 14 with a
65
+ comma-list second sentence, four opening on the identical "Turn X into Y" frame.
66
+ Every fact was right and the set still read as machine-written, because uniform
67
+ rhythm and symmetrical construction are themselves the tell. Vary sentence count
68
+ and length to match what each pack actually is.
69
+
70
+ Reach for the concrete. A real thing the user says (`"convert this PDF to
71
+ Markdown"`), a real artifact (`a Google-style design doc`), or a real check
72
+ (`the empty state and the focus ring you forgot`) all beat an abstract capability
73
+ noun.
55
74
 
56
75
  **Anti-patterns**, each of which has shipped here before:
57
76
 
@@ -1,18 +1,21 @@
1
1
  {
2
2
  "files": {
3
- "guides/_shared/reference/catalogue-authoring-standards.md": "f5e41498139ca335b8a679644eb02d2a35abb2234a77b5b14e7ff90da02722b9",
3
+ "guides/_shared/reference/catalogue-authoring-standards.md": "ff4bdc203affda0a2f41641c1155b3f4e90aade022e122999a82e7093e94d2ee",
4
4
  "guides/_shared/reference/catalogue-ci-contract.md": "fae793ab47989b6dd3c731afcb0b4cda21c7d08bbe7fa40fca6d3abb3d158141",
5
5
  "packs/AGENTS.md": "9bfeda4069826e518a4f4fdae45bd40f4393c1c5aaf146149d3eb4aece30be83",
6
6
  "packs/README.md": "d2de5f9556f4c8e521103474bde74636e02cc805f9bf5312a3a61a1f3eb45d8f",
7
7
  "packs/_example/.apm/skills/example-skill/SKILL.md": "33be8cbf4b2c014a5a63e788b7d0b350ad8061c6c4b2579369a3e984135bf9f1",
8
8
  "packs/_example/.apm/skills/example-skill/evals/eval_queries.json": "f41ecda0834a22f3b4823c81ab02e58b0e4beba610e3b40c185579abff9cfeee",
9
- "packs/_example/.claude-plugin/plugin.json": "d38c8456640d5e2f9296361f7e3e675e368ddd3eb22a6245267560f460155f41",
9
+ "packs/_example/.claude-plugin/plugin.json": "7f94084a56260eed225ec47ac82042fe9029c594557cca760a459885d03ccc26",
10
10
  "packs/_example/README.md": "ef130c9c1f97a75a07cc59fc55fc5b3bf71846dd2f06c3cddf5a1154023b6ef6",
11
- "packs/_example/pack.toml": "94e2c7fd25d4d115858728c7ecb8f739adfd0f594b29596c106daba0791a4b94",
11
+ "packs/_example/pack.toml": "f19a0be9fca99a6a0e3ce2d5cd188bf98000f0a4f186954fb42a0c99c6859701",
12
12
  "profiles/AGENTS.md": "8950438d9e0f57c13613104c88c90b598b53196c91bfdced6d63e4e01b5e9254",
13
13
  "profiles/README.md": "a0b0268edc57fc575f7fea08f3363ba7da9f6e67dc4a0a6f8bd38c9668c97922",
14
14
  "profiles/_example/README.md": "164494df049ddce3e57cb44ed604cb3d39be0a6ec2072e609ea3fa4bbfc74c72",
15
- "profiles/_example/profile.toml": "68af18cf50fa0327a9776b029c92bb1cf82710c649691b3ac889eb8537b8eac7"
15
+ "profiles/_example/profile.toml": "68af18cf50fa0327a9776b029c92bb1cf82710c649691b3ac889eb8537b8eac7",
16
+ "tests/conformance/test_gemini_admissibility.py": "8b337da9272823aed2cb22041b3f9fd27549f075f28b9817efd5be8f8c5bb948",
17
+ "tests/conformance/test_pack_metadata.py": "8ea175b88cc6e10ba10cda87676fc225ee2b968d710c8e6ab05fb20e31ec978a",
18
+ "tests/conformance/test_shared_library_boundaries.py": "5e07783459336e657a355f43aa5a9cf6c138603624daec258ecc0fa3d74239c3"
16
19
  },
17
20
  "version": 1
18
21
  }
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: example-skill
3
+ description: "Demonstrate the standard skill layout. Triggers on: run example, show example skill output. Near-miss: requesting a demo or test of any skill (route those to the specific skill)."
4
+ ---
5
+
6
+ # Example Skill
7
+
8
+ This skill is a minimal demonstration of the standard SKILL.md layout. Replace this content
9
+ with your skill's actual instructions.
10
+
11
+ ## What it does
12
+
13
+ Produces a short greeting and lists any files the user has mentioned.
14
+
15
+ ## When to use this skill
16
+
17
+ The agent invokes this skill when the user asks to "run example" or "show example skill output".
18
+
19
+ ## Steps
20
+
21
+ 1. Greet the user.
22
+ 2. List any files mentioned in the conversation.
23
+ 3. Summarize what the example-skill would do in a real pack.
24
+
25
+ ## Output
26
+
27
+ A short greeting and a bullet list.
@@ -0,0 +1,42 @@
1
+ [
2
+ {
3
+ "query": "run example",
4
+ "skill": "example-skill",
5
+ "should_trigger": true
6
+ },
7
+ {
8
+ "query": "show example skill output",
9
+ "skill": "example-skill",
10
+ "should_trigger": true
11
+ },
12
+ {
13
+ "query": "what does example-skill do",
14
+ "skill": "example-skill",
15
+ "should_trigger": true
16
+ },
17
+ {
18
+ "query": "demonstrate the example",
19
+ "skill": "example-skill",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "run the example skill now",
24
+ "skill": "example-skill",
25
+ "should_trigger": true
26
+ },
27
+ {
28
+ "query": "give me a demo",
29
+ "skill": "example-skill",
30
+ "should_trigger": false
31
+ },
32
+ {
33
+ "query": "show me a test run of architect-design",
34
+ "skill": "example-skill",
35
+ "should_trigger": false
36
+ },
37
+ {
38
+ "query": "how do I install a pack",
39
+ "skill": "example-skill",
40
+ "should_trigger": false
41
+ }
42
+ ]
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "example-pack",
3
+ "version": "0.1.0",
4
+ "description": "The skeleton to copy when you start a new pack.",
5
+ "displayName": "Example Pack",
6
+ "category": "productivity",
7
+ "keywords": [
8
+ "example",
9
+ "template"
10
+ ],
11
+ "skills": [
12
+ "example-skill"
13
+ ]
14
+ }
@@ -0,0 +1,20 @@
1
+ [pack]
2
+ name = "example-pack"
3
+ version = "0.1.0"
4
+ description = "The skeleton to copy when you start a new pack."
5
+ display_name = "Example Pack"
6
+ categories = ["productivity"]
7
+ keywords = ["example", "template"]
8
+
9
+ [pack.adapter-contract]
10
+ version = "0.8"
11
+
12
+ [pack.install]
13
+ default-scope = "repo"
14
+ allowed-scopes = ["repo", "user"]
15
+
16
+ [pack.evals]
17
+ skills = ["example-skill"]
18
+
19
+ [pack.links]
20
+ documentation = "https://example.com/docs"
@@ -0,0 +1,67 @@
1
+ """Portable Gemini adapter rules over every pack in a catalogue."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import tomllib
6
+ from importlib.resources import files
7
+ from pathlib import Path
8
+
9
+ CATALOGUE_ROOT = Path(__file__).resolve().parents[2]
10
+ PACKS_DIR = CATALOGUE_ROOT / "packs"
11
+
12
+
13
+ def _adapter_contract() -> dict:
14
+ """Load the runtime adapter contract from the installed engine data."""
15
+ resource = files("agentbundle").joinpath("_data", "adapter.toml")
16
+ return tomllib.loads(resource.read_text(encoding="utf-8"))
17
+
18
+
19
+ def _pack_dirs() -> list[Path]:
20
+ return sorted(
21
+ path
22
+ for path in PACKS_DIR.iterdir()
23
+ if path.is_dir()
24
+ and not path.name.startswith("_")
25
+ and (path / "pack.toml").is_file()
26
+ )
27
+
28
+
29
+ def test_every_declared_agent_tool_is_mapped() -> None:
30
+ declared: set[str] = set()
31
+ for agent_path in PACKS_DIR.glob("*/.apm/agents/*.md"):
32
+ for line in agent_path.read_text(encoding="utf-8").splitlines():
33
+ if line.startswith("tools:"):
34
+ declared.update(
35
+ item.strip()
36
+ for item in line.split(":", 1)[1].split(",")
37
+ if item.strip()
38
+ )
39
+ if not declared:
40
+ return
41
+ contract = _adapter_contract()
42
+ values = contract["frontmatter-mapping"]["gemini-agent-frontmatter"]["tools"][
43
+ "values"
44
+ ]
45
+ assert declared <= set(values), f"unmapped agent tools: {declared - set(values)}"
46
+
47
+
48
+ def test_every_compatible_pack_admits_gemini_in_both_scopes() -> None:
49
+ from agentbundle.commands.install import _resolve_target_adapter
50
+
51
+ for pack_dir in _pack_dirs():
52
+ data = tomllib.loads((pack_dir / "pack.toml").read_text(encoding="utf-8"))
53
+ pack = data["pack"]
54
+ allowed = pack.get("install", {}).get("allowed-adapters")
55
+ if allowed is not None and "gemini" not in allowed:
56
+ continue
57
+ contract_version = pack.get("adapter-contract", {}).get("version", "0.13")
58
+ for scope in ("repo", "user"):
59
+ resolved = _resolve_target_adapter(
60
+ pack_dir,
61
+ scope=scope,
62
+ adapter="gemini",
63
+ allowed_adapters=allowed,
64
+ contract_version=contract_version,
65
+ command_name="install",
66
+ )
67
+ assert resolved == "gemini", f"{pack_dir.name} @ {scope}"
@@ -0,0 +1,116 @@
1
+ """Portable catalogue manifest and marketplace rules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import tomllib
7
+ from importlib.resources import files
8
+ from pathlib import Path
9
+
10
+ import pytest
11
+
12
+ CATALOGUE_ROOT = Path(__file__).resolve().parents[2]
13
+ PACKS_DIR = CATALOGUE_ROOT / "packs"
14
+ MARKETPLACE_PATH = CATALOGUE_ROOT / ".claude-plugin" / "marketplace.json"
15
+
16
+
17
+ def _bundled_schema(name: str) -> dict:
18
+ """Load a runtime schema without requiring a source-checkout contract tree."""
19
+ resource = files("agentbundle").joinpath("_data", name)
20
+ return json.loads(resource.read_text(encoding="utf-8"))
21
+
22
+
23
+ def _pack_dirs() -> list[Path]:
24
+ return sorted(
25
+ path
26
+ for path in PACKS_DIR.iterdir()
27
+ if path.is_dir()
28
+ and not path.name.startswith("_")
29
+ and (path / "pack.toml").is_file()
30
+ )
31
+
32
+
33
+ def _pack_data(pack_dir: Path) -> dict:
34
+ return tomllib.loads((pack_dir / "pack.toml").read_text(encoding="utf-8"))[
35
+ "pack"
36
+ ]
37
+
38
+
39
+ @pytest.mark.parametrize("pack_dir", _pack_dirs(), ids=lambda path: path.name)
40
+ def test_pack_declares_enriched_metadata(pack_dir: Path) -> None:
41
+ pack = _pack_data(pack_dir)
42
+ assert pack.get("readme") == "README.md", f"{pack_dir.name}: readme"
43
+ assert (pack_dir / "README.md").is_file(), f"{pack_dir.name}: README.md"
44
+ assert isinstance(pack.get("license"), str) and pack["license"]
45
+ links = pack.get("links")
46
+ assert isinstance(links, dict)
47
+ assert isinstance(links.get("repository"), str) and links["repository"]
48
+ for field in ("categories", "keywords"):
49
+ values = pack.get(field)
50
+ assert isinstance(values, list) and values, f"{pack_dir.name}: {field}"
51
+ assert len(values) <= 5, f"{pack_dir.name}: {field} capped at 5"
52
+ maintainers = pack.get("maintainers")
53
+ assert isinstance(maintainers, list) and maintainers
54
+ assert isinstance(maintainers[0].get("name"), str) and maintainers[0]["name"]
55
+
56
+
57
+ @pytest.mark.parametrize("pack_dir", _pack_dirs(), ids=lambda path: path.name)
58
+ def test_pack_and_plugin_versions_match(pack_dir: Path) -> None:
59
+ plugin_path = pack_dir / ".claude-plugin" / "plugin.json"
60
+ if not plugin_path.exists():
61
+ return
62
+ plugin = json.loads(plugin_path.read_text(encoding="utf-8"))
63
+ assert plugin.get("version") == _pack_data(pack_dir)["version"]
64
+
65
+
66
+ def test_source_plugin_manifests_obey_schema() -> None:
67
+ from agentbundle.build.validate import validate
68
+
69
+ manifests = sorted(
70
+ path
71
+ for pack_dir in _pack_dirs()
72
+ if (path := pack_dir / ".claude-plugin" / "plugin.json").is_file()
73
+ )
74
+ if not manifests:
75
+ return
76
+ schema = _bundled_schema("plugin-manifest.schema.json")
77
+ for path in manifests:
78
+ content = json.loads(path.read_text(encoding="utf-8"))
79
+ assert "hooks" not in content, f"{path.relative_to(CATALOGUE_ROOT)}: hooks"
80
+ errors = validate(content, schema)
81
+ assert not errors, f"{path.relative_to(CATALOGUE_ROOT)}: {errors}"
82
+
83
+
84
+ def test_root_marketplace_entries_obey_schema() -> None:
85
+ from agentbundle.build.validate import validate
86
+
87
+ if not MARKETPLACE_PATH.is_file():
88
+ return
89
+ marketplace = json.loads(MARKETPLACE_PATH.read_text(encoding="utf-8"))
90
+ entries = marketplace.get("plugins", [])
91
+ if not entries:
92
+ return
93
+ schema = _bundled_schema("marketplace-entry.schema.json")
94
+ for entry in entries:
95
+ assert not validate(entry, schema), entry.get("name", "<unnamed>")
96
+
97
+
98
+ def test_root_marketplace_has_portable_metadata_shapes() -> None:
99
+ if not MARKETPLACE_PATH.is_file():
100
+ return
101
+ marketplace = json.loads(MARKETPLACE_PATH.read_text(encoding="utf-8"))
102
+ assert "name" in marketplace
103
+ assert isinstance(marketplace.get("owner"), dict)
104
+ for plugin in marketplace.get("plugins", []):
105
+ assert isinstance(plugin.get("author"), dict), plugin.get("name")
106
+ source = plugin.get("source")
107
+ if source is None:
108
+ continue
109
+ assert isinstance(source, dict), plugin.get("name")
110
+ assert source.get("source") == "git-subdir", plugin.get("name")
111
+ assert isinstance(source.get("url"), str) and source["url"].startswith(
112
+ "https://github.com/"
113
+ )
114
+ assert source.get("path")
115
+ assert source.get("ref") or source.get("sha")
116
+ assert "branch" not in source and "directory" not in source
@@ -0,0 +1,40 @@
1
+ """Portable rules for retired credential-shim copies in pack scripts."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from pathlib import Path
7
+
8
+ CATALOGUE_ROOT = Path(__file__).resolve().parents[2]
9
+ PACKS_DIR = CATALOGUE_ROOT / "packs"
10
+ SHIM_BASENAMES = (
11
+ "credentials_shim.py",
12
+ "_keychain_macos.py",
13
+ "_credman_windows.py",
14
+ )
15
+ SHIM_IMPORT_RE = re.compile(
16
+ r"(?:from\s+\.{0,2}(?:[\w.]+\.)?credentials_shim\s+import"
17
+ r"|import\s+(?:[\w.]+\.)?credentials_shim\b)"
18
+ )
19
+
20
+
21
+ def test_no_pack_skill_carries_a_retired_shim_copy() -> None:
22
+ offenders = [
23
+ str(path.relative_to(CATALOGUE_ROOT))
24
+ for scripts_dir in PACKS_DIR.glob("*/.apm/skills/*/scripts")
25
+ for basename in SHIM_BASENAMES
26
+ if (path := scripts_dir / basename).exists()
27
+ ]
28
+ assert not offenders, offenders
29
+
30
+
31
+ def test_no_pack_skill_imports_the_retired_shim() -> None:
32
+ offenders: list[str] = []
33
+ for path in PACKS_DIR.glob("*/.apm/skills/*/scripts/*.py"):
34
+ try:
35
+ source = path.read_text(encoding="utf-8")
36
+ except OSError:
37
+ continue
38
+ if SHIM_IMPORT_RE.search(source):
39
+ offenders.append(str(path.relative_to(CATALOGUE_ROOT)))
40
+ assert not offenders, offenders
@@ -1,9 +1,13 @@
1
1
  """Canonical stdlib-only install-marker writer for the Claude-plugins and APM install routes.
2
2
 
3
3
  This script is invoked by a ``SessionStart`` hook derived by ``agentbundle build``
4
- into every pack's projected output:
5
- - ``dist/claude-plugins/<pack>/.claude-plugin/plugin.json`` — claude-plugins route
6
- - ``dist/apm/<pack>/.apm/hooks/install-marker.json`` — APM route
4
+ into each pack's projected output:
5
+ - ``dist/claude-plugins/<pack>/.claude-plugin/plugin.json`` — claude-plugins
6
+ route, for user-capable packs only (a plugin's code lands in the adopter's
7
+ global cache, so a pack whose ``allowed-scopes`` omits ``user`` is not
8
+ projected onto this route at all)
9
+ - ``dist/apm/<pack>/.apm/hooks/install-marker.json`` — APM route,
10
+ every pack
7
11
 
8
12
  It detects first-install-or-update and writes a ``[[packs-installed]]`` entry
9
13
  to the scope-correct ``.adapt-install-marker.toml`` file so the existing core
@@ -25,12 +25,12 @@ import sys
25
25
  from pathlib import Path
26
26
 
27
27
  from agentbundle.build.contract import load as load_contract
28
- from agentbundle.build.validate import validate as validate_instance
29
28
  from agentbundle.build.lint_packs import cmd_lint_packs
30
- from agentbundle.build.main import cmd_build
29
+ from agentbundle.build.main import _read_bundled, cmd_build
31
30
  from agentbundle.build.self_host import cmd_check, cmd_self
31
+ from agentbundle.build.validate import validate as validate_instance
32
32
 
33
- __all__ = ["main"]
33
+ __all__ = ["main", "cmd_lint_packs"]
34
34
 
35
35
 
36
36
  def _cmd_validate(args: argparse.Namespace) -> int:
@@ -42,14 +42,12 @@ def _cmd_validate(args: argparse.Namespace) -> int:
42
42
  )
43
43
  return 1
44
44
 
45
- schema_path = (
46
- Path(__file__).resolve().parent.parent.parent.parent.parent
47
- / "contracts"
48
- / "adapter.schema.json"
49
- )
50
- if not schema_path.exists():
45
+ try:
46
+ schema_text = _read_bundled("adapter.schema.json")
47
+ except (FileNotFoundError, ModuleNotFoundError):
51
48
  print(
52
- f"validate: adapter.schema.json not found at {schema_path}",
49
+ "validate: adapter.schema.json not found in package data or "
50
+ "repository contracts",
53
51
  file=sys.stderr,
54
52
  )
55
53
  return 1
@@ -60,7 +58,7 @@ def _cmd_validate(args: argparse.Namespace) -> int:
60
58
  print(f"validate: failed to load {contract_path}: {exc}", file=sys.stderr)
61
59
  return 1
62
60
 
63
- schema = json.loads(schema_path.read_text(encoding="utf-8"))
61
+ schema = json.loads(schema_text)
64
62
  errors = validate_instance(contract, schema)
65
63
  if errors:
66
64
  print(
@@ -172,7 +170,8 @@ def _build_parser() -> argparse.ArgumentParser:
172
170
 
173
171
  def _cmd_build_shim(args) -> int:
174
172
  print(
175
- "agentbundle.build build is deprecated; use 'agentbundle catalogue build --root .' instead",
173
+ "agentbundle.build build is deprecated; "
174
+ "use 'agentbundle catalogue build --root .' instead",
176
175
  file=sys.stderr,
177
176
  )
178
177
  return int(cmd_build(args))
@@ -180,7 +179,8 @@ def _cmd_build_shim(args) -> int:
180
179
 
181
180
  def _cmd_self_shim(args) -> int:
182
181
  print(
183
- "agentbundle.build self is deprecated; use 'agentbundle catalogue self-host --write --root .' instead",
182
+ "agentbundle.build self is deprecated; "
183
+ "use 'agentbundle catalogue self-host --write --root .' instead",
184
184
  file=sys.stderr,
185
185
  )
186
186
  return int(cmd_self(args))
@@ -188,7 +188,8 @@ def _cmd_self_shim(args) -> int:
188
188
 
189
189
  def _cmd_check_shim(args) -> int:
190
190
  print(
191
- "agentbundle.build check is deprecated; use 'agentbundle catalogue self-host --check --root .' instead",
191
+ "agentbundle.build check is deprecated; "
192
+ "use 'agentbundle catalogue self-host --check --root .' instead",
192
193
  file=sys.stderr,
193
194
  )
194
195
  return int(cmd_check(args))
@@ -196,7 +197,8 @@ def _cmd_check_shim(args) -> int:
196
197
 
197
198
  def _cmd_lint_packs_shim(args) -> int:
198
199
  print(
199
- "agentbundle.build lint-packs is deprecated; use 'agentbundle catalogue lint --root .' instead",
200
+ "agentbundle.build lint-packs is deprecated; "
201
+ "use 'agentbundle catalogue lint --root .' instead",
200
202
  file=sys.stderr,
201
203
  )
202
204
  from agentbundle.catalogue_tooling.lint import lint_catalogue, render_table