agentbundle 0.29.6__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.6 → agentbundle-0.29.8}/PKG-INFO +1 -1
  2. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +37 -0
  3. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/manifest.json +2 -2
  4. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +38 -38
  5. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/install-marker.py +88 -18
  6. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/self_host_windows.py +15 -2
  7. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/version.py +1 -1
  8. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle.egg-info/PKG-INFO +1 -1
  9. {agentbundle-0.29.6 → agentbundle-0.29.8}/pyproject.toml +1 -1
  10. {agentbundle-0.29.6 → agentbundle-0.29.8}/README-pypi.md +0 -0
  11. {agentbundle-0.29.6 → agentbundle-0.29.8}/README.md +0 -0
  12. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/__init__.py +0 -0
  13. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/__main__.py +0 -0
  14. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/adapter.schema.json +0 -0
  15. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/adapter.toml +0 -0
  16. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  17. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
  18. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  19. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
  20. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  21. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  22. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  23. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  24. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/catalogue.schema.json +0 -0
  25. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/guide.schema.json +0 -0
  26. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/install-defaults.toml +0 -0
  27. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/marketplace-entry.schema.json +0 -0
  28. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/pack.schema.json +0 -0
  29. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  30. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  31. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/profile.schema.json +0 -0
  32. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/skill-manifest.schema.json +0 -0
  33. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/skill.schema.json +0 -0
  34. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/_data/target-vocab.toml +0 -0
  35. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/__init__.py +0 -0
  36. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/__main__.py +0 -0
  37. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapter_root_bins.py +0 -0
  38. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/__init__.py +0 -0
  39. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/claude_code.py +0 -0
  40. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/codex.py +0 -0
  41. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/copilot.py +0 -0
  42. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/cursor.py +0 -0
  43. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/gemini.py +0 -0
  44. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/kiro.py +0 -0
  45. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/kiro_cli.py +0 -0
  46. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/adapters/kiro_ide.py +0 -0
  47. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/contract.py +0 -0
  48. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/lint_packs.py +0 -0
  49. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/main.py +0 -0
  50. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/phase_order.py +0 -0
  51. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/__init__.py +0 -0
  52. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  53. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  54. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  55. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/direct_directory.py +0 -0
  56. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  57. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/hook_id.py +0 -0
  58. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  59. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  60. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/merge_json.py +0 -0
  61. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/projections/user_merge_json.py +0 -0
  62. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  63. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  64. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/marketplace.toml +0 -0
  65. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  66. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  67. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  68. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/recipes/self-host.toml +0 -0
  69. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/scope_rails.py +0 -0
  70. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/self_host.py +0 -0
  71. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/shared_libs.py +0 -0
  72. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/target_resolver.py +0 -0
  73. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/__init__.py +0 -0
  74. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  75. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  76. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  77. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  78. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  79. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  80. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  81. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  82. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  83. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  84. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  85. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  86. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  87. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract.py +0 -0
  88. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract_scope.py +0 -0
  89. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract_v07.py +0 -0
  90. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_contract_v08.py +0 -0
  91. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  92. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  93. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  94. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  95. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  96. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_lint_packs.py +0 -0
  97. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  98. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_pack_schema.py +0 -0
  99. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  100. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  101. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_pipeline.py +0 -0
  102. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_plugin_manifest_schema.py +0 -0
  103. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_projectable_subset.py +0 -0
  104. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  105. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_scope_rails.py +0 -0
  106. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_security.py +0 -0
  107. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_self_host_check.py +0 -0
  108. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  109. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  110. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  111. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_shared_prefix_contract.py +0 -0
  112. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  113. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  114. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  115. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_validate.py +0 -0
  116. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_workspace_status_projection.py +0 -0
  117. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  118. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/user_libs.py +0 -0
  119. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/build/validate.py +0 -0
  120. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue.py +0 -0
  121. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/__init__.py +0 -0
  122. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/archive.py +0 -0
  123. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/build.py +0 -0
  124. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/config.py +0 -0
  125. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/defaults.py +0 -0
  126. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  127. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/identity.py +0 -0
  128. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/initialise.py +0 -0
  129. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
  130. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/lint.py +0 -0
  131. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/package.py +0 -0
  132. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/results.py +0 -0
  133. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/self_host.py +0 -0
  134. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  135. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  136. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/catalogue_tooling/verify.py +0 -0
  137. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/categories.py +0 -0
  138. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/cli.py +0 -0
  139. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/__init__.py +0 -0
  140. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/_common.py +0 -0
  141. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/_drop_warning.py +0 -0
  142. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/adapt.py +0 -0
  143. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_build.py +0 -0
  144. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_init.py +0 -0
  145. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_lint.py +0 -0
  146. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_package.py +0 -0
  147. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_self_host.py +0 -0
  148. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  149. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  150. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/catalogue_verify.py +0 -0
  151. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/config.py +0 -0
  152. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/diff.py +0 -0
  153. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/docs.py +0 -0
  154. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/init_state.py +0 -0
  155. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/install.py +0 -0
  156. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/list_installed.py +0 -0
  157. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/list_packs.py +0 -0
  158. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/list_profiles.py +0 -0
  159. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/list_targets.py +0 -0
  160. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/oplog_cmd.py +0 -0
  161. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/pack_config_cmd.py +0 -0
  162. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/pack_evals.py +0 -0
  163. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/package_catalogue.py +0 -0
  164. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/profile.py +0 -0
  165. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/reconcile.py +0 -0
  166. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/render.py +0 -0
  167. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/scaffold.py +0 -0
  168. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/show.py +0 -0
  169. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/uninstall.py +0 -0
  170. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/upgrade.py +0 -0
  171. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/commands/validate.py +0 -0
  172. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/config.py +0 -0
  173. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/https_catalogue.py +0 -0
  174. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/local_exclude.py +0 -0
  175. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/oplog.py +0 -0
  176. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/pack_inventory.py +0 -0
  177. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/render.py +0 -0
  178. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/safety.py +0 -0
  179. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/scaffold.py +0 -0
  180. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/scope.py +0 -0
  181. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/source_defaults.py +0 -0
  182. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/statelock.py +0 -0
  183. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/user_config.py +0 -0
  184. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle/workspace_mcp.py +0 -0
  185. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle.egg-info/SOURCES.txt +0 -0
  186. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle.egg-info/dependency_links.txt +0 -0
  187. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle.egg-info/entry_points.txt +0 -0
  188. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle.egg-info/requires.txt +0 -0
  189. {agentbundle-0.29.6 → agentbundle-0.29.8}/agentbundle.egg-info/top_level.txt +0 -0
  190. {agentbundle-0.29.6 → agentbundle-0.29.8}/setup.cfg +0 -0
  191. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_adapter_permissions_projection.py +0 -0
  192. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_linear_primitive.py +0 -0
  193. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_workspace_mcp_elicit.py +0 -0
  194. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_workspace_mcp_event_bridge.py +0 -0
  195. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_workspace_mcp_git.py +0 -0
  196. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_workspace_mcp_lifecycle.py +0 -0
  197. {agentbundle-0.29.6 → agentbundle-0.29.8}/tests/test_workspace_mcp_stdin.py +0 -0
  198. {agentbundle-0.29.6 → 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.6
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,8 +1,8 @@
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
- "packs/AGENTS.md": "861a029007741cd7645cdfcc018e5ac85cf218d332f6688115156c9c676381b8",
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",
@@ -6,9 +6,11 @@ Read `packs/AGENTS.local.md` when present — it carries host-specific overrides
6
6
  ## Pack layout
7
7
 
8
8
  The pack is the ownership and test-execution boundary; `.apm/` is the runtime export boundary; a skill is the
9
- evaluation-fixture boundary. Tests go in `packs/<pack>/tests/`, never under `.apm/`; evals stay skill-local at
10
- `.apm/skills/<skill>/evals/` and project with the skill. `tools/lint-pack-test-boundary.py` enforces both across
11
- every pack, plus one pytest process per skill test dir. Shape: `docs/architecture/pack-layout.md`.
9
+ evaluation-fixture boundary. Skill tests go in `packs/<pack>/tests/skills/<skill>/` and hook tests in
10
+ `packs/<pack>/tests/hooks/` — never under `.apm/`, which adapters project verbatim into an installed tree.
11
+ Evals stay skill-local at `.apm/skills/<skill>/evals/` and project with the skill. Run **one pytest process
12
+ per skill test directory**: two skills may ship the same test basename, and a shared `sys.path` binds one
13
+ skill's module for both suites and passes green.
12
14
 
13
15
  | Path | Purpose |
14
16
  |------|---------|
@@ -28,14 +30,13 @@ every pack, plus one pytest process per skill test dir. Shape: `docs/architectur
28
30
 
29
31
  ## Reserved authoring assets
30
32
 
31
- Any immediate child of the packs root whose name begins with `_` is a reserved authoring asset.
32
- Reserved directories are not catalogue payload — they do not appear in `list-packs`, are not
33
- installed, and are not included in packaged archives. See `packs/README.md`.
33
+ Any immediate child of the packs root whose name begins with `_` is a reserved authoring asset: not
34
+ catalogue payload, absent from `list-packs`, never installed or packaged. See `packs/README.md`.
34
35
 
35
36
  ## pack.toml schema map
36
37
 
37
- > The machine source of truth for pack.toml format is `contracts/pack.schema.json`.
38
- > The table below is a navigational summary; the JSON Schema is normative.
38
+ > The normative source for pack.toml format is the `pack` JSON Schema that ships inside `agentbundle`;
39
+ > `agentbundle catalogue lint --root .` validates against it. The table below is a navigational summary.
39
40
 
40
41
  | Table | Required fields | Notable optional fields |
41
42
  |-------|----------------|------------------------|
@@ -64,14 +65,14 @@ For CI pipeline orchestration — publication ordering, exit codes, JSON output
64
65
 
65
66
  ## Version bump rule
66
67
 
67
- Every **non-cosmetic** change to pack content requires a version bump in both:
68
- 1. `pack.toml` → `[pack] version`
69
- 2. `.claude-plugin/plugin.json` → `"version"`
68
+ Every **non-cosmetic** change to pack content requires a version bump in **both** `pack.toml` →
69
+ `[pack] version` and `.claude-plugin/plugin.json` → `"version"`.
70
70
 
71
71
  Which increment: **patch** for changed bodies/directives/conventions; **minor** for new primitives;
72
72
  **major** for removals. Never ride an unreleased version from another in-flight PR.
73
73
 
74
- Host-specific post-bump steps (changelog, marketplace regeneration) are in `packs/AGENTS.local.md`.
74
+ Further post-bump steps (changelog, marketplace regeneration) are host-specific — see `AGENTS.local.md` if
75
+ your catalogue has one.
75
76
 
76
77
  ## Self-hosting projection
77
78
 
@@ -80,52 +81,50 @@ projects them to every shipped adapter's layout. Never edit a projected output d
80
81
 
81
82
  On a dirty working tree: `agentbundle catalogue self-host --root . --write --force`.
82
83
 
83
- **Critical ordering:** when a session edits both seeds and non-seed pack sources (`.apm/**`,
84
- `pack.toml`), run self-host AFTER all edits — not between them.
84
+ **Critical ordering:** when a session edits both seeds and non-seed pack sources (`.apm/**`, `pack.toml`),
85
+ run self-host AFTER all edits — not between them.
85
86
 
86
87
  ## Claude plugin JSON format
87
88
 
88
- Each pack's `.claude-plugin/plugin.json` is validated against `contracts/plugin-manifest.schema.json`.
89
- Non-compliant manifests block publishing.
89
+ Each pack's `.claude-plugin/plugin.json` is validated against the plugin-manifest JSON Schema that ships
90
+ inside `agentbundle`; `agentbundle catalogue lint --root .` reports violations. Non-compliant manifests
91
+ block publishing.
90
92
 
91
93
  **Required:** `name` (string), `version` (string matching `pack.toml`), `description` (string).
92
94
 
93
- **Allowed optional fields** — `skills`, `agents` (arrays of strings); `author` (`{name, email?}`);
94
- `license`, `homepage`, `repository`, `category`, `displayName` (strings); `keywords` (array);
95
- `source` (`{source, repo, branch, directory}`).
95
+ **Allowed optional fields** — `skills`, `agents` (arrays of strings); `author` (`{name, email?}`); `license`,
96
+ `homepage`, `repository`, `category`, `displayName` (strings); `keywords` (array); `source`
97
+ (`{source, repo, branch, directory}`).
96
98
 
97
99
  `additionalProperties: false` — any unknown key fails validation.
98
100
 
99
101
  ## Authoring or editing a skill
100
102
 
101
- `README.md` states pack intent and the user journey it serves — not a contributor capability list.
102
- Edit `.apm/skills/<name>/SKILL.md`. Run self-host to project. Run
103
- `agentbundle catalogue lint --root . --deep` to confirm spec compliance.
103
+ `README.md` states pack intent and the user journey it serves — not a contributor capability list. Edit
104
+ `.apm/skills/<name>/SKILL.md`, run self-host to project, then `agentbundle catalogue lint --root . --deep`.
104
105
 
105
- Full authoring standards — frontmatter key whitelist, body structure, naming, three-tier dependency
106
- policy, and evals — live in [`guides/_shared/how-to/author-a-skill.md`](../guides/_shared/how-to/author-a-skill.md).
106
+ Full authoring standards — frontmatter key whitelist, body structure, naming, three-tier dependency policy,
107
+ evals — live in [`catalogue-authoring-standards.md`](../guides/_shared/reference/catalogue-authoring-standards.md).
107
108
 
108
109
  ## Eval coverage
109
110
 
110
111
  A non-cosmetic pack update must also update the pack's eval harness:
111
- - **Tier-A activation** — `evals/eval_queries.json` (~8–10 should-trigger + ~8–10 near-miss) and
112
- a `[pack.evals]` block in `pack.toml` listing every user-triggered skill.
112
+ - **Tier-A activation** — `evals/eval_queries.json` (~8–10 should-trigger + ~8–10 near-miss) and a
113
+ `[pack.evals]` block in `pack.toml` listing every user-triggered skill.
113
114
  - **Tier-4 LLM-judge rubric** — `evals/evals.json` for judgment/authoring skills.
114
115
  - **Tier-B-lite behavior check** — add an `expect` block to an `evals/evals.json` entry (non-destructive,
115
- non-credentialed skills only). Four things that must be explicit to avoid format churn:
116
- - Field name is **`files`** (not `fixture`): paths are relative to the **skill root**
117
- (e.g. `"evals/files/sample.md"`), not relative to `evals/`. The runner seeds a temp workspace
118
- with these files before invoking the skill.
116
+ non-credentialed skills only). Four things must be explicit, or the format churns:
117
+ - The field is **`files`**, not `fixture`, and its paths are relative to the **skill root**
118
+ (`"evals/files/sample.md"`) — not to `evals/`. The runner seeds a temp workspace with them first.
119
119
  - `expect.produces`: filenames the run must create in the workspace.
120
120
  - `expect.output_contains` / `expect.output_excludes`: substrings in captured output.
121
- - **Your skill script must accept the workspace path** — via a `--fixture`/`--root` flag or by
122
- treating CWD as the workspace — so the runner can confine writes and verify `produces`.
123
- Full procedure: [`guides/_shared/how-to/author-a-skill.md`](../guides/_shared/how-to/author-a-skill.md).
121
+ - **Your skill script must accept the workspace path** — a `--fixture`/`--root` flag, or treat CWD as
122
+ the workspace — so the runner can confine writes and verify `produces`.
123
+ Full procedure: [`guides/_shared/reference/catalogue-authoring-standards.md`](../guides/_shared/reference/catalogue-authoring-standards.md).
124
124
 
125
125
  ## Windows-safe Python scripts
126
126
 
127
- Any script under `.apm/` that prints to stdout or stderr must include the UTF-8 reconfigure guard
128
- immediately after `import sys`, before any `print()` call:
127
+ Any script under `.apm/` that prints to stdout or stderr must include the UTF-8 reconfigure guard immediately after `import sys`, before any `print()` call:
129
128
 
130
129
  ```python
131
130
  sys.stdout.reconfigure(encoding="utf-8", errors="strict")
@@ -145,6 +144,7 @@ Stubs in `plan.md` tasks must be `raise NotImplementedError # STUB: ACn` — no
145
144
 
146
145
  ## Shipped pack content carries no internal-governance citations
147
146
 
148
- Anywhere under `packs/` — `.apm/**`, `pack.toml`, `README`/`JOURNEY`/`DESIGN`, `seeds/**` —
149
- never cite this catalogue's own governance: `RFC-0NNN`, `ADR-0NNN`, spec/plan or AC citations,
150
- internal doc paths. Keep the rule, drop the citation. Detail: `packs/AGENTS.local.md`.
147
+ Anywhere under `packs/` — `.apm/**`, `pack.toml`, `README`/`JOURNEY`/`DESIGN`, `seeds/**` — never cite your
148
+ catalogue's own governance: decision-record or proposal numbers, spec/plan or acceptance-criterion citations,
149
+ or repository-only paths. Shipped content lands in someone else's tree, where each is a dead end. **Keep the
150
+ rule, drop the citation** — state what the reader must do, in full.
@@ -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:
@@ -84,8 +84,17 @@ def run_windows_compat(root: Path) -> int:
84
84
  [py, "-m", "pytest", str(root / "packs" / "core" / "tests" / "hooks")],
85
85
  root,
86
86
  ),
87
+ # credbroker's own suite. The cross-platform process-tree kill lives
88
+ # here (POSIX process groups vs `taskkill`), and until this runs green on
89
+ # Windows the `taskkill` arm and the reserved-device-name grammar are
90
+ # reasoned, not verified.
91
+ (
92
+ "credbroker suite (process-tree kill parity)",
93
+ [py, "-m", "pytest"],
94
+ root / "packages" / "credbroker",
95
+ ),
87
96
  # Atlassian SSO suites (asyncio + SSL-context wiring is platform-sensitive).
88
- # Pack tests live outside the runtime payload (ADR-0071).
97
+ # Pack tests live outside the runtime payload.
89
98
  #
90
99
  # Probe the dependencies first. Both trios `importorskip("credbroker")` at
91
100
  # module scope, and `_step` below judges a step by its return code alone —
@@ -98,7 +107,11 @@ def run_windows_compat(root: Path) -> int:
98
107
  ),
99
108
  (
100
109
  "jira SSO suites (atlassian-sso-cookie)",
101
- [py, "-m", "pytest", "test_sso_config.py", "test_sso_client.py", "test_setup_sso.py"],
110
+ [
111
+ py, "-m", "pytest",
112
+ "test_sso_config.py", "test_sso_client.py", "test_setup_sso.py",
113
+ "test_check_sso_login.py",
114
+ ],
102
115
  root / "packs" / "atlassian" / "tests" / "skills" / "jira",
103
116
  ),
104
117
  (
@@ -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.6"
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.6
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.6"
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