agentbundle 0.29.7__tar.gz → 0.29.8__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 (198) hide show
  1. {agentbundle-0.29.7 → agentbundle-0.29.8}/PKG-INFO +1 -1
  2. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +37 -0
  3. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/manifest.json +1 -1
  4. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/install-marker.py +88 -18
  5. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/version.py +1 -1
  6. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle.egg-info/PKG-INFO +1 -1
  7. {agentbundle-0.29.7 → agentbundle-0.29.8}/pyproject.toml +1 -1
  8. {agentbundle-0.29.7 → agentbundle-0.29.8}/README-pypi.md +0 -0
  9. {agentbundle-0.29.7 → agentbundle-0.29.8}/README.md +0 -0
  10. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/__init__.py +0 -0
  11. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/__main__.py +0 -0
  12. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/adapter.schema.json +0 -0
  13. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/adapter.toml +0 -0
  14. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  15. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
  16. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
  17. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  18. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
  19. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  20. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  21. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  22. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  23. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/catalogue.schema.json +0 -0
  24. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/guide.schema.json +0 -0
  25. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/install-defaults.toml +0 -0
  26. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/marketplace-entry.schema.json +0 -0
  27. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/pack.schema.json +0 -0
  28. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  29. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  30. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/profile.schema.json +0 -0
  31. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/skill-manifest.schema.json +0 -0
  32. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/skill.schema.json +0 -0
  33. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/_data/target-vocab.toml +0 -0
  34. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/__init__.py +0 -0
  35. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/__main__.py +0 -0
  36. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapter_root_bins.py +0 -0
  37. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/__init__.py +0 -0
  38. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/claude_code.py +0 -0
  39. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/codex.py +0 -0
  40. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/copilot.py +0 -0
  41. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/cursor.py +0 -0
  42. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/gemini.py +0 -0
  43. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/kiro.py +0 -0
  44. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/kiro_cli.py +0 -0
  45. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/adapters/kiro_ide.py +0 -0
  46. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/contract.py +0 -0
  47. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/lint_packs.py +0 -0
  48. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/main.py +0 -0
  49. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/phase_order.py +0 -0
  50. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/__init__.py +0 -0
  51. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  52. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  53. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  54. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/direct_directory.py +0 -0
  55. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  56. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/hook_id.py +0 -0
  57. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  58. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  59. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/merge_json.py +0 -0
  60. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/projections/user_merge_json.py +0 -0
  61. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  62. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  63. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/marketplace.toml +0 -0
  64. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  65. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  66. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  67. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/recipes/self-host.toml +0 -0
  68. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/scope_rails.py +0 -0
  69. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/self_host.py +0 -0
  70. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/shared_libs.py +0 -0
  71. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/target_resolver.py +0 -0
  72. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/__init__.py +0 -0
  73. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  74. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  75. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  76. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  77. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  78. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  79. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  80. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  81. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  82. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  83. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  84. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  85. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  86. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract.py +0 -0
  87. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract_scope.py +0 -0
  88. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract_v07.py +0 -0
  89. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract_v08.py +0 -0
  90. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  91. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  92. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  93. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  94. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  95. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_packs.py +0 -0
  96. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  97. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_pack_schema.py +0 -0
  98. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  99. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  100. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_pipeline.py +0 -0
  101. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_plugin_manifest_schema.py +0 -0
  102. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_projectable_subset.py +0 -0
  103. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  104. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_scope_rails.py +0 -0
  105. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_security.py +0 -0
  106. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_self_host_check.py +0 -0
  107. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  108. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  109. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  110. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_shared_prefix_contract.py +0 -0
  111. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  112. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  113. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  114. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_validate.py +0 -0
  115. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_workspace_status_projection.py +0 -0
  116. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  117. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/user_libs.py +0 -0
  118. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/build/validate.py +0 -0
  119. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue.py +0 -0
  120. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/__init__.py +0 -0
  121. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/archive.py +0 -0
  122. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/build.py +0 -0
  123. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/config.py +0 -0
  124. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/defaults.py +0 -0
  125. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  126. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/identity.py +0 -0
  127. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/initialise.py +0 -0
  128. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
  129. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/lint.py +0 -0
  130. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/package.py +0 -0
  131. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/results.py +0 -0
  132. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/self_host.py +0 -0
  133. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
  134. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  135. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  136. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/verify.py +0 -0
  137. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/categories.py +0 -0
  138. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/cli.py +0 -0
  139. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/__init__.py +0 -0
  140. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/_common.py +0 -0
  141. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/_drop_warning.py +0 -0
  142. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/adapt.py +0 -0
  143. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_build.py +0 -0
  144. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_init.py +0 -0
  145. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_lint.py +0 -0
  146. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_package.py +0 -0
  147. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_self_host.py +0 -0
  148. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  149. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  150. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/catalogue_verify.py +0 -0
  151. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/config.py +0 -0
  152. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/diff.py +0 -0
  153. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/docs.py +0 -0
  154. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/init_state.py +0 -0
  155. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/install.py +0 -0
  156. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/list_installed.py +0 -0
  157. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/list_packs.py +0 -0
  158. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/list_profiles.py +0 -0
  159. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/list_targets.py +0 -0
  160. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/oplog_cmd.py +0 -0
  161. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/pack_config_cmd.py +0 -0
  162. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/pack_evals.py +0 -0
  163. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/package_catalogue.py +0 -0
  164. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/profile.py +0 -0
  165. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/reconcile.py +0 -0
  166. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/render.py +0 -0
  167. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/scaffold.py +0 -0
  168. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/show.py +0 -0
  169. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/uninstall.py +0 -0
  170. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/upgrade.py +0 -0
  171. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/commands/validate.py +0 -0
  172. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/config.py +0 -0
  173. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/https_catalogue.py +0 -0
  174. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/local_exclude.py +0 -0
  175. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/oplog.py +0 -0
  176. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/pack_inventory.py +0 -0
  177. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/render.py +0 -0
  178. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/safety.py +0 -0
  179. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/scaffold.py +0 -0
  180. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/scope.py +0 -0
  181. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/source_defaults.py +0 -0
  182. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/statelock.py +0 -0
  183. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/user_config.py +0 -0
  184. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle/workspace_mcp.py +0 -0
  185. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle.egg-info/SOURCES.txt +0 -0
  186. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle.egg-info/dependency_links.txt +0 -0
  187. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle.egg-info/entry_points.txt +0 -0
  188. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle.egg-info/requires.txt +0 -0
  189. {agentbundle-0.29.7 → agentbundle-0.29.8}/agentbundle.egg-info/top_level.txt +0 -0
  190. {agentbundle-0.29.7 → agentbundle-0.29.8}/setup.cfg +0 -0
  191. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_adapter_permissions_projection.py +0 -0
  192. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_linear_primitive.py +0 -0
  193. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_workspace_mcp_elicit.py +0 -0
  194. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_workspace_mcp_event_bridge.py +0 -0
  195. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_workspace_mcp_git.py +0 -0
  196. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_workspace_mcp_lifecycle.py +0 -0
  197. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_workspace_mcp_stdin.py +0 -0
  198. {agentbundle-0.29.7 → agentbundle-0.29.8}/tests/test_workspace_mcp_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.29.7
3
+ Version: 0.29.8
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
6
  License: Apache-2.0 OR MIT
@@ -36,6 +36,43 @@ and `version`; `[pack.adapter-contract]` with `version`.
36
36
  - [packs/README.md](../../../packs/README.md) — pack layout, versioning rules, lint commands.
37
37
  - [packs/AGENTS.md](../../../packs/AGENTS.md) — agent-facing schema map and primary workflow.
38
38
 
39
+ ### `[pack].description` — display copy
40
+
41
+ `[pack].description` is read by a **person** deciding whether to install: in a
42
+ marketplace browser, a catalogue listing, or CLI output. It is not read by the model.
43
+
44
+ That makes it a different artifact from a skill's or agent's `description`, which the
45
+ model reads to decide whether to **activate** the primitive. Length is load-bearing
46
+ there and shortening it degrades activation; per-target caps in
47
+ `contracts/target-vocab.toml` govern it. Do not carry habits from one to the other.
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.
52
+
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.
55
+
56
+ **Anti-patterns**, each of which has shipped here before:
57
+
58
+ | Anti-pattern | Instead |
59
+ | --- | --- |
60
+ | Opening with a component inventory (`Core: work-loop, new-spec, bug-fix, …`) | Lead with the outcome; the inventory belongs in the README |
61
+ | Repo-insider vocabulary (`forked-context`, `the grown-up successor to X`) | Words a first-time reader resolves without this repo |
62
+ | Cross-pack references (`co-installs with X`, `feeds Y's queue`) | Nothing that assumes another pack is known |
63
+ | Provenance name-drops (`(STORM, PRISMA, ACH, GRADE)`) | Name a framework only when the reader is buying it |
64
+ | Negative space (`no stack, no values tables, no pixel comps`) | Say what it does; the README can scope what it doesn't |
65
+ | Internal paths (`~/.agentbundle/bin/`) | Nothing an adopter cannot act on from a listing |
66
+
67
+ **Discoverability is carried elsewhere** — `[pack].keywords` and `[pack].categories`
68
+ — so prose does not need to be keyword-dense to stay findable.
69
+
70
+ There is no target-imposed length limit. `tools/lint-pack-descriptions.py` fails the
71
+ build past a deliberately loose backstop, which exists only to stop runaway drift (the
72
+ field once reached 1122 characters); it is not the quality bar. **This section is.** A
73
+ description inside the backstop can still be bad, and a length check cannot tell —
74
+ review against the shape and the table above.
75
+
39
76
  ---
40
77
 
41
78
  ## 3. Pack README standard
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "files": {
3
- "guides/_shared/reference/catalogue-authoring-standards.md": "cec0f7afd7a0bf61d7bedd9facd096b083cb7413679a6fbcd0af28d40bece58c",
3
+ "guides/_shared/reference/catalogue-authoring-standards.md": "f5e41498139ca335b8a679644eb02d2a35abb2234a77b5b14e7ff90da02722b9",
4
4
  "guides/_shared/reference/catalogue-ci-contract.md": "fae793ab47989b6dd3c731afcb0b4cda21c7d08bbe7fa40fca6d3abb3d158141",
5
5
  "packs/AGENTS.md": "9bfeda4069826e518a4f4fdae45bd40f4393c1c5aaf146149d3eb4aece30be83",
6
6
  "packs/README.md": "d2de5f9556f4c8e521103474bde74636e02cc805f9bf5312a3a61a1f3eb45d8f",
@@ -213,11 +213,66 @@ def _assert_portable_name(component: str) -> None:
213
213
  # ---------------------------------------------------------------------------
214
214
 
215
215
 
216
+ # Settings files are read under an adopter's ``${CLAUDE_PROJECT_DIR}``, whose
217
+ # contents a cloned repo controls. Bound the read itself — measuring after
218
+ # `read_text()` has already pulled the whole file in is no bound at all.
219
+ _SETTINGS_READ_CAP = 1_048_576 # 1 MiB
220
+
221
+
222
+ def _plugin_marketplace(
223
+ plugin_root: pathlib.Path,
224
+ plugin_name: str,
225
+ ) -> "str | None":
226
+ """Return the marketplace this pack was installed from, or ``None``.
227
+
228
+ The Claude-plugins client installs into
229
+ ``<config>/plugins/cache/<marketplace>/<plugin>/<version>``, so the pack
230
+ can read its own marketplace identity back out of ``${CLAUDE_PLUGIN_ROOT}``.
231
+ Verified against Claude Code 2.1.223.
232
+
233
+ Returns ``None`` when ``plugin_root`` does not have that shape. The caller
234
+ then matches on bare pack name alone — a layout we do not recognise must
235
+ degrade to the historical behaviour, not to "never opted in" (that is the
236
+ very failure this function's caller exists to fix).
237
+ """
238
+ parts = plugin_root.parts
239
+ if len(parts) < 4:
240
+ return None
241
+ if parts[-4] != "cache" or parts[-2] != plugin_name:
242
+ return None
243
+ return parts[-3] or None
244
+
245
+
246
+ def _entry_matches(
247
+ entry: str,
248
+ plugin_name: str,
249
+ marketplace: "str | None",
250
+ ) -> bool:
251
+ """Does one ``enabledPlugins`` identifier name *this* pack?
252
+
253
+ Current clients write a qualified ``name@marketplace``; older ones wrote a
254
+ bare ``name``. A qualified identifier must agree on *both* halves whenever
255
+ we know our own marketplace, so another vendor's ``core@other-marketplace``
256
+ does not opt in a ``core`` that came from somewhere else.
257
+ """
258
+ name, sep, entry_marketplace = entry.strip().partition("@")
259
+ if name.strip() != plugin_name:
260
+ return False
261
+ if not sep:
262
+ # Bare name — the identifier makes no marketplace claim to check.
263
+ return True
264
+ if marketplace is None:
265
+ # Our own identity is unknown; the name is all there is to compare.
266
+ return True
267
+ return entry_marketplace.strip() == marketplace
268
+
269
+
216
270
  def _detect_origin(
217
271
  *,
218
272
  plugin_name: str,
219
273
  home: pathlib.Path,
220
274
  project_dir: pathlib.Path | None,
275
+ marketplace: "str | None",
221
276
  ) -> str | None:
222
277
  """Walk the three ``enabledPlugins`` settings files in precedence order.
223
278
 
@@ -226,9 +281,17 @@ def _detect_origin(
226
281
  (pack is not enabled at any scope).
227
282
 
228
283
  Precedence: local → project → user (most-specific wins).
229
- Missing file, malformed JSON, absent ``enabledPlugins`` key, or
230
- ``enabledPlugins`` present but not a JSON array are each treated as
231
- "not opted in at that scope" and fall through.
284
+
285
+ ``enabledPlugins`` carries two shapes. Current clients write an **object**
286
+ keyed by plugin identifier whose boolean value is the enabled state — only
287
+ ``true`` counts as opted in, since ``false`` is an adopter who deliberately
288
+ disabled the pack. Older clients wrote a **JSON array** of identifiers;
289
+ both are accepted.
290
+
291
+ Every other outcome is "not opted in at that scope" and falls through: a
292
+ missing file, a non-regular path, a file past ``_SETTINGS_READ_CAP``,
293
+ undecodable bytes, malformed JSON, an absent ``enabledPlugins`` key, or a
294
+ value of any other type. A hostile settings file must never raise.
232
295
  """
233
296
  candidates: list[tuple[str, pathlib.Path]] = []
234
297
 
@@ -239,32 +302,38 @@ def _detect_origin(
239
302
  candidates.append(("user", home / ".claude" / "settings.json"))
240
303
 
241
304
  for origin, settings_path in candidates:
242
- if not settings_path.exists():
305
+ # `.is_file()` where the old code used `.exists()`: a FIFO exists, and
306
+ # opening one for reading blocks until a writer appears. A character
307
+ # device such as /dev/zero exists too, and reads forever.
308
+ if not settings_path.is_file():
243
309
  continue
244
310
  try:
245
- read_text = settings_path.read_text(encoding="utf-8")
311
+ with settings_path.open("rb") as fh:
312
+ blob = fh.read(_SETTINGS_READ_CAP + 1)
246
313
  except OSError:
247
314
  continue
248
- # Cap read size to 1 MiB to guard against DoS via giant file.
249
- if len(read_text) > 1_048_576:
315
+ if len(blob) > _SETTINGS_READ_CAP:
250
316
  continue
251
317
  try:
252
- raw = json.loads(read_text)
253
- except (json.JSONDecodeError, OSError):
318
+ # `json.loads` decodes UTF-8 itself; undecodable bytes raise
319
+ # UnicodeDecodeError and malformed JSON raises JSONDecodeError,
320
+ # both subclasses of ValueError.
321
+ raw = json.loads(blob)
322
+ except ValueError:
254
323
  continue
255
324
  if not isinstance(raw, dict):
256
325
  continue
257
326
  enabled = raw.get("enabledPlugins")
258
- if not isinstance(enabled, list):
327
+ if isinstance(enabled, dict):
328
+ entries: list = [key for key, value in enabled.items() if value is True]
329
+ elif isinstance(enabled, list):
330
+ entries = enabled
331
+ else:
259
332
  continue
260
- # Check whether this pack is in the list; compare by name prefix
261
- # since installed plugins may appear as "name@marketplace-url".
262
- for entry in enabled:
263
- if not isinstance(entry, str):
264
- continue
265
- # Match by pack name as a prefix component (before '@').
266
- entry_name = entry.split("@")[0].strip()
267
- if entry_name == plugin_name:
333
+ for entry in entries:
334
+ if isinstance(entry, str) and _entry_matches(
335
+ entry, plugin_name, marketplace
336
+ ):
268
337
  return origin
269
338
 
270
339
  return None
@@ -837,6 +906,7 @@ def _main_claude_plugins(args: argparse.Namespace) -> int:
837
906
  plugin_name=pack_name,
838
907
  home=home,
839
908
  project_dir=project_dir,
909
+ marketplace=_plugin_marketplace(plugin_root, pack_name),
840
910
  )
841
911
 
842
912
  if origin is None:
@@ -14,7 +14,7 @@ import tomllib
14
14
  from importlib.resources import files
15
15
  from pathlib import Path
16
16
 
17
- CLI_VERSION = "0.29.7"
17
+ CLI_VERSION = "0.29.8"
18
18
 
19
19
  _HERE = Path(__file__).resolve().parent
20
20
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.29.7
3
+ Version: 0.29.8
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
6
  License: Apache-2.0 OR MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agentbundle"
7
- version = "0.29.7"
7
+ version = "0.29.8"
8
8
  description = "npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent."
9
9
  requires-python = ">=3.11"
10
10
  dependencies = []
File without changes
File without changes